node-red-contrib-symi-modbus 2.9.1 → 2.9.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 +14 -16
- package/nodes/modbus-slave-switch.js +30 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -888,7 +888,20 @@ HomeKit网桥节点无需输入消息,自动同步主站配置和状态。
|
|
|
888
888
|
|
|
889
889
|
## 版本信息
|
|
890
890
|
|
|
891
|
-
**当前版本**: v2.9.
|
|
891
|
+
**当前版本**: v2.9.2 (2025-12-15)
|
|
892
|
+
|
|
893
|
+
**v2.9.2 更新内容**:
|
|
894
|
+
- **稳定性增强**:全局防抖缓存定期清理机制
|
|
895
|
+
- 每10分钟自动清理超过1分钟未使用的防抖记录
|
|
896
|
+
- 防止长期运行时内存缓慢增长
|
|
897
|
+
- **稳定性增强**:Mesh无线模式按键注册清理
|
|
898
|
+
- 节点关闭时正确清理meshWirelessButtons全局Map
|
|
899
|
+
- 避免重新部署时残留无效注册信息
|
|
900
|
+
- **代码审查**:全面检查所有节点代码
|
|
901
|
+
- 确认所有定时器在节点关闭时正确清理
|
|
902
|
+
- 确认所有事件监听器正确注销
|
|
903
|
+
- 确认所有连接资源正确释放
|
|
904
|
+
- 支持断电断网后自动恢复运行
|
|
892
905
|
|
|
893
906
|
**v2.9.1 更新内容**:
|
|
894
907
|
- **重要修复**:RS-485开关指示灯同步问题
|
|
@@ -907,21 +920,6 @@ HomeKit网桥节点无需输入消息,自动同步主站配置和状态。
|
|
|
907
920
|
- 触发源面板优先处理,确保按键响应流畅
|
|
908
921
|
- 按线圈顺序陆续反馈所有有动作的继电器指示灯
|
|
909
922
|
|
|
910
|
-
**v2.9.0 更新内容**:
|
|
911
|
-
- **重要修复**:一个按键现在可以控制多个不同从站的继电器
|
|
912
|
-
- 修复了全局防抖机制导致的问题:之前一个开关配置控制多个从站时,只有第一个从站会执行
|
|
913
|
-
- 现在支持:一个物理按键同时控制从站0A和0B的同一线圈,两个都会正确执行
|
|
914
|
-
- 优化防抖key设计,包含目标从站地址,确保不同目标互不影响
|
|
915
|
-
- RS-485开关、Mesh开关、Mesh场景模式均已修复
|
|
916
|
-
|
|
917
|
-
**v2.8.9 更新内容**:
|
|
918
|
-
- 新增Mesh开关无线模式支持,适用于场景触发按键
|
|
919
|
-
- 修复Mesh开关群控LED反馈问题,确保状态完全同步
|
|
920
|
-
- 优化LED反馈防抖机制(100ms),智能合并多次状态变化
|
|
921
|
-
- 群控多个继电器时,Mesh开关只发送一次LED反馈,包含所有按钮的最新状态
|
|
922
|
-
- 修复串口永久连接机制,彻底解决部署时串口锁定问题
|
|
923
|
-
- RS-485开关功能完全不受影响,保持稳定运行
|
|
924
|
-
|
|
925
923
|
**核心特性**:
|
|
926
924
|
- 支持Modbus RTU/TCP协议,兼容标准Modbus设备和TCP转RS485网关
|
|
927
925
|
- 支持Symi RS-485开关和蓝牙Mesh开关,实现双向状态同步
|
|
@@ -30,6 +30,27 @@ module.exports = function(RED) {
|
|
|
30
30
|
let meshLedFeedbackQueueTimer = null;
|
|
31
31
|
let meshLedFeedbackGlobalLock = 0; // 全局锁定时间戳:在此时间之前,忽略所有Mesh面板的状态上报
|
|
32
32
|
|
|
33
|
+
// 全局防抖缓存定期清理(每10分钟清理超过1分钟未使用的条目,防止内存泄漏)
|
|
34
|
+
let globalDebounceCacheCleanupTimer = null;
|
|
35
|
+
function startGlobalDebounceCacheCleanup() {
|
|
36
|
+
if (globalDebounceCacheCleanupTimer) return;
|
|
37
|
+
globalDebounceCacheCleanupTimer = setInterval(() => {
|
|
38
|
+
const now = Date.now();
|
|
39
|
+
const expireThreshold = 60 * 1000; // 1分钟未使用的条目将被清理
|
|
40
|
+
let cleanedCount = 0;
|
|
41
|
+
for (const [key, timestamp] of globalDebounceCache.entries()) {
|
|
42
|
+
if (now - timestamp > expireThreshold) {
|
|
43
|
+
globalDebounceCache.delete(key);
|
|
44
|
+
cleanedCount++;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (cleanedCount > 0) {
|
|
48
|
+
RED.log.debug(`全局防抖缓存清理: 删除${cleanedCount}条过期记录,剩余${globalDebounceCache.size}条`);
|
|
49
|
+
}
|
|
50
|
+
}, 10 * 60 * 1000); // 每10分钟执行一次
|
|
51
|
+
}
|
|
52
|
+
startGlobalDebounceCacheCleanup();
|
|
53
|
+
|
|
33
54
|
// 初始化Mesh设备持久化存储
|
|
34
55
|
const meshPersistDir = path.join(RED.settings.userDir || os.homedir() + '/.node-red', 'mesh-devices-persist');
|
|
35
56
|
let meshStorageInitialized = false;
|
|
@@ -1478,6 +1499,15 @@ module.exports = function(RED) {
|
|
|
1478
1499
|
clearTimeout(meshLedDebounceTimers.get(meshAddr).timer);
|
|
1479
1500
|
meshLedDebounceTimers.delete(meshAddr);
|
|
1480
1501
|
}
|
|
1502
|
+
|
|
1503
|
+
// 清理meshWirelessButtons中当前节点的按键注册
|
|
1504
|
+
if (node.config.meshWirelessMode === true && meshWirelessButtons.has(meshAddr)) {
|
|
1505
|
+
meshWirelessButtons.get(meshAddr).delete(node.config.meshButtonNumber);
|
|
1506
|
+
// 如果该设备没有其他无线按键了,删除整个条目
|
|
1507
|
+
if (meshWirelessButtons.get(meshAddr).size === 0) {
|
|
1508
|
+
meshWirelessButtons.delete(meshAddr);
|
|
1509
|
+
}
|
|
1510
|
+
}
|
|
1481
1511
|
}
|
|
1482
1512
|
|
|
1483
1513
|
// 清理队列(释放内存)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "node-red-contrib-symi-modbus",
|
|
3
|
-
"version": "2.9.
|
|
3
|
+
"version": "2.9.2",
|
|
4
4
|
"description": "Node-RED Modbus节点,支持TCP/串口通信、串口自动搜索、多设备轮询、可选MQTT集成(支持纯本地模式和MQTT模式)、Home Assistant自动发现、HomeKit网桥、可视化控制看板、自定义协议转换和物理开关面板双向同步,工控机长期稳定运行",
|
|
5
5
|
"main": "nodes/modbus-master.js",
|
|
6
6
|
"scripts": {
|