Piloter une chaudière Weishaupt équipée d’un WCM-COM avec Jeedom, NodeRed et MQTT

Piloter une chaudière Weishaupt équipée d’un WCM-COM avec Jeedom, NodeRed et MQTT

4 juin 2019 10 Par Jérôme Ferrari

Bonjour à tous,

cette semaine, je vous propose un sujet que j’essayai de boucler depuis longtemps… Celui de piloter ma chaudière Weishaupt avec Jeedom pour l’inclure dans des scénarios (Départ et retour de vacances par exemple).

Avant toute chose, je tiens à remercier Loic74 qui a ouvert le topic Chaudières Weishaupt et partagé les liens vers le site http://dpsg.weinreich.org/ où la partie communication avec la chaudière avait commencée à être traité en 2015. (Cela a été une sacrée piste pour faire cet article)

Je remercie aussi Steve du site http://dpsg.weinreich.org/ qui m’a aidé dans la résolution des problèmes rencontrés

Bon pour commencer une rapide présentation de l’installation.

Nous avons la chaudière reliée au WCM-COM grâce au eBUS. Le WCM-COM est relié au routeur (chez moi c’est la freebox) afin de faire soit une communication direct avec un PC soit de piloter la chaudière via une application Android. Il y a aussi une possibilité d’envoyer des mails d’alerte (Bon j’ai jamais réussi à les faire fonctionner… mais c’est pas grave)

Voilà pour l’architecture livrée avec la chaudière. Maintenant nous allons voir comme insérer Jeedom dedans afin de la piloter et de l’inclure dans des scénarios.

Pour cela, nous allons utiliser plusieurs softs pour arriver à notre fin:

  • Jeedom: Pour le pilotage
  • NodeRed: C’est un outil de programmation OpenSource créé par IBM et qui servira pour la partie récupération des données et envoie vers commandes la chaudière.
  • Mosquitto: C’est un Broker MQTT et qui servira pour la liaison entre Jeedom et NodeRed

Partie 0: Préparation du terrain de jeu et installation des logiciels nécessaires

Installation de Jeedom — > Voir mon précédent article https://miniprojets.net/index.php/2019/05/13/jeedom-ou-comment-domotiser-sa-maison-en-quelques-clics/

Installation de Mosquitto –> Je vous conseille le site suivant https://projetsdiy.fr/jeedom-mqtt-objets-connectes-domotique-diy/

Installation de NodeRed –> Je vous conseille aussi le site suivant https://projetsdiy.fr/installer-node-red-raspbian-jessie-lite-raspberry-pi-zero-w/

Récupération de l’adresse IP du WCM-COM –> Voir mon précedent article où je parle de la méthode pour récupérer l’adresse IP d’un matériel brancher sur une freebox https://miniprojets.net/index.php/2019/04/16/hack-dune-prise-alfawise-murale-etanche/ (Pour les autres, je suis désolé mais il faut voir comment faire avec votre Box ou Routeur mais le principe est souvent le même ^^)

Voilà une fois que vous avez tout installé et récupéré l’adresse IP de votre WCM-COM, vous pouvez revenir et continuer la suite de ce tutoriel

Partie 1: Où trouver les identifiants des données utiles de la chaudière

Dans un premier temps, il faut extraire la microSD du WCM-COM.

Couper le circuit d’alimentation de votre WCM-COM (si c’est bien fait il sera sur le même disjoncteur que votre chaudière) afin de travailler en sécurité.

Ouvrez maintenant le boitier (par le bas)

La carte microSD est en haut à droite. Vous pouvez l’extraire.

Maintenant mettez là dans votre ordinateur à l’aide d’un adaptateur. Et copier tout son contenu dans un dossier de votre ordinateur (cela vous permet en plus d’avoir une sauvegarde de la carte SD en cas où elle mourrait comme c’est un peu capricieux ces petites bêtes)

Une fois cette opération faite, vous pouvez la remettre en place, fermer le WCM-COM et remettre en route le circuit électrique.

Maintenant que la chaudière et le WCM-COM se sont remis en route et que la communication est rétablie, vous pouvez vous connecter via un navigateur internet à la page Web du WCM-COM. Par exemple pour moi c’est http://192.168.1.37/

Vous tomber sur la page suivante:

Pour savoir où récupérer les données, je vous invite à cliquer sur Générateur –> WTC-G –> Valeur de Process

Vous aurez la page suivante et si vous gardez le curseur sur Valeur de Process vous verrez un lien apparaitre comme entouré si dessous:

Cela nous sera utile pour savoir où chercher dans le code donc gardez le.

Faites aussi une copie d’écran des pages où sont les données qui vous intéressent, plus tard cela nous facilitera la tâche d’identification des données.

Faites de même sur toutes les pages où vous avez des données qui vous intéresse. Pour moi, c’est juste Valeur de process de Générateur (Pour les données internes) et Utilisateur de Circuits chauf. (Pour le pilotage).

Ce qui me donne les deux fichiers suivants:

Maintenant, il faut aller dans le dossier Websites/script où vous avez copié les données de la carte SD et prendre les fichiers suivants:

  • Valeur de process –> Form_WTC_G_Prozesswerte.gz.js
  • Utilisateur –> Form_Heizkreis_Benutzer2.gz.js

Il faut maintenant enlever le .js à la fin du nom de fichier ce qui donne

  • Valeur de process –> Form_WTC_G_Prozesswerte.gz
  • Utilisateur –> Form_Heizung_Benutzer2.gz

Faite une extraction depuis le fichier .gz et vous vous retrouverez avec un fichier js qui sera lisible facilement.

Maintenant ouvrez le fichier avec un éditeur de texte (Exemple notepad++)

Cherchez la fonction function gfctWEBAPP_Start().

En dessous vous auriez un bloc qui ressemble à cela:

Pour Form_WTC_G_Prozesswerte.js

/*                                 infoNr | index |  ID       | CmdType    |      MTyp       |        busk        |value|group|  method                         | obj_method_data  |Min-Val|Max-Val| MUL | DIV | Step Size|   State   | update           | */ 
objSiteInfo[0]  = new OBJTELEGRAMM(     81,     0 ,"idT0051",  TEL_STD     ,     TEL_MTYPE_WG, u8CurrentBuskennung,    0,    0, METH_CHECKBOX_RO                , [null,null,null] ,      0,      1,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ALWAYS ); 
objSiteInfo[1]  = new OBJTELEGRAMM(   1497,     0 ,"idT05D9",  TEL_STD     ,     TEL_MTYPE_WG, u8CurrentBuskennung,    0,    0, METH_CHECKBOX_RO                , [null,null,null] ,      0,      1,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ALWAYS ); 
objSiteInfo[2]  = new OBJTELEGRAMM(   1498,     0 ,"idT05DA",  TEL_STD     ,     TEL_MTYPE_WG, u8CurrentBuskennung,    0,    0, METH_CHECKBOX_RO                , [null,null,null] ,      0,      1,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ALWAYS ); 
objSiteInfo[3]  = new OBJTELEGRAMM(    466,     0 ,"idT01D2",  TEL_STD     ,     TEL_MTYPE_WG, u8CurrentBuskennung,    0,    0, METH_CHECKBOX_RO                , [null,null,null] ,      0,      1,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ALWAYS ); 
objSiteInfo[4]  = new OBJTELEGRAMM(     82,     0 ,"idT0067_H",TEL_STD     ,     TEL_MTYPE_WG, u8CurrentBuskennung,    0,    0, METH_CHECKBOX_RO                , [null,null,null] ,      0,      1,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ALWAYS ); 
objSiteInfo[5]  = new OBJTELEGRAMM(     83,     0 ,"idT0067_W",TEL_STD     ,     TEL_MTYPE_WG, u8CurrentBuskennung,    0,    0, METH_CHECKBOX_RO                , [null,null,null] ,      0,      1,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ALWAYS ); 
objSiteInfo[6]  = new OBJTELEGRAMM(      1,     0 ,"idT0001",  TEL_STD     ,     TEL_MTYPE_WG, u8CurrentBuskennung,    0,    0, METH_CALC_WOP                   , [null,null,null] ,      0,    255,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ALWAYS ); 
objSiteInfo[7]  = new OBJTELEGRAMM(    373,     0 ,"idT0176",  TEL_STD     ,     TEL_MTYPE_WG, u8CurrentBuskennung,    0,    0, METH_CALC_WOP                   , [null,null,null] ,      0,    255,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ALWAYS ); 
objSiteInfo[8]  = new OBJTELEGRAMM(    138,     0 ,"idT008A",  TEL_STD     ,     TEL_MTYPE_WG, u8CurrentBuskennung,    0,    1, METH_CALC                       , [null,null,null] ,      0,    100,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ALWAYS ); 
objSiteInfo[9]  = new OBJTELEGRAMM(   2572,     0 ,"idT0A0C",  TEL_STD     ,     TEL_MTYPE_WG, u8CurrentBuskennung,    0,    1, METH_TEMP2                      , [null,null,null] ,  (-30),    130,    1,   10,        10,  ST_UPDATE,  UM_UPDATE_ALWAYS ); 
objSiteInfo[10] = new OBJTELEGRAMM(      2,     0 ,"idT0002",  TEL_STD     ,     TEL_MTYPE_WG, u8CurrentBuskennung,    0,    1, METH_TEMP2                      , [null,null,null] ,  (-30),    130,    1,   10,        10,  ST_UPDATE,  UM_UPDATE_ALWAYS ); 
objSiteInfo[11] = new OBJTELEGRAMM(   3101,     0 ,"idT0C1D",  TEL_STD     ,     TEL_MTYPE_WG, u8CurrentBuskennung,    0,    1, METH_TEMP2                      , [null,null,null] ,  (-30),    130,    1,   10,        10,  ST_UPDATE,  UM_UPDATE_ALWAYS ); 
objSiteInfo[12] = new OBJTELEGRAMM(    325,     0 ,"idT0145",  TEL_STD     ,     TEL_MTYPE_WG, u8CurrentBuskennung,    0,    1, METH_TEMP2                      , [null,null,null] ,  (-30),    130,    1,   10,        10,  ST_UPDATE,  UM_UPDATE_ALWAYS ); 
objSiteInfo[13] = new OBJTELEGRAMM(     12,     0 ,"idT000C",  TEL_STD     ,     TEL_MTYPE_WG, u8CurrentBuskennung,    0,    1, METH_TEMP2                      , [null,null,null] ,  (-30),    130,    1,   10,        10,  ST_UPDATE,  UM_UPDATE_ALWAYS ); 
objSiteInfo[14] = new OBJTELEGRAMM(     14,     0 ,"idT000E",  TEL_STD     ,     TEL_MTYPE_WG, u8CurrentBuskennung,    0,    1, METH_TEMP2                      , [null,null,null] ,  (-30),    130,    1,   10,        10,  ST_UPDATE,  UM_UPDATE_ALWAYS ); 
objSiteInfo[15] = new OBJTELEGRAMM(    118,     0 ,"idT0076",  TEL_STD     ,     TEL_MTYPE_WG, u8CurrentBuskennung,    0,    1, METH_TEMP2                      , [null,null,null] ,  (-30),    130,    1,   10,        10,  ST_UPDATE,  UM_UPDATE_ALWAYS ); 
objSiteInfo[16] = new OBJTELEGRAMM(   3158,     0 ,"idT0C56",  TEL_STD     ,     TEL_MTYPE_WG, u8CurrentBuskennung,    0,    2, METH_CALC_WOP                   , [null,null,null] ,      0,      0, 1000,    1,         1,  ST_UPDATE,  UM_UPDATE_ALWAYS ); 
objSiteInfo[17] = new OBJTELEGRAMM(   3159,     0 ,"idT0C57",  TEL_STD     ,     TEL_MTYPE_WG, u8CurrentBuskennung,    0,    2, METH_CALC_WOP                   , [null,null,null] ,      0,      0,  100,    1,         1,  ST_UPDATE,  UM_UPDATE_ALWAYS ); 
objSiteInfo[18] = new OBJTELEGRAMM(    700,     0 ,"idT02BC",  TEL_STD     ,     TEL_MTYPE_WG, u8CurrentBuskennung,    0,    2, METH_CALC_UNSIGNED_NO_DEC_POINT , [null,null,null] ,      0,   5000,   10,    1,         1,  ST_UPDATE,  UM_UPDATE_ALWAYS ); 
objSiteInfo[19] = new OBJTELEGRAMM(   5016,   255 ,"idDL"   ,  TEL_GENERIC , TEL_MTYPE_DIRECT,                   0,    0,    2, METH_SETCB_DLUW                 , [null,null,null] ,      0,      1,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ONCE_NO_SUBMIT   ); 
objSiteInfo[20] = new OBJTELEGRAMM(   5017,     0 ,"idT0000",  TEL_LRG     , TEL_MTYPE_DIRECT, u8CurrentBuskennung,TEL_MTYPE_WG,2,METH_APPL                     , [null,null,null] ,      0,      1,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ONLY_SEND ); 
objSiteInfo[21] = new OBJTELEGRAMM(   5015,     0 ,"idT0000",  TEL_GENERIC , TEL_MTYPE_DIRECT,                   0,    0,    3, METH_CDLW                       , [null,null,null] ,      0,      1,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ONLY_SEND ); 
objSiteInfo[22] = new OBJTELEGRAMM(   5015,     1 ,"idT0000",  TEL_GENERIC , TEL_MTYPE_DIRECT,                   0,    0,    3, METH_CDLW                       , [null,null,null] ,      0,      1,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ONLY_SEND ); 
objSiteInfo[23] = new OBJTELEGRAMM(   5015,     2 ,"idT0000",  TEL_GENERIC , TEL_MTYPE_DIRECT,                   0,    0,    3, METH_CDLW                       , [null,null,null] ,      0,      1,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ONLY_SEND ); 
objSiteInfo[24] = new OBJTELEGRAMM(   5015,     3 ,"idT0000",  TEL_GENERIC , TEL_MTYPE_DIRECT,                   0,    0,    3, METH_CDLW                       , [null,null,null] ,      0,      1,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ONLY_SEND ); 
objSiteInfo[25] = new OBJTELEGRAMM(   5015,     4 ,"idT0000",  TEL_GENERIC , TEL_MTYPE_DIRECT,                   0,    0,    4, METH_CDLW                       , [null,null,null] ,      0,      1,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ONLY_SEND ); 
objSiteInfo[26] = new OBJTELEGRAMM(   5015,     5 ,"idT0000",  TEL_GENERIC , TEL_MTYPE_DIRECT,                   0,    0,    4, METH_CDLW                       , [null,null,null] ,      0,      1,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ONLY_SEND ); 
objSiteInfo[27] = new OBJTELEGRAMM(   5015,     6 ,"idT0000",  TEL_GENERIC , TEL_MTYPE_DIRECT,                   0,    0,    4, METH_CDLW                       , [null,null,null] ,      0,      1,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ONLY_SEND ); 
objSiteInfo[28] = new OBJTELEGRAMM(   5015,     7 ,"idT0000",  TEL_GENERIC , TEL_MTYPE_DIRECT,                   0,    0,    4, METH_CDLW                       , [null,null,null] ,      0,      1,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ONLY_SEND ); 
objSiteInfo[29] = new OBJTELEGRAMM(   5009,   255 ,"idUW"   ,  TEL_GENERIC , TEL_MTYPE_DIRECT,                   0,    0,    2, METH_SETCB_DLUW                 , [null,null,null] ,      0,      1,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ONCE_NO_SUBMIT   ); 
objSiteInfo[30] = new OBJTELEGRAMM(   5010,     0 ,"idT0000",  TEL_LRG     , TEL_MTYPE_DIRECT, u8CurrentBuskennung,TEL_MTYPE_WG,2,METH_APPL                     , [null,null,null] ,      0,      1,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ONLY_SEND ); 
objSiteInfo[31] = new OBJTELEGRAMM(   5008,     0 ,"idT0000",  TEL_GENERIC , TEL_MTYPE_DIRECT,                   0,    0,    5, METH_CUBW                       , [null,null,null] ,      0,      1,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ONLY_SEND ); 
objSiteInfo[32] = new OBJTELEGRAMM(   5008,     1 ,"idT0000",  TEL_GENERIC , TEL_MTYPE_DIRECT,                   0,    0,    5, METH_CUBW                       , [null,null,null] ,      0,      1,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ONLY_SEND ); 
objSiteInfo[33] = new OBJTELEGRAMM(   5008,     2 ,"idT0000",  TEL_GENERIC , TEL_MTYPE_DIRECT,                   0,    0,    5, METH_CUBW                       , [null,null,null] ,      0,      1,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ONLY_SEND ); 
objSiteInfo[34] = new OBJTELEGRAMM(   5008,     3 ,"idT0000",  TEL_GENERIC , TEL_MTYPE_DIRECT,                   0,    0,    5, METH_CUBW                       , [null,null,null] ,      0,      1,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ONLY_SEND ); 
objSiteInfo[35] = new OBJTELEGRAMM(   5008,     4 ,"idT0000",  TEL_GENERIC , TEL_MTYPE_DIRECT,                   0,    0,    6, METH_CUBW                       , [null,null,null] ,      0,      1,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ONLY_SEND ); 
objSiteInfo[36] = new OBJTELEGRAMM(   5008,     5 ,"idT0000",  TEL_GENERIC , TEL_MTYPE_DIRECT,                   0,    0,    6, METH_CUBW                       , [null,null,null] ,      0,      1,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ONLY_SEND ); 
objSiteInfo[37] = new OBJTELEGRAMM(   5008,     6 ,"idT0000",  TEL_GENERIC , TEL_MTYPE_DIRECT,                   0,    0,    6, METH_CUBW                       , [null,null,null] ,      0,      1,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ONLY_SEND ); 
objSiteInfo[38] = new OBJTELEGRAMM(   5008,     7 ,"idT0000",  TEL_GENERIC , TEL_MTYPE_DIRECT,                   0,    0,    6, METH_CUBW                       , [null,null,null] ,      0,      1,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ONLY_SEND ); 
objSiteInfo[39] = new OBJTELEGRAMM(   5019,     0 ,"idT0000",  TEL_GENERIC , TEL_MTYPE_DIRECT,                   0,    0,    7, METH_APPL                       , [null,null,null] ,      0,      1,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ONLY_SEND );

Pour Form_Heizung_Benutzer2.js:

/*                                 infoNr| index |   ID      | CmdType |      MTyp   |        busk        |value|group|  method   | obj_method_data  |Min-Val|Max-Val| MUL | DIV | Step Size|   State  | update           | */ 
objSiteInfo[0] = new OBJTELEGRAMM(    274,     0 ,"idT0112HK", TEL_STD , TEL_MTYPE_FS, u8CurrentBuskennung,    0,    2, METH_CALC2, [null,null,null] ,      0,   255,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ONCE  ); 
objSiteInfo[1] = new OBJTELEGRAMM(      5,     0 ,  "idT0005", TEL_STD , TEL_MTYPE_FS, u8CurrentBuskennung,    0,    2, METH_TEMP, [null,null,null] ,     10,     35,    1,   10,         5,  ST_UPDATE,  UM_UPDATE_ONCE  ); 
objSiteInfo[2] = new OBJTELEGRAMM(      8,     0 ,  "idT0008", TEL_STD , TEL_MTYPE_FS, u8CurrentBuskennung,    0,    2, METH_TEMP, [null,null,null] ,     10,     35,    1,   10,         5,  ST_UPDATE,  UM_UPDATE_ONCE  ); 
objSiteInfo[3] = new OBJTELEGRAMM(    297,     0 ,  "idT0129", TEL_STD , TEL_MTYPE_FS, u8CurrentBuskennung,    0,    2, METH_TEMP, [null,null,null] ,      8,     85,    1,   10,        10,  ST_UPDATE,  UM_UPDATE_ONCE  ); 
objSiteInfo[4] = new OBJTELEGRAMM(    298,     0 ,  "idT012A", TEL_STD , TEL_MTYPE_FS, u8CurrentBuskennung,    0,    2, METH_TEMP, [null,null,null] ,      8,     85,    1,   10,        10,  ST_UPDATE,  UM_UPDATE_ONCE  ); 
objSiteInfo[5] = new OBJTELEGRAMM(    270,     0 ,  "idT010E", TEL_STD , TEL_MTYPE_FS, u8CurrentBuskennung,    0,    2, METH_TEMP, [null,null,null] ,    2.5,     40,    1,   10,         5,  ST_UPDATE,  UM_UPDATE_ONCE  ); 
objSiteInfo[6] = new OBJTELEGRAMM(   2580,     0 ,  "idT0A14", TEL_STD , TEL_MTYPE_FS, u8CurrentBuskennung,    0,    3, METH_TEMP, [null,null,null] ,      4,     35,    1,   10,         5,  ST_UPDATE,  UM_UPDATE_ONCE  ); 
objSiteInfo[7] = new OBJTELEGRAMM(    278,     0 ,  "idT0116", TEL_STD , TEL_MTYPE_FS, u8CurrentBuskennung,    0,    3,  METH_TEMP, [null,null,null] ,      8,     30,    1,   10,       10,  ST_UPDATE,  UM_UPDATE_ONCE  ); 
objSiteInfo[8] = new OBJTELEGRAMM(   2418,     0 ,  "idT0972", TEL_STD , TEL_MTYPE_FS, u8CurrentBuskennung,    0,    3, METH_CALC2, [null,null,null] ,      5,    270,    1,    1,        5,  ST_UPDATE,  UM_UPDATE_ONCE  ); 
objSiteInfo[9] = new OBJTELEGRAMM(   274,     0 ,"idT0112WW", TEL_STD , TEL_MTYPE_FS, u8CurrentBuskennung,    0,    3, METH_CALC2, [null,null,null] ,      0,   255,    1,    1,         1,  ST_UPDATE,  UM_UPDATE_ONCE  ); 
objSiteInfo[10] = new OBJTELEGRAMM(    19,     0 ,  "idT0013", TEL_STD , TEL_MTYPE_FS, u8CurrentBuskennung,    0,    3, METH_TEMP, [null,null,null] ,      8,     80,    1,   10,        10,  ST_UPDATE,  UM_UPDATE_ONCE  ); 
objSiteInfo[11] = new OBJTELEGRAMM(   650,     0 ,  "idT028A", TEL_STD , TEL_MTYPE_FS, u8CurrentBuskennung,    0,    3, METH_TEMP, [null,null,null] ,      8,     80,    1,   10,        10,  ST_UPDATE,  UM_UPDATE_ONCE  ); 
objSiteInfo[12] = new OBJTELEGRAMM(   129,     0 ,  "idT0081", TEL_STD , TEL_MTYPE_FS, u8CurrentBuskennung,    0,    3, METH_TEMP, [null,null,null] ,      0,     10,    1,   10,         1,  ST_UPDATE,  UM_UPDATE_ONCE  );

Maintenant nous pouvons retrouver facilement à quoi correspondent les identifiants de chaque donnée. Pour cela, il suffit de reprendre les captures d’écran que vous aviez faite (Je vous avait dis qu’elles seraient utiles ^^) et de prendre les données dans l’ordre d’arrivée. (Exemple avec “Générateur –> Valeur de process” <–> “Form_Heizung_Benutzer2.js” )

Ce qui donne le tableau suivant:

IDNom sur le site
81Flamme
1497Vanne1
1498Vanne2
466Pompe
82Chauffage
83Eau Chaude
1Phase fonctionnement
373Défaut
138Point de Charge
2572Température extérieure pondérée
2Demande de chaleur
3101Température départ (eSTB)
325Température fumées
12Température extérieure
14Température eau chaude
118Sonde stock tampon B10
3158Nombre cycle bruleur
3159Heures fonctionnement bruleur
700Durée depuis dernier entretien

Je vous conseille de faire vous un fichier excel, cela sera plus simple pour la suite.

Faites ainsi pour toutes les données dont vous aurez besoin.

Voilà nous avons maintenant tous ce qui faut pour démarrer la partie intéressante… Le codage!

Partie 2: Récupération et lecture des données internes de la chaudière

Pour information, Les sources sont CC-BY-NC-SAhttps://creativecommons.org/licenses/by-nc-sa/3.0/fr/

Dans un premier temps, il faut vous connecter via un navigateur internet à l’adresse de votre raspberry où vous avez installé NodeRed sur le port 1880. Exemple chez moi c’est http://192.168.1.16:1880/

Vous allez arriver sur cette page:

En double cliquant sur Flow1, vous pouvez changer le nom afin de lui donner le nom que vous voulez

je l’ai nommé Weishaupt Chaudière et vous pouvez cliquer sur Done

Maintenant que cela est fait, on va construire la stratégie de récupération des données comme ci-dessous:

On commence par selectionner dans la colonne de gauche le bloc inject

En double-cliquant sur le bloc, on va rentrer les caractéristiques nécessaires suivantes:

Avec dans Payload: la trame des données que l’on veux récupérer sous la forme suivante:

{"prot":"coco","telegramm":[[10,0,1,83,0,0,0,0],[10,0,1,82,0,0,0,0],[10,0,1,81,0,0,0,0],[10,0,1,3158,0,0,0,0],[10,0,1,373,0,0,0,0],[10,0,1,138,0,0,0,0],[10,0,1,2572,0,0,0,0],[10,0,1,2,0,0,0,0],[10,0,1,3101,0,0,0,0],[10,0,1,325,0,0,0,0],[10,0,1,12,0,0,0,0],[10,0,1,14,0,0,0,0],[6,0,1,274,0,0,0,0]]}

Dans Topic: le topic de MQTT dans lequel vous voulez écrire les données

Dans Repeat: la fréquence de lecture des données

Dans Name: le nom du bloc ici en Allemand car c’est une capture issue du travail de Steve

Maintenant on ajoute un bloc http request

Que l’on va remplir de la façon suivante:

Pensez à bien mettre l’adresse IP, le Login et mot de passe de votre WCM-COM

Maintenant, nous allons utiliser le bloc function afin de faire le décodage de la réponse

Pour le bloc décode cela donne:

msg.payload = msg.payload.telegramm;
 whinfo = {};
 whinfo["[6,0,1,274,0,0].name"] = "Mode";
 whinfo["[6,0,1,274,0,0].type"] = "BINAIRE"; 
 whinfo["[10,0,1,81,0,0].name"] = "Flamme";
 whinfo["[10,0,1,81,0,0].type"] = "BINAIRE"; 
 whinfo["[10,0,1,82,0,0].name"] = "Chauffage";
 whinfo["[10,0,1,82,0,0].type"] = "BINAIRE"; 
 whinfo["[10,0,1,83,0,0].name"] = "EauChaude";
 whinfo["[10,0,1,83,0,0].type"] = "BINAIRE"; 
 whinfo["[10,0,1,3158,0,0].name"] = "CyclesBruleur";
 whinfo["[10,0,1,3158,0,0].type"] = "CYCLE"; 
 whinfo["[10,0,1,2572,0,0].name"] = "AussentempAvg";
 whinfo["[10,0,1,2572,0,0].type"] = "TEMP"; 
 whinfo["[10,0,1,2,0,0].name"] = "Waermeanforderung";
 whinfo["[10,0,1,2,0,0].type"] = "TEMP"; 
 whinfo["[10,0,1,12,0,0].name"] = "Aussentemp";
 whinfo["[10,0,1,12,0,0].type"] = "TEMP"; 
 whinfo["[10,0,1,14,0,0].name"] = "Warmwasser";
 whinfo["[10,0,1,14,0,0].type"] = "TEMP"; 
 whinfo["[10,0,1,138,0,0].name"] = "Laststellung";
 whinfo["[10,0,1,138,0,0].type"] = "VALUE"; 
 whinfo["[10,0,1,373,0,0].name"] = "Betriebsphase";
 whinfo["[10,0,1,373,0,0].type"] = "VALUE"; 
 whinfo["[10,0,1,3101,0,0].name"] = "Vorlauftemp";
 whinfo["[10,0,1,3101,0,0].type"] = "TEMP"; 
 whinfo["[10,0,1,325,0,0].name"] = "Abgastemp";
 whinfo["[10,0,1,325,0,0].type"] = "TEMP"; 
 for(var i = 0; i < msg.payload.length; i++) {
     var obj = msg.payload[i];
     var idx = "["+obj[0]+","+obj[1]+","+obj[2]+","+obj[3]+","+obj[4]+","+obj[5]+"]";
 var oname = whinfo[idx+".name"]; var otype = whinfo[idx+".type"]; if ((oname !== undefined) && (otype !== undefined)) {     nmsg = {};     nmsg.topic = msg.topic + "/" + oname;     switch (otype) {         case "TEMP":             var temp;             temp = (obj[6] + obj[7]*256) / 10;             nmsg.payload = temp;             break;         case "VALUE":             var value;             value = (obj[6] + obj[7]*256);             nmsg.payload = value;             break;         case "CYCLE":             var cycle;             cycle = (obj[6] + obj[7]*256)*1000;             nmsg.payload = cycle;             break;           case "BINAIRE":             var binaire;             binaire = (obj[6] + obj[7]*256);             nmsg.payload = binaire;             break;      }     // node.warn(nmsg)     node.send(nmsg); }
 }
 return null;

Et pour le bloc ToJson:

msg.payload = {"temperature": msg.payload,"ts": Math.floor(Date.now() / 1000)};
 return msg;

On ajoute ensuite le bloc change pour valider le message

Pour finir, on ajoute le bloc mqtt (output)

Que l’on configure avec l’adresse où est installé mosquitto

Pour vérifier que tout fonctionne, on peux ajouter des blocs debug afin de checker le bon fonctionnement

Maintenant vous pouvez cliquer sur Deploy (En haut à droite)

Si tout ce passe bien le système commence à vivre et si vous cliquez sur debug la petite coccinnelle sur le coté, vous verrez les messages arriver et partir

Maintenant allez sur votre installation Jeedom et rentrez dans votre plugin MQTT, vous devriez voir des topics qui se sont créés

Si tout est ok vous pouvez les ajouter dans vos objets (ici j’ai créé l’objet Chaudière Générateur pour les acceuillir

Voilà vous pouvez maintenan lire les données de la chaudière!!!!

Partie 3: Commander les consignes de la chaudière

Pour la commande des consignes de la chaudière, il faut modifier la partie NodeRed et la partie jeedom

On commence par la partie Jeedom.

Dans le plugin MQTT, on recherche le topic de la consigne que l’on veux modifier (ici par exemple Mode)

On clique sur l’onglet Commandes

Cliquez sur Ajouter une commande action et remplissez de la même façon que sur l’exemple (Ici Eté) en pensant à bien mettre /set à la fin du topic.

Le Payload est la valeur à laquelle vous voulez que la variable soit écrite dans le topic (ici, j’ai mis 5 car cela correspond au mode été de ma chaudière). Sauvegardez et maintenant on passe à la partie NodeRed

Pour NodeRed, on retourne à l’adresse 192.168.1.16:1880

Et l’on complète la structure précedente de la façon suivante:

On rajoute le bloc mqtt (input)

On le complète de la façon suivante:

Où l’on met bien l’adresse IP de la Raspberry ainsi que le port 1883 correspondant à mosquitto.

On met le Topic correspondant au set fait dans Jeedom précédement.

On ajoute le bloc function afin de créer la fonction d’encodage et on rempli de la façon suivante:

low = msg.payload % 256; 
 high = Math.floor(msg.payload / 256);
 req = '{"prot":"coco","telegramm":[[6,0,2,274,0,0,' + low +','+ high +']]}';
 node.log(req);
 msg.topic = "home/weishaupt";
 msg.payload = req;
 return msg;

Vous pouvez maintenant sauver en cliquant sur Deploy

Une fois que c’est fait, mettez la chaudière quand un programme spécifique via le panneau de contrôle mural (Exemple Stand by)

Maintenant, vous pouvez aller sur Jeedom et tester que le contrôle fonctionne. Cliquez sur le bouton Ete.

Si tout est ok vous verrez sur le panneau de contrôle mural le petit parasol apparaitre

Voilà! Maintenant vous avez toutes les clefs pour intégrer votre chaudière Weishaupt à Jeedom

Je mets si dessous la sauvegarde de ce qui est présenté ici

Le github de Steve (je vais le forker pour avoir une version Anglaise)

https://github.com/lairsdragon/nodered-weishaupt

Et le fichier en cas où il ne serait plus disponible

Bonne continuation,

Ferrader