ESP8266 - Réponse "Statut: OK" en HTTP après requête

Forum dédié aux bricolages d'objets connectés IOT et leurs communications avec DomoticZ :
- Remplacement de firmware des prises, modules relais ...
- Fabrication à base d'ESP8266, de NodeMCU, de Weemos et consorts ...
pit34
Messages : 4
Inscription : 16 janv. 2017, 23:09

ESP8266 - Réponse "Statut: OK" en HTTP après requête

Message par pit34 »

Bonsoir à tous,

Je viens de domotiser mon radiateur de salle de bain à l'aide d'un module ESP12F et de Domoticz, installé sur un raspberry.
Tout fonctionne parfaitement, l'interrupteur local sur le radiateur et l'interrupteur distant sur Domoticz, la sonde de température DHT22 avec l'envoi des mesures, et les scénarios.

Mais je rencontre un problème au niveau de la réponse que mon module doit renvoyer vers Domoticz. Le Wiki de Domoticz n'est pas trop documenté à ce sujet. Dans le wiki (https://www.domoticz.com/wiki/Domoticz_ ... s#Response)il est précisé qu'il faut renvoyer un retour vers Domoticz au format : {"status" : "OK"}. Seulement malgré de nombreux essais, je ne parviens pas a écrire le bon code. Dans le Log de Domoticz j'ai toujours l'erreur "Error: Error opening url: http://***.***.***.***/Off" quand j'envois un ordre d'extinction, et un "Error: Error opening url: http://***.***.***.***/On" quand j'envoi l'ordre d'allumage.

Voici le genre de code que j'ai testé (je précise que c'est sous Arduino IDE):

Code : Tout sélectionner

  
  if (client.connect(domoticz_server,port)) {
    client.print("{"status" : "OK"}");
    client.println(" HTTP/1.1");
    client.print("Host: ");
    client.print(domoticz_server);
    client.print(":");
    client.println(port);
    client.println("User-Agent: Arduino-ethernet");
    client.println("Connection: close");
    client.println();
    client.stop();
  }
  
J'ai testé avec un GET /json.htm? devant le statut, et tout un tas d'autres combinaisons. Mais je ne comprends pas comment effectuer ce retour d'infos et si j'ai bien saisi le concept.

Si une âme charitable pouvait éclairer ma lanterne quant aux retour de status, ça me permettrai d'avancer.
Merci à vous ;)
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: ESP8266 - Réponse "Statut: OK" en HTTP après requête

Message par deennoo »

avec quel FW ? le tiens ?
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
pit34
Messages : 4
Inscription : 16 janv. 2017, 23:09

Re: ESP8266 - Réponse "Statut: OK" en HTTP après requête

Message par pit34 »

C'est un firmware maison, réalisé sous Arduino IDE.

Dans la boucle principale j'ai la fonction suivante pour recevoir la commande envoyée par Domoticz :

Code : Tout sélectionner

  // Check if Domoticz is connected and is sending http request
  WiFiClient client = server.available();
  if (client) {
      String req = client.readStringUntil('\r');      // Read the first line of the request
      Serial.println(req); 
      if (req.indexOf("On") >=0) {      // Si "On" est envoyé par Domoticz dans la requete, activer Pin_relay
          digitalWrite(Pin_relay, LOW);
          statut_radiateur = 1;
      }  
      if (req.indexOf("Off") >=0) {     // Si "Off" est envoyé par Domoticz dans la requete, désactiver Pin_relay
          digitalWrite(Pin_relay, HIGH);
          statut_radiateur = 0;
      }
      client.flush();
  }
  
C'est dans celle-ci que je veux ajouter la réponse de statut.
Pour envoyer les données de température à Domoticz, j'utilise la fonction suivante :

Code : Tout sélectionner

  if (client.connect(domoticz_server,port)) {
    client.print("GET /json.htm?type=command&param=udevice&idx=5");
    client.print("&nvalue=0&svalue=");
    client.print(String(temperature));
    client.print(";");
    client.print(String(humidity));
    client.print(";0");
    client.println(" HTTP/1.1");
    client.print("Host: ");
    client.print(domoticz_server);
    client.print(":");
    client.println(port);
    client.println("User-Agent: Arduino-ethernet");
    client.println("Connection: close");
    client.println();
    client.stop();
  }
Et pour le retour lorsque j'appuis sur l'interrupteur local :

Code : Tout sélectionner

  if (client.connect(domoticz_server,port)) {
    client.print("GET /json.htm?type=command&param=udevice&idx=3");
    client.print("&nvalue=1");
    client.println(" HTTP/1.1");
    client.print("Host: ");
    client.print(domoticz_server);
    client.print(":");
    client.println(port);
    client.println("User-Agent: Arduino-ethernet");
    client.println("Connection: close");
    client.println();
    client.stop();
  }
Je ne vois pas comment formuler le retour "Statut: OK". Si je le fais comme avec la dernière fonction pour l'interrupteur local, ça ne marche pas.
eouioui
Messages : 1
Inscription : 27 janv. 2017, 04:33

Re: ESP8266 - Réponse "Statut: OK" en HTTP après requête

Message par eouioui »

Response

All responses include a status which is either OK on success or ERR on failure

{
"status" : "OK"
}

{
"status" : "ERR"
}

sais la reponse de retour de domoticz suite a une requete .

---------------------------- Send Notification ----------------------
ipDomoticz:8080/json.htm?type=command&param=sendnotification&subject=subject&body=thebody -=>A ecrire case address Internet Chrome

Reponse de Domoticz est =

{
"status" : "OK",
"title" : "SendNotification"
}
----------------------------------------------------------------

Voici un ex: de mon code pour gerer la reponse de domoticz !!!!


void Email()
{
if (client.connect(domoticz_server,port)) {

client.print("GET /json.htm?type=command&param=sendnotification&subject=CoolSaMarche&body=TEST"); //Command Json non Documente....

client.println( " HTTP/1.1");
client.print( "Host: " );
client.println(domoticz_server);
client.println( "Connection: close" );
client.println();
client.println();

String Response = "";

while (client.available()) {
Response += client.readStringUntil('\r');
}

if (Response.indexOf("OK") > 0) VarUpdated = 1;
if (Response.indexOf("ERR") > 0) VarUpdated = 0;

delay(1);
readString = "";
client.flush();
client.stop();
}
Répondre