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, KNX AI for diagnosticsand KNX routing between interfaces. Easy to use and highly configurable.

174 lines (140 loc) 6.76 kB
<script type="text/markdown" data-help-name="knxUltimateIoTBridge"> # MQTT Home Assistant - IoT 在 KNX 组地址与 IoT 通道(MQTT 主题、REST 接口、Modbus 寄存器)之间创建双向桥接。每条映射都可以对数值进行缩放、格式化载荷,并向后续节点暴露元数据。 > **两种模式。** 使用节点顶部的**模式**选择器: > - **IoT 桥接**(默认)— 下文描述的经典行为(映射列表,MQTT/REST/Modbus 输出消息)。 > - **MQTT / Home Assistant(原生)** — 节点直接连接 MQTT broker,在 KNX ↔ MQTT 之间双向桥接,并发布 Home Assistant MQTT 自动发现,使实体自动出现。 ## MQTT / Home Assistant 模式 带 Home Assistant 自动发现的原生 MQTT 桥接。需要一个 Node-RED 和 Home Assistant 都能访问的 MQTT broker,并在 HA 中启用 MQTT 集成。所有实体都出现在以该节点命名的同一个设备下。 - **Broker URL / 用户名 / 密码** — 连接到你的 MQTT broker。 - **基础主题 / 自动发现前缀** — 状态/命令主题的根主题以及 HA 自动发现前缀(默认 `homeassistant`)。 - **要暴露的组地址** — KNX 网关中导入的每个地址(ETS 列表)都带有一个复选框。勾选的地址会作为 Home Assistant 实体发布,并根据 DPT 自动分类(switch、sensor、binary_sensor、number、text)。可使用筛选框和*全选* / *全不选*按钮。默认全部选中。 - **卷帘与温控器** — 将多个地址组合成一个实体: - *卷帘*:上/下 GA (1.008)、可选停止 GA (1.007)、可选位置 设置/状态 GA (5.001)。*反转位置* 将 KNX 约定(0% = 打开)映射到 Home Assistant(100% = 打开)。 - *温控器*:当前温度 GA (9.001)、设定值 设置/状态 GA (9.001)、可选开/关 GA (1.001 → off/heat),以及最低/最高温度和步长。 KNX 总线的值会发布到 MQTT,可写的数据点接受来自 Home Assistant 的命令。数据点类型在可用时取自导入的 ETS 列表,否则取自 KNX 默认值(1.008 上/下、1.007 停止、5.001 位置、9.001 温度、1.001 开/关);为获得可靠的状态反馈,卷帘/温控器使用的地址应包含在 ETS 导入中。 --- 本帮助的其余部分描述经典的 **IoT 桥接**模式。 ## 输入 |属性|说明| |--|--| | 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>