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.

Home Assistant     MQTT

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 out nĂ©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.topic et msg.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 comme node-red-contrib-http-request).
  • Le bridge copie bridge.method dans msg.method et 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

  1. Définissez Target = 9, Type = Modbus, Format = Compatible avec Flex Write, Unit ID = 1, Zone = Holding register, Type de donnée = uint16.
  2. Reliez directement la sortie 1 Ă  modbus-flex-write ; aucun nƓud Function n’est nĂ©cessaire.
  3. Reliez la rĂ©ponse de modbus-read ou modbus-flex-getter Ă  l’entrĂ©e de la passerelle pour Modbus → KNX.
  4. Importez examples/IoT Bridge - Modbus Flex Adapter.json comme flow de départ manuel, sans polling.

    Conseils

    • Laissez Target vide uniquement pour les correspondances MQTT/REST qui doivent hĂ©riter de outputtopic ; Modbus Flex exige une adresse.
    • emitOnChangeOnly limite 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 40010 correspond souvent Ă  l’adresse 9, mais vĂ©rifiez toujours la documentation de l’appareil. Bonne passerelle !