node-red-contrib-symi-mesh 1.7.1 → 1.7.3

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
@@ -747,6 +747,14 @@ Mesh 四键开关 第2路 ↔ RS485 六键开关 第5路 地址:2 ✓ 支持
747
747
 
748
748
  当内置协议无法满足需求时,可使用"自定义协议"模式,手动录入RS485十六进制码进行双向匹配。
749
749
 
750
+ #### 反馈选项
751
+
752
+ 每个映射可设置"反馈"复选框:
753
+ - **勾选反馈**(默认):RS485收码触发Mesh动作后,Mesh状态变化会再发送发码到RS485总线
754
+ - **不勾选反馈**:RS485收码触发Mesh动作后,不再发送反馈码,避免总线重复数据
755
+
756
+ 适用场景:当第三方设备已经知道自己的状态,不需要收到确认反馈时,取消勾选可减少总线流量。
757
+
750
758
  #### 自定义开关(4组码)
751
759
 
752
760
  - **发开码**:Mesh开关打开时,发送此码到RS485总线
@@ -813,6 +821,198 @@ Mesh 四键开关 第2路 ↔ RS485 六键开关 第5路 地址:2 ✓ 支持
813
821
  4. **防循环保护**:内置同步锁机制,避免状态死循环
814
822
  5. **485转TCP网关**:Node-RED只能收到自己发送请求后的设备回应,其他TCP客户端的数据不会转发(网关机制)
815
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
+
816
1016
  ## 云端数据同步
817
1017
 
818
1018
  本节点支持从酒店云云平台自动获取设备名称和场景信息,实现本地化配置的自动同步。
@@ -1092,6 +1292,7 @@ A: 每个房间部署一个云端同步节点,配置对应的酒店ID和房间
1092
1292
  | **Symi KNX Bridge** | KNX系统双向同步 | [KNX双向同步](#knx双向同步) |
1093
1293
  | **Symi KNX-HA Bridge** | KNX与HA实体双向同步 | [KNX-HA双向同步](#knx-ha双向同步) |
1094
1294
  | **RS485 Debug** | RS485总线数据抓包调试 | [RS485调试节点](#rs485调试节点) |
1295
+ | **Symi RS485 Sync** | 两种RS485协议双向同步 | [RS485协议同步](#rs485协议同步) |
1095
1296
 
1096
1297
  ## 开发者信息
1097
1298
 
@@ -1113,6 +1314,7 @@ node-red-contrib-symi-mesh/
1113
1314
  │ ├── symi-485-bridge.js/html # RS485桥接节点
1114
1315
  │ ├── symi-485-config.js/html # RS485配置节点
1115
1316
  │ ├── symi-knx-bridge.js/html # KNX桥接节点
1317
+ │ ├── symi-rs485-sync.js/html # RS485协议同步节点
1116
1318
  │ └── rs485-debug.js/html # RS485调试节点
1117
1319
  ├── examples/
1118
1320
  │ ├── basic-example.json # 基础示例
@@ -1255,6 +1457,76 @@ node-red-contrib-symi-mesh/
1255
1457
 
1256
1458
  ## 更新日志
1257
1459
 
1460
+ ### v1.7.3 (2025-12-24)
1461
+ - **MQTT同步节点**:新增`symi-mqtt-sync`节点实现第三方MQTT品牌设备与Mesh设备双向同步
1462
+ - **双MQTT配置节点架构**:
1463
+ - Mesh MQTT:选择`symi-mqtt`配置节点,获取Mesh设备列表
1464
+ - 品牌MQTT:选择`symi-mqtt-brand`配置节点(支持下拉选择+编辑+添加)
1465
+ - **品牌MQTT配置节点**:新增`symi-mqtt-brand`配置节点
1466
+ - 支持配置MQTT服务器地址、用户名、密码
1467
+ - 支持HYQW协议(项目代码、设备SN)
1468
+ - 自动发现品牌MQTT设备实体
1469
+ - 可扩展支持更多品牌协议
1470
+ - **实体映射**:
1471
+ - 左边选择Mesh设备+通道
1472
+ - 右边选择品牌设备+通道(灯具支持多路)
1473
+ - 相同类型实体一对一映射
1474
+ - **设备类型**:灯具(8)、空调(12)、窗帘(14)、地暖(16)、新风(36)
1475
+ - **双向同步**:MQTT↔Mesh实时状态同步,2秒防抖防死循环
1476
+ - **输入输出端口**:支持连接debug节点调试同步数据
1477
+ - **错误日志限流**:网络故障时每60秒最多记录一次错误
1478
+ - **断线自动重连**:5秒重连间隔
1479
+ - **串口支持优化**:
1480
+ - 所有串口节点支持手动输入+搜索选择
1481
+ - 兼容serialport v9/v10+,兼容HassOS环境
1482
+ - 串口错误日志限流,避免长时间故障时日志爆炸
1483
+ - **稳定性优化**:
1484
+ - 错误日志频率限制,长时间网络故障不影响系统性能
1485
+ - 静默处理非关键错误,生产级稳定性
1486
+ - 内存安全,无调试日志,断电断网恢复后正常工作
1487
+ - 缓存队列处理,符合MQTT协议要求
1488
+
1489
+ ### v1.7.2 (2025-12-22)
1490
+ - **RS485双向同步节点**:新增`symi-rs485-sync`独立节点实现两种不同RS485协议之间的双向同步
1491
+ - 支持中弘VRF网关协议(功能码0x31-0x34控制,0x50查询)
1492
+ - 支持SYMI空调面板Modbus协议
1493
+ - 支持自定义码协议
1494
+ - 双向状态同步,2秒防抖防止死循环
1495
+ - 多组映射配置,持久化保存
1496
+ - **反馈选项**:新增"反馈"复选框,控制RS485收码后是否发送反馈码
1497
+ - **Mesh→RS485方向**:
1498
+ - 修复开关控制:只同步配置的通道,避免其他通道变化误触发
1499
+ - 修复空调风速:fanMode变化正确发送fanSendHigh/Mid/Low/Auto码
1500
+ - 修复空调中速(fanMode=2)事件触发
1501
+ - 修复空调开关:去重处理,避免switch和acSwitch重复发送
1502
+ - 添加自动风速(fanSendAuto/fanRecvAuto)配置支持
1503
+ - **RS485→Mesh方向**:
1504
+ - 修复收码匹配触发Mesh实体状态变化
1505
+ - 自定义开关recvOn/recvOff正确触发开关动作
1506
+ - 自定义空调acRecvOn/acRecvOff/fanRecvHigh等正确触发空调控制
1507
+ - **事件系统优化**:
1508
+ - DeviceManager事件添加完整字段(isUserControl、isSceneExecution等)
1509
+ - 用户控制事件允许绕过首次状态缓存
1510
+ - 修复单路温控器开关事件丢失问题
1511
+ - fanMode事件同时发送acFanSpeed别名字段
1512
+ - **防死循环优化**:
1513
+ - 使用映射特定时间戳,避免不同设备同步互相影响
1514
+ - Mesh→RS485和RS485→Mesh双向都记录同步时间
1515
+ - 500ms冷却时间防止状态回环
1516
+ - 空调命令去重(同类命令只发送一次)
1517
+ - **生产稳定性**:
1518
+ - 初始化延迟从10秒缩短为5秒
1519
+ - 详细日志改为debug级别,减少生产环境日志量
1520
+ - 保留关键同步日志便于问题排查
1521
+ - **UI优化**:
1522
+ - 自定义码折叠按钮移到同一行,减少占用空间
1523
+ - 修复MAC地址大小写匹配问题
1524
+ - 添加自动风速配置框(发自动/收自动)
1525
+ - **RS485-to-RS485空调桥接**:SYMI空调面板与中弘VRF系统双向同步
1526
+ - 支持SYMI 485空调面板协议(7E...7D帧格式,CRC8校验)
1527
+ - 支持中弘VRF空调协议(求和校验,功能码0x31-0x34控制,0x50查询)
1528
+ - 双向状态同步:SYMI面板操作→中弘VRF执行,中弘状态→SYMI面板显示
1529
+
1258
1530
  ### v1.7.1 (2025-12-21)
1259
1531
  - **自定义协议全面修复**:完善自定义开关/窗帘/空调双向同步
1260
1532
  - **空调风速控制**:修复风速变化事件触发机制
@@ -1320,24 +1592,6 @@ node-red-contrib-symi-mesh/
1320
1592
  - **防死循环参数调整**:LOOP_PREVENTION_MS调整为800ms
1321
1593
  - **同时修复RS485桥接**:应用相同syncLock修复
1322
1594
 
1323
- ### v1.6.7 (2025-12-10)
1324
- - **KNX双向同步完善**:`symi-knx-bridge`节点全面升级
1325
- - **knxUltimate消息格式**:符合官方规范,使用`destination`+`payload`+`dpt`+`event`
1326
- - **Universal Mode支持**:输出节点需启用"Listen to all GA",动态设置组地址
1327
- - **消息事件**:添加`event: "GroupValue_Write"`,确保写入操作正确执行
1328
- - **payload类型修复**:DPT 1.001使用boolean类型(true/false),不是number
1329
- - **地址映射修复**:根据设备类型正确映射扩展地址到具体功能
1330
- - **KNX输入匹配增强**:支持所有配置地址的匹配,通过地址函数确定功能类型
1331
- - **DPT格式兼容**:支持"DPT1.001"和"1.001"两种格式
1332
- - **新增处理器**:色温(light_color_temp)、空调风速(climate_fan)
1333
- - **防死循环**:1秒防抖机制,智能防止状态回环
1334
- - **命令队列**:最大100条,100ms防抖,50ms间隔
1335
- - **内存安全**:节点关闭时清理所有缓存和事件监听器
1336
- - **KNX桥接节点功能**:
1337
- - KNX实体库:支持从模板导入KNX组地址
1338
- - 一行映射:紧凑表格显示,适合大量设备配置
1339
- - 多设备类型:开关、调光灯、窗帘、空调、新风、地暖
1340
- - 智能通道选择:根据Mesh设备实际路数显示可选通道
1341
1595
 
1342
1596
  ## 许可证
1343
1597
 
@@ -1350,8 +1604,8 @@ Copyright (c) 2025 SYMI 亖米
1350
1604
  ## 关于
1351
1605
 
1352
1606
  **作者**: SYMI 亖米
1353
- **版本**: 1.7.1
1607
+ **版本**: 1.7.3
1354
1608
  **协议**: 蓝牙MESH网关(初级版)串口协议V1.0
1355
- **最后更新**: 2025-12-21
1609
+ **最后更新**: 2025-12-24
1356
1610
  **仓库**: https://github.com/symi-daguo/node-red-contrib-symi-mesh
1357
1611
  **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
+ ]