MQTT Home Assistant - IoT

Der Bridge normalisiert KNX-Telegramme zu strukturierten Nachrichten fĂŒr IoT-Transporte (MQTT, REST, Modbus) und nimmt Flow-Eingaben entgegen, um zurĂŒck in den KNX-Bus zu schreiben. Diese Seite fasst die Konfiguration und empfohlene Drittanbieter-Nodes zusammen.

Home Assistant     MQTT

Betriebsmodus

Der Node hat einen Modus-Schalter:

  • IoT-Bridge (Standard) — das unten beschriebene Verhalten: eine Zuordnungsliste, die KNX-Telegramme in MQTT/REST/Modbus-Ausgabemeldungen umwandelt und umgekehrt.
  • MQTT / Home Assistant (nativ) — der Node verbindet sich direkt mit einem MQTT-Broker und ĂŒberbrĂŒckt KNX ↔ MQTT in beide Richtungen, mit Home-Assistant-MQTT-Discovery, sodass KNX automatisch in Home Assistant erscheint. Keine mqtt in/mqtt out-Verdrahtung nötig.

Modus MQTT / Home Assistant

Voraussetzungen: ein MQTT-Broker, der sowohl von Node-RED als auch von Home Assistant erreichbar ist, mit aktivierter MQTT-Integration in HA. Alle EntitÀten werden unter einem einzigen HA-GerÀt mit dem Namen des Nodes gruppiert.

Feld Zweck
KNX-Bus-Verbindung EigenstĂ€ndig (Standard): der Knoten kommuniziert direkt mit dem KNX-Gateway und zeigt keine Ein-/Ausgangs-Pins. Flow-Nachrichten: der Knoten zeigt einen Eingangs- und einen Ausgangs-Pin — verbinden Sie den Ausgang eines KNXUltimate-Knotens im Universal-Modus mit dem Eingangs-Pin (KNX-Bus → MQTT) und den Ausgangs-Pin mit dem Eingang eines weiteren KNXUltimate-Knotens im Universal-Modus (MQTT → KNX-Bus).
Broker-URL / Benutzername / Passwort Verbindung zum MQTT-Broker.
Basis-Topic Wurzel der Status-/Befehls-Topics (Standard knx-ultimate).
HA-Discovery veröffentlichen / Discovery-PrÀfix Aktiviert Home-Assistant-MQTT-Discovery und legt das PrÀfix fest (Standard homeassistant).
Format des EntitÀtsnamens Wie die HA-EntitÀtsnamen aus dem ETS-Import gebildet werden, dessen Namen mit dem Gruppenpfad beginnen, z. B. (Licht->Erdgeschoss) Wohnzimmer. Optionen: Wie aus ETS importiert (Standard), Name zuerst (Wohnzimmer (Licht->Erdgeschoss)), Nur der Name (Wohnzimmer), Name + Gruppenadresse (Wohnzimmer (0/1/2)).
Bereitzustellende Gruppenadressen KontrollkĂ€stchenliste aller im Gateway importierten Adressen (ETS). Angehakte Adressen werden zu HA-EntitĂ€ten, automatisch nach dem DPT typisiert (switch, sensor, binary_sensor, number, text). Filter + Alle/Keine auswĂ€hlen; standardmĂ€ĂŸig alle ausgewĂ€hlt. Jede Zeile hat zudem die Option Nur lesen: eine schreibgeschĂŒtzte Adresse wird weiterhin an Home Assistant veröffentlicht (Status sichtbar), akzeptiert aber nie Befehle zurĂŒck auf den KNX-Bus (switch werden zu binary_sensor, number zu sensor). Die SchaltflĂ€chen Nur lesen setzen / Nur lesen entfernen wenden dies auf alle angezeigten Adressen an.
RolllĂ€den & Thermostate Zusammengesetzte EntitĂ€ten, die mehrere Adressen bĂŒndeln (siehe unten).

RolllÀden & Thermostate

RolllĂ€den und Thermostate fassen mehrere Gruppenadressen zu einer HA-EntitĂ€t zusammen und können daher nicht aus einem einzelnen DPT abgeleitet werden - fĂŒgen Sie sie in der Liste hinzu:

  • Rollladen: Auf/Ab-GA (1.008), optionale Stopp-GA (1.007), optionale Positions-GA Befehl/Status (5.001). Position invertieren bildet KNX (0% = offen) auf Home Assistant (100% = offen) ab.
  • Thermostat: GA Ist-Temperatur (9.001), GA Sollwert Befehl/Status (9.001), optionale Ein/Aus-GA (1.001 → off/heat), plus Min-/Max-Temperatur und Schrittweite.

Die Datenpunkttypen werden aus dem ETS-Import gelesen, sofern vorhanden, andernfalls aus KNX-Standardwerten. FĂŒr zuverlĂ€ssige Statuswerte sollten die von RolllĂ€den/Thermostaten verwendeten Adressen im ETS-Import enthalten sein.

Native KNX-Integration vs. MQTT-Bridge. Wenn Home Assistant bereits ĂŒber seine eingebaute KNX-Integration mit KNX kommuniziert, werden RolllĂ€den/Klima dort mit Gruppenadressen konfiguriert und diese MQTT-Bridge wird nicht benötigt. Verwenden Sie diesen Modus, wenn Node-RED den KNX-Bus besitzt und Home Assistant alles ĂŒber MQTT sieht.

FeldĂŒbersicht

Feld Zweck Hinweise
Label Anzeigename Erscheint im Status und in msg.bridge.label.
GA / DPT Gruppenadresse und Datapoint Manuell oder ĂŒber ETS-AutovervollstĂ€ndigung setzen.
Richtung KNX→IoT, IoT→KNX, Bidirektional Steuert, welche AusgĂ€nge genutzt werden.
Kanaltyp MQTT / REST / Modbus Bestimmt die Bedeutung von Target.
Target Topic, Basis-URL oder nullbasierte Modbus-Adresse FĂŒr Modbus ist eine Protokolladresse von 0 bis 65535 erforderlich, keine 4xxxx-Referenz.
Modbus-Format / Unit-ID / Bereich / Datentyp Flex- oder Legacy-Nachrichtenvertrag und Registerdefinition Neue Zuordnungen sollten Flex nutzen; ein fehlendes Format bleibt aus KompatibilitĂ€tsgrĂŒnden Legacy.
Template String-Format Platzhalter {{value}}, {{ga}}, {{type}}, {{target}}, {{label}}, {{isoTimestamp}}.
Skalierung / Offset Numerische Umrechnung Wird in KNX→IoT angewandt; IoT→KNX nutzt die inverse Rechnung.
Timeout / Wiederholungen Retry-Hinweise Können von nachfolgenden Nodes zur Steuerung von Wiederholungen genutzt werden.

Typische Transporte

MQTT-Broker

  • Publizieren: Ausgang 1 an den Core-Node mqtt out anschließen. msg.topic und msg.payload sind bereits gesetzt.
  • Abonnieren: Ein mqtt in-Node am Eingang wandelt MQTT-Nachrichten in KNX-SchreibvorgĂ€nge um. Ausgang 2 liefert eine BestĂ€tigung.

REST-API

  • Ausgang 1 in den Core-Node http request (oder contrib wie node-red-contrib-http-request) fĂŒhren.
  • Der Bridge kopiert bridge.method nach msg.method und den Template-Output nach msg.payload, ideal fĂŒr Webhooks.

Modbus-Register

Die IoT-Bridge ist ein Nachrichtenadapter fĂŒr node-red-contrib-modbus. Sie erstellt keinen TCP-/seriellen Client und fragt GerĂ€te nicht selbst ab. Installieren Sie eine mit Ihrer Node-RED-Laufzeit kompatible Paketversion und konfigurieren Sie diese Aufgaben in den externen Modbus-Nodes.

Bereich Lese-FC Schreib-FC Richtung
Coil 1 5 KNX ↔ Modbus
Discrete Input 2 — Nur Modbus → KNX
Holding Register 3 6 KNX ↔ Modbus
Input Register 4 — Nur Modbus → KNX

WĂ€hlen Sie fĂŒr neue Zeilen Mit Flex Write kompatibel, stellen Sie Unit-ID, Bereich und Datentyp ein und tragen Sie in Target die nullbasierte Protokolladresse ein. Ein KNX-Wert fĂŒr ein Coil erzeugt FC5, fĂŒr ein Holding Register FC6. Ausgang 1 ist direkt mit modbus-flex-write kompatibel:

msg.payload = {
  value: 215,
  fc: 6,
  unitid: 1,
  address: 9,
  quantity: 1
}

FĂŒr Daten in Richtung KNX verbinden Sie den Datenausgang von modbus-flex-getter oder modbus-read mit dem Bridge-Eingang. Flex Getter stellt die Anfrage (fc, unitid, address, quantity) in msg.modbusRequest bereit; Modbus Read behĂ€lt sie in msg.input.payload. Das zurĂŒckgegebene Werte-Array kann in msg.payload oder msg.values liegen. Die Bridge unterstĂŒtzt beide Nachrichtenformen. Aktivieren Sie Keep Msg Properties am Flex Getter. Eine Leseantwort kann mehrere konfigurierte Adressen abdecken, und die Bridge verwendet fĂŒr jede passende Zeile das richtige Array-Element.

UnterstĂŒtzt wird pro Zuordnung ein Bit oder ein einzelnes 16-Bit-Register: bool, uint16 oder int16. Multiword-Werte, 32-Bit-/Float-Dekodierung und Byte-/Wortreihenfolge gehören nicht zu diesem Adapter. Skalierung und Offset folgen raw = KNX × Skalierung + Offset; Modbus → KNX nutzt die inverse Rechnung. KNX-Werte beim Deploy lesen fĂŒhrt kein Modbus-Polling aus.

Zuordnungen ohne modbusMessageFormat behalten die skalare Legacy-Ausgabe mit msg.address und msg.modbusFunction auf oberster Ebene; gespeicherte Flows werden daher nicht still migriert.

Beispiel-Flows

Status KNX → MQTT


[
  {
    "id": "bridge1",
    "type": "knxUltimateIoTBridge",
    "z": "flow1",
    "server": "gateway1",
    "name": "Licht-Bridge",
    "emitOnChangeOnly": true,
    "readOnDeploy": true,
    "acceptFlowInput": true,
    "mappings": [
      {
        "id": "map-licht",
        "enabled": true,
        "label": "Wohnzimmerlicht",
        "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 Status",
    "topic": "",
    "qos": "0",
    "retain": "false",
    "broker": "mqttBroker",
    "x": 520,
    "y": 120,
    "wires": []
  },
  {
    "id": "debugAck",
    "type": "debug",
    "name": "KNX Ack",
    "active": true,
    "tosidebar": true,
    "complete": "true",
    "x": 520,
    "y": 180,
    "wires": []
  }
]

MQTT-Befehl → KNX


[
  {
    "id": "mqttIn",
    "type": "mqtt in",
    "name": "MQTT Befehl",
    "topic": "knx/light/living/set",
    "qos": "1",
    "datatype": "auto",
    "broker": "mqttBroker",
    "x": 140,
    "y": 200,
    "wires": [["bridge1"]]
  }
]

Kombinieren Sie beide Ausschnitte, um einen KNX ↔ MQTT Roundtrip mit BestĂ€tigung zu erhalten.

REST-Snapshot


{
  "id": "bridge-rest",
  "type": "knxUltimateIoTBridge",
  "name": "Leistungs-Bridge",
  "mappings": [
    {
      "label": "Wirklast gesamt",
      "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}}\"}"
    }
  ]
}

Leiten Sie Ausgang 1 in http request und nutzen Sie die Antwort samt bridge.retry fĂŒr Wiederholstrategien.

Modbus-Schreibvorgang

  1. Setzen Sie Target = 9, Typ = Modbus, Format = Mit Flex Write kompatibel, Unit-ID = 1, Bereich = Holding Register, Datentyp = uint16.
  2. Verbinden Sie Ausgang 1 direkt mit modbus-flex-write; ein Function-Node ist nicht erforderlich.
  3. Verbinden Sie die Antwort von modbus-read oder modbus-flex-getter fĂŒr Modbus → KNX mit dem Bridge-Eingang.
  4. Importieren Sie examples/IoT Bridge - Modbus Flex Adapter.json als manuellen Starter-Flow ohne Polling.

Tipps

  • Lassen Sie Target nur bei MQTT-/REST-Zuordnungen leer, die outputtopic ĂŒbernehmen sollen; Modbus Flex benötigt eine Adresse.
  • emitOnChangeOnly reduziert Sensordatenrauschen; deaktivieren Sie es bei Bedarf.
  • Ausgang 2 bestĂ€tigt den tatsĂ€chlich an KNX gesendeten Wert; er ist keine physische Modbus-Lese-/SchreibbestĂ€tigung.
  • Eine Handbuchreferenz wie 40010 entspricht hĂ€ufig der Adresse 9; prĂŒfen Sie immer die GerĂ€tedokumentation.

Viel Erfolg beim Bridging!