node-red-contrib-knx-ultimate
Version:
Control your KNX and KNX Secure intallation via Node-Red! A bunch of KNX nodes, with integrated Philips HUE control, ETS group address importer, KNX AI for diagnosticsand KNX routing between interfaces. Easy to use and highly configurable.
174 lines (140 loc) • 7.57 kB
HTML
<script type="text/markdown" data-help-name="knxUltimateIoTBridge">
# MQTT Home Assistant - IoT
Erstellen Sie bidirektionale Brücken zwischen KNX-Gruppenadressen und IoT-Kanälen (MQTT-Themen, REST-Endpunkte, Modbus-Register). Jede Zuordnung kann Werte skalieren, Payloads formatieren und Metadaten für nachgelagerte Nodes bereitstellen.
> **Zwei Modi.** Verwenden Sie den **Modus**-Schalter oben im Node:
> - **IoT-Bridge** (Standard) — das unten beschriebene klassische Verhalten (Zuordnungsliste, MQTT/REST/Modbus-Ausgabemeldungen).
> - **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 Entitäten automatisch erscheinen.
## Modus MQTT / Home Assistant
Eine native MQTT-Bridge mit Home-Assistant-Discovery. Benötigt einen MQTT-Broker, der sowohl von Node-RED als auch von Home Assistant erreichbar ist, mit aktivierter MQTT-Integration in HA. Alle Entitäten erscheinen unter einem einzigen Gerät mit dem Namen dieses Nodes.
- **Broker-URL / Benutzername / Passwort** — Verbindung zu Ihrem MQTT-Broker.
- **Basis-Topic / Discovery-Präfix** — Root-Topic für Status-/Befehls-Topics und das HA-Discovery-Präfix (Standard `homeassistant`).
- **Bereitzustellende Gruppenadressen** — jede im KNX-Gateway importierte Adresse (ETS-Liste) wird mit einem Kontrollkästchen angezeigt. Angehakte Adressen werden als Home-Assistant-Entitäten veröffentlicht, automatisch nach dem DPT typisiert (switch, sensor, binary_sensor, number, text). Verwenden Sie das Filterfeld und die Schaltflächen *Alle auswählen* / *Keine auswählen*. Standardmäßig sind alle Adressen ausgewählt.
- **Rollläden & Thermostate** — fassen mehrere Adressen zu einer Entität zusammen:
- *Rollladen*: Auf/Ab-GA (1.008), optionale Stopp-GA (1.007), optionale Positions-GA Befehl/Status (5.001). *Position invertieren* bildet die KNX-Konvention (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.
KNX-Buswerte werden an MQTT veröffentlicht und beschreibbare Datenpunkte akzeptieren Befehle von Home Assistant. Die Datenpunkttypen stammen aus der importierten ETS-Liste, sofern vorhanden, andernfalls aus KNX-Standardwerten (1.008 Auf/Ab, 1.007 Stopp, 5.001 Position, 9.001 Temperatur, 1.001 Ein/Aus); für zuverlässige Statuswerte sollten die von Rollläden/Thermostaten verwendeten Adressen im ETS-Import enthalten sein.
---
Der Rest dieser Hilfe beschreibt den klassischen **IoT-Bridge**-Modus.
## Eingänge
|Eigenschaft|Beschreibung|
|--|--|
| Flow-Eingang | Wenn aktiviert, werden Nachrichten, deren `topic` oder `msg.bridge` zu einer Zuordnung passen, in KNX-Payloads umgewandelt und auf den Bus geschrieben. |
| KNX-Telegramme | Eingehende Telegramme werden mit der konfigurierten GA-Liste abgeglichen und als Bridge-Ereignisse weitergeleitet. Leseanforderungen werden ignoriert, solange kein Wert geliefert wird. |
## Ausgänge
|Ausgang|Beschreibung|
|--|--|
| 1 (KNX → IoT) | Gibt den transformierten Wert inkl. `msg.bridge`-Metadaten (Kanaltyp, Ziel, Skalierung) und `msg.knx`-Details (GA, DPT, Quelle, Ereignis) aus. |
| 2 (IoT → KNX ack) | Bestätigt Flow-Schreibvorgänge mit der aufgelösten GA und dem auf KNX angewendeten Payload. |
## Zuordnungsfelder
- **Richtung** — wählen Sie KNX→IoT, IoT→KNX oder bidirektional.
- **Kanaltyp** — MQTT verwendet das Target als Topic, REST als Basis-URL, Modbus als Registerkennung.
- **Skalierung & Offset** — werden für KNX→IoT angewandt; IoT→KNX nutzt die inverse Transformation.
- **Template** — optionale Zeichenkette mit Platzhaltern `{{value}}`, `{{ga}}`, `{{label}}`, `{{target}}`, `{{type}}`, `{{isoTimestamp}}`.
- **Timeout / Wiederholungen** — Informationsfelder im Output zur Steuerung von Retries und Zeitfenstern in nachfolgenden Nodes.
## Nutzungstipps
- Ketten Sie Transport-Nodes hinter Ausgang 1 ein (z. B. `mqtt out`, `http request` oder die `modbus-flex-write`-Nodes aus `node-red-contrib-modbus`).
- Verwenden Sie einen `switch`-Node auf `msg.bridge.type`, um nach Kanaltyp zu verzweigen, oder auf `msg.bridge.id` für mappungsspezifische Logik.
- Aktivieren Sie *KNX-Werte beim Deploy lesen*, um Dashboards nach einem Redeploy vorzufüllen.
## Transportbeispiele
### KNX → MQTT Veröffentlichung
1. Konfigurieren Sie eine Zuordnung mit `Richtung = Bidirectional`, `Typ = MQTT`, `Target = knx/status/licht1`.
2. Verbinden Sie Ausgang 1 mit einem `mqtt out`-Node, der auf Ihren Broker zeigt.
3. Bei jedem GA-Wechsel sendet der Bridge:
```
{
"topic": "knx/status/licht1",
"payload": true,
"bridge": { "type": "mqtt", "id": "..." },
"knx": { "ga": "1/1/10", "event": "GroupValue_Write" }
}
```
### MQTT-Befehl → KNX-Schreibvorgang
1. Setzen Sie `Richtung = Bidirectional`, `Typ = MQTT`, `Target = knx/cmd/licht1`.
2. Verbinden Sie einen `mqtt in`-Node mit demselben Topic mit dem Bridge-Eingang.
3. Senden Sie `false` an `knx/cmd/licht1`; der Bridge schreibt `0` auf die konfigurierte GA und erzeugt eine Rückmeldung an Ausgang 2.
### REST-Webhook-Snapshot
1. Konfigurieren Sie `Richtung = KNX → IoT`, `Typ = REST`, `Target = https://example/api/knx/licht1` sowie `Template = {"value":{{value}},"ga":"{{ga}}"}`.
2. Leiten Sie Ausgang 1 in einen `http request`-Node (die Methode stammt aus `bridge.method`).
3. Antworten können an Dashboards oder Logs weitergegeben werden.
### Modbus-Register-Sync
- Kombinieren Sie den Bridge mit `modbus-flex-write`-Nodes aus `node-red-contrib-modbus`. Ausgang 1 enthält die Modbus-Adresse in `msg.address` und den Wert in `msg.payload`.
## Beispiel-Flow
Importieren Sie diesen Minimal-Flow und passen Sie GA/Topics an:
```json
[
{
"id": "bridge1",
"type": "knxUltimateIoTBridge",
"z": "flow1",
"server": "gateway1",
"name": "Licht-Bridge",
"outputtopic": "",
"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": [["mqttOut1"],["debugAck"]]
},
{
"id": "mqttOut1",
"type": "mqtt out",
"z": "flow1",
"name": "MQTT Status",
"topic": "",
"qos": "0",
"retain": "false",
"broker": "mqttBroker",
"x": 530,
"y": 120,
"wires": []
},
{
"id": "mqttIn1",
"type": "mqtt in",
"z": "flow1",
"name": "MQTT Befehl",
"topic": "knx/light/living/set",
"qos": "1",
"datatype": "auto",
"broker": "mqttBroker",
"x": 120,
"y": 180,
"wires": [["bridge1"]]
},
{
"id": "debugAck",
"type": "debug",
"z": "flow1",
"name": "KNX Ack",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"x": 540,
"y": 180,
"wires": []
}
]
```
Konfigurieren Sie vor dem Deploy den KNX-Gateway, den MQTT-Broker und ggf. Modbus-Verbindungen in Ihrem Flow.
</script>