UNPKG

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.75 kB
<script type="text/markdown" data-help-name="knxUltimateIoTBridge"> # KNX ↔ IoT Bridge 在 KNX 组地址与 IoT 通道(MQTT 主题、REST 接口、Modbus 寄存器)之间创建双向桥接。每条映射都可以对数值进行缩放、格式化载荷,并向后续节点暴露元数据。 ## 输入 |属性|说明| |--|--| | Flow 输入 | 启用后,`topic` 或 `msg.bridge` 匹配映射的消息会被转换为 KNX 载荷并写入总线。| | KNX 电报 | 接收到的电报会与配置的 GA 列表匹配,并作为桥接事件输出。读取请求在返回值之前会被忽略。| ## 输出 |输出|说明| |--|--| | 1(KNX → IoT) | 输出转换后的数值,以及 `msg.bridge` 元数据(通道类型、目标、缩放)和 `msg.knx` 细节(GA、DPT、来源、事件)。| | 2(IoT → KNX ack) | 当 Flow 发起写入时,确认已写入的 GA 和实际写入的载荷。| ## 映射字段 - **方向** — 选择 KNX→IoT、IoT→KNX 或双向。 - **通道类型** — MQTT 将目标视为主题;REST 将其视为基础 URL;Modbus 视为寄存器标识。 - **缩放 & 偏移** — 应用于 KNX→IoT;在 IoT→KNX 时使用逆向变换。 - **模板** — 可选字符串,可替换 `{{value}}`、`{{ga}}`、`{{label}}`、`{{target}}`、`{{type}}`、`{{isoTimestamp}}`。 - **超时 / 重试** — 信息字段,用于告知下游节点应如何处理重试和时间窗口。 ## 使用提示 - 在输出&nbsp;1 后串联传输节点(例如核心 `mqtt out`、`http request`,或社区包 `node-red-contrib-modbus` 的 `modbus-flex-write` 节点)。 - 使用 `switch` 节点按 `msg.bridge.type` 区分通道,或按 `msg.bridge.id` 实现每条映射的逻辑。 - 启用 *部署时读取 KNX 数值* 以在重新部署后填充仪表盘。 ## 传输示例 ### KNX → MQTT 发布 1. 配置映射:`方向 = 双向`、`类型 = MQTT`、`目标 = knx/status/light1`。 2. 将输出&nbsp;1 连接到配置好的 `mqtt out` 节点。 3. 每当 GA 变化时,桥接节点会输出: ``` { "topic": "knx/status/light1", "payload": true, "bridge": { "type": "mqtt", "id": "..." }, "knx": { "ga": "1/1/10", "event": "GroupValue_Write" } } ``` ### MQTT 指令 → KNX 写入 1. 设定 `方向 = 双向`、`类型 = MQTT`、`目标 = knx/cmd/light1`。 2. 将同一主题的 `mqtt in` 节点连接到桥接输入。 3. 向 `knx/cmd/light1` 发布 `false`;桥接节点会向配置的 GA 写入 `0` 并在第 2 引脚输出确认。 ### REST Webhook 快照 1. 配置 `方向 = KNX → IoT`、`类型 = REST`、`目标 = https://example/api/knx/light1`,以及 `模板 = {"value":{{value}},"ga":"{{ga}}"}`。 2. 将输出&nbsp;1 接入 `http request` 节点(请求方法来自 `bridge.method`)。 3. 可以将响应转发给仪表盘或日志。 ### Modbus 寄存器同步 - 将桥接节点与 `node-red-contrib-modbus` 的 `modbus-flex-write` 节点配合使用。输出&nbsp;1 会在 `msg.address` 中携带 Modbus 地址,在 `msg.payload` 中携带数值。 ## 示例 Flow 导入以下最小 Flow 并按需调整 GA/Topic: ```json [ { "id": "bridge1", "type": "knxUltimateIoTBridge", "z": "flow1", "server": "gateway1", "name": "灯光桥接", "outputtopic": "", "emitOnChangeOnly": true, "readOnDeploy": true, "acceptFlowInput": true, "mappings": [ { "id": "map-light", "enabled": true, "label": "客厅灯", "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 状态", "topic": "", "qos": "0", "retain": "false", "broker": "mqttBroker", "x": 530, "y": 120, "wires": [] }, { "id": "mqttIn1", "type": "mqtt in", "z": "flow1", "name": "MQTT 指令", "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 回执", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "true", "x": 540, "y": 180, "wires": [] } ] ``` 部署前请先在 Flow 中配置好 KNX 网关、MQTT Broker 以及需要的 Modbus 连接。 </script>