17-06-2024, 04:00 PM
(12-06-2024, 05:49 PM)Raphael591 a écrit : Bonjour,
Je me suis lancé dans la conception du routeur.
Problème rencontré, je dispose d'un Shelly Pro Em.
Hors la requête HTTP à effectuer est différente d'un shelly EM classique, et la réponse JSON également.
J'ai dû modifier le code source dans le fichier Source_ShellyEm.ino
Voici les modifications effectuées pour un shelly PRO em.
Si cela pouvait être intégré aux prochaines version se serait top.
J'ai ajouté la librairie arduinoJson pour faciliter la lecture des données dans le Json retourné par la requête.
La requête : http://IP_SHELLY/rpc/shelly.getstatus
Modification du fichier Source_ShellyEm.ino
Déclaration pour facilité la lecture JSON
JsonObject em1data;
JsonObject em1;
Modification de la requête http :
String url = "/rpc/Shelly.GetStatus";
Lecture des infos :
//Alimentation doc JSON
StaticJsonDocument<1536> doc;
DeserializationError error = deserializeJson(doc, Shelly_Data);
if (error) {
StockMessage("Shelly PRO em deserializeJson() failed");
Serial.print("deserializeJson() failed: ");
Serial.println(error.c_str());
return;
}
//Récupération des valeurs
em1 = doc["em1:"+ String(voie)];
Pw = em1["act_power"];
voltage = em1["voltage"];
pf = em1["pf"];
em1data = doc["em1data:"+ String(voie)];
Energie_M_Soutiree = int(em1data["total_act_energy"]);
Energie_M_Injectee = int(em1data["total_act_ret_energy"]);
NB : Voici le format du JSON
{
"ble": {},
"cloud": {
"connected": true
},
"em1:0": {
"id": 0,
"current": 2.454,
"voltage": 239.9,
"act_power": 226.5,
"aprt_power": 590.1,
"pf": 0.62,
"freq": 50,
"calibration": "factory"
},
"em1:1": {
"id": 1,
"current": 1.782,
"voltage": 239.9,
"act_power": 426.4,
"aprt_power": 429.6,
"pf": 0.99,
"freq": 50,
"calibration": "factory"
},
"em1data:0": {
"id": 0,
"total_act_energy": 995515.84,
"total_act_ret_energy": 106191.28
},
"em1data:1": {
"id": 1,
"total_act_energy": 477522.54,
"total_act_ret_energy": 756.38
},
"eth": {
"ip": null
},
"modbus": {},
"mqtt": {
"connected": false
},
"switch:0": {
"id": 0,
"source": "WS_in",
"output": false,
"temperature": {
"tC": 37,
"tF": 98.6
}
},
"sys": {
"mac": "34987A6XXXXX",
"restart_required": false,
"time": "17:13",
"unixtime": 1718205196,
"uptime": 419677,
"ram_size": 243368,
"ram_free": 117336,
"fs_size": 524288,
"fs_free": 192512,
"cfg_rev": 22,
"kvs_rev": 0,
"schedule_rev": 15,
"webhook_rev": 9,
"available_updates": {},
"reset_reason": 3
},
"wifi": {
"sta_ip": "192.168.1.XX",
"status": "got ip",
"ssid": "Freebox-XXXX",
"rssi": -50
},
"ws": {
"connected": false
}
}
Bonjour,
Un grand merci pour ce code !
J'ai également un Shelly PRO EM-50 et jusqu'à présent, je devais passer par Jeedom pour retransférer les données Pw et pf en MQTT vers le routeur qui ne les décodait pas nativement.
Après avoir intégré ces lignes, je reçois maintenant directement ces valeurs (+toutes les autres), et ca va bien désengorger le cœur domotique qui devait 'faire la passe', ce qui prenait un peu de ressource tout de même juste pour cette tâche ingrate.
Et de plus, en cas d'avarie sur Jeedom (plantage ou autre), cela n'aura plus aucune incidence sur le fonctionnement autonome du routeur, ce qui n'est pas négligeable non plus...
Encore merci, en attendant son intégration 'officielle' dans une version à venir !
_________________________________________________
Routeur Solaire en v11.11
Pilotage d'un cumulus de 3kW + Jeedom v4.4.8.1 + Station solaire 3,5kW
Routeur Solaire en v11.11
Pilotage d'un cumulus de 3kW + Jeedom v4.4.8.1 + Station solaire 3,5kW