node-red-contrib-symi-mesh 1.7.0 → 1.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -382,6 +382,7 @@ npm install node-red-contrib-home-assistant-websocket
382
382
  - 支持与HA中任意实体同步
383
383
  - 配置灵活,易于调整
384
384
 
385
+
385
386
  ## 协议说明
386
387
 
387
388
  ### 核心协议格式
@@ -746,6 +747,14 @@ Mesh 四键开关 第2路 ↔ RS485 六键开关 第5路 地址:2 ✓ 支持
746
747
 
747
748
  当内置协议无法满足需求时,可使用"自定义协议"模式,手动录入RS485十六进制码进行双向匹配。
748
749
 
750
+ #### 反馈选项
751
+
752
+ 每个映射可设置"反馈"复选框:
753
+ - **勾选反馈**(默认):RS485收码触发Mesh动作后,Mesh状态变化会再发送发码到RS485总线
754
+ - **不勾选反馈**:RS485收码触发Mesh动作后,不再发送反馈码,避免总线重复数据
755
+
756
+ 适用场景:当第三方设备已经知道自己的状态,不需要收到确认反馈时,取消勾选可减少总线流量。
757
+
749
758
  #### 自定义开关(4组码)
750
759
 
751
760
  - **发开码**:Mesh开关打开时,发送此码到RS485总线
@@ -812,6 +821,198 @@ Mesh 四键开关 第2路 ↔ RS485 六键开关 第5路 地址:2 ✓ 支持
812
821
  4. **防循环保护**:内置同步锁机制,避免状态死循环
813
822
  5. **485转TCP网关**:Node-RED只能收到自己发送请求后的设备回应,其他TCP客户端的数据不会转发(网关机制)
814
823
 
824
+ ## RS485协议同步
825
+
826
+ 本节点支持两种不同RS485协议之间的双向数据同步,适用于对接中弘VRF网关与SYMI空调面板等场景。
827
+
828
+ ### 功能特点
829
+
830
+ - **协议互转**:中弘VRF ↔ SYMI空调面板 ↔ 自定义码
831
+ - **双向同步**:A侧状态变化自动同步到B侧,反之亦然
832
+ - **自动轮询**:内置定时轮询中弘VRF设备状态(默认1秒)
833
+ - **多组映射**:单节点支持多组设备映射
834
+ - **防死循环**:2秒防抖机制,避免状态回环
835
+ - **持久化配置**:重启后保持所有映射设置
836
+
837
+ ### 支持的协议
838
+
839
+ | 协议类型 | 说明 | 帧格式 |
840
+ |---------|------|--------|
841
+ | 中弘VRF | 中弘品牌VRF空调网关(需轮询) | `[从机] [功能码] [控制值] [数量] [外机] [内机] [校验和]` |
842
+ | SYMI空调面板 | SYMI Mesh空调面板RS485接口(主动上报) | `[地址] [0x60] [开关] [温度] [模式] [风速] [...] [校验和]` |
843
+ | 自定义码 | 任意十六进制码匹配 | 用户自定义 |
844
+
845
+ ### 中弘VRF协议详解(需轮询)
846
+
847
+ | 功能码 | 用途 | 控制值 |
848
+ |--------|------|--------|
849
+ | 0x31 | 开关控制 | 0x00=关, 0x01=开 |
850
+ | 0x32 | 温度控制 | 16-30(直接温度值) |
851
+ | 0x33 | 模式控制 | 0x01=制冷, 0x02=除湿, 0x04=送风, 0x08=制热 |
852
+ | 0x34 | 风速控制 | 0x01=高, 0x02=中, 0x04=低 |
853
+ | 0x50 | 状态查询 | - |
854
+
855
+ > **注意**:中弘VRF是被动响应式协议,需要主动轮询才能获取设备状态。启用轮询后会定时发送0x50查询命令。
856
+
857
+ ### SYMI空调面板协议详解(主动上报)
858
+
859
+ SYMI空调面板会主动上报状态变化,无需轮询。
860
+
861
+ **帧格式**:`[地址] [0x60] [开关] [温度] [模式] [风速] [x] [x] [x] [校验和]`
862
+
863
+ | 字节 | 说明 | 值域 |
864
+ |------|------|------|
865
+ | 0 | 设备地址 | 1-255 |
866
+ | 1 | 功能码 | 0x60 |
867
+ | 2 | 开关状态 | 0x00=关, 0x01=开 |
868
+ | 3 | 目标温度 | 16-30 (0x10-0x1E) |
869
+ | 4 | 运行模式 | 0x01=制冷, 0x02=除湿, 0x04=送风, 0x08=制热 |
870
+ | 5 | 风速 | 0x01=低, 0x02=中, 0x04=高 |
871
+ | 6-8 | 保留 | - |
872
+ | 9 | 校验和 | 前9字节累加和的低8位 |
873
+
874
+ **示例帧**:`01 60 01 18 08 02 01 01 00 86`
875
+ - 地址1, 开机, 24°C, 制热, 中风
876
+
877
+ **帧示例**(开机):
878
+ ```
879
+ 01 31 01 01 01 01 36
880
+ │ │ │ │ │ │ └─ 校验和
881
+ │ │ │ │ │ └─ 内机地址
882
+ │ │ │ │ └─ 外机地址
883
+ │ │ │ └─ 空调数量
884
+ │ │ └─ 控制值(开)
885
+ │ └─ 功能码(开关)
886
+ └─ 从机地址
887
+ ```
888
+
889
+ ### 配置步骤
890
+
891
+ #### 1. 添加RS485同步节点
892
+
893
+ 从"Symi Mesh"分类中拖入"RS485同步"节点
894
+
895
+ #### 2. 配置RS485连接
896
+
897
+ **RS485连接A**:选择第一种协议的RS485配置(如中弘VRF网关)
898
+ **RS485连接B**:选择第二种协议的RS485配置(如SYMI空调面板)
899
+
900
+ > **注意**:A和B必须是两个不同的RS485配置节点
901
+
902
+ #### 3. 添加协议映射
903
+
904
+ 点击"添加映射"按钮,配置每组对应关系:
905
+
906
+ | 配置项 | 说明 |
907
+ |--------|------|
908
+ | A侧协议 | 选择A侧使用的协议(中弘VRF/SYMI空调面板/自定义码) |
909
+ | B侧协议 | 选择B侧使用的协议 |
910
+ | 详细参数 | 点击齿轮按钮展开,配置地址等参数 |
911
+
912
+ #### 4. 轮询设置
913
+
914
+ | 参数 | 说明 | 默认值 |
915
+ |------|------|--------|
916
+ | 启用轮询 | 开启后自动轮询中弘VRF设备状态 | 启用 |
917
+ | 轮询间隔 | 轮询周期(毫秒) | 1000ms |
918
+
919
+ > **说明**:中弘VRF是被动响应式协议,需要主动查询才能获取设备状态。启用轮询后会逐个查询所有配置的中弘VRF设备。
920
+
921
+ #### 5. 中弘VRF参数配置
922
+
923
+ | 参数 | 说明 | 范围 |
924
+ |------|------|------|
925
+ | 外机地址 | VRF外机地址 | 0-255 |
926
+ | 内机地址 | VRF内机地址 | 0-255 |
927
+
928
+ #### 6. SYMI空调面板参数配置
929
+
930
+ | 参数 | 说明 | 范围 |
931
+ |------|------|------|
932
+ | 设备地址 | SYMI面板Modbus地址 | 1-255 |
933
+
934
+ #### 7. 自定义码参数配置
935
+
936
+ | 参数 | 说明 |
937
+ |------|------|
938
+ | 开机发码 | 检测到开机时发送的十六进制码 |
939
+ | 关机发码 | 检测到关机时发送的十六进制码 |
940
+ | 开机收码 | 收到此码时认为设备开机 |
941
+ | 关机收码 | 收到此码时认为设备关机 |
942
+
943
+ #### 8. 部署
944
+
945
+ 点击"部署"按钮,节点自动开始双向同步
946
+
947
+ ### 配置示例
948
+
949
+ **中弘VRF ↔ SYMI空调面板**:
950
+ ```
951
+ RS485连接A: 192.168.2.100:502 (中弘VRF网关)
952
+ RS485连接B: 192.168.2.110:1031 (SYMI面板总线)
953
+
954
+ 映射1:
955
+ A侧: 中弘VRF (从机1, 外机1, 内机1)
956
+ B侧: SYMI空调面板 (地址1)
957
+
958
+ 映射2:
959
+ A侧: 中弘VRF (从机1, 外机1, 内机2)
960
+ B侧: SYMI空调面板 (地址2)
961
+ ```
962
+
963
+ ### 工作原理
964
+
965
+ #### A→B同步流程
966
+
967
+ 1. A侧RS485收到状态帧
968
+ 2. 解析协议,提取状态(开关/温度/模式/风速)
969
+ 3. 根据B侧协议生成控制命令
970
+ 4. 发送到B侧RS485
971
+
972
+ #### B→A同步流程
973
+
974
+ 1. B侧RS485收到状态帧
975
+ 2. 解析协议,提取状态
976
+ 3. 根据A侧协议生成控制命令
977
+ 4. 发送到A侧RS485
978
+
979
+ #### 防死循环机制
980
+
981
+ - 同步后2秒内忽略反向状态变化
982
+ - 每组映射独立防抖,互不影响
983
+ - 状态缓存避免重复同步
984
+
985
+ ### 手动触发查询
986
+
987
+ 可以使用inject节点发送查询命令:
988
+
989
+ ```json
990
+ {
991
+ "payload": {
992
+ "action": "query"
993
+ }
994
+ }
995
+ ```
996
+
997
+ 这将向A侧所有中弘VRF设备发送状态查询命令。
998
+
999
+ ### 故障排查
1000
+
1001
+ **A→B不工作**:
1002
+ 1. 检查日志是否有`[A侧收到]`输出
1003
+ 2. 确认A侧协议参数(从机/外机/内机地址)正确
1004
+ 3. 检查RS485连接A是否已连接
1005
+
1006
+ **B→A不工作**:
1007
+ 1. 检查日志是否有`[B侧收到]`输出
1008
+ 2. 确认B侧协议参数正确
1009
+ 3. 检查RS485连接B是否已连接
1010
+
1011
+ **状态不同步**:
1012
+ 1. 检查节点状态是否显示"同步中"
1013
+ 2. 确认两个RS485连接都已连接(绿色状态)
1014
+ 3. 查看日志中的同步消息
1015
+
815
1016
  ## 云端数据同步
816
1017
 
817
1018
  本节点支持从酒店云云平台自动获取设备名称和场景信息,实现本地化配置的自动同步。
@@ -1091,6 +1292,7 @@ A: 每个房间部署一个云端同步节点,配置对应的酒店ID和房间
1091
1292
  | **Symi KNX Bridge** | KNX系统双向同步 | [KNX双向同步](#knx双向同步) |
1092
1293
  | **Symi KNX-HA Bridge** | KNX与HA实体双向同步 | [KNX-HA双向同步](#knx-ha双向同步) |
1093
1294
  | **RS485 Debug** | RS485总线数据抓包调试 | [RS485调试节点](#rs485调试节点) |
1295
+ | **Symi RS485 Sync** | 两种RS485协议双向同步 | [RS485协议同步](#rs485协议同步) |
1094
1296
 
1095
1297
  ## 开发者信息
1096
1298
 
@@ -1112,6 +1314,7 @@ node-red-contrib-symi-mesh/
1112
1314
  │ ├── symi-485-bridge.js/html # RS485桥接节点
1113
1315
  │ ├── symi-485-config.js/html # RS485配置节点
1114
1316
  │ ├── symi-knx-bridge.js/html # KNX桥接节点
1317
+ │ ├── symi-rs485-sync.js/html # RS485协议同步节点
1115
1318
  │ └── rs485-debug.js/html # RS485调试节点
1116
1319
  ├── examples/
1117
1320
  │ ├── basic-example.json # 基础示例
@@ -1254,6 +1457,71 @@ node-red-contrib-symi-mesh/
1254
1457
 
1255
1458
  ## 更新日志
1256
1459
 
1460
+ ### v1.7.2 (2025-12-22)
1461
+ - **RS485双向同步节点**:新增`symi-rs485-sync`独立节点实现两种不同RS485协议之间的双向同步
1462
+ - 支持中弘VRF网关协议(功能码0x31-0x34控制,0x50查询)
1463
+ - 支持SYMI空调面板Modbus协议
1464
+ - 支持自定义码协议
1465
+ - 双向状态同步,2秒防抖防止死循环
1466
+ - 多组映射配置,持久化保存
1467
+ - **反馈选项**:新增"反馈"复选框,控制RS485收码后是否发送反馈码
1468
+ - **Mesh→RS485方向**:
1469
+ - 修复开关控制:只同步配置的通道,避免其他通道变化误触发
1470
+ - 修复空调风速:fanMode变化正确发送fanSendHigh/Mid/Low/Auto码
1471
+ - 修复空调中速(fanMode=2)事件触发
1472
+ - 修复空调开关:去重处理,避免switch和acSwitch重复发送
1473
+ - 添加自动风速(fanSendAuto/fanRecvAuto)配置支持
1474
+ - **RS485→Mesh方向**:
1475
+ - 修复收码匹配触发Mesh实体状态变化
1476
+ - 自定义开关recvOn/recvOff正确触发开关动作
1477
+ - 自定义空调acRecvOn/acRecvOff/fanRecvHigh等正确触发空调控制
1478
+ - **事件系统优化**:
1479
+ - DeviceManager事件添加完整字段(isUserControl、isSceneExecution等)
1480
+ - 用户控制事件允许绕过首次状态缓存
1481
+ - 修复单路温控器开关事件丢失问题
1482
+ - fanMode事件同时发送acFanSpeed别名字段
1483
+ - **防死循环优化**:
1484
+ - 使用映射特定时间戳,避免不同设备同步互相影响
1485
+ - Mesh→RS485和RS485→Mesh双向都记录同步时间
1486
+ - 500ms冷却时间防止状态回环
1487
+ - 空调命令去重(同类命令只发送一次)
1488
+ - **生产稳定性**:
1489
+ - 初始化延迟从10秒缩短为5秒
1490
+ - 详细日志改为debug级别,减少生产环境日志量
1491
+ - 保留关键同步日志便于问题排查
1492
+ - **UI优化**:
1493
+ - 自定义码折叠按钮移到同一行,减少占用空间
1494
+ - 修复MAC地址大小写匹配问题
1495
+ - 添加自动风速配置框(发自动/收自动)
1496
+ - **RS485-to-RS485空调桥接**:SYMI空调面板与中弘VRF系统双向同步
1497
+ - 支持SYMI 485空调面板协议(7E...7D帧格式,CRC8校验)
1498
+ - 支持中弘VRF空调协议(求和校验,功能码0x31-0x34控制,0x50查询)
1499
+ - 双向状态同步:SYMI面板操作→中弘VRF执行,中弘状态→SYMI面板显示
1500
+
1501
+ ### v1.7.1 (2025-12-21)
1502
+ - **自定义协议全面修复**:完善自定义开关/窗帘/空调双向同步
1503
+ - **空调风速控制**:修复风速变化事件触发机制
1504
+ - 添加fanMode字段支持(mesh空调实际使用的字段)
1505
+ - 修复DeviceInfo事件触发,正确发送device-state-changed事件
1506
+ - 支持风速值1-4(1=高, 2=中, 3=低, 4=自动)
1507
+ - 自动识别温控器0x02消息中的风速控制
1508
+ - **空调开关控制**:修复开关状态变化事件触发
1509
+ - 温控器0x02开关消息正确触发device-state-changed事件
1510
+ - 自定义空调开关码(acSendOn/acSendOff)正确发送到RS485总线
1511
+ - **RS485收码匹配**:修复hexStr格式处理
1512
+ - hexStr完全去掉空格,确保标准格式(如030610330001BD27)
1513
+ - 用户录入支持带空格格式(如01 06 10 34 00 01 0D 04)
1514
+ - 自动匹配并触发mesh实体动作
1515
+ - **事件系统优化**:
1516
+ - DeviceInfo添加manager引用,正确触发事件
1517
+ - 修复事件名称不匹配问题(stateChange -> device-state-changed)
1518
+ - 确保所有自定义码双向同步正常
1519
+ - **队列处理**:
1520
+ - 命令队列顺序处理,防止并发冲突
1521
+ - 500ms防死循环机制
1522
+ - 队列限制100条,防止内存溢出
1523
+ - **调试日志**:添加详细调试日志,方便排查问题
1524
+
1257
1525
  ### v1.7.0 (2025-12-21)
1258
1526
  - **自定义协议增强**:RS485桥接节点自定义协议功能全面升级
1259
1527
  - 自定义开关:添加发开、发关、收开、收关4组码
@@ -1295,52 +1563,6 @@ node-red-contrib-symi-mesh/
1295
1563
  - **防死循环参数调整**:LOOP_PREVENTION_MS调整为800ms
1296
1564
  - **同时修复RS485桥接**:应用相同syncLock修复
1297
1565
 
1298
- ### v1.6.7 (2025-12-10)
1299
- - **KNX双向同步完善**:`symi-knx-bridge`节点全面升级
1300
- - **knxUltimate消息格式**:符合官方规范,使用`destination`+`payload`+`dpt`+`event`
1301
- - **Universal Mode支持**:输出节点需启用"Listen to all GA",动态设置组地址
1302
- - **消息事件**:添加`event: "GroupValue_Write"`,确保写入操作正确执行
1303
- - **payload类型修复**:DPT 1.001使用boolean类型(true/false),不是number
1304
- - **地址映射修复**:根据设备类型正确映射扩展地址到具体功能
1305
- - **KNX输入匹配增强**:支持所有配置地址的匹配,通过地址函数确定功能类型
1306
- - **DPT格式兼容**:支持"DPT1.001"和"1.001"两种格式
1307
- - **新增处理器**:色温(light_color_temp)、空调风速(climate_fan)
1308
- - **防死循环**:1秒防抖机制,智能防止状态回环
1309
- - **命令队列**:最大100条,100ms防抖,50ms间隔
1310
- - **内存安全**:节点关闭时清理所有缓存和事件监听器
1311
- - **KNX桥接节点功能**:
1312
- - KNX实体库:支持从模板导入KNX组地址
1313
- - 一行映射:紧凑表格显示,适合大量设备配置
1314
- - 多设备类型:开关、调光灯、窗帘、空调、新风、地暖
1315
- - 智能通道选择:根据Mesh设备实际路数显示可选通道
1316
-
1317
- ### v1.6.6 (2025-12-09)
1318
- - **三合一面板完整双向同步**:支持空调+新风+地暖独立RS485映射
1319
- - 三合一0x94协议完整解析:空调(开关/模式/风速/温度)、地暖(开关/温度)、新风(开关/风速)
1320
- - Mesh→RS485:三合一状态变化自动发送对应RS485帧
1321
- - RS485→Mesh:RS485帧自动同步到三合一面板对应功能
1322
- - 支持climateSwitch/climateMode/fanMode/floorHeatingSwitch/freshAirSwitch等字段
1323
- - **开关双向同步修复**:修复米家App全开/全关只触发部分按键的问题
1324
- - 命令队列防抖逻辑修复:只有完全相同映射才合并,不同映射独立处理
1325
- - 支持同一Mesh设备多通道分别绑定不同RS485设备
1326
- - **RS485多映射匹配**:修复同一从机地址多个映射时只匹配第一个的问题
1327
- - findAllRS485Mappings返回所有匹配的映射
1328
- - rs485Channel精确匹配:根据寄存器地址确定通道
1329
- - **网络异常处理增强**:彻底修复Node.js 18+ AggregateError导致崩溃的问题
1330
- - 全局uncaughtException/unhandledRejection处理器
1331
- - TCP连接过程同步错误捕获
1332
- - 只捕获网络相关错误,不影响其他异常
1333
- - **三合一面板自动识别**:设备列表API返回isThreeInOne标志
1334
- - **窗帘双协议兼容**:同时支持米家和小程序两种控制协议
1335
- - 米家协议: `subOpcode=0x06, status: 0=打开中, 1=关闭中, 2=停止`
1336
- - 小程序协议: `subOpcode=0x05, status: 1=打开, 2=关闭, 3=停止`
1337
- - **话语前湾协议完善**:
1338
- - 空调:客厅/主卧/次卧1/次卧2,寄存器0x0FA0-0x0FAF
1339
- - 地暖:客餐厅(60)/主卧(61)/次卧1(62)/次卧2(63),寄存器0x0039/0x0043
1340
- - 新风:从机60,开关0x0039(开=1),风速0x004B(高=2,低=0)
1341
- - **地址输入修复**:允许从机地址为0(话语前湾空调地址是0)
1342
- - **内存安全**:命令队列限制100条,节点关闭时清理所有缓存
1343
- - **文档更新**:添加三合一面板RS485配置说明和协议对照表
1344
1566
 
1345
1567
  ## 许可证
1346
1568
 
@@ -1353,8 +1575,8 @@ Copyright (c) 2025 SYMI 亖米
1353
1575
  ## 关于
1354
1576
 
1355
1577
  **作者**: SYMI 亖米
1356
- **版本**: 1.7.0
1578
+ **版本**: 1.7.2
1357
1579
  **协议**: 蓝牙MESH网关(初级版)串口协议V1.0
1358
- **最后更新**: 2025-12-21
1580
+ **最后更新**: 2025-12-23
1359
1581
  **仓库**: https://github.com/symi-daguo/node-red-contrib-symi-mesh
1360
1582
  **npm包**: https://www.npmjs.com/package/node-red-contrib-symi-mesh
@@ -2,62 +2,71 @@
2
2
  {
3
3
  "id": "knx_sync_flow",
4
4
  "type": "tab",
5
- "label": "Symi Mesh - KNX Sync",
5
+ "label": "KNX双向同步示例",
6
6
  "disabled": false,
7
- "info": "Mesh设备与KNX系统双向同步示例"
7
+ "info": "Mesh设备与KNX系统双向同步示例,包含KNX桥接和KNX-HA桥接两种用法"
8
8
  },
9
9
  {
10
- "id": "symi_gateway_knx",
11
- "type": "symi-gateway",
12
- "name": "Symi网关",
13
- "connectionType": "tcp",
14
- "host": "192.168.2.110",
15
- "port": "4196",
16
- "serialPort": "",
17
- "baudRate": "115200"
18
- },
19
- {
20
- "id": "knx_gateway_config",
21
- "type": "knxUltimate-config",
22
- "host": "192.168.1.50",
23
- "port": "3671",
24
- "physAddr": "15.15.22",
25
- "hostProtocol": "TunnelUDP",
26
- "loglevel": "error",
27
- "name": "KNX Gateway",
28
- "delaybetweentelegrams": 25,
29
- "autoReconnect": "yes"
10
+ "id": "comment_usage",
11
+ "type": "comment",
12
+ "z": "knx_sync_flow",
13
+ "name": "使用说明: 1.修改网关IP 2.配置KNX实体 3.添加映射 4.部署测试",
14
+ "info": "KNX桥接: Mesh设备 ↔ KNX组地址\nKNX-HA桥接: KNX组地址 ↔ HA实体\n\n配置步骤:\n1. 修改Symi网关IP为实际地址\n2. 修改KNX网关IP为实际地址\n3. 双击桥接节点配置映射\n4. 部署后测试双向同步",
15
+ "x": 280,
16
+ "y": 40,
17
+ "wires": []
30
18
  },
31
19
  {
32
20
  "id": "knx_input_node",
33
21
  "type": "knxUltimate",
34
22
  "z": "knx_sync_flow",
35
23
  "server": "knx_gateway_config",
36
- "topic": "",
24
+ "topic": "0/0/1",
25
+ "setTopicType": "str",
37
26
  "dpt": "1.001",
27
+ "initialread": 0,
28
+ "notifyreadrequest": false,
29
+ "notifyresponse": true,
30
+ "notifywrite": true,
31
+ "notifyreadrequestalsorespondtobus": false,
38
32
  "name": "KNX Input",
39
33
  "outputtype": "write",
40
34
  "outputRBE": "false",
41
35
  "inputRBE": "false",
42
- "notifyreadrequest": false,
43
- "notifyresponse": true,
44
- "notifywrite": true,
36
+ "formatmultiplyvalue": 1,
37
+ "formatnegativevalue": "leave",
38
+ "formatdecimalsvalue": 999,
39
+ "passthrough": "no",
45
40
  "listenallga": true,
41
+ "gaSecure": "false",
42
+ "buttonEnabled": false,
46
43
  "x": 150,
47
- "y": 100,
48
- "wires": [["knx_bridge_node"]]
44
+ "y": 120,
45
+ "wires": [["knx_bridge_node", "knx_ha_bridge_node"]]
49
46
  },
50
47
  {
51
48
  "id": "knx_bridge_node",
52
49
  "type": "symi-knx-bridge",
53
50
  "z": "knx_sync_flow",
54
- "name": "KNX Bridge",
51
+ "name": "KNX桥接",
55
52
  "gateway": "symi_gateway_knx",
56
- "mappings": "[]",
57
- "knxEntities": "[]",
58
- "x": 350,
59
- "y": 100,
60
- "wires": [["knx_output_node"], ["debug_node"]]
53
+ "mappings": "[{\"meshMac\":\"98:e0:c8:20:da:cc\",\"meshChannel\":1,\"knxEntityId\":\"k_demo_switch\"}]",
54
+ "knxEntities": "[{\"id\":\"k_demo_switch\",\"name\":\"示例开关\",\"type\":\"switch\",\"cmdAddr\":\"0/0/1\",\"statusAddr\":\"0/1/1\",\"ext1\":\"\",\"ext2\":\"\",\"ext3\":\"\",\"invert\":false}]",
55
+ "x": 380,
56
+ "y": 180,
57
+ "wires": [["knx_output_node"], []]
58
+ },
59
+ {
60
+ "id": "knx_ha_bridge_node",
61
+ "type": "symi-knx-ha-bridge",
62
+ "z": "knx_sync_flow",
63
+ "name": "KNX HA桥接",
64
+ "haServer": "ha_server_config",
65
+ "mappings": "[{\"knxEntityId\":\"k_demo_light\",\"haEntityId\":\"light.demo\"}]",
66
+ "knxEntities": "[{\"id\":\"k_demo_light\",\"name\":\"示例灯\",\"type\":\"switch\",\"cmdAddr\":\"0/0/1\",\"statusAddr\":\"0/1/1\",\"ext1\":\"\",\"ext2\":\"\",\"ext3\":\"\",\"invert\":false}]",
67
+ "x": 390,
68
+ "y": 120,
69
+ "wires": [["knx_output_node"], []]
61
70
  },
62
71
  {
63
72
  "id": "knx_output_node",
@@ -65,39 +74,94 @@
65
74
  "z": "knx_sync_flow",
66
75
  "server": "knx_gateway_config",
67
76
  "topic": "",
77
+ "setTopicType": "str",
68
78
  "dpt": "0",
69
- "name": "KNX Output (Universal Mode)",
79
+ "initialread": 0,
80
+ "notifyreadrequest": false,
81
+ "notifyresponse": false,
82
+ "notifywrite": true,
83
+ "name": "Universal KNX",
70
84
  "outputtype": "write",
71
85
  "outputRBE": "false",
72
86
  "inputRBE": "false",
73
- "notifywrite": true,
87
+ "passthrough": "no",
74
88
  "listenallga": true,
75
- "x": 550,
76
- "y": 100,
77
- "wires": []
89
+ "buttonEnabled": false,
90
+ "x": 620,
91
+ "y": 120,
92
+ "wires": [[]]
78
93
  },
79
94
  {
80
- "id": "debug_node",
81
- "type": "debug",
95
+ "id": "ha_state_node",
96
+ "type": "server-state-changed",
82
97
  "z": "knx_sync_flow",
83
- "name": "Sync Debug",
84
- "active": true,
85
- "tosidebar": true,
86
- "console": false,
87
- "tostatus": false,
88
- "complete": "payload",
89
- "x": 550,
90
- "y": 160,
91
- "wires": []
98
+ "name": "HA状态变化",
99
+ "server": "ha_server_config",
100
+ "version": 6,
101
+ "outputs": 1,
102
+ "exposeAsEntityConfig": "",
103
+ "entities": {
104
+ "entity": ["light.demo"],
105
+ "substring": [],
106
+ "regex": []
107
+ },
108
+ "outputInitially": false,
109
+ "stateType": "str",
110
+ "ifState": "",
111
+ "ifStateType": "str",
112
+ "ifStateOperator": "is",
113
+ "outputOnlyOnStateChange": true,
114
+ "for": "0",
115
+ "forType": "num",
116
+ "forUnits": "minutes",
117
+ "x": 170,
118
+ "y": 180,
119
+ "wires": [["knx_ha_bridge_node"]]
92
120
  },
93
121
  {
94
- "id": "comment_usage",
95
- "type": "comment",
96
- "z": "knx_sync_flow",
97
- "name": "使用说明",
98
- "info": "1. 修改symi_gateway_knx的IP为网关实际地址\n2. 修改knx_gateway_config的IP为KNX网关地址\n3. 双击KNX Bridge节点配置映射:\n - 导入KNX实体(组地址)\n - 添加Mesh设备与KNX实体的映射\n4. 部署后等待20秒初始化完成\n5. 测试双向同步",
99
- "x": 140,
100
- "y": 40,
101
- "wires": []
122
+ "id": "symi_gateway_knx",
123
+ "type": "symi-gateway",
124
+ "name": "Symi网关",
125
+ "connectionType": "tcp",
126
+ "host": "192.168.2.110",
127
+ "port": 4196,
128
+ "serialPort": "",
129
+ "baudRate": 115200
130
+ },
131
+ {
132
+ "id": "knx_gateway_config",
133
+ "type": "knxUltimate-config",
134
+ "host": "192.168.2.62",
135
+ "port": 3671,
136
+ "physAddr": "1.1.234",
137
+ "hostProtocol": "TunnelUDP",
138
+ "suppressACKRequest": false,
139
+ "loglevel": "error",
140
+ "name": "KNX网关",
141
+ "delaybetweentelegrams": 25,
142
+ "autoReconnect": "yes"
143
+ },
144
+ {
145
+ "id": "ha_server_config",
146
+ "type": "server",
147
+ "name": "Home Assistant",
148
+ "version": 6,
149
+ "addon": false,
150
+ "rejectUnauthorizedCerts": true,
151
+ "ha_boolean": ["y", "yes", "true", "on", "home", "open"],
152
+ "connectionDelay": true,
153
+ "cacheJson": true,
154
+ "heartbeat": false,
155
+ "heartbeatInterval": 30,
156
+ "areaSelector": "friendlyName",
157
+ "deviceSelector": "friendlyName",
158
+ "entitySelector": "friendlyName",
159
+ "statusSeparator": ": ",
160
+ "statusYear": "hidden",
161
+ "statusMonth": "short",
162
+ "statusDay": "numeric",
163
+ "statusHourCycle": "default",
164
+ "statusTimeFormat": "h:m",
165
+ "enableGlobalContextStore": false
102
166
  }
103
167
  ]
@@ -0,0 +1,76 @@
1
+ [
2
+ {
3
+ "id": "rs485_sync_flow",
4
+ "type": "tab",
5
+ "label": "RS485双向同步示例",
6
+ "disabled": false,
7
+ "info": "中弘VRF与SYMI空调面板RS485双向同步示例"
8
+ },
9
+ {
10
+ "id": "rs485_config_vrf",
11
+ "type": "symi-485-config",
12
+ "name": "VRF串口",
13
+ "serialPort": "/dev/ttyUSB0",
14
+ "baudRate": "9600",
15
+ "dataBits": "8",
16
+ "stopBits": "1",
17
+ "parity": "none"
18
+ },
19
+ {
20
+ "id": "rs485_config_symi",
21
+ "type": "symi-485-config",
22
+ "name": "SYMI串口",
23
+ "serialPort": "/dev/ttyUSB1",
24
+ "baudRate": "9600",
25
+ "dataBits": "8",
26
+ "stopBits": "1",
27
+ "parity": "none"
28
+ },
29
+ {
30
+ "id": "rs485_sync_node",
31
+ "type": "symi-rs485-sync",
32
+ "z": "rs485_sync_flow",
33
+ "name": "VRF-SYMI同步",
34
+ "rs485ConfigA": "rs485_config_vrf",
35
+ "rs485ConfigB": "rs485_config_symi",
36
+ "mappings": "[{\"protocolA\":\"zhonghong\",\"protocolB\":\"symi_climate\",\"configA\":{\"outdoorAddr\":1,\"indoorAddr\":0},\"configB\":{\"address\":1}}]",
37
+ "enablePolling": true,
38
+ "pollInterval": 1000,
39
+ "x": 300,
40
+ "y": 140,
41
+ "wires": [[]]
42
+ },
43
+ {
44
+ "id": "rs485_debug_node",
45
+ "type": "rs485-debug",
46
+ "z": "rs485_sync_flow",
47
+ "name": "调试监控",
48
+ "rs485Config": "rs485_config_vrf",
49
+ "displayMode": "hex",
50
+ "showTimestamp": true,
51
+ "maxMessages": 100,
52
+ "x": 300,
53
+ "y": 220,
54
+ "wires": [[]]
55
+ },
56
+ {
57
+ "id": "comment_rs485_usage",
58
+ "type": "comment",
59
+ "z": "rs485_sync_flow",
60
+ "name": "使用说明",
61
+ "info": "1. 修改串口配置为实际设备端口\n2. 配置映射关系:\n - A侧: 中弘VRF (外机地址1, 内机地址0)\n - B侧: SYMI空调面板 (设备地址1)\n3. 启用轮询获取VRF状态\n4. 部署后自动双向同步",
62
+ "x": 140,
63
+ "y": 60,
64
+ "wires": []
65
+ },
66
+ {
67
+ "id": "comment_protocol",
68
+ "type": "comment",
69
+ "z": "rs485_sync_flow",
70
+ "name": "协议说明: 中弘VRF需轮询, SYMI面板主动上报",
71
+ "info": "中弘VRF: 被动响应, 需定时发送0x50查询命令\nSYMI面板: 主动上报0x60功能码, 无需轮询",
72
+ "x": 240,
73
+ "y": 300,
74
+ "wires": []
75
+ }
76
+ ]