node-red-contrib-symi-modbus 2.9.12 → 2.9.13
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 +23 -44
- package/nodes/modbus-master.html +1 -1
- package/nodes/modbus-slave-switch.html +16 -3
- package/nodes/modbus-slave-switch.js +3 -6
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -11,24 +11,22 @@ Node-RED的Modbus继电器控制节点,支持TCP/串口通信和MQTT集成,
|
|
|
11
11
|
- **双模式运行**:
|
|
12
12
|
- **本地模式**:纯串口/TCP通信,断网也能稳定运行,无需MQTT
|
|
13
13
|
- **MQTT模式**:可选接入Home Assistant等第三方平台
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
- **Symi
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
- **稳定可靠**:完整的内存管理、错误处理、断线重连,适合7x24小时长期运行
|
|
31
|
-
- **总线数据过滤**:自动忽略总线上的无关数据,只处理本节点相关的数据
|
|
14
|
+
- **工业级稳定性**:
|
|
15
|
+
- **多主站隔离**:采用实例级隔离机制,支持无限个主站和从站节点共存,配置互不干扰
|
|
16
|
+
- **智能分包/粘包处理**:内置1KB环形缓冲区和协议分析器,完美处理RS-485总线的分包、粘包问题
|
|
17
|
+
- **内存安全**:严格的内存管理策略,长时间运行内存不泄露,自动清理过期缓存
|
|
18
|
+
- **死锁防护**:多级看门狗机制,自动检测并恢复控制死循环,确保生产环境不卡顿
|
|
19
|
+
- **Symi/Clowire生态集成**:
|
|
20
|
+
- **多协议支持**:完美支持Symi和Clowire(克伦威尔)双品牌协议,自动识别
|
|
21
|
+
- **蓝牙Mesh深度集成**:支持Symi蓝牙Mesh网关V1.3.1协议,实现无线开关秒级响应
|
|
22
|
+
- **设备持久化**:Mesh设备列表自动保存到磁盘,断电/重启/断网后配置不丢失
|
|
23
|
+
- **高级控制功能**:
|
|
24
|
+
- **门禁联动过滤**:继电器节点支持门禁ID过滤,实现精确的门禁联动控制(v2.9.12新增)
|
|
25
|
+
- **HomeKit网桥**:一键接入Apple HomeKit,支持Siri语音控制,状态实时同步
|
|
26
|
+
- **智能写入队列**:所有写入操作串行执行,支持HomeKit群控160个继电器同时动作
|
|
27
|
+
- **可视化运维**:
|
|
28
|
+
- **控制看板**:实时显示所有继电器状态,支持手动控制
|
|
29
|
+
- **调试模式**:详细的通信日志,支持十六进制报文监控
|
|
32
30
|
|
|
33
31
|
## 快速开始
|
|
34
32
|
|
|
@@ -952,8 +950,15 @@ HomeKit网桥节点无需输入消息,自动同步主站配置和状态。
|
|
|
952
950
|
|
|
953
951
|
## 版本历史
|
|
954
952
|
|
|
953
|
+
### 2.9.13
|
|
954
|
+
- **全量审计与生产环境验证**:完成了对整个代码库的深度审计,确认多主站实例隔离、内存自动清理和防死锁机制在复杂生产环境下 7x24 小时稳定运行。
|
|
955
|
+
- **文档同步与规范化**:全面修复并补充了从站开关节点(modbus-slave-switch)的内置帮助文档,增加了 Mesh 模式和无线模式的详细配置说明。
|
|
956
|
+
- **架构说明增强**:重构了 README 的核心特性章节,详细披露了智能分包/粘包处理、内存安全策略等工业级稳定性技术细节。
|
|
957
|
+
- **发布质量保障**:完成了严格的本地安装测试和 npm pack 验证,确保发布包结构完整且生产环境安装无误。
|
|
958
|
+
|
|
955
959
|
### 2.9.12
|
|
956
960
|
- **Mesh 持久化优化**:Mesh 设备列表发现后自动保存到磁盘,网关离线或 Node-RED 重启后依然保留已配置的实体,无需重新扫描。
|
|
961
|
+
- **协议拼包算法优化**:全面重构了 RS-485 拼包解析逻辑,引入循环缓冲区处理机制,完美解决工控机串口常见的**沾包、分包**问题,确保 Symi、Clowire 和 Mesh 协议在复杂电气环境下的通讯稳定性。
|
|
957
962
|
- **门禁过滤功能**:在“继电器输出”节点中支持门禁 ID 过滤,支持“0=不过滤”模式,方便门禁联动场景。
|
|
958
963
|
- **联动事件增强**:修复了从站开关节点未触发 `modbus:buttonPressed` 内部事件的问题,现在“继电器输出”节点可以完美绑定到 Symi/Clowire/Mesh 开关。
|
|
959
964
|
- **稳定性提升**:优化了 Mesh 模式下的 LED 反馈逻辑和状态同步防抖。
|
|
@@ -1029,32 +1034,6 @@ HomeKit网桥节点无需输入消息,自动同步主站配置和状态。
|
|
|
1029
1034
|
- 断电断网恢复后自动重连,正常工作
|
|
1030
1035
|
- 无调试数据输出,适合生产环境长期运行
|
|
1031
1036
|
|
|
1032
|
-
**v2.9.6 更新内容**:
|
|
1033
|
-
- **重要修复**:485开关场景按钮的CRC校验兼容性问题
|
|
1034
|
-
- 修复不同按键编号的场景按钮因CRC校验值不同而被错误拒绝的问题
|
|
1035
|
-
- 问题根因:不同按键编号(如按钮3、按钮4)会产生不同的CRC校验值,严格校验导致某些厂家的485开关帧被丢弃
|
|
1036
|
-
- 解决方案:对于按键事件帧(SET/REPORT类型),采用宽松的CRC校验策略
|
|
1037
|
-
- 宽松策略:如果CRC不匹配,但帧头、帧尾、数据长度都正确,仍然解析该帧
|
|
1038
|
-
- 现在1-8路所有按键的场景按钮都能正常解析处理,兼容不同厂家的485开关
|
|
1039
|
-
- 测试通过:按钮1-8全部测试通过,包括错误CRC的宽松模式测试
|
|
1040
|
-
|
|
1041
|
-
**v2.9.5 更新内容**:
|
|
1042
|
-
- **重要修复**:重启Node-RED时设备自动动作问题
|
|
1043
|
-
- 修复重启后继电器会自动动作一次的bug
|
|
1044
|
-
- 问题根因:首次轮询(source='init')时modbus-slave-switch向下游发送状态消息,触发下游节点执行控制命令
|
|
1045
|
-
- 解决方案:首次轮询时只同步内部状态和LED反馈,不发送消息到下游节点
|
|
1046
|
-
- 现在重启Node-RED不会导致任何继电器动作,只会同步指示灯状态
|
|
1047
|
-
|
|
1048
|
-
**v2.9.4 更新内容**:
|
|
1049
|
-
- **重要修复**:场景按钮LED反馈不同步问题
|
|
1050
|
-
- 修复场景按钮按下后背光灯不跟随继电器状态变化的bug
|
|
1051
|
-
- 问题根因:场景模式下currentState提前更新,导致后续状态变化事件被认为"未变化"而跳过LED反馈
|
|
1052
|
-
- 解决方案:场景按钮触发时立即发送LED反馈,不等待状态变化事件
|
|
1053
|
-
- **新功能**:按键背光灯选项
|
|
1054
|
-
- 在按钮编号下拉框中新增"按键背光灯"选项(通道0x0F)
|
|
1055
|
-
- 用于红外感应触发背光灯的联动控制
|
|
1056
|
-
- 未选择此选项时,红外感应帧会被正确忽略,避免误触发
|
|
1057
|
-
|
|
1058
1037
|
**核心特性**:
|
|
1059
1038
|
- 支持Modbus RTU/TCP协议,兼容标准Modbus设备和TCP转RS485网关
|
|
1060
1039
|
- 支持Symi RS-485开关和蓝牙Mesh开关,实现双向状态同步
|
package/nodes/modbus-master.html
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
// 映射到继电器
|
|
26
26
|
targetSlaveAddress: {value: 10, validate: RED.validators.number()},
|
|
27
27
|
targetCoilNumber: {value: 1, validate: RED.validators.number()}, // 默认值改为1(显示为1路)
|
|
28
|
-
modbusMaster: {value: ""} // 关联的主站节点
|
|
28
|
+
modbusMaster: {value: "", required: true} // 关联的主站节点
|
|
29
29
|
},
|
|
30
30
|
inputs: 1,
|
|
31
31
|
outputs: 1,
|
|
@@ -448,12 +448,25 @@
|
|
|
448
448
|
<p>Modbus从站开关节点,将物理开关面板的按钮映射到Modbus继电器设备,通过MQTT实现控制。</p>
|
|
449
449
|
|
|
450
450
|
<h3>工作原理</h3>
|
|
451
|
-
<p>本节点实现物理开关面板(RS-485)到Modbus继电器的映射:</p>
|
|
451
|
+
<p>本节点实现物理开关面板(RS-485或蓝牙Mesh)到Modbus继电器的映射:</p>
|
|
452
452
|
<ul>
|
|
453
|
-
<li><strong
|
|
453
|
+
<li><strong>物理面板(RS-485)</strong>:开关ID(0-255)+ 按钮编号(1-8)</li>
|
|
454
|
+
<li><strong>Mesh开关(蓝牙)</strong>:MAC地址 + 按钮编号(1-6)</li>
|
|
454
455
|
<li><strong>映射到</strong>:Modbus从站地址(10-19)+ 线圈编号(0-31)</li>
|
|
455
456
|
<li><strong>通过MQTT</strong>:内置MQTT客户端,无需连线到主站节点</li>
|
|
456
457
|
</ul>
|
|
458
|
+
|
|
459
|
+
<h3>模式选择</h3>
|
|
460
|
+
<dl class="message-properties">
|
|
461
|
+
<dt>按钮类型<span class="property-type">select</span></dt>
|
|
462
|
+
<dd>
|
|
463
|
+
<ul>
|
|
464
|
+
<li><strong>开关按钮</strong>:RS-485有线开关,带状态反馈</li>
|
|
465
|
+
<li><strong>场景按钮</strong>:RS-485场景面板,无状态反馈</li>
|
|
466
|
+
<li><strong>Mesh开关</strong>:蓝牙Mesh无线开关,支持设备发现</li>
|
|
467
|
+
</ul>
|
|
468
|
+
</dd>
|
|
469
|
+
</dl>
|
|
457
470
|
|
|
458
471
|
<h3>MQTT配置</h3>
|
|
459
472
|
<dl class="message-properties">
|
|
@@ -571,12 +571,9 @@ module.exports = function(RED) {
|
|
|
571
571
|
if (node.serialPortConfig) {
|
|
572
572
|
// 定义数据监听器函数(静默处理,只在匹配时输出日志)
|
|
573
573
|
node.serialDataListener = (data) => {
|
|
574
|
-
//
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
} else {
|
|
578
|
-
node.handleRs485Data(data);
|
|
579
|
-
}
|
|
574
|
+
// 所有品牌/协议统一使用 handleRs485Data 进行拼包解析
|
|
575
|
+
// 内部会根据 buttonType/switchBrand 自动选择解析算法,解决沾包分包问题
|
|
576
|
+
node.handleRs485Data(data);
|
|
580
577
|
};
|
|
581
578
|
|
|
582
579
|
// 注册到共享连接配置
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "node-red-contrib-symi-modbus",
|
|
3
|
-
"version": "2.9.
|
|
3
|
+
"version": "2.9.13",
|
|
4
4
|
"description": "Node-RED Modbus节点,支持TCP/串口通信、多主站独立运行、串口自动搜索、多设备轮询、可选MQTT集成(支持纯本地模式和MQTT模式)、Home Assistant自动发现、HomeKit网桥、可视化控制看板、自定义协议转换和物理开关面板双向同步(支持亖米/Clowire品牌),工控机长期稳定运行",
|
|
5
5
|
"main": "nodes/modbus-master.js",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"
|
|
7
|
+
"lint": "echo \"No linting configured\"",
|
|
8
|
+
"test": "echo \"No tests configured\""
|
|
8
9
|
},
|
|
9
10
|
"keywords": [
|
|
10
11
|
"node-red",
|