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 CHANGED
@@ -14,7 +14,10 @@ Node-RED的Modbus继电器控制节点,支持TCP/串口通信和MQTT集成。
14
14
 
15
15
  ## 安装
16
16
 
17
- ### 通过npm安装
17
+ [![npm version](https://badge.fury.io/js/node-red-contrib-symi-modbus.svg)](https://www.npmjs.com/package/node-red-contrib-symi-modbus)
18
+ [![npm downloads](https://img.shields.io/npm/dm/node-red-contrib-symi-modbus.svg)](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:开关ID=0,按钮1 → 继电器10-线圈0**
374
+ **示例1:亖米开关ID=0,按钮1 → 继电器10-线圈0**
367
375
  ```
368
376
  物理面板配置:
377
+ ├─ 面板品牌:亖米(Symi)
369
378
  ├─ 开关ID:0(物理面板地址)
370
379
  ├─ 按钮编号:1(面板按钮1)
371
380
  映射到继电器:
372
- ├─ 目标从站地址:10(Modbus继电器设备10)
373
- └─ 目标线圈编号:0(继电器通道0)
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:开关ID=5,按钮3 → 继电器11-线圈15**
389
+ **示例2:亖米开关ID=5,按钮3 → 继电器11-线圈15**
381
390
  ```
382
391
  物理面板配置:
392
+ ├─ 面板品牌:亖米(Symi)
383
393
  ├─ 开关ID:5(物理面板地址)
384
394
  ├─ 按钮编号:3(面板按钮3)
385
395
  映射到继电器:
386
- ├─ 目标从站地址:11(Modbus继电器设备11)
387
- └─ 目标线圈编号:15(继电器通道15)
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. 双击节点,配置连接参数(TCP或串口)
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
- - 或**串口**:/dev/ttyUSB0(直连串口)
466
- - **波特率**:9600(协议固定)
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
- - **目标从站地址**:10(Modbus继电器)
477
- - **目标线圈编号**:0(继电器通道,0-31)
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
- - 数据位:8
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.3.0 (2025-10-17) - 轻量级协议完整实现
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:[GitHub Issues]
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
- - 🌐 Node-RED Flow Library:[待提交]
1160
+ - 👤 NPM作者:https://www.npmjs.com/~symi-daguo
1161
+ - 🌐 Node-RED Flow Library:即将提交
997
1162
 
998
1163
  ## 致谢
999
1164