node-red-contrib-symi-modbus 2.8.5 → 2.8.7

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
@@ -63,11 +63,11 @@ node-red-restart
63
63
  3. **无需连线**:主站和从站通过内部事件自动通信
64
64
 
65
65
  **优势**:
66
- - 断网也能稳定运行
67
- - 不依赖外部服务
68
- - 响应速度更快
69
- - 配置更简单
70
- - 无需手动连线(免连线通信)
66
+ - 断网也能稳定运行
67
+ - 不依赖外部服务
68
+ - 响应速度更快
69
+ - 配置更简单
70
+ - 无需手动连线(免连线通信)
71
71
 
72
72
  #### 模式2:MQTT模式(推荐用于Home Assistant集成)
73
73
 
@@ -85,9 +85,9 @@ node-red-restart
85
85
  - 基础主题: `modbus/relay` (默认)
86
86
 
87
87
  **优势**:
88
- - Home Assistant自动发现
89
- - 支持远程控制
90
- - 状态持久化存储
88
+ - Home Assistant自动发现
89
+ - 支持远程控制
90
+ - 状态持久化存储
91
91
 
92
92
  ### 3. 配置主站节点
93
93
 
@@ -199,12 +199,12 @@ node-red-restart
199
199
  - 继电器状态变化会自动反馈到Mesh开关LED
200
200
 
201
201
  **Mesh模式特点**:
202
- - 无线控制,无需布线
203
- - 支持1-6路开关
204
- - 双向同步(按键→继电器,继电器→LED)
205
- - 设备列表持久化保存
206
- - 短地址自动更新(如果网关重新配网)
207
- - 与RS-485开关使用方式完全一致
202
+ - 无线控制,无需布线
203
+ - 支持1-6路开关
204
+ - 双向同步(按键→继电器,继电器→LED)
205
+ - 设备列表持久化保存
206
+ - 短地址自动更新(如果网关重新配网)
207
+ - 与RS-485开关使用方式完全一致
208
208
 
209
209
  ### 6. 配置HomeKit网桥节点(可选)
210
210
 
@@ -884,93 +884,28 @@ HomeKit网桥节点无需输入消息,自动同步主站配置和状态。
884
884
 
885
885
  ## 版本信息
886
886
 
887
- **当前版本**: v2.8.4
888
-
889
- ### v2.8.4 (2025-11-11)
890
-
891
- **核心优化**:
892
- - **移除首次部署LED同步延迟**:部署/重启后立即同步所有LED状态(1秒内完成)
893
- - 移除固定5秒初始化延迟限制
894
- - 识别首次轮询(source: 'init'),允许立即发送LED反馈
895
- - 通过队列机制自动限速(40ms间隔),不会造成总线拥堵
896
- - 用户体验提升:重启后立即看到正确的LED状态
897
-
898
- **稳定性增强**:
899
- - **内存泄漏防护**:每5分钟自动检查监听器数量、队列长度、Buffer大小
900
- - 监听器数量超过100个时告警
901
- - 队列积压超过1000个时自动清理(保留最新100个)
902
- - 帧缓冲区超过10KB时自动清空
903
- - 确保长期稳定运行,不死机不卡顿
904
- - **日志防护**:错误日志限流(每5分钟最多输出一次),避免硬盘被日志填满
905
- - **资源清理**:节点关闭时正确清理所有定时器和监听器,防止内存泄漏
906
-
907
- **实际使用场景优化**:
908
- - 主站轮询:200ms/台,5台从站 = 1秒完成一轮
909
- - 开关面板:支持50个以内,约200个按钮(设计极限500+按钮)
910
- - Mesh设备发现:仅首次手动触发,已持久化,后续部署不再触发
911
- - 部署后立即同步:主站首次轮询完成后,所有LED状态立即同步(1秒内)
912
-
913
- **配置持久化**:
914
- - 所有配置参数本地持久化存储
915
- - Node-RED重启后自动恢复,不受重启影响
916
- - Mesh设备列表持久化,无需重复扫描
917
- - 断网/通网、断电/通电不影响正常运行
918
-
919
-
920
- ### v2.8.3 (2025-11-11)
921
-
922
- **核心功能**:
923
- - **Mesh开关完整支持**:支持Symi蓝牙Mesh网关和1-6路Mesh开关,实现双向状态同步
924
- - 全局共享状态管理:同一Mesh设备的多个按钮节点共享状态数组,确保LED反馈正确
925
- - Mesh控制帧格式:完全兼容Symi Mesh协议,支持1/2/3/4/6路开关
926
- - 设备持久化:Mesh设备列表自动保存,重启无需重新扫描
927
- - LED状态同步:继电器状态变化时自动同步到Mesh开关LED指示灯
928
- - **彻底解决Mesh开关LED不跟随继电器状态同步的问题**
929
-
930
- **重要修复**:
931
- - **修复串口锁定问题**:优化监听器注销逻辑,添加2秒延迟关闭机制,避免Mesh设备发现等临时操作导致串口频繁开关
932
- - 问题原因:Mesh设备发现API注销监听器时立即关闭串口,导致其他节点无法打开串口(Resource temporarily unavailable Cannot lock port)
933
- - 解决方案:监听器注销后延迟2秒关闭连接,给其他节点注册监听器的机会,确保485串口和TCP网关都能正常工作
934
- - 修复Mesh LED反馈状态不同步问题:引入全局共享状态Map,所有按钮节点共享同一个状态数组
935
- - 修复Mesh控制帧格式错误:移除多余参数,修正长度字段,确保与Mesh网关协议一致
936
- - 修复部署后LED指示灯不同步问题:主站首次轮询时主动广播所有线圈状态
937
- - 优化初始化逻辑:从站开关节点无需查询状态,主站节点主动推送,更加高效可靠
938
-
939
- **稳定性增强**:
940
- - 完整的资源清理:所有定时器、监听器、连接在节点关闭时正确释放,防止内存泄漏
941
- - 断网重连机制:TCP连接断开后自动重连,不影响本地串口通信
942
- - 防抖机制:避免重复处理同一按键事件,防止死循环
943
- - 全局队列优化:40ms间隔 + 智能优先队列,确保长期稳定流畅运行
944
- - 串行发送:所有LED反馈按优先级和加入顺序依次发送,间隔40ms(TCP和串口统一)
945
- - 去重机制:每个节点50ms内不重复发送相同状态,避免总线拥堵
946
- - 延迟关闭机制:连接在所有监听器注销后延迟2秒关闭,避免临时操作导致连接频繁开关
947
-
948
- **典型场景说明**:
949
- 1. **场景1:单个继电器控制**
950
- - 按下开关 → 设置触发源 → 继电器动作 → LED反馈优先加入队列 → 40ms后发送
951
- - 该面板的LED反馈会优先处理,响应最快
952
-
953
- 2. **场景2:批量控制(如17通道全开,16个继电器)**
954
- - 触发17通道 → 设置触发源(操作的面板) → 1-16路继电器全开
955
- - 假设每个继电器绑定2个开关面板 = 32个LED反馈
956
- - 触发源面板的LED反馈优先处理(最快响应)
957
- - 其他面板按加入队列的顺序依次发送,耗时约1280ms(40ms×32)
958
-
959
- 3. **场景3:快速切换(如17通道全开后立即18通道全关)**
960
- - 17通道触发 → 设置触发源 → 1-16路全开 → 触发源面板优先反馈
961
- - 18通道触发 → 更新触发源 → 1-16路全关 → 新触发源面板优先反馈
962
- - 全局队列按优先级和顺序处理,确保所有面板最终显示正确状态
963
-
964
- 4. **场景4:双控开关(1个继电器绑定2个不同ID的开关面板)**
965
- - 继电器状态变化 → 2个LED反馈加入全局队列
966
- - 如果是其中一个面板触发的,该面板优先反馈
967
- - 另一个面板按顺序发送,间隔40ms
968
-
969
- 5. **场景5:大规模部署(50个8键开关 = 400个按键)**
970
- - 批量控制触发 → 设置触发源 → 所有LED反馈加入全局队列
971
- - 触发源面板优先反馈(用户最快看到响应)
972
- - 其他面板按部署时的节点顺序依次发送,耗时约16秒(40ms×400)
973
- - 确保总线稳定,不会冲突或丢失
887
+ **当前版本**: v2.8.7 (2025-11-12)
888
+
889
+ **核心特性**:
890
+ - 支持Modbus RTU/TCP协议,兼容标准Modbus设备和TCP转RS485网关
891
+ - 支持Symi RS-485开关和蓝牙Mesh开关,实现双向状态同步
892
+ - 内置HomeKit网桥,支持Siri语音控制
893
+ - 可视化控制看板,实时显示和控制所有继电器状态
894
+ - 智能写入队列,支持大规模批量控制(160+继电器)流畅无卡顿
895
+ - 完整的内存管理和错误处理,适合7x24小时长期稳定运行
896
+
897
+ **稳定性保障**:
898
+ - 连接永久保持:串口/TCP连接一旦建立就保持打开,避免部署时频繁开关导致的锁定问题
899
+ - 内存泄漏防护:每5分钟自动检查并清理异常积压数据
900
+ - 日志防护:错误日志限流,避免硬盘被填满
901
+ - 配置持久化:所有配置和Mesh设备列表自动保存,重启后自动恢复
902
+ - 断网/断电不影响:本地模式下完全脱离网络依赖
903
+
904
+ **实际使用场景**:
905
+ - 主站轮询:200ms/台,支持5-10台从站设备
906
+ - 开关面板:支持50个以内面板,约200个按钮(设计极限500+)
907
+ - LED同步:部署/重启后1秒内完成所有LED状态同步
908
+ - 批量控制:支持17通道全开/全关等批量操作,LED反馈流畅无卡顿
974
909
 
975
910
  ## 许可证
976
911
 
@@ -1539,6 +1539,12 @@ module.exports = function(RED) {
1539
1539
  node.cleanupTimer = null;
1540
1540
  }
1541
1541
 
1542
+ // 清除MQTT命令队列定时器
1543
+ if (node.mqttCommandTimer) {
1544
+ clearTimeout(node.mqttCommandTimer);
1545
+ node.mqttCommandTimer = null;
1546
+ }
1547
+
1542
1548
  // 发布离线状态到MQTT(让HA知道设备离线)
1543
1549
  if (node.config.enableMqtt && node.mqttClient && node.mqttClient.connected) {
1544
1550
  node.publishOfflineStatus();
@@ -530,14 +530,14 @@ module.exports = function(RED) {
530
530
  // 清除延迟关闭定时器
531
531
  if (node.closeTimer) {
532
532
  clearTimeout(node.closeTimer);
533
+ node.closeTimer = null;
534
+ }
533
535
 
534
536
  // 清除内存检查定时器
535
537
  if (node.memoryCheckInterval) {
536
538
  clearInterval(node.memoryCheckInterval);
537
539
  node.memoryCheckInterval = null;
538
540
  }
539
- node.closeTimer = null;
540
- }
541
541
 
542
542
  // 清空所有监听器
543
543
  node.dataListeners = [];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-red-contrib-symi-modbus",
3
- "version": "2.8.5",
3
+ "version": "2.8.7",
4
4
  "description": "Node-RED Modbus节点,支持TCP/串口通信、串口自动搜索、多设备轮询、可选MQTT集成(支持纯本地模式和MQTT模式)、Home Assistant自动发现、HomeKit网桥、可视化控制看板、自定义协议转换和物理开关面板双向同步,工控机长期稳定运行",
5
5
  "main": "nodes/modbus-master.js",
6
6
  "scripts": {