Utilisation de JSON pour s'interfacer avec appli homemade Arduino
Publié : 30 juil. 2016, 23:21
Salut la compagnie !
J'ai des questions aux spécialistes du JSON et tout et tout avec Domoticz.
D'abord, un rapide rappel de mon projet:
J'ai un réseau d'Arduino qui communiquent en RS485, ce qui me permet d'avoir des Arduinos disséminés partout avec un simple fil RJ45 (qui envoie le 12V et fait le lien RS485) sur de longues distances.
Maintenant, j'ai un Arduino principal doté d'un Ethernet Shield et je souhaite l'interfacer avec Domoticz. C'est là où j'en viens à vous
J'ai déjà fait une présentation de mon installation ici : viewtopic.php?f=8&t=1446
Là où j'en suis:
Mon Arduino principal (MCP - Maitre contrôle principal (référence culturelle!)) fonctionne avec une application basé sur le WebServer.
En me connectant à mon MCP, je peux envoyer une requête qui est traduite et transférée sur le réseau RS485 et réciproquement.
Tout ceci fonctionne à merveille, je peux aussi voir les statuts de tous mes équipements dans un navigateur web, mais tout ça c'est du texte et je peux pas automatiser comme ça.
D'après mes lectures, c'est de JSON que j'ai besoin, mais je ne comprends pas tout ça très bien.
Je me suis farci cette lecture: https://www.domoticz.com/wiki/Domoticz_API/JSON_URL's mais je comprends que c'est surtout destiné à des équipements "commerciaux" et j'ai du mal à en tirer profit pour mon application.
Je comprend le principe de JSON, mais je ne sais pas comment faire parler mon MCP avec mon serveur Domoticz. La lecture de la doc sur l'API ne m'a pas aidé beaucoup.
J'ai suivi et réalisé ceci : https://www.raywenderlich.com/38841/ard ... ure-sensor (mais sans l'application iOS qui va avec).
Je sais que je ne choisi pas l'option facile, peut être que j'aurai pu (ou pourrai) m'inspirer de MySensor, mais étant pourtant assez expérimenté dans le développement, il est souvent plus difficile d'embarquer dans du code inconnu que de repartir de 0 (et en plus on apprend bien plus en repartant de 0).
Au secours !
Après avoir longuement réfléchit je me pose ces questions, et je vous demande votre aide pour me guider là dedans:
- Mon MCP ne devrait il pas plutôt être un client plutôt qu'un serveur ? Puisque c'est Domoticz le serveur web ?
- Je veux que mon MCP envoie des statut à Domoticz aussi souvent que nécessaire, sans attendre que Domoticz l'interroge
- Pouvez-vous m'aider à comprendre JSON, par exemple, je ne comprend pas le format des messages JSON:
est ce que json.htm?api-call correspond à l'interpéteur de Domoticz ?
Si oui, je ne sais pas comment faire ça avec mon Arduino (à part utiliser en mode client ?)
Exemple réalisé (Domoticz vers MCP):
J'ai créé un sélecteur à 3 niveaux et j'ai renseigné une adresse "http" pour le Action On qui envoie la requête à mon MCP. Mais cette adresse est statique et n'est pas paramétrable:
et je voudrais que "Niveau" soit remplacé par la valeur correspondante au niveau.
MCP vers Domoticz:
J'ai fait un essai avec ce programme:
Dans ce cas-ci, je m'attend à ce que Domoticz me retourne quelque chose, mais... niet...
Bref, je crois que je manque quelque chose mais je ne parviens pas à mettre le doigt dessus.
Merci pour votre temps et pour votre aide !
J'ai des questions aux spécialistes du JSON et tout et tout avec Domoticz.
D'abord, un rapide rappel de mon projet:
J'ai un réseau d'Arduino qui communiquent en RS485, ce qui me permet d'avoir des Arduinos disséminés partout avec un simple fil RJ45 (qui envoie le 12V et fait le lien RS485) sur de longues distances.
Maintenant, j'ai un Arduino principal doté d'un Ethernet Shield et je souhaite l'interfacer avec Domoticz. C'est là où j'en viens à vous
J'ai déjà fait une présentation de mon installation ici : viewtopic.php?f=8&t=1446
Là où j'en suis:
Mon Arduino principal (MCP - Maitre contrôle principal (référence culturelle!)) fonctionne avec une application basé sur le WebServer.
En me connectant à mon MCP, je peux envoyer une requête qui est traduite et transférée sur le réseau RS485 et réciproquement.
Tout ceci fonctionne à merveille, je peux aussi voir les statuts de tous mes équipements dans un navigateur web, mais tout ça c'est du texte et je peux pas automatiser comme ça.
D'après mes lectures, c'est de JSON que j'ai besoin, mais je ne comprends pas tout ça très bien.
Je me suis farci cette lecture: https://www.domoticz.com/wiki/Domoticz_API/JSON_URL's mais je comprends que c'est surtout destiné à des équipements "commerciaux" et j'ai du mal à en tirer profit pour mon application.
Je comprend le principe de JSON, mais je ne sais pas comment faire parler mon MCP avec mon serveur Domoticz. La lecture de la doc sur l'API ne m'a pas aidé beaucoup.
J'ai suivi et réalisé ceci : https://www.raywenderlich.com/38841/ard ... ure-sensor (mais sans l'application iOS qui va avec).
Je sais que je ne choisi pas l'option facile, peut être que j'aurai pu (ou pourrai) m'inspirer de MySensor, mais étant pourtant assez expérimenté dans le développement, il est souvent plus difficile d'embarquer dans du code inconnu que de repartir de 0 (et en plus on apprend bien plus en repartant de 0).
Au secours !
Après avoir longuement réfléchit je me pose ces questions, et je vous demande votre aide pour me guider là dedans:
- Mon MCP ne devrait il pas plutôt être un client plutôt qu'un serveur ? Puisque c'est Domoticz le serveur web ?
- Je veux que mon MCP envoie des statut à Domoticz aussi souvent que nécessaire, sans attendre que Domoticz l'interroge
- Pouvez-vous m'aider à comprendre JSON, par exemple, je ne comprend pas le format des messages JSON:
Code : Tout sélectionner
http://<username:password@>domoticz-ip<:port>/json.htm?api-callSi oui, je ne sais pas comment faire ça avec mon Arduino (à part utiliser en mode client ?)
Exemple réalisé (Domoticz vers MCP):
J'ai créé un sélecteur à 3 niveaux et j'ai renseigné une adresse "http" pour le Action On qui envoie la requête à mon MCP. Mais cette adresse est statique et n'est pas paramétrable:
Code : Tout sélectionner
http://192.168.0.177?RNETcmd=1&dest=106&com=61&p1=*****Niveau*****&p2=0&p3=0MCP vers Domoticz:
J'ai fait un essai avec ce programme:
Code : Tout sélectionner
...
IPAddress ip(192, 168, 0, 177);
EthernetServer server(80);
EthernetClient client;
char DomoticzServer[] = "raymi-pc"; // name address for Google (using DNS)
...
void setup(){
...
void loop() {
...
if (client.connect(DomoticzServer, 8080)) {
Serial.println("connected to Domoticz");
// Make a HTTP request:
//client.println("http://raymi-pc:8080/json.htm?type=command¶m=addlogmessage&message=MESSAGE");
client.println("/json.htm?type=command¶m=getSunRiseSet"); // j'interroge avec n'importe quoi pour espérer obtenir une réponse
client.println();
Serial.println("Done - disconnect");
}
delay (100);
if (client.available()) { // est-ce que Domoticz a répondu ?
char c = client.read();
Serial.print(c);
}
Bref, je crois que je manque quelque chose mais je ne parviens pas à mettre le doigt dessus.
Merci pour votre temps et pour votre aide !