node-red-contrib-symi-modbus 1.3.0 → 1.5.4
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 +189 -24
- package/nodes/modbus-master.html +168 -53
- package/nodes/modbus-master.js +86 -5
- package/nodes/modbus-slave-switch.html +158 -70
- package/nodes/modbus-slave-switch.js +81 -6
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -14,7 +14,10 @@ Node-RED的Modbus继电器控制节点,支持TCP/串口通信和MQTT集成。
|
|
|
14
14
|
|
|
15
15
|
## 安装
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
[](https://www.npmjs.com/package/node-red-contrib-symi-modbus)
|
|
18
|
+
[](https://www.npmjs.com/package/node-red-contrib-symi-modbus)
|
|
19
|
+
|
|
20
|
+
### 通过npm安装(推荐)
|
|
18
21
|
|
|
19
22
|
在Node-RED用户目录中运行:
|
|
20
23
|
|
|
@@ -29,6 +32,8 @@ npm install node-red-contrib-symi-modbus
|
|
|
29
32
|
2. 搜索 `node-red-contrib-symi-modbus`
|
|
30
33
|
3. 点击安装
|
|
31
34
|
|
|
35
|
+
**已发布到npm:** https://www.npmjs.com/package/node-red-contrib-symi-modbus
|
|
36
|
+
|
|
32
37
|
### 本地开发安装
|
|
33
38
|
|
|
34
39
|
```bash
|
|
@@ -293,8 +298,11 @@ msg.payload = {
|
|
|
293
298
|
- **MQTT服务器**:选择或添加MQTT服务器配置节点(需与主站节点使用相同配置)
|
|
294
299
|
|
|
295
300
|
**物理开关面板配置**
|
|
301
|
+
- **面板品牌**:选择开关面板品牌
|
|
302
|
+
- **亖米(Symi)**:默认品牌,完整实现轻量级协议V0.13
|
|
303
|
+
- **其他品牌**:预留扩展接口,后续支持更多1-8键开关品牌
|
|
296
304
|
- **开关ID**:物理开关面板的设备地址(0-255,RS-485总线地址)
|
|
297
|
-
- **按钮编号**:物理面板上的按键编号(1-8
|
|
305
|
+
- **按钮编号**:物理面板上的按键编号(1-8键开关)
|
|
298
306
|
|
|
299
307
|
**映射到继电器设备**
|
|
300
308
|
- **目标从站地址**:要控制的Modbus继电器设备地址(10-247)
|
|
@@ -363,28 +371,30 @@ msg.payload = 0; // 关
|
|
|
363
371
|
|
|
364
372
|
#### 配置映射示例
|
|
365
373
|
|
|
366
|
-
**示例1
|
|
374
|
+
**示例1:亖米开关ID=0,按钮1 → 继电器10-线圈0**
|
|
367
375
|
```
|
|
368
376
|
物理面板配置:
|
|
377
|
+
├─ 面板品牌:亖米(Symi)
|
|
369
378
|
├─ 开关ID:0(物理面板地址)
|
|
370
379
|
├─ 按钮编号:1(面板按钮1)
|
|
371
380
|
映射到继电器:
|
|
372
|
-
├─
|
|
373
|
-
└─
|
|
381
|
+
├─ 从站地址:10(Modbus继电器设备10)
|
|
382
|
+
└─ 线圈编号:0(继电器通道0)
|
|
374
383
|
|
|
375
384
|
MQTT主题:
|
|
376
385
|
├─ 订阅状态:modbus/relay/10/0/state
|
|
377
386
|
└─ 发布命令:modbus/relay/10/0/set
|
|
378
387
|
```
|
|
379
388
|
|
|
380
|
-
**示例2
|
|
389
|
+
**示例2:亖米开关ID=5,按钮3 → 继电器11-线圈15**
|
|
381
390
|
```
|
|
382
391
|
物理面板配置:
|
|
392
|
+
├─ 面板品牌:亖米(Symi)
|
|
383
393
|
├─ 开关ID:5(物理面板地址)
|
|
384
394
|
├─ 按钮编号:3(面板按钮3)
|
|
385
395
|
映射到继电器:
|
|
386
|
-
├─
|
|
387
|
-
└─
|
|
396
|
+
├─ 从站地址:11(Modbus继电器设备11)
|
|
397
|
+
└─ 线圈编号:15(继电器通道15)
|
|
388
398
|
|
|
389
399
|
MQTT主题:
|
|
390
400
|
├─ 订阅状态:modbus/relay/11/15/state
|
|
@@ -444,7 +454,20 @@ MQTT主题:
|
|
|
444
454
|
#### 配置主站节点
|
|
445
455
|
|
|
446
456
|
1. 拖拽 **Modbus主站** 节点到流程画布
|
|
447
|
-
2.
|
|
457
|
+
2. 双击节点,配置连接参数:
|
|
458
|
+
|
|
459
|
+
**TCP连接:**
|
|
460
|
+
- 连接类型:TCP/IP
|
|
461
|
+
- TCP主机:192.168.1.100
|
|
462
|
+
- TCP端口:502
|
|
463
|
+
|
|
464
|
+
**串口连接:**
|
|
465
|
+
- 连接类型:串口
|
|
466
|
+
- 点击"搜索串口"按钮查找可用串口
|
|
467
|
+
- 从下拉列表中选择串口(自动填入)
|
|
468
|
+
- 或手动输入:COM1 / /dev/ttyUSB0 / /dev/ttyS1
|
|
469
|
+
- 波特率:9600(或根据设备要求,8-N-1已固定)
|
|
470
|
+
|
|
448
471
|
3. 配置从站设备:
|
|
449
472
|
- 默认已有1个从站(地址10)
|
|
450
473
|
- 点击"添加从站"按钮可添加更多(最多10个)
|
|
@@ -460,21 +483,28 @@ MQTT主题:
|
|
|
460
483
|
|
|
461
484
|
**RS-485总线连接:**
|
|
462
485
|
- **连接类型**:TCP/IP 或 串口
|
|
486
|
+
|
|
487
|
+
TCP模式:
|
|
463
488
|
- **TCP主机**:192.168.1.200(RS-485转TCP网关地址)
|
|
464
489
|
- **TCP端口**:8888
|
|
465
|
-
|
|
466
|
-
|
|
490
|
+
|
|
491
|
+
串口模式:
|
|
492
|
+
- 点击"搜索串口"按钮查找可用串口
|
|
493
|
+
- 从下拉列表中选择串口(自动填入)
|
|
494
|
+
- 或手动输入:COM1 / /dev/ttyUSB0 / /dev/ttyS1
|
|
495
|
+
- **波特率**:9600(亖米协议固定,8-N-1已自动配置)
|
|
467
496
|
|
|
468
497
|
**MQTT服务器:**
|
|
469
498
|
- 选择与主站相同的MQTT配置
|
|
470
499
|
|
|
471
500
|
**开关面板:**
|
|
501
|
+
- **面板品牌**:亖米(Symi)- 默认,支持1-8键开关
|
|
472
502
|
- **开关ID**:0(物理面板地址,0-255)
|
|
473
503
|
- **按钮编号**:1(面板按钮,1-8)
|
|
474
504
|
|
|
475
505
|
**映射到继电器:**
|
|
476
|
-
-
|
|
477
|
-
-
|
|
506
|
+
- **从站地址**:10(Modbus继电器设备地址)
|
|
507
|
+
- **线圈编号**:0(继电器通道,0-31)
|
|
478
508
|
|
|
479
509
|
3. 连接输入节点(可选,用于手动控制)
|
|
480
510
|
4. 连接输出节点(如:debug节点)查看状态
|
|
@@ -485,6 +515,7 @@ MQTT主题:
|
|
|
485
515
|
【完整配置】
|
|
486
516
|
RS-485连接:TCP网关192.168.1.200:8888(或串口/dev/ttyUSB0 9600)
|
|
487
517
|
MQTT服务器:本地MQTT服务器(192.168.1.100:1883)
|
|
518
|
+
面板品牌:亖米(Symi)- 支持1-8键开关
|
|
488
519
|
物理面板:开关ID=0,按钮1
|
|
489
520
|
映射到:继电器10,线圈0
|
|
490
521
|
|
|
@@ -535,16 +566,24 @@ MQTT服务器:本地MQTT服务器(192.168.1.100:1883)
|
|
|
535
566
|
- 轮询间隔:200ms
|
|
536
567
|
```
|
|
537
568
|
|
|
538
|
-
###
|
|
569
|
+
### 串口连接示例(支持自动搜索)
|
|
539
570
|
|
|
540
571
|
```
|
|
541
|
-
|
|
572
|
+
配置方式1:自动搜索(推荐)
|
|
573
|
+
1. 连接类型:串口
|
|
574
|
+
2. 点击"搜索串口"按钮
|
|
575
|
+
3. 等待系统检测串口(1-2秒)
|
|
576
|
+
4. 从下拉列表中选择串口
|
|
577
|
+
- 支持:COM1, COM2, COM3... (Windows)
|
|
578
|
+
- 支持:/dev/ttyUSB0, /dev/ttyS1, /dev/ttyS2... (Linux/macOS)
|
|
579
|
+
- 显示厂商信息,便于识别设备
|
|
580
|
+
5. 波特率:9600(默认,已自动配置8-N-1)
|
|
581
|
+
|
|
582
|
+
配置方式2:手动输入
|
|
542
583
|
- 连接类型:串口
|
|
543
|
-
- 串口:COM3(Windows)或 /dev/ttyUSB0(Linux)
|
|
584
|
+
- 串口:COM3(Windows)或 /dev/ttyUSB0 或 /dev/ttyS1(Linux/macOS)
|
|
544
585
|
- 波特率:9600
|
|
545
|
-
-
|
|
546
|
-
- 停止位:1
|
|
547
|
-
- 校验位:无
|
|
586
|
+
- 其他参数:8-N-1(已固定,无需配置)
|
|
548
587
|
```
|
|
549
588
|
|
|
550
589
|
### MQTT集成示例
|
|
@@ -679,6 +718,34 @@ Home Assistant结果:
|
|
|
679
718
|
✅ **HA重启**:不影响,通过retain消息自动重新发现
|
|
680
719
|
✅ **Node-RED重启**:不影响,配置自动加载,连接自动建立
|
|
681
720
|
|
|
721
|
+
## 智能日志系统
|
|
722
|
+
|
|
723
|
+
### 日志限流机制
|
|
724
|
+
|
|
725
|
+
为避免日志过多导致内存占用过大,本节点实现了智能日志限流系统:
|
|
726
|
+
|
|
727
|
+
**工作原理**:
|
|
728
|
+
- **首次错误**:立即显示完整错误信息
|
|
729
|
+
- **重复错误**:10分钟内不再重复显示相同错误
|
|
730
|
+
- **10分钟后**:再次显示错误,确保持续监控
|
|
731
|
+
- **重新部署**:清除日志记录,允许立即显示错误
|
|
732
|
+
|
|
733
|
+
**日志提示**:
|
|
734
|
+
```
|
|
735
|
+
[warn] 轮询从站10失败(不影响其他从站): Timed out [此错误将在10分钟后再次显示]
|
|
736
|
+
```
|
|
737
|
+
|
|
738
|
+
**好处**:
|
|
739
|
+
- ✅ 避免日志文件快速增长
|
|
740
|
+
- ✅ 防止内存占用过大
|
|
741
|
+
- ✅ 保持错误监控能力
|
|
742
|
+
- ✅ 不影响正常功能
|
|
743
|
+
|
|
744
|
+
**适用场景**:
|
|
745
|
+
- Modbus设备未连接时的超时错误
|
|
746
|
+
- MQTT服务器未配置时的连接错误
|
|
747
|
+
- 其他周期性重复的错误
|
|
748
|
+
|
|
682
749
|
## 可靠性保证
|
|
683
750
|
|
|
684
751
|
### 消息队列和并发处理
|
|
@@ -762,6 +829,19 @@ Home Assistant结果:
|
|
|
762
829
|
|
|
763
830
|
### 轻量级协议(从站节点,V0.13)
|
|
764
831
|
|
|
832
|
+
#### 品牌支持
|
|
833
|
+
|
|
834
|
+
- **亖米(Symi)**:默认品牌,完整实现轻量级协议V0.13
|
|
835
|
+
- 支持1-8键开关面板
|
|
836
|
+
- RS-485总线通信(TCP网关或串口)
|
|
837
|
+
- 完整的按键监听和指示灯控制
|
|
838
|
+
- CRC8校验保证数据完整性
|
|
839
|
+
- **其他品牌**:预留扩展接口
|
|
840
|
+
- 可通过修改协议适配其他品牌1-8键开关
|
|
841
|
+
- 后续版本将陆续增加更多品牌支持
|
|
842
|
+
|
|
843
|
+
#### 亖米协议规格
|
|
844
|
+
|
|
765
845
|
- **物理层**:RS-485总线
|
|
766
846
|
- **串口参数**:波特率9600,1起始位,8数据位,1停止位,无校验位
|
|
767
847
|
- **帧格式**:`[0x7E][数据][CRC8][0x7D]`
|
|
@@ -854,10 +934,18 @@ node-red
|
|
|
854
934
|
- 确认设备已启动Modbus TCP服务
|
|
855
935
|
|
|
856
936
|
**串口连接失败**:
|
|
937
|
+
- **使用串口搜索功能**:点击"搜索串口"按钮自动检测可用串口
|
|
857
938
|
- 确认串口名称正确(Windows设备管理器或Linux `ls /dev/tty*`)
|
|
858
|
-
- 检查串口权限(Linux需要:`sudo usermod -a -G dialout $USER
|
|
939
|
+
- 检查串口权限(Linux需要:`sudo usermod -a -G dialout $USER`,然后重新登录)
|
|
859
940
|
- 确认波特率等参数与设备匹配
|
|
860
941
|
- 确保串口没有被其他程序占用
|
|
942
|
+
- 重新拔插USB串口适配器
|
|
943
|
+
|
|
944
|
+
**串口列表为空**:
|
|
945
|
+
- 确认系统已正确安装USB驱动
|
|
946
|
+
- Windows:检查设备管理器中的"端口(COM和LPT)"
|
|
947
|
+
- Linux/macOS:运行 `ls /dev/tty*` 查看串口设备(/dev/ttyUSB0、/dev/ttyS1等)
|
|
948
|
+
- 可以手动输入串口路径,无需依赖自动搜索
|
|
861
949
|
|
|
862
950
|
### 轮询错误
|
|
863
951
|
|
|
@@ -867,6 +955,12 @@ node-red
|
|
|
867
955
|
4. 适当增加轮询间隔(快速轮询可能导致超时)
|
|
868
956
|
5. 查看Node-RED日志获取详细错误信息
|
|
869
957
|
|
|
958
|
+
**关于日志输出**:
|
|
959
|
+
- 本节点使用智能日志限流机制,相同的错误每10分钟只显示一次
|
|
960
|
+
- 重新部署流程时会清除日志记录,允许再次显示错误
|
|
961
|
+
- 这样可以避免日志过多导致内存占用过大
|
|
962
|
+
- 如果看到"[此错误将在10分钟后再次显示]"提示,说明日志限流正在工作
|
|
963
|
+
|
|
870
964
|
### MQTT问题
|
|
871
965
|
|
|
872
966
|
1. 确认MQTT Broker地址正确且可访问
|
|
@@ -909,12 +1003,80 @@ python -m pymodbus.server tcp --port 502
|
|
|
909
1003
|
|
|
910
1004
|
## 更新日志
|
|
911
1005
|
|
|
912
|
-
### v1.
|
|
1006
|
+
### v1.5.4 (2025-10-18) - MQTT错误日志优化 ✅最新版本
|
|
1007
|
+
- ✅ **MQTT错误日志限流**:
|
|
1008
|
+
- MQTT连接错误也采用10分钟限流机制
|
|
1009
|
+
- 避免MQTT未配置时频繁输出错误日志(每几秒一次)
|
|
1010
|
+
- 与Modbus错误日志统一管理,保持日志整洁
|
|
1011
|
+
- 重新部署时清除MQTT错误日志记录,允许再次显示
|
|
1012
|
+
- ✅ **日志系统完善**:
|
|
1013
|
+
- 所有错误日志都采用10分钟限流机制
|
|
1014
|
+
- 提示信息统一:"[此错误将在10分钟后再次显示]"
|
|
1015
|
+
- 不影响功能正常运行,只是减少重复日志输出
|
|
1016
|
+
- ✅ **默认配置确认**:
|
|
1017
|
+
- RS-485串口参数默认9600-8-N-1(符合亖米协议)
|
|
1018
|
+
- 面板品牌默认SYMI,支持1-8键开关
|
|
1019
|
+
- 所有默认参数都已正确配置并持久化
|
|
1020
|
+
- ✅ **完整测试验证**:
|
|
1021
|
+
- 日志限流机制测试通过
|
|
1022
|
+
- Node-RED持久稳定运行
|
|
1023
|
+
- 配置持久化保存正常
|
|
1024
|
+
|
|
1025
|
+
### v1.5.3 (2025-10-18) - 界面优化和智能日志系统
|
|
1026
|
+
- ✅ **串口选择界面优化**:
|
|
1027
|
+
- 输入框和下拉框一体化,不再单独占用一行
|
|
1028
|
+
- 点击搜索后,下拉框替换输入框显示检测到的串口
|
|
1029
|
+
- 选择串口后自动填充并恢复输入框显示
|
|
1030
|
+
- 完美支持所有类型串口(COM1、/dev/ttyUSB0、/dev/ttyS1等)
|
|
1031
|
+
- ✅ **智能日志限流系统**:
|
|
1032
|
+
- Modbus超时错误每10分钟只提示一次,避免日志过多
|
|
1033
|
+
- 重新部署时清除日志记录,允许再次显示错误
|
|
1034
|
+
- 减少日志输出,防止内存占用过大
|
|
1035
|
+
- 保持功能正常,不影响错误监控
|
|
1036
|
+
- ✅ **界面布局完善**:
|
|
1037
|
+
- 主站节点:Grid布局,从站地址/线圈范围/轮询间隔完美对齐
|
|
1038
|
+
- 标签在输入框上方,清晰的垂直布局
|
|
1039
|
+
- 移除所有emoji图标,保持专业简洁
|
|
1040
|
+
- 渐变配色和阴影效果,现代化视觉
|
|
1041
|
+
- ✅ **错误处理优化**:
|
|
1042
|
+
- RS-485连接添加配置验证,防止无效配置重试
|
|
1043
|
+
- 串口未配置时提供明确提示
|
|
1044
|
+
- 配置错误时不重试,避免无用日志
|
|
1045
|
+
- ✅ **完整测试验证**:
|
|
1046
|
+
- Node-RED v4.0.8 / Node.js v23.1.0测试通过
|
|
1047
|
+
- 日志输出优化,10分钟内不重复显示相同错误
|
|
1048
|
+
- 界面布局完美,串口选择流畅
|
|
1049
|
+
|
|
1050
|
+
### v1.5.0 (2025-10-18) - 串口搜索和完整测试
|
|
1051
|
+
- ✅ **串口自动搜索**:主站和从站节点支持一键搜索本机可用串口
|
|
1052
|
+
- 点击"搜索串口"按钮自动检测系统串口
|
|
1053
|
+
- 双击列表项自动填入串口名称
|
|
1054
|
+
- 显示串口厂商信息,便于识别
|
|
1055
|
+
- 兼容serialport v9和v10+
|
|
1056
|
+
- ✅ **串口连接修复**:优化串口列表API,使用modbus-serial自带的serialport模块
|
|
1057
|
+
- ✅ **代码规范检查**:符合Node-RED开发标准
|
|
1058
|
+
- ✅ **完整测试验证**:Node-RED启动正常,节点加载成功
|
|
1059
|
+
- ✅ **文档完善**:更新所有配置说明和使用指南
|
|
1060
|
+
|
|
1061
|
+
### v1.4.0 (2025-10-18) - 界面优化和品牌扩展
|
|
1062
|
+
- ✅ **品牌选择功能**:从站开关节点增加品牌选择(默认亖米,预留其他品牌扩展)
|
|
1063
|
+
- ✅ **界面布局优化**:
|
|
1064
|
+
- 主站节点:从站地址/线圈标签紧贴输入框,更清晰的布局
|
|
1065
|
+
- 从站节点:所有标签优化对齐,提升配置体验
|
|
1066
|
+
- ✅ **全面美化**:
|
|
1067
|
+
- 统一间距和对齐方式
|
|
1068
|
+
- 优化配置区域分组(颜色、边框、圆角)
|
|
1069
|
+
- 改进提示信息样式(蓝色、黄色、绿色主题)
|
|
1070
|
+
- 增强按钮视觉效果(悬停、禁用状态)
|
|
1071
|
+
- ✅ **代码规范检查**:确保符合Node-RED开发标准
|
|
1072
|
+
- ✅ **本地测试验证**:安装测试通过,节点加载正常
|
|
1073
|
+
|
|
1074
|
+
### v1.3.0 (2025-10-17) - 轻量级协议完整实现 ✅已发布到npm
|
|
913
1075
|
- ✅ **完整协议实现**:实现轻量级智能家居通信协议(V0.13)
|
|
914
1076
|
- ✅ **协议解析**:完整的帧解析、CRC8校验、按键事件检测
|
|
915
1077
|
- ✅ **协议构建**:单灯控制、多灯控制、查询指令完整实现
|
|
916
1078
|
- ✅ **按键监听**:实时监听RS-485总线上的按键按下事件
|
|
917
|
-
- ✅
|
|
1079
|
+
- ✅ **指示灯控制**:通过协议同步控制物理面板指示灯
|
|
918
1080
|
- ✅ **完整三向同步**:
|
|
919
1081
|
- 物理按键 → RS-485协议 → MQTT命令 → 继电器动作
|
|
920
1082
|
- 继电器状态 → MQTT状态 → RS-485协议 → 指示灯同步
|
|
@@ -924,6 +1086,8 @@ python -m pymodbus.server tcp --port 502
|
|
|
924
1086
|
- ✅ **CRC8校验**:完整的CRC8算法实现,确保数据完整性
|
|
925
1087
|
- ✅ **自动应答**:接收到按键事件后自动发送MQTT命令
|
|
926
1088
|
- ✅ **状态同步**:MQTT状态变化自动发送RS-485控制指令
|
|
1089
|
+
- ✅ **已发布npm**:https://www.npmjs.com/package/node-red-contrib-symi-modbus
|
|
1090
|
+
- ✅ **npm安装验证**:从npm安装测试通过
|
|
927
1091
|
|
|
928
1092
|
### v1.2.0 (2025-10-17) - 完整RS-485总线支持
|
|
929
1093
|
- ✅ **新增RS-485总线连接**:从站节点支持连接物理开关面板的RS-485总线
|
|
@@ -991,9 +1155,10 @@ MIT License - 详见 [LICENSE](LICENSE) 文件
|
|
|
991
1155
|
## 支持
|
|
992
1156
|
|
|
993
1157
|
如有问题或建议:
|
|
994
|
-
- 📧 提交Issue:
|
|
1158
|
+
- 📧 提交Issue:https://github.com/symi-daguo/node-red-contrib-symi-modbus/issues
|
|
995
1159
|
- 📦 NPM包:https://www.npmjs.com/package/node-red-contrib-symi-modbus
|
|
996
|
-
-
|
|
1160
|
+
- 👤 NPM作者:https://www.npmjs.com/~symi-daguo
|
|
1161
|
+
- 🌐 Node-RED Flow Library:即将提交
|
|
997
1162
|
|
|
998
1163
|
## 致谢
|
|
999
1164
|
|