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 adresse Modbus à base zéro | Modbus exige une adresse de protocole de 0 à 65535, et non une référence 4xxxx. |
| Format Modbus / Unit ID / Zone / Type de donnée | Contrat de message Flex ou historique et définition du registre | Utilisez Flex pour les nouvelles correspondances ; un format absent reste historique pour la compatibilité. |
| 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
LâIoT Bridge est un adaptateur de messages pour node-red-contrib-modbus. Il ne crĂ©e pas de client TCP/sĂ©rie et nâinterroge pas lui-mĂȘme les appareils : installez une version du paquet compatible avec votre runtime Node-RED et configurez ces fonctions dans les nĆuds Modbus externes.
| Zone | FC lecture | FC écriture | Direction |
|---|---|---|---|
| Coil | 1 | 5 | KNX â Modbus |
| Discrete input | 2 | â | Modbus â KNX uniquement |
| Holding register | 3 | 6 | KNX â Modbus |
| Input register | 4 | â | Modbus â KNX uniquement |
Pour les nouvelles lignes, choisissez Compatible avec Flex Write, renseignez Unit ID, Zone et Type de donnĂ©e, puis saisissez dans Target lâadresse de protocole Ă base zĂ©ro. Une valeur KNX destinĂ©e Ă un coil produit FC5 ; pour un holding register, FC6. La sortie 1 est directement compatible avec modbus-flex-write :
msg.payload = {
value: 215,
fc: 6,
unitid: 1,
address: 9,
quantity: 1
}
Pour ramener les donnĂ©es vers KNX, reliez la sortie de donnĂ©es de modbus-flex-getter ou modbus-read Ă lâentrĂ©e de la passerelle. Flex Getter fournit la requĂȘte (fc, unitid, address, quantity) dans msg.modbusRequest ; Modbus Read la conserve dans msg.input.payload. Le tableau de valeurs retournĂ© peut se trouver dans msg.payload ou msg.values. La passerelle accepte les deux formes de message. Activez Keep Msg Properties sur Flex Getter. Une seule rĂ©ponse de lecture peut couvrir plusieurs adresses configurĂ©es et la passerelle sĂ©lectionne le bon Ă©lĂ©ment du tableau pour chaque ligne correspondante.
Une correspondance prend en charge un bit ou un seul registre 16 bits : bool, uint16 ou int16. Les valeurs multi-mots, le dĂ©codage 32 bits/float et la conversion dâordre des octets/mots ne font pas partie de cet adaptateur. Ăchelle et dĂ©calage suivent raw = KNX Ă Ă©chelle + dĂ©calage ; Modbus â KNX applique lâinverse. Lire les valeurs KNX au dĂ©ploiement nâeffectue aucun polling Modbus.
Les correspondances sans modbusMessageFormat conservent la sortie scalaire historique avec msg.address et msg.modbusFunction au premier niveau ; les flows enregistrés ne sont donc pas migrés silencieusement.
Exemples de flows
Statut KNX â MQTT
[
{
"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
[
{
"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 = 9,Type = Modbus,Format = Compatible avec Flex Write,Unit ID = 1,Zone = Holding register,Type de donnĂ©e = uint16. - Reliez directement la sortie 1 Ă
modbus-flex-write; aucun nĆud Function nâest nĂ©cessaire. - Reliez la rĂ©ponse de
modbus-readoumodbus-flex-getterĂ lâentrĂ©e de la passerelle pour Modbus â KNX. - Importez
examples/IoT Bridge - Modbus Flex Adapter.jsoncomme flow de départ manuel, sans polling.Conseils
- Laissez
Targetvide uniquement pour les correspondances MQTT/REST qui doivent hĂ©riter deoutputtopic; Modbus Flex exige une adresse. emitOnChangeOnlylimite le bruit des capteurs ; dĂ©sactivez-le si chaque tĂ©lĂ©gramme compte.- La sortie 2 confirme la valeur rĂ©ellement envoyĂ©e Ă KNX ; ce nâest pas une confirmation physique de lecture/Ă©criture Modbus.
- Une référence de manuel telle que
40010correspond souvent Ă lâadresse9, mais vĂ©rifiez toujours la documentation de lâappareil. Bonne passerelle !
- Laissez