Cet article présente un petite adaptation du firmware Tasmota pour que les trames MQTT de relève de la consommation envoyé par mes Sonoff Pow R2 soient correctement traitées par mon serveur Jeedom.
EDIT : Cette modification est a présent obsolète car j’ai utiliser un autre plugin jMQTT. J’ai fait un nouvel article explication la démarche à suivre http://perso.cisko.fr/wordpress/?p=587
Le pourquoi ?
J’utilise le plugin MQTT de Lunarok : https://jeedom.com/doc_old/documentation/plugins/MQTT/fr_FR/MQTT
Ce plugin créer automatiquement des objets par rapport aux trames qu’il recoit. Le problème est que les données envoyé par Tasmota ne sont pas traités car MQTT ne gère pas des objets imbriqués.
Par défaut, Tasmota envoi ses trames MQTT sous ce format :
{« Time »: »2018-09-29T19:47:17″, »ENERGY »:{« Total »:0.370, »Yesterday »:0.000, »Today »:0.370, »Period »:1, »Power »:53, »Factor »:0.87, »Voltage »:236, »Current »:0.259}}
N’ayant pas d’intéret à avoir le timestamp pour mon Sonoff Pow et ne traitant que les données en temps réel, j’ai modifier le firmware pour émettre sous la forme :
{« Total »:0.370, »Yesterday »:0.000, »Today »:0.370, »Period »:1, »Power »:53, »Factor »:0.87, »Voltage »:236, »Current »:0.259}
Attention, je n’utilise que la fonction ENERGY donc j’ai modifier que cette fonction. La modif peut avoir un impact sur d’autres fonctions que je n’utilise pas.
De plus, en cas de mise à jour OTA, je pense que la modification sera écrasée.
Les modifications :
Prendre les source sur https://github.com/arendst/Sonoff-Tasmota
Dans le fichier sonoff.ino, trouver la fonction :
boolean MqttShowSensor()
Commenter les lignes :
// snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR(« %s{\ » » D_JSON_TIME « \ »:\ »%s\ » »), mqtt_data, GetDateAndTime(DT_LOCAL).c_str());
[…]
// snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR(« %s} »), mqtt_data);
Dans le fichier xdrv_03_energy.ino, trouver la ligne :
// snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR(« %s,\ » » D_RSLT_ENERGY « \ »:{\ » » D_JSON_TOTAL « \ »:%s,\ » » D_JSON_YESTERDAY « \ »:%s,\ » » D_JSON_TODAY « \ »:%s%s,\ » » D_JSON_POWERUSAGE « \ »:%s »),
Et remplacer la ligne complete par :
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR(« %s{\ » » D_JSON_TOTAL « \ »:%s,\ » » D_JSON_YESTERDAY « \ »:%s,\ » » D_JSON_TODAY « \ »:%s%s,\ » » D_JSON_POWERUSAGE « \ »:%s »),
Resultat
Voila, les infos sont a présent bien traitées, il y a plus qu’à paramétrer le Jeedom.