MQTT et Home Assistant
Quote from Lionel on 11 juillet 2024, 13 h 52 minBonjour,
J'aurais besoin d'aide pour configurer le Winky dans Home Assistant et récupérer les données via son broker MQTT.
J'ai un Winky ESP8266 à jour (V56). Celui-ci est correctement configuré : il remonte bien les informations sur le Grafana et il envoie bien les trames MQTT.
Le broker les reçoit correctement et j'arrive à les voir dans Home Assistant via MQTT Explorer.
Le topic "Winky/xky-MAC_Addr" donnent les infos que je voudrais récupérer, mais elles n'apparaissent pas dans HA.
J'ai essayé de créer le capteur dans mon "configuration.yaml" mais je n'arrive pas à avoir toutes les valeurs dans un capteur unique (sur le modèle de mon Denky-D4).
Est-il possible de rendre le Winky compatible avec le mode "auto-discovery" de MQTT ?
Ou de m'aiguiller sur la création du capteur dans HA ?
Merci.
Bonjour,
J'aurais besoin d'aide pour configurer le Winky dans Home Assistant et récupérer les données via son broker MQTT.
J'ai un Winky ESP8266 à jour (V56). Celui-ci est correctement configuré : il remonte bien les informations sur le Grafana et il envoie bien les trames MQTT.
Le broker les reçoit correctement et j'arrive à les voir dans Home Assistant via MQTT Explorer.
Le topic "Winky/xky-MAC_Addr" donnent les infos que je voudrais récupérer, mais elles n'apparaissent pas dans HA.
J'ai essayé de créer le capteur dans mon "configuration.yaml" mais je n'arrive pas à avoir toutes les valeurs dans un capteur unique (sur le modèle de mon Denky-D4).
Est-il possible de rendre le Winky compatible avec le mode "auto-discovery" de MQTT ?
Ou de m'aiguiller sur la création du capteur dans HA ?
Merci.
Quote from Jérôme Ferrari on 18 juillet 2024, 19 h 02 minBonjour,
je vais voir avec l'équipe de HA pour voir comment faire.
Bonne journée,
Jérôme
Bonjour,
je vais voir avec l'équipe de HA pour voir comment faire.
Bonne journée,
Jérôme
Quote from AlainC on 6 octobre 2024, 12 h 08 minBonjour
J'ai configuré comme suit mon HomeAssistant dans configuration.yaml et le winky en MQTT est bien reconnu comme étant un device unique.
Attention l'indentation disparait lors du copier-coller ci-dessous
mqtt:
sensor:# PAPP dans la trame Téléinfo représente la Puissance APParente instantanée en Volt-ampères (VA)
- name: "Puissance électrique consommée"
unique_id: winky_power_consumption
state_topic: "homeassistant/winky/xky-40:4c:ca:46:a5:cc" # A personnaliser selon votre config MQTT dans le Winky
unit_of_measurement: "W"
value_template: "{{ value_json.PAPP }}"
device_class: power
state_class: measurement
icon: mdi:lightbulb-on
device:
identifiers:
- winky_0x404cca46a5cc
name: "Winky"
model: "ESP32 C6"
manufacturer: "G2ELab"# le champ indiquant si on est en heures creuses ou non est le champ PTEC (Période Tarifaire En Cours).
- name: "Téléinfo PTEC"
unique_id: "teleinfo_ptec"
state_topic: "homeassistant/winky/xky-40:4c:ca:46:a5:cc"
value_template: "{{ value_json.PTEC }}"
device:
identifiers:
- winky_0x404cca46a5ccbinary_sensor:
name: "Tarif Heures Creuses"
unique_id: "tarif_heures_creuses"
state_topic: "homeassistant/winky/xky-40:4c:ca:46:a5:cc"
value_template: >-
{{ value_json.PTEC in ['HC..', 'HCJB', 'HCJW', 'HCJR'] }}
payload_on: true
payload_off: false
device_class: power
device:
identifiers:
- winky_0x404cca46a5cc
Bonjour
J'ai configuré comme suit mon HomeAssistant dans configuration.yaml et le winky en MQTT est bien reconnu comme étant un device unique.
Attention l'indentation disparait lors du copier-coller ci-dessous
mqtt:
sensor:# PAPP dans la trame Téléinfo représente la Puissance APParente instantanée en Volt-ampères (VA)
- name: "Puissance électrique consommée"
unique_id: winky_power_consumption
state_topic: "homeassistant/winky/xky-40:4c:ca:46:a5:cc" # A personnaliser selon votre config MQTT dans le Winky
unit_of_measurement: "W"
value_template: "{{ value_json.PAPP }}"
device_class: power
state_class: measurement
icon: mdi:lightbulb-on
device:
identifiers:
- winky_0x404cca46a5cc
name: "Winky"
model: "ESP32 C6"
manufacturer: "G2ELab"# le champ indiquant si on est en heures creuses ou non est le champ PTEC (Période Tarifaire En Cours).
- name: "Téléinfo PTEC"
unique_id: "teleinfo_ptec"
state_topic: "homeassistant/winky/xky-40:4c:ca:46:a5:cc"
value_template: "{{ value_json.PTEC }}"
device:
identifiers:
- winky_0x404cca46a5ccbinary_sensor:
name: "Tarif Heures Creuses"
unique_id: "tarif_heures_creuses"
state_topic: "homeassistant/winky/xky-40:4c:ca:46:a5:cc"
value_template: >-
{{ value_json.PTEC in ['HC..', 'HCJB', 'HCJW', 'HCJR'] }}
payload_on: true
payload_off: false
device_class: power
device:
identifiers:
- winky_0x404cca46a5cc
Quote from Thierry on 6 octobre 2024, 14 h 55 minBonjour Alain,
Merci pour ce partage. De mon côté je n'ai pas de champ PAPP dans la trame json reçue, en revanche j'ai bien le champ PTEC.
Quand je regarde la doc d'enedis : https://www.enedis.fr/media/2035/download, j'ai de nombreux champs du paragraphe 6.2.2 mais je n'ai pas tous les champs du paragraphe 6.1.1, en particulier le PAPP est absent (j'ai le PTEC avec une valeur "").
Peux-être est-ce un problème de firmware : mon firmware correspond à V51.
Thierry
Bonjour Alain,
Merci pour ce partage. De mon côté je n'ai pas de champ PAPP dans la trame json reçue, en revanche j'ai bien le champ PTEC.
Quand je regarde la doc d'enedis : https://www.enedis.fr/media/2035/download, j'ai de nombreux champs du paragraphe 6.2.2 mais je n'ai pas tous les champs du paragraphe 6.1.1, en particulier le PAPP est absent (j'ai le PTEC avec une valeur "").
Peux-être est-ce un problème de firmware : mon firmware correspond à V51.
Thierry
Quote from AlainC on 6 octobre 2024, 15 h 54 minBonjour Thierry,
Mon compteur Linky est en mode historique (6.1.1) alors que le tient semble être en mode standard (6.2.2) et du coup ce ne sont pas du tout les mêmes champs.
Il faut alors adapter le YAML en s'aidant de mqtt explorer.
Cdt
Bonjour Thierry,
Mon compteur Linky est en mode historique (6.1.1) alors que le tient semble être en mode standard (6.2.2) et du coup ce ne sont pas du tout les mêmes champs.
Il faut alors adapter le YAML en s'aidant de mqtt explorer.
Cdt
Quote from Thierry on 6 octobre 2024, 18 h 02 minEffectivement mon compteur est en mode Standard et non historique. Je crois que le champ correspondant est SINSTS (soutirée instantanée). Je vais essayer d'adapter ton paramétrage.
Merci
Effectivement mon compteur est en mode Standard et non historique. Je crois que le champ correspondant est SINSTS (soutirée instantanée). Je vais essayer d'adapter ton paramétrage.
Merci
Quote from Jérôme Ferrari on 6 octobre 2024, 18 h 10 minBonjour,
Merci pour le test et l'intégration dans HA!
Pour l'histoire de PAPP, yes c'est exactement cela et il y a pas mal d'autres étiquettes qui ont cette dualité.
Après, si vous le voulez, je peux mettre les équivalents Historique/Standard dans l'envoi MQTT car je l'ai fait pour les envois vers l'influxDB du serveur de l'expérimentation mais cela risque de faire du doublon pour quelqu'un qui possède un broker perso.
En tout cas encore merci,
Jérôme
Bonjour,
Merci pour le test et l'intégration dans HA!
Pour l'histoire de PAPP, yes c'est exactement cela et il y a pas mal d'autres étiquettes qui ont cette dualité.
Après, si vous le voulez, je peux mettre les équivalents Historique/Standard dans l'envoi MQTT car je l'ai fait pour les envois vers l'influxDB du serveur de l'expérimentation mais cela risque de faire du doublon pour quelqu'un qui possède un broker perso.
En tout cas encore merci,
Jérôme
Quote from AlainC on 7 octobre 2024, 22 h 26 minBonjour
A mon avis le mieux serait que le Winky en fonction du mode historique/standard envoie en MQTT discovery à Home Assistant son auto-config.
A voir si il est possible de reprendre le code de teleinfo2mqtt/app/mqtt/hass.js at master · fmartinou/teleinfo2mqtt (github.com) dans le Winky pour la config MQTT discovery HA
Cdt
Bonjour
A mon avis le mieux serait que le Winky en fonction du mode historique/standard envoie en MQTT discovery à Home Assistant son auto-config.
A voir si il est possible de reprendre le code de teleinfo2mqtt/app/mqtt/hass.js at master · fmartinou/teleinfo2mqtt (github.com) dans le Winky pour la config MQTT discovery HA
Cdt
Quote from Lionel on 14 octobre 2024, 15 h 50 minMerci à tous pour cette aide précieuse.Je vais voir pour intégrer ça dans mon HA. ^_^Quote from AlainC on 7 octobre 2024, 22 h 26 minBonjour
A mon avis le mieux serait que le Winky en fonction du mode historique/standard envoie en MQTT discovery à Home Assistant son auto-config.
A voir si il est possible de reprendre le code de teleinfo2mqtt/app/mqtt/hass.js at master · fmartinou/teleinfo2mqtt (github.com) dans le Winky pour la config MQTT discovery HA
Cdt
Je plussois fortement !!!! Et je pense que ça servirait à d'autres systèmes que HA non ?
Merci à tous pour cette aide précieuse.Je vais voir pour intégrer ça dans mon HA. ^_^Quote from AlainC on 7 octobre 2024, 22 h 26 minBonjour
A mon avis le mieux serait que le Winky en fonction du mode historique/standard envoie en MQTT discovery à Home Assistant son auto-config.
A voir si il est possible de reprendre le code de teleinfo2mqtt/app/mqtt/hass.js at master · fmartinou/teleinfo2mqtt (github.com) dans le Winky pour la config MQTT discovery HA
Cdt
Je plussois fortement !!!! Et je pense que ça servirait à d'autres systèmes que HA non ?
Quote from Sebastien on 24 octobre 2024, 17 h 38 minBonjour,
MQTT Discovery est une fonctionnalité de Home Assistant (mais pas exclusif à cet environnement et chaque environnement à ses propres standards pour cette fonctionnalité, soit, une fonction différente pour chaque environnement ... Mais je trouve que HA est celui qui intègre le mieux cette fonctionnalité ).
Pour publier un topic de découverte dans HA, il faut respecter le format :
homeassistant/<component_type>/<unique_id>/config
Ou le <component_type> fait référence à une entité, example : sensor, binary_sensor, switch, light, cover, climate, fan, lock, alarm_control_panel, camera, media_player, thermostat, button.
Et <unique_id> sera, comme son nom l'indique, un identifiant unique.
Par exemple :
homeassistant/sensor/myTemp/config
Le contenu à publier dans se topic respectera le format JSON et contiendra diverse informations de configuration 🙂
Par exemple :
[spoiler title="Exemple explicatif :"]
{
"name": "Temperature Sensor", // Nom visible dans Home Assistant
"unique_id": "myTemp", // ID unique du capteur
"state_topic": "home/mySensor/temperature", // Le topic où seront envoyées les données de température
"unit_of_measurement": "°C", // L'unité de la mesure (ici, des degrés Celsius)
"device_class": "temperature", // La classe de l'appareil (affichera l'icône correspondante dans Home Assistant)
"value_template": "{{ value | float }}", // Conversion des données en float
"availability_topic": "home/mySensor/status", // (Optionnel) Topic indiquant la disponibilité du capteur (online/offline)
"payload_available": "online",
"payload_not_available": "offline"
}
Une fois le topic de configuration envoyé, on pourra publier les informations dans le topic :
home/mySensor/temperature
[/spoiler]
[spoiler title="Exemple concret : "]
Topic: homeassistant/sensor/winkytension/config
Payload:
{
"name": "WinKy Tension",
"state_topic": "winkysystem/tension",
"unit_of_measurement": "V",
"device_class": "voltage",
"unique_id": "winkytension",
"value_template": "{{ value_json.tension }}",
"device": {
"identifiers": ["WinKy_system"],
"name": "WinKy System",
"model": "WinKy V56.3.SD",
"manufacturer": "G2Elab - CNRS/UGA/G-INP"
}
}
Puis :
Topic: winkysystem/tension
Payload: {"tension": 230}
[/spoiler]
Je vais essayer de travailler sur le code pour intégrer tout ca 🙂
Après, libre à Jérôme de l'intégrer au non dans une potentiel nouvelle version du micrologiciel WinKY 😀
À la grosse louche (il peut y avoir des erreurs ou du manquant, je n'ai pas encore refait un tour de vérification), j'ai relevé les données qui sont envoyés en fonction du mode Historique ou Standard :
[spoiler title="Glossaire des variables OUTPUT : "]
>>> DATA DISPO EN MODE STANDARD :// Var Interne :ModeTic // Mode de communication TIC (Télé-Information Client)FWVersion // Version du firmwareBoardVersion // Version de la carte électroniqueRSSI // Niveau de signal WiFi (Received Signal Strength Indicator)TimeStartup // Temps écoulé depuis le démarrage (en millisecondes)TimeDecode // Temps de décodage des données LinkyTimePrepa // Temps de préparation des données à envoyerTimeConn // Temps de connexion WiFiUseOptimWifi // Indicateur d'utilisation de l'optimisation WiFiMidTryWifiCon // Nombre de tentatives intermédiaires de connexion WiFiOffsetDeepsleep // Décalage avant la mise en veille profonde (Deep Sleep)UseLed // Indicateur d'utilisation de la LED pour les notificationsMacAdress // Adresse MAC de l'appareil, transmise uniquement si InfluxDB activé// Var LinKy (données Linky en mode standard) :ADSC // Adresse du compteur Linky (Numéro de série)VTIC // Version du mode de télé-information (Historique ou Standard)DATE // Date et heure de la lecture des donnéesNGTF // Numéro de la période tarifaire en coursLTARF // Libellé tarifaire (tarif applicable)OPTARIF // Option tarifaire (identique à LTARF)PTEC // Période tarifaire en coursEAST // Index de consommation active totaleBASE // Index de consommation en option Base (identique à EAST)EASF01 à EASF10 // Index de consommation active répartie par période tarifaire (EASF01, EASF02, EASF03, EASF04, EASF05, EASF06, EASF07, EASF08, EASF09, EASF10)EASD01 à EASD04 // Index de consommation active (journalière) (EASD01, EASD02, EASD03, EASD04)ERQ1 à ERQ4 // Index d'énergie réactive (consommation non facturée) (ERQ1, ERQ2, ERQ3, ERQ4)EAIT // Index d'énergie apparente totaleIRMS1 à IRMS3 // Courant efficace pour chacune des phases (1 à 3) (IRMS1, IRMS2, IRMS3)URMS1 à URMS3 // Tension efficace pour chacune des phases (1 à 3) (URMS1, URMS2, URMS3)PREF // Puissance de référence souscrite (kVA)PCOUP // Puissance de coupure (en cas de dépassement)SINSTS // Puissance instantanée soutirée (watts)PAPP // Puissance apparente (identique à SINSTS)SINSTS1 à SINSTS3// Puissance instantanée par phase (1 à 3) (SINSTS1, SINSTS2, SINSTS3)SMAXSN // Puissance maximale soutiréeSMAXSN1 à SMAXSN3// Puissance maximale soutirée par phase (SMAXSN1, SMAXSN2, SMAXSN3)SMAXSN-1 // Puissance maximale soutirée du jour précédentSINSTI // Puissance instantanée injectée (watts)SMAXIN // Puissance maximale injectéeSMAXIN-1 // Puissance maximale injectée du jour précédentCCAIN // Consommation cumulée d'énergie active injectéeCCAIN-1 // Consommation cumulée d'énergie active injectée du jour précédentCCASN // Consommation cumulée d'énergie active soutiréeCCASN-1 // Consommation cumulée d'énergie active soutirée du jour précédentUMOY1 - UMOY3 // Tension moyenne par phase (1 à 3) (UMOY1, UMOY2, UMOY3)STGE // État du gestionnaire d'énergieEContactSec // État du contact sec (relais)EOrganeCoupure // État de l'organe de coupure (disjoncteur)ECache // Cache pour les informations cachéesESurtension // Indicateur de surtension détectéeEDepassement // Indicateur de dépassement de la puissance souscriteEFonctionnement // État du fonctionnement globalESensEnergie // Sens de l'énergie (consommation ou injection)ETarifFourniture // Tarif applicable par le fournisseur d'énergieETarifDistributeur// Tarif applicable par le distributeur d'énergieEHorloge // Horloge interne du compteurETic // Mode TIC en cours (Historique ou Standard)EComEuridis // État de la communication Euridis (utilisée par certains systèmes de gestion)EStatusCPL // État de la communication par courants porteurs en ligne (CPL)ESyncroCPL // Synchronisation des données via CPLECouleurJ // Couleur du jour actuel (tarification variable)AUJOURDHUI // Information du jour actuel (tarification)ECouleurD // Couleur du jour suivant (prévision)DEMAIN // Information du jour suivant (prévision tarifaire)EPrevisPM // Prévision de la pointe mobile (tarif plus élevé)EPM // Indicateur de pointe mobileDPM1 à DPM3 // Début de la période de pointe mobile (sur 3 jours) (DPM1, DPM2, DPM3)FPM1 à FPM3 // Fin de la période de pointe mobile (sur 3 jours) (FPM1, FPM2, FPM3)MSG1 // Message d’information n°1 (envoyé par le fournisseur)MSG2 // Message d’information n°2 (envoyé par le fournisseur)PRM // Point de relève du compteurRELAIS // État des relais (utilisés pour des commandes externes)NTARF // Nombre de périodes tarifaires en coursNJOURF // Numéro du jour en coursNJOURF1 // Numéro du jour suivantPJOURF1 // Période tarifaire en cours le jour suivantPPOINTE // Période de pointe (indicateur)HCHC // Heures creuses (index de consommation)HCHP // Heures pleines (index de consommation)BBRHCJB à BBRHPJR// Index de consommation en heures creuses/pleines par couleur [Bleu, Jaune, Rouge] (BBRHCJB, BBRHPJB, BBRHCJW, BBRHPJW, BBRHCJR, BBRHPJR)EJPHN // Index pour les jours de pointe (tarif normal)EJPHPM // Index pour les jours de pointe mobile>>> DATA DISPO EN MODE HISTORIQUE :// Var Interne :ModeTic // Mode de communication TICFWVersion // Version du firmwareBoardVersion // Version de la carte électroniqueRSSI // Niveau de signal WiFiTimeStartup // Temps depuis le démarrageTimeDecode // Temps de décodage des données LinkyTimePrepa // Temps de préparation des donnéesTimeConn // Temps de connexion WiFiUseOptimWifi // Indicateur d'optimisation WiFiMidTryWifiCon // Tentatives intermédiaires de connexionOffsetDeepsleep // Délai avant la mise en veille profondeUseLed // Indicateur d'usage de la LEDMacAdress // Adresse MAC de l'appareil// Var LinKy (données Linky en mode historique) :ADCO // Adresse du compteur (Numéro de série)OPTARIF // Option tarifaireISOUSC // Intensité souscriteBASE // Index de consommation en option BaseHCHC // Index de consommation en heures creusesHCHP // Index de consommation en heures pleinesEJPHN // Index de consommation pour les jours normauxEJPHNEJPHPM // Index pour les jours de pointe mobileBBRHCJB à BBRHPJR// Index de consommation par couleur [Bleu, Jaune, Rouge] (BBRHCJB, BBRHPJB, BBRHCJW, BBRHPJW, BBRHCJR, BBRHPJR)PMAX // Puissance maximale atteintePEJP // Index de consommation en période EJP (Effacement Jour de Pointe)PTEC // Période tarifaire en coursDEMAIN // Information tarifaire du lendemainIINST // Intensité instantanée totaleIINST1 à IINST3 // Intensité instantanée par phase (IINST1, IINST2, IINST3)IMAX // Intensité maximale atteinteIMAX1 à IMAX3 // Intensité maximale par phase (IMAX1, IMAX2, IMAX3)ADPS // Avertissement de dépassement de puissancePAPP // Puissance apparenteHHPHC // Horloge haute performanceMOTDETAT // État du compteur (message d'erreur ou d'état)[/spoiler]
Bonjour,
MQTT Discovery est une fonctionnalité de Home Assistant (mais pas exclusif à cet environnement et chaque environnement à ses propres standards pour cette fonctionnalité, soit, une fonction différente pour chaque environnement ... Mais je trouve que HA est celui qui intègre le mieux cette fonctionnalité ).
Pour publier un topic de découverte dans HA, il faut respecter le format :
homeassistant/<component_type>/<unique_id>/config
Ou le <component_type> fait référence à une entité, example : sensor, binary_sensor, switch, light, cover, climate, fan, lock, alarm_control_panel, camera, media_player, thermostat, button.
Et <unique_id> sera, comme son nom l'indique, un identifiant unique.
Par exemple :
homeassistant/sensor/myTemp/config
Le contenu à publier dans se topic respectera le format JSON et contiendra diverse informations de configuration 🙂
Par exemple :
{
"name": "Temperature Sensor", // Nom visible dans Home Assistant
"unique_id": "myTemp", // ID unique du capteur
"state_topic": "home/mySensor/temperature", // Le topic où seront envoyées les données de température
"unit_of_measurement": "°C", // L'unité de la mesure (ici, des degrés Celsius)
"device_class": "temperature", // La classe de l'appareil (affichera l'icône correspondante dans Home Assistant)
"value_template": "{{ value | float }}", // Conversion des données en float
"availability_topic": "home/mySensor/status", // (Optionnel) Topic indiquant la disponibilité du capteur (online/offline)
"payload_available": "online",
"payload_not_available": "offline"
}
Une fois le topic de configuration envoyé, on pourra publier les informations dans le topic :
home/mySensor/temperature
Topic: homeassistant/sensor/winkytension/config
Payload:
{
"name": "WinKy Tension",
"state_topic": "winkysystem/tension",
"unit_of_measurement": "V",
"device_class": "voltage",
"unique_id": "winkytension",
"value_template": "{{ value_json.tension }}",
"device": {
"identifiers": ["WinKy_system"],
"name": "WinKy System",
"model": "WinKy V56.3.SD",
"manufacturer": "G2Elab - CNRS/UGA/G-INP"
}
}
Puis :
Topic: winkysystem/tension
Payload: {"tension": 230}
Je vais essayer de travailler sur le code pour intégrer tout ca 🙂
Après, libre à Jérôme de l'intégrer au non dans une potentiel nouvelle version du micrologiciel WinKY 😀
À la grosse louche (il peut y avoir des erreurs ou du manquant, je n'ai pas encore refait un tour de vérification), j'ai relevé les données qui sont envoyés en fonction du mode Historique ou Standard :