Intégration domotique wM-Bus meters (wmbusmeters), gratuite et open source

Compteurs d'eau, de chaleur, de gaz et d'électricité wM-Bus, lus par wmbusmeters via MQTT.
wmbusmeters lit les compteurs radio wireless M-Bus (868 MHz) : compteurs d'eau (Sensus iPERL, Diehl Izar et Hydrus, Kamstrup Multical 21 et flowIQ, Itron, Apator, Techem…), compteurs de chaleur (Diehl Sharky, Kamstrup Multical 302 à 803…), de gaz et d'électricité, répartiteurs de frais de chauffage (Qundis Q caloric…). Cette intégration lit ce que wmbusmeters décode et propose chaque compteur dans l'onglet Découverte de Gladys : index de consommation, débit, températures, état, et alarmes de fuite, de rupture, de compteur à sec, de retour d'eau, de fraude et de pile faible. Sans lien avec le projet wmbusmeters.
Version de développement (0.1). Testée contre le vrai wmbusmeters (image Docker officielle, versions 3.0.0 et de développement) rejouant des trames de sa suite de tests, avec un vrai broker Mosquitto, mais pas encore avec un vrai récepteur radio. Vos retours sont les bienvenus sur le dépôt GitHub.
Principe
Le récepteur radio ne se branche pas sur Gladys : les intégrations n'ont
pas accès à l'USB. wmbusmeters tourne à côté du récepteur (sur la machine
Gladys dans son propre conteneur, sur un Raspberry Pi mieux placé près des
compteurs, ou en add-on Home Assistant), décode les trames et, grâce à sa
ligne shell=, publie chaque relevé en JSON sur votre broker MQTT.
L'intégration lit ce broker.
compteurs ))) récepteur -> wmbusmeters -> mosquitto_pub -> broker MQTT -> intégration -> Gladys
Ce que vous obtenez
| Champ wmbusmeters | Dans Gladys |
|---|---|
total_m3, total_volume_m3 | volume (m³) : l'index du compteur |
target_m3 | volume à la date de relève (fin du mois ou de l'année passés) |
total_backward_m3 | volume passé à l'envers |
total_energy_consumption_kwh, total_kwh | index d'énergie (kWh) : compteurs de chaleur et d'électricité |
total_energy_production_kwh | index d'énergie produite (kWh) |
current_power_consumption_kw, power_kw | puissance (convertie en W) |
volume_flow_m3h, flow_m3h, max_flow_m3h | débit, débit max (m³/h) |
flow_temperature_c, return_temperature_c | températures aller et retour (sondes, hors moyenne de la pièce) |
current_consumption_hca, consumption_at_set_date_hca | unités de répartition de chauffage |
current_temperature_c, current_relative_humidity_rh | température et humidité (capteurs d'ambiance) |
voltage_at_phase_1_v… | tension par phase (compteurs électriques) |
battery_pct, remaining_battery_life_y | batterie (%), durée de vie de la pile (années) |
rssi_dbm | signal (barres), quand le récepteur le donne |
status, current_status | État (texte : OK, LEAK, ERROR POWER_LOW…) |
| drapeaux de l'état | alarmes : fuite, rupture, à sec, retour d'eau, fraude, pile |
Un appareil = un numéro de compteur (les 8 chiffres imprimés sur le compteur), quel que soit le pilote ou le nom donné dans wmbusmeters. Les historiques (12 mois, dates de relève intermédiaires) ne sont pas repris : Gladys garde lui-même l'historique de chaque valeur.
Les alarmes que le compteur sait lever sont proposées dès le premier
relevé, avant toute alarme : celles de son pilote wmbusmeters, et celles qu'il
déclare quand wmbusmeters ajoute le détail des champs
(addtelegramdetails=first, réglage par défaut de l'add-on Home Assistant
« edge »). Une alarme jamais annoncée apparaît la première fois qu'elle est
vue. Les drapeaux qui parlent du passé (PREV_LEAKAGE, ..._PREV_MONTH…) ne
sont pas des alarmes : ils restent dans le texte de l'état.
Et la découverte Home Assistant de l'intégration MQTT de Gladys ?
Depuis Gladys 4.86, l'intégration MQTT de Gladys (onglet Découverte) lit
la découverte Home Assistant. wmbusmeters lui-même n'en publie pas : seul son
add-on Home Assistant le fait, si vous activez enable_mqtt_discovery. Avec
l'add-on, c'est une alternative sans cette intégration, mais partielle :
l'énergie, la puissance, les températures, la batterie et le signal passent
bien ; les volumes (m³) et les débits (m³/h) arrivent comme des capteurs
génériques sans unité ; et les alarmes de l'add-on (un capteur par drapeau,
désactivé par défaut) reposent sur un modèle Jinja que Gladys n'exécute pas,
elles ne s'allument donc jamais.
Cette intégration lit directement le JSON de wmbusmeters, avec ou sans add-on et sans découverte : le volume et l'énergie en index, les alarmes de fuite, de rupture, de compteur à sec, de retour d'eau, de fraude et de pile, le diagnostic des compteurs chiffrés sans clé, très courants en France, et l'avertissement d'un compteur muet. N'utilisez qu'une des deux voies pour un même compteur : sinon il apparaît deux fois.
1. Le récepteur
- Une clé RTL-SDR (RTL-SDR Blog V3 ou V4, Nooelec…, environ 25 €) : le
plus simple. L'image Docker de wmbusmeters contient
rtl_wmbus, qui écoute les modes T1 et C1. - Ou un module wM-Bus dédié, plus sensible : IMST iM871A / iU891A, Amber AMB8465 (Würth Metis), Radiocrafts RC1180, CUL.
- Placez l'antenne près des compteurs (un compteur d'eau dans un regard enterré porte peu loin). Une clé RTL-SDR déjà utilisée par rtl_433 ne peut pas servir à wmbusmeters en même temps : prévoyez une clé par logiciel.
2. Lancer wmbusmeters et le faire publier sur MQTT
wmbusmeters n'a pas de client MQTT intégré : sa ligne shell= lance une
commande à chaque relevé, avec le JSON du relevé dans $METER_JSON.
mosquitto_pub (fourni dans l'image Docker officielle) l'envoie au broker.
Avec Docker
Créez le dossier de configuration, par exemple /opt/wmbusmeters, avec le
fichier /opt/wmbusmeters/etc/wmbusmeters.conf (remplacez l'adresse du
broker, l'utilisateur et le mot de passe) :
loglevel=normal
device=auto:t1
donotprobe=/dev/ttyAMA0
logtelegrams=false
format=json
ignoreduplicates=true
shell=/usr/bin/mosquitto_pub -h 192.168.1.10 -u UTILISATEUR -P MOTDEPASSE -t wmbusmeters/$METER_ID -m "$METER_JSON"
puis lancez l'image officielle :
docker run -d --name wmbusmeters --restart unless-stopped --privileged \
-v /etc/localtime:/etc/localtime:ro \
-v /opt/wmbusmeters:/wmbusmeters_data \
-v /dev/:/dev/ \
wmbusmeters/wmbusmeters
- Avec un module série (iM871A, AMB8465…) plutôt qu'une clé RTL-SDR, le mode
privilégié n'est pas nécessaire : remplacez
--privileged -v /dev/:/dev/par--device /dev/ttyUSB0, etdevice=auto:t1par le module, par exempledevice=/dev/ttyUSB0:im871a:c1,t1. - Avec une clé RTL-SDR,
device=rtlwmbusévite de chercher des modules série au démarrage. - Sans utilisateur sur le broker, retirez
-u … -P …. - Le broker peut être celui de l'intégration MQTT de Gladys (port 1883, l'utilisateur et le mot de passe de sa configuration) ou le vôtre (Mosquitto…).
Sans Docker
wmbusmeters se compile sur un Raspberry Pi (./configure && make && sudo make install, voir son README) et tourne alors en service : même configuration
dans /etc/wmbusmeters.conf, fichiers de compteurs dans
/etc/wmbusmeters.d/, sudo apt install mosquitto-clients pour
mosquitto_pub, puis sudo systemctl restart wmbusmeters.
Avec l'add-on Home Assistant
L'add-on publie déjà chaque relevé sur wmbusmeters/<nom du compteur>, sur
le broker Mosquitto de Home Assistant : donnez à l'intégration l'adresse IP de
Home Assistant, le port 1883 et un utilisateur de ce broker. Le topic par
défaut wmbusmeters/# couvre ce format. Si la découverte MQTT de l'add-on
est aussi activée, vos compteurs apparaissent en plus dans l'onglet
Découverte de l'intégration MQTT de Gladys (voir plus haut) : n'ajoutez
chacun qu'une fois.
3. Trouver vos compteurs
wmbusmeters ne publie que les compteurs de ses fichiers de compteurs.
Regardez d'abord ce qu'il entend : docker logs -f wmbusmeters affiche pour
chaque compteur à portée
Received telegram from: 12345678
manufacturer: (SEN) Sensus Metering Systems, Germany (0x4cae)
type: Water meter (0x07) encrypted
driver: iperl
Le numéro (12345678) est imprimé sur votre compteur. Créez un fichier par
compteur dans /opt/wmbusmeters/etc/wmbusmeters.d/, par exemple EauFroide :
name=EauFroide
id=12345678
driver=iperl
key=00112233445566778899AABBCCDDEEFF
Retirez la ligne key= si le compteur n'est pas chiffré, puis
docker restart wmbusmeters. N'utilisez driver=auto que pour essayer :
wmbusmeters garantit que les champs d'un pilote nommé ne changent pas d'une
version à l'autre.
4. Les clés de chiffrement
Beaucoup de compteurs d'eau sont chiffrés (AES) : sans la clé, wmbusmeters ne lit que le numéro du compteur. En France, la clé d'un compteur télérelevé appartient au service des eaux (ou au syndic pour les compteurs divisionnaires d'un immeuble) : demandez-la en donnant le numéro du compteur. Certains la donnent, d'autres non. Une clé fait 32 caractères hexadécimaux.
- Les Diehl Izar (Sappel), très répandus, se lisent sans clé
(
driver=izarv2). - Sans clé, le relevé arrive avec l'état
MISSING_KEY: le bouton « Lister les compteurs entendus » le signale. - Avec une mauvaise clé, wmbusmeters écrit dans son journal « did you use the correct decryption key? » et ignore ensuite ce compteur : rien n'arrive à Gladys. Corrigez la clé et redémarrez wmbusmeters.
- Les compteurs de gaz Gazpar (169 MHz) ne sont pas lisibles : GRDF ne communique pas leurs clés.
5. Configurer l'intégration
- Adresse du broker MQTT : vue depuis la machine Gladys, son adresse IP
sur le réseau local, pas
localhost(l'intégration tourne dans son propre conteneur). Exemples :mqtt://192.168.1.10:1883,mqtts://broker.lan:8883. - Utilisateur et mot de passe du broker, s'il en demande.
- Topic MQTT de wmbusmeters : gardez
wmbusmeters/#, qui couvrewmbusmeters/<numéro>(la configuration ci-dessus) commewmbusmeters/<nom>(l'add-on). - Cliquez sur Tester la connexion : l'intégration attend le premier
relevé (jusqu'à 30 s ; un relevé conservé par le broker avec
-rarrive tout de suite) et indique le compteur entendu.
6. Ajouter vos compteurs
Ouvrez l'onglet Découverte : chaque compteur publié par wmbusmeters y
apparaît, nommé d'après son fichier, son pilote et son numéro
(EauFroide (iperl 12345678)). Le bouton Lister les compteurs entendus
montre les derniers relevés, leurs valeurs, leur état et leur signal.
Avec un fichier de compteur générique (id=*), wmbusmeters publie aussi les
compteurs des voisins : n'ajoutez que les vôtres. Les autres ne coûtent rien
(rien n'est envoyé à Gladys pour un appareil non ajouté) et quittent la liste
après 4 jours de silence.
Scènes
Toutes les fonctionnalités servent dans le déclencheur « Changement d'état d'un appareil » : par exemple Leak alarm (alarme de fuite) passe à 1 → notification, ou Volume qui augmente la nuit. Les alarmes et l'état ne sont jamais retardés ; une alarme repasse à 0 au premier relevé qui ne la porte plus.
Options
| Option | Par défaut | Rôle |
|---|---|---|
| Topic MQTT de wmbusmeters | wmbusmeters/# | à changer seulement si votre shell= publie ailleurs |
| Vérifier le certificat TLS | oui | à désactiver pour un broker au certificat auto-signé de votre réseau |
| Intervalle minimum entre deux relevés | 60 s | un compteur qui émet toutes les 8 s n'est enregistré qu'à ce rythme |
Compteurs bavards : un Izar émet toutes les 8 s, un iPERL toutes les
16 s. wmbusmeters n'a pas de limite de débit : il publie chaque trame
(ignoreduplicates=true écarte seulement les répétitions d'une même trame).
L'intégration garde la dernière valeur de chaque compteur et ne l'enregistre
qu'à l'intervalle choisi, n'envoie que les valeurs qui changent (une valeur
stable est renvoyée toutes les 30 min) et reste sous les 300 états par minute
que Gladys accepte.
Fonctionnement
- Les messages lus sont les objets JSON de wmbusmeters (
"_":"telegram", un numéro et un pilote) ; tout autre message du topic est ignoré. wmbusmeters 3.0 et avant (champmeterau lieu dedriver) fonctionnent aussi. - Un même relevé reçu deux fois (deux topics, un message conservé rejoué à la
reconnexion) ne compte qu'une fois. Un relevé conservé (
-r) compte pour l'heure à laquelle wmbusmeters l'a reçu, pas pour maintenant. - Le badge d'un appareil ajouté passe à « injoignable » quand le broker est coupé, et en état dégradé (point orange, avec la raison) quand le compteur n'a rien envoyé depuis 25 h : hors de portée, pile épuisée, ou compteur qui n'émet qu'à certaines heures (certains compteurs relevés en passant dans la rue sont réglés ainsi).
- L'index d'énergie d'un compteur de chaleur mesure de la chaleur, pas de l'électricité : ne le rattachez pas à votre compteur électrique dans le suivi de l'énergie de Gladys.
- Les valeurs aberrantes (sonde débranchée à -100 °C…) sont ignorées.
Dépannage
- « Aucun relevé wmbusmeters » au test :
docker logs wmbusmeters. « Received telegram from » sans relevé publié : le compteur n'a pas de fichier de compteur. Rien du tout : vérifiez le récepteur, le mode (t1,c1) et la portée. Testez l'envoi à la main :docker exec wmbusmeters mosquitto_pub -h 192.168.1.10 -t wmbusmeters/test -m '{}'. - « Le broker MQTT est injoignable » : vérifiez l'adresse IP et le port,
et que le broker accepte les connexions du réseau local (
listener 1883dans Mosquitto 2). - « a refusé la connexion » : utilisateur ou mot de passe incorrect, ou
ACL qui interdit la lecture de
wmbusmeters/#. - Un compteur n'a que son état :
MISSING_KEY, voir les clés ci-dessus. - Une valeur manque : ouvrez une issue avec le JSON du relevé
(
mosquitto_sub -h 192.168.1.10 -t 'wmbusmeters/#' -v).
Confidentialité
Tout reste sur votre réseau : l'intégration ne parle qu'à votre broker MQTT. Le mot de passe est stocké comme secret par Gladys et n'apparaît jamais dans les logs. Les clés de vos compteurs restent dans wmbusmeters : l'intégration ne les voit jamais.
Paramètres de configuration
Voici les paramètres demandés par wM-Bus meters (wmbusmeters) dans son écran de configuration dans Gladys.
| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
| Vos compteurs radio, grâce à wmbusmeters | section | Non | wmbusmeters décode les trames radio des compteurs wireless M-Bus (868 MHz) : compteurs d'eau (Sensus iPERL, Diehl Izar et Hydrus, Kamstrup Multical 21 et flowIQ, Itron, Apator…), de chaleur, de gaz et d'électricité, répartiteurs de frais de chauffage. Il tourne à côté de son récepteur radio (clé RTL-SDR, iM871A, AMB8465…) sur un Raspberry Pi, un NAS ou en add-on Home Assistant : le récepteur ne se branche pas sur Gladys. Sa ligne shell= publie chaque relevé sur votre broker MQTT (le guide la donne). Cette intégration le lit, propose chaque compteur dans Découverte et transforme ses indicateurs de fuite, de rupture et de pile en alarmes. Beaucoup de compteurs sont chiffrés : wmbusmeters a besoin de leur clé, fournie par votre service des eaux. Saisissez l'adresse du broker vue depuis la machine Gladys : son IP sur le réseau local, pas localhost. Sans lien avec le projet wmbusmeters. |
| Adresse du broker MQTT | string | Oui | mqtt://hôte:1883 ou mqtts://hôte:8883 : le broker sur lequel publie le mosquitto_pub de wmbusmeters. Une adresse IP seule vaut mqtt:// sur le port 1883. |
| Utilisateur | string | Non | |
| Mot de passe | secret | Non | |
| Topic MQTT de wmbusmeters | string | Non | Là où wmbusmeters publie ses relevés. wmbusmeters/# couvre wmbusmeters/<numéro du compteur> (le guide) et wmbusmeters/<nom du compteur> (l'add-on Home Assistant). |
| Vérifier le certificat TLS du broker (mqtts, wss) | boolean | Non | À désactiver seulement pour un broker au certificat auto-signé sur votre réseau local. |
| Intervalle minimum entre deux relevés d'un compteur (s) | number | Non | Certains compteurs émettent toutes les 8 s : Gladys garde leur dernier relevé à ce rythme. L'état et les alarmes ne sont jamais retardés. |
Comment installer wM-Bus meters (wmbusmeters) dans Gladys
- Dans Gladys, ouvrez Intégrations : wM-Bus meters (wmbusmeters) apparaît dans le catalogue, aux côtés des intégrations natives, avec un badge communautaire.
- Cliquez sur Installer. Gladys télécharge l'image Docker (
ghcr.io/lm1lc3n7/gladys-wmbusmeters:0.1.1), la démarre dans un bac à sable isolé du cœur, et génère l'interface de l'intégration (appareils, découverte et configuration). - Ouvrez l'écran Configuration de l'intégration, remplissez les paramètres, puis enregistrez.
- Vous pouvez aussi l'installer directement depuis l'URL de son dépôt : https://github.com/LM1LC3N7/gladys-wmbusmeters.
wM-Bus meters (wmbusmeters) nécessite Gladys >=5.1.0. Le catalogue dans Gladys se rafraîchit toutes les heures : une nouvelle version est donc disponible au plus tard une heure après sa sortie.
Vous n'utilisez pas encore Gladys ? C'est gratuit et open source : suivez le guide d'installation pour démarrer.
À propos des intégrations externes
wM-Bus meters (wmbusmeters) est une intégration externe : une intégration communautaire empaquetée dans un conteneur Docker et publiée sur GitHub, que Gladys installe en un clic et exécute dans un bac à sable isolé de son cœur. Elle est publiée et maintenue par LM1LC3N7, et non par l'équipe cœur de Gladys.
- Parcourir toutes les intégrations, natives et communautaires
- Créer et publier votre propre intégration externe
- Code source sur GitHub — source de cette documentation