Jeedom, Sonoff Pow R2, Tasmota, MQTT : adaptation du firmware

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.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> 

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.