MQTT Home Assistant - IoT
La passerelle normalise les télégrammes KNX en messages structurés prêts pour les transports IoT (MQTT, REST, Modbus) et accepte des entrées du flow pour écrire de nouveau sur le bus KNX. Ce guide résume la configuration et les nœuds tiers recommandés.
Mode de fonctionnement
Le nœud dispose d’un sélecteur Mode :
- Passerelle IoT (par défaut) — le comportement décrit ci-dessous : une liste de correspondances qui transforme les télégrammes KNX en messages de sortie MQTT/REST/Modbus et inversement.
- MQTT / Home Assistant (natif) — le nœud se connecte directement à un broker MQTT et fait le pont KNX ↔ MQTT dans les deux sens, en publiant la découverte MQTT de Home Assistant pour que KNX apparaisse automatiquement dans Home Assistant. Aucun câblage
mqtt in/mqtt outnécessaire.
Mode MQTT / Home Assistant
Prérequis : un broker MQTT accessible à la fois par Node-RED et Home Assistant, avec l’intégration MQTT activée dans HA. Toutes les entités sont regroupées sous un seul appareil HA portant le nom du nœud.
| Champ | Rôle |
|---|---|
| Connexion au bus KNX | Autonome (par défaut) : le nœud communique directement avec la passerelle KNX et n’affiche pas de broches d’entrée/sortie. Messages de flux : le nœud expose une broche d’entrée et une de sortie — reliez la sortie d’un nœud KNXUltimate en mode Universel à la broche d’entrée (bus KNX → MQTT) et la broche de sortie à l’entrée d’un autre nœud KNXUltimate en mode Universel (MQTT → bus KNX). |
| URL du broker / Nom d’utilisateur / Mot de passe | Connexion au broker MQTT. |
| Topic de base | Racine des topics d’état/commande (par défaut knx-ultimate). |
| Publier la découverte HA / Préfixe de découverte | Active la découverte MQTT de Home Assistant et définit son préfixe (par défaut homeassistant). |
| Format du nom d’entité | Comment les noms des entités HA sont construits à partir de l’import ETS, dont les noms commencent par le chemin des groupes, p. ex. (Lumières->Rez-de-chaussée) Salon. Options : Tel qu’importé d’ETS (par défaut), Nom d’abord (Salon (Lumières->Rez-de-chaussée)), Nom seul (Salon), Nom + adresse de groupe (Salon (0/1/2)). |
| Adresses de groupe à exposer | Liste à cases de chaque adresse importée dans la passerelle (ETS). Les adresses cochées deviennent des entités HA, typées automatiquement d’après le DPT (switch, sensor, binary_sensor, number, text). Filtre + Tout sélectionner / désélectionner ; toutes sélectionnées par défaut. Chaque ligne dispose aussi de l’option Lecture seule : une adresse en lecture seule est toujours publiée vers Home Assistant (état visible) mais n’accepte jamais de commandes vers le bus KNX (les switch deviennent des binary_sensor et les number des sensor). Les boutons Activer lecture seule / Retirer lecture seule l’appliquent à toutes les adresses affichées. |
| Volets et thermostats | Entités composites qui regroupent plusieurs adresses (voir ci-dessous). |
Volets et thermostats
Les volets et thermostats combinent plusieurs adresses de groupe en une seule entité HA, ils ne peuvent donc pas être déduits d’un seul DPT - ajoutez-les dans la liste :
- Volet : GA montée/descente (1.008), GA stop optionnelle (1.007), GA position commande/état optionnelle (5.001). Inverser la position fait correspondre KNX (0% = ouvert) à Home Assistant (100% = ouvert).
- Thermostat : GA température actuelle (9.001), GA consigne commande/état (9.001), GA marche/arrêt optionnelle (1.001 → off/heat), plus températures min/max et pas.
Les types de points de données sont lus depuis l’import ETS lorsqu’ils sont disponibles, sinon depuis les valeurs KNX par défaut. Pour un retour d’état fiable, les adresses utilisées par les volets/thermostats doivent être présentes dans l’import ETS.
Intégration KNX native vs passerelle MQTT. Si Home Assistant communique déjà avec KNX via son intégration KNX intégrée, les volets/climat s’y configurent avec les adresses de groupe et cette passerelle MQTT n’est pas nécessaire. Utilisez ce mode lorsque Node-RED possède le bus KNX et que Home Assistant voit tout via MQTT.
Récapitulatif des champs
| Champ | But | Remarques |
|---|---|---|
| Label | Nom lisible | Affiché dans le statut et msg.bridge.label. |
| GA / DPT | Adresse de groupe et datapoint | Renseignez-les manuellement ou via l’autocomplétion ETS. |
| Direction | KNX→IoT, IoT→KNX, Bidirectionnel | Détermine les sorties utilisées. |
| Type de canal | MQTT / REST / Modbus | Modifie la signification de Target. |
| Target | Topic, URL de base ou registre | Vide = utilisation de outputtopic. |
| Template | Format de chaîne | Placeholders {{value}}, {{ga}}, {{type}}, {{target}}, {{label}}, {{isoTimestamp}}. |
| Échelle / Décalage | Conversion numérique | Appliquée KNX→IoT ; inversée IoT→KNX. |
| Timeout / Tentatives | Indices de retry | Les nœuds aval peuvent s’y fier pour gérer les relances. |
Transports courants
Broker MQTT
- Publication : reliez la sortie 1 au nœud core
mqtt out. Le bridge fournit déjàmsg.topicetmsg.payload. - Souscription : connectez un
mqtt inà l’entrée pour convertir les messages MQTT en écritures KNX. La sortie 2 fournit un accusé.API REST
- Acheminer la sortie 1 vers le nœud core
http request(ou contrib commenode-red-contrib-http-request). - Le bridge copie
bridge.methoddansmsg.methodet le template dans le payload pour pousser du JSON vers vos webhooks.Registres Modbus
- Associez la passerelle à
node-red-contrib-modbus(modbus-flex-write,modbus-write). Targetreprésente le registre ;msg.payloadcontient la valeur transformée.Exemples de flows
Statut KNX → MQTT
```json
[ { “id”: “bridge1”, “type”: “knxUltimateIoTBridge”, “z”: “flow1”, “server”: “gateway1”, “name”: “Passerelle lumière”, “emitOnChangeOnly”: true, “readOnDeploy”: true, “acceptFlowInput”: true, “mappings”: [ { “id”: “map-lumiere”, “enabled”: true, “label”: “Lumière salon”, “ga”: “1/1/10”, “dpt”: “1.001”, “direction”: “bidirectional”, “iotType”: “mqtt”, “target”: “knx/light/living”, “method”: “POST”, “modbusFunction”: “writeHoldingRegister”, “scale”: 1, “offset”: 0, “template”: “{{value}}”, “property”: “”, “timeout”: 0, “retry”: 0 } ], “wires”: [[“mqttOut”],[“debugAck”]] }, { “id”: “mqttOut”, “type”: “mqtt out”, “name”: “MQTT statut”, “topic”: “”, “qos”: “0”, “retain”: “false”, “broker”: “mqttBroker”, “x”: 520, “y”: 120, “wires”: [] }, { “id”: “debugAck”, “type”: “debug”, “name”: “Ack KNX”, “active”: true, “tosidebar”: true, “complete”: “true”, “x”: 520, “y”: 180, “wires”: [] } ]
### Commande MQTT → KNX
```json
[
{
"id": "mqttIn",
"type": "mqtt in",
"name": "MQTT commande",
"topic": "knx/light/living/set",
"qos": "1",
"datatype": "auto",
"broker": "mqttBroker",
"x": 140,
"y": 200,
"wires": [["bridge1"]]
}
]
Combinez les deux extraits pour obtenir un aller-retour KNX ↔ MQTT avec accusés.
Snapshot REST
{
"id": "bridge-rest",
"type": "knxUltimateIoTBridge",
"name": "Passerelle compteur",
"mappings": [
{
"label": "Puissance active",
"ga": "2/1/20",
"dpt": "9.024",
"direction": "knx-to-iot",
"iotType": "rest",
"target": "https://example/api/knx/power",
"method": "POST",
"template": "{\"value\":{{value}},\"ga\":\"{{ga}}\",\"ts\":\"{{isoTimestamp}}\"}"
}
]
}
Dirigez la sortie 1 vers http request et exploitez la réponse, ainsi que bridge.retry, pour orchestrer vos relances.
Écriture Modbus
- Définissez
Target = 40010,Type = Modbus,Direction = Bidirectionnel. - Connectez la sortie 1 à
modbus-flex-writeet alimentez son champ valeur avecmsg.payload. - Utilisez l’accusé pour confirmer la synchronisation KNX après une mise à jour du registre.
Conseils
- Laissez
Targetvide si plusieurs mappages doivent partageroutputtopic. emitOnChangeOnlylimite le bruit des capteurs ; désactivez-le si chaque télégramme compte.- La sortie 2 renvoie toujours le payload IoT original avec les métadonnées
bridge, pratique pour diagnostiquer la mise à l’échelle. - Pour des flottants Modbus spécifiques, insérez un
functionafin de générer le format requis (16/32 bits, ordre des octets, etc.). Bonne passerelle !
- Laissez