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, and KNX routing between interfaces. Easy to use and highly configurable.
153 lines (126 loc) • 4.8 kB
HTML
<script type="text/markdown" data-help-name="knxUltimateIoTBridge">
# KNX ↔ IoT Bridge
Crea collegamenti bidirezionali tra indirizzi di gruppo KNX e canali IoT (topic MQTT, endpoint REST, registri Modbus). Ogni mappatura può scalare i valori, formattare il payload ed esporre metadati per i nodi successivi.
## Input
|Proprietà|Descrizione|
|--|--|
| Input dal flow | Se abilitato, i messaggi il cui `topic` o `msg.bridge` corrisponde a una mappatura vengono convertiti in payload KNX e inviati sul bus. |
| Telegrammi KNX | I telegrammi in ingresso vengono confrontati con gli indirizzi configurati ed emessi come eventi bridge. Le richieste di lettura vengono ignorate finché non arriva un valore. |
## Output
|Uscita|Descrizione|
|--|--|
| 1 (KNX → IoT) | Emette il valore trasformato con i metadati `msg.bridge` (tipo canale, destinazione, scaling) e `msg.knx` (GA, DPT, sorgente, evento). |
| 2 (IoT → KNX ack) | Conferma gli invii provenienti dal flow indicando GA risolto e payload scritto sul KNX. |
## Campi della mappatura
- **Direzione** — scegli KNX→IoT, IoT→KNX oppure bidirezionale.
- **Tipo canale** — per MQTT il target è il topic; per REST è l'URL base; per Modbus è il registro/indirizzo.
- **Scala & Offset** — applicati su KNX→IoT; IoT→KNX usa la trasformazione inversa.
- **Template** — stringa opzionale con segnaposto `{{value}}`, `{{ga}}`, `{{label}}`, `{{target}}`, `{{type}}`, `{{isoTimestamp}}`.
- **Timeout / Tentativi** — campi informativi esposti nel messaggio in uscita per i nodi successivi.
## Suggerimenti
- Collega il trasporto dopo l'uscita 1 (ad esempio `mqtt out` core, `http request` core o i writer di `node-red-contrib-modbus`).
- Usa uno `switch` su `msg.bridge.type` o su `msg.bridge.id` per logiche dedicate.
- Attiva *Lettura valori KNX al deploy* per popolare dashboard dopo un redeploy.
## Esempi di integrazione
### Pubblicazione KNX → MQTT
1. Configura una mappatura con `Direzione = Bidirezionale`, `Tipo = MQTT`, `Target = knx/status/lampada1`.
2. Collega l'uscita 1 a un nodo `mqtt out` configurato verso il broker.
3. Quando la GA cambia il bridge emette:
```
{
"topic": "knx/status/lampada1",
"payload": true,
"bridge": { "type": "mqtt", "id": "..." },
"knx": { "ga": "1/1/10", "event": "GroupValue_Write" }
}
```
### Comando MQTT → KNX
1. Imposta `Direzione = Bidirezionale`, `Tipo = MQTT`, `Target = knx/cmd/lampada1`.
2. Collega un nodo `mqtt in` sullo stesso topic all'ingresso del bridge.
3. Pubblica `false` su `knx/cmd/lampada1`; il bridge scrive `0` sulla GA e genera un ack sul pin 2.
### Snapshot via REST
1. Imposta `Direzione = KNX → IoT`, `Tipo = REST`, `Target = https://example/api/knx/lampada1` e `Template = {"value":{{value}},"ga":"{{ga}}"}`.
2. Invia l'uscita 1 a un nodo `http request` (metodo preso da `bridge.method`).
3. Puoi usare la risposta HTTP per dashboard o log.
### Sincronizzazione Modbus
- Abbina il bridge ai nodi `node-red-contrib-modbus` (`modbus-flex-write`). L'uscita 1 fornisce `msg.address` e `msg.payload` già pronti.
## Flow di esempio
Importa il seguente flow e adatta GA/topic:
```json
[
{
"id": "bridge1",
"type": "knxUltimateIoTBridge",
"z": "flow1",
"server": "gateway1",
"name": "Bridge luci",
"outputtopic": "",
"emitOnChangeOnly": true,
"readOnDeploy": true,
"acceptFlowInput": true,
"mappings": [
{
"id": "map-luce",
"enabled": true,
"label": "Luce soggiorno",
"ga": "1/1/10",
"dpt": "1.001",
"direction": "bidirectional",
"iotType": "mqtt",
"target": "knx/light/soggiorno",
"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 stato",
"topic": "",
"qos": "0",
"retain": "false",
"broker": "mqttBroker",
"x": 540,
"y": 120,
"wires": []
},
{
"id": "mqttIn1",
"type": "mqtt in",
"z": "flow1",
"name": "MQTT comando",
"topic": "knx/light/soggiorno/set",
"qos": "1",
"datatype": "auto",
"broker": "mqttBroker",
"x": 120,
"y": 180,
"wires": [["bridge1"]]
},
{
"id": "debugAck",
"type": "debug",
"z": "flow1",
"name": "Ack KNX",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"x": 550,
"y": 180,
"wires": []
}
]
```
Ricorda di configurare gateway KNX, broker MQTT e connessioni Modbus prima del deploy.
</script>