arduino : requete http.

arduino : requete http. - C++ - Programmation

Marsh Posté le 05-06-2024 à 20:03:31    

Bonjour,
 
j'ai un soucis sur une requete http en arduino. J'interroge un shelly em (qui peut me renovyer en json la puissance en W d'un element de ma maison.
Je peux aussi allumer ou eteindre un relais.
 
Pour cela : http://192.168.1.73/relay/0/?turn=on  
 
Pour la puissance : http://192.168.1.73/emeter/0 (donne un json : {"power":0.00,"reactive":0.00,"pf":0.00,"voltage":237.18,"is_valid":true,"total":1071872.3,"total_returned":4116.2}
)
 
Pour la puissance ça fonctionne bien.
 
Mais pour le relais j'ai un retour de http.GET() à -2 ??? je ne savais meme pas que c'était possible.
 
 
Voici mon bout de code pour allumer le relais :  
 

Code :
  1. void Switch_Shelly_Relais_ON()
  2. {String baseurl;
  3. int httpcode;
  4. baseurl="http://"+config.IP_SHELLY_2+"/relay/"+config.emeter_shelly2+"/?turn=on";
  5. http.begin(baseurl);
  6. Serial.println("baseurl : "+baseurl);
  7. int httpresponscode=http.GET();
  8. String payload = http.getString();
  9. Serial.println(String(httpresponscode));
  10. delay(500);
  11. http.end();
  12.  
  13. }


 
Evidemment si je tape http://192.168.1.73/relay/0/?turn=on  
directement dans firefox, le relais s'allume et j'obtiens : {"ison": true, "has_timer":false, "timer_started_at": 0, "timer_duration": 0.00, "timer_remaining": 0.00, "source": "http"}
(pour ma fonction, je me fiche de récupérer les elements json) je veux juste que ça commute le relais.
 
 
Merci pour votre aide.
 
PS : pour info voici le code de la fonction pour recuperer  la puissance  (celle là fonctionne).
 

Code :
  1. String GetConsoShelly()
  2. { String baseurl;
  3.   String tempor;
  4.   String StBearer;
  5.   int httpcode;
  6. tempor="";
  7. baseurl="http://"+config.IP_SHELLY_1+"/emeter/"+config.emeter_shelly1;
  8. http.begin(baseurl);
  9. httpcode=http.GET();
  10. delay(200);
  11. if (httpcode==200) {
  12.    DynamicJsonDocument doc(1024);
  13.    String payload = http.getString();
  14.    Serial.println(payload);
  15.    deserializeJson(doc, payload);
  16.   if (doc.containsKey("power" )) {tempor = doc["power"].as<String>();}
  17.    return String(tempor);
  18. }
  19. else {return String("" );Serial.println(String(httpcode));}
  20. }


---------------
Matheux Fou - https://afficheur-tempo.fr - TEMPO BOX pour abonnés TEMPO EDF
Reply

Marsh Posté le 05-06-2024 à 20:03:31   

Reply

Marsh Posté le 05-06-2024 à 21:38:15    

Je me réponds à moi-même !
Je savais bien que c'était une anêrie de ma part.
le http est global quand je le déclare : HTTPClient http;
et bien dans la focntion qui recupére la conso, j'ai oublié de mettre un http.end(); !!!!
en le mettant tout fonctionne bien .
 
Si ça peut aider....
 


---------------
Matheux Fou - https://afficheur-tempo.fr - TEMPO BOX pour abonnés TEMPO EDF
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed