node-red-contrib-symi-modbus 2.6.6 → 2.6.8

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
@@ -1,30 +1,27 @@
1
1
  # node-red-contrib-symi-modbus
2
2
 
3
- Node-RED的Modbus继电器控制节点,支持TCP/串口通信和MQTT集成。
3
+ Node-RED的Modbus继电器控制节点,支持TCP/串口通信和MQTT集成,专为智能家居场景设计。
4
4
 
5
5
  [![npm version](https://badge.fury.io/js/node-red-contrib-symi-modbus.svg)](https://www.npmjs.com/package/node-red-contrib-symi-modbus)
6
6
  [![Node-RED](https://img.shields.io/badge/Node--RED-%3E%3D2.0.0-red)](https://nodered.org)
7
7
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
8
8
 
9
- ## 功能特性
9
+ ## 核心特性
10
10
 
11
+ - **双模式运行**:
12
+ - **本地模式**:纯串口/TCP通信,断网也能稳定运行,无需MQTT
13
+ - **MQTT模式**:可选接入Home Assistant等第三方平台
11
14
  - **多协议支持**:
15
+ - Modbus RTU(串口直连RS485)
12
16
  - Modbus TCP(标准Modbus TCP)
13
17
  - Modbus RTU over TCP(TCP转RS485网关)
14
18
  - Telnet ASCII(推荐用于TCP转RS485网关)
15
- - Modbus RTU(串口直连)
16
- - **Symi开关支持**:自动识别并处理Symi私有协议按键事件,无需额外配置
17
- - **多设备轮询**:最多支持10台Modbus从站设备同时轮询
18
- - **32路继电器**:每台设备支持32个线圈(继电器通道)
19
- - **智能轮询**:从站上报时自动暂停轮询,优先处理数据,完成后继续轮询
20
- - **灵活配置**:可自定义轮询间隔(100-10000ms,默认200ms)、线圈范围、从站地址
21
- - **🔥 双模式支持**:
22
- - **本地模式**:纯串口通信,无需MQTT,断网也能稳定运行
23
- - **MQTT模式**:可选接入Home Assistant等第三方平台
24
- - **MQTT集成**(可选):自动生成Home Assistant兼容的MQTT发现消息
25
- - **实时状态**:实时监控和控制继电器状态
26
- - **主从模式**:提供主站节点和从站控制节点
27
- - **稳定可靠**:完整的内存管理和错误处理,适合工控机长期稳定运行
19
+ - **Symi开关集成**:自动识别并处理Symi私有协议按键事件,实现开关面板与继电器的双向同步
20
+ - **HomeKit网桥**:一键桥接到Apple HomeKit,支持Siri语音控制,自动同步主站配置,名称可自定义
21
+ - **多设备轮询**:支持最多10台Modbus从站设备,每台32路继电器
22
+ - **智能轮询机制**:从站上报时自动暂停轮询,优先处理数据,避免冲突
23
+ - **稳定可靠**:完整的内存管理、错误处理、断线重连,适合7x24小时长期运行
24
+ - **总线数据过滤**:自动忽略总线上的无关数据,只处理本节点相关的数据
28
25
 
29
26
  ## 快速开始
30
27
 
@@ -56,13 +53,14 @@ node-red-restart
56
53
  **配置方法**:
57
54
  1. 主站节点:不启用MQTT或不配置MQTT服务器
58
55
  2. 从站开关节点:不配置MQTT服务器
59
- 3. 将从站开关节点的输出连线到主站节点的输入
56
+ 3. **无需连线**:主站和从站通过内部事件自动通信(v2.6.7+)
60
57
 
61
58
  **优势**:
62
59
  - ✅ 断网也能稳定运行
63
60
  - ✅ 不依赖外部服务
64
61
  - ✅ 响应速度更快
65
62
  - ✅ 配置更简单
63
+ - ✅ 无需手动连线(免连线通信)
66
64
 
67
65
  #### 模式2:MQTT模式(推荐用于Home Assistant集成)
68
66
 
@@ -142,10 +140,49 @@ node-red-restart
142
140
  - 面板品牌: `亖米` (默认)
143
141
  - 开关ID: 物理面板地址 (0-255)
144
142
  - 按钮编号: 按键编号 (1-8)
143
+ - 按钮类型: 开关按钮或场景按钮(也可自动识别)
145
144
  4. 配置映射到的继电器:
146
145
  - 目标从站地址: `10`
147
146
  - 目标线圈编号: `0`
148
- 5. 部署流程
147
+ 5. **无需连线**:主站和从站通过内部事件自动通信,无需手动连线
148
+ 6. 部署流程
149
+
150
+ ### 6. 配置HomeKit网桥节点(可选)
151
+
152
+ 将Modbus继电器桥接到Apple HomeKit,实现Siri语音控制:
153
+
154
+ **配置步骤**:
155
+
156
+ 1. **添加网桥节点**
157
+ - 拖拽 **HomeKit网桥** 节点到流程画布
158
+ - 双击节点打开配置界面
159
+
160
+ 2. **基础配置**
161
+ - 网桥名称: `Modbus继电器网桥`(在HomeKit中显示)
162
+ - 选择主站节点: 从下拉框选择已配置的主站
163
+ - 配对码: `031-45-154`(添加到HomeKit时使用)
164
+ - 端口: `51828`(保持默认)
165
+
166
+ 3. **配置继电器名称**(推荐)
167
+ - 选择主站后,下方会自动显示所有继电器
168
+ - 为每个继电器输入友好的中文名称
169
+ - 例如:`客厅灯`、`卧室灯`、`空调插座`等
170
+ - 配置后在HomeKit中直接显示,无需再修改
171
+
172
+ 4. **部署并添加到HomeKit**
173
+ - 点击"完成"并部署流程
174
+ - 打开iPhone/iPad的"家庭"App
175
+ - 点击右上角"+" → "添加配件"
176
+ - 选择"更多选项"
177
+ - 找到"Modbus继电器网桥"
178
+ - 输入配对码:`031-45-154`
179
+ - 完成配对
180
+
181
+ **使用说明**:
182
+ - 线圈0-15显示为开关,线圈16-31显示为插座
183
+ - 支持Siri语音控制:"嘿Siri,打开客厅灯"
184
+ - 支持HomeKit自动化和场景
185
+ - 配置会自动保存,重启后无需重新配对
149
186
 
150
187
  ## 核心特性说明
151
188
 
@@ -187,6 +224,7 @@ node-red-restart
187
224
  **2. 场景按钮**
188
225
  - **控制方式**:每次按下toggle切换状态(开→关→开)
189
226
  - **LED反馈**:根据当前状态显示LED(开=亮,关=灭)
227
+ - **协议特征**:操作信息为0x11、0x12、0x13等(高4位=1表示场景模式)
190
228
  - **适用场景**:
191
229
  - 场景触发(回家模式、离家模式等)
192
230
  - 一键全开/全关
@@ -196,25 +234,30 @@ node-red-restart
196
234
  - 使用原始设备地址确保LED精确反馈
197
235
  - 支持物理按键和Home Assistant远程控制
198
236
  - 200ms防抖,避免重复触发
237
+ - 自动识别场景模式(根据操作信息高4位判断)
199
238
 
200
239
  **两种模式对比**:
201
240
 
202
241
  | 特性 | 开关按钮 | 场景按钮 |
203
242
  |------|---------|---------|
204
243
  | 控制方式 | 开/关独立 | Toggle切换 |
244
+ | 操作信息 | 0x00/0x01 | 0x11/0x12/0x13等 |
205
245
  | LED反馈协议 | SET (0x03) | REPORT (0x04) |
206
246
  | 按键事件 | 独立开/关码 | 统一触发码 |
207
247
  | LED同步 | ✓ 完美同步 | ✓ 完美同步 |
208
248
  | HA远程控制 | ✓ 支持 | ✓ 支持 |
209
249
  | 推荐场景 | 灯光/插座 | 场景触发 |
250
+ | 自动识别 | ✓ 支持 | ✓ 支持 |
210
251
 
211
252
  **配置说明**:
212
253
 
213
254
  1. **RS-485连接**:选择串口配置节点(波特率9600,8N1)
214
- 2. **MQTT服务器**:选择MQTT配置节点(连接Home Assistant等)
255
+ 2. **MQTT服务器**(可选):
256
+ - 本地模式:不启用MQTT,主站和从站通过内部事件自动通信(免连线)
257
+ - MQTT模式:启用MQTT并选择MQTT配置节点
215
258
  3. **面板配置**:
216
259
  - 面板品牌:选择亖米(Symi)
217
- - 按钮类型:开关按钮或场景按钮
260
+ - 按钮类型:开关按钮或场景按钮(也可自动识别)
218
261
  - 开关ID:物理面板的RS-485地址(0-255)
219
262
  - 按钮编号:面板上的按键序号(1-8)
220
263
  4. **继电器映射**:
@@ -223,15 +266,23 @@ node-red-restart
223
266
 
224
267
  **使用示例**:
225
268
 
226
- **示例1:客厅灯光开关**
269
+ **示例1:客厅灯光开关(本地模式)**
227
270
  - 面板:开关ID=2,按键1(开关按钮)
228
271
  - 继电器:从站10,1路
229
- - 效果:按下面板按键,客厅灯开/关,面板LED同步状态
272
+ - 配置:不启用MQTT,主站和从站自动通信(免连线)
273
+ - 效果:按下面板按键,客厅灯开/关,面板LED同步状态,断网也能正常工作
230
274
 
231
- **示例2:全开场景**
275
+ **示例2:全开场景(MQTT模式)**
232
276
  - 面板:开关ID=2,按键8(场景按钮)
233
277
  - 继电器:从站10,32路
234
- - 效果:按下面板按键,触发全开场景
278
+ - 配置:启用MQTT,连接到Home Assistant
279
+ - 效果:按下面板按键,触发全开场景,HA中可远程控制,面板LED同步状态
280
+
281
+ **示例3:三键场景开关(本地模式)**
282
+ - 面板:开关ID=1,按键1/2/3(场景按钮,自动识别)
283
+ - 继电器:从站10,1/2/3路
284
+ - 配置:不启用MQTT,主站和从站自动通信(免连线)
285
+ - 效果:按下按键1/2/3,分别控制对应继电器,LED指示灯同步状态
235
286
 
236
287
  ### 智能轮询机制
237
288
 
@@ -246,6 +297,28 @@ node-red-restart
246
297
  - 从站上报的数据得到优先处理
247
298
  - 系统响应迅速,状态同步及时
248
299
 
300
+ ### 总线数据过滤与稳定性
301
+
302
+ 本节点具备完善的总线数据过滤机制,确保长期稳定运行:
303
+
304
+ **数据过滤机制**:
305
+ - **CRC校验**:所有Symi协议帧都经过CRC8校验,无效数据自动丢弃
306
+ - **静默忽略**:总线上的非相关数据(其他设备、其他协议)静默忽略,不影响正常通信
307
+ - **精确匹配**:只处理本节点配置的从站地址和线圈范围内的数据
308
+ - **TCP粘包处理**:TCP模式下自动处理粘包和分包问题,确保数据完整性
309
+
310
+ **稳定性保障**:
311
+ - **写入队列**:多个节点同时写入时自动排队,避免并发冲突
312
+ - **断线重连**:TCP和串口断线后自动重连,指数退避策略(最大60秒)
313
+ - **内存管理**:定时清理缓存,防止内存泄漏
314
+ - **错误日志限流**:避免日志刷屏影响性能
315
+ - **MQTT独立性**:MQTT开启或关闭都不影响主站和从站的本地通信
316
+
317
+ **网络适应性**:
318
+ - **离线通信**:串口模式完全脱离网络依赖,断网也能正常工作
319
+ - **TCP稳定性**:TCP模式支持局域网通信,网络恢复后自动重连
320
+ - **MQTT可选**:MQTT仅用于对接第三方平台,不影响本地控制
321
+
249
322
  ## 调试节点(modbus-debug)
250
323
 
251
324
  用于抓取并显示原始RS485字节流数据(HEX),帮助定位串口或TCP网关下的Modbus通信问题。
@@ -304,7 +377,11 @@ node-red-restart
304
377
  - TCP网络故障自动恢复
305
378
  - 连接前彻底清理旧实例,避免资源泄漏
306
379
  - **互斥锁机制**:防止读写冲突导致的数据异常
307
- - **Keep-Alive心跳**:TCP连接启用30秒心跳检测
380
+ - **TCP永久连接**:
381
+ - 禁用TCP超时(永久连接),避免无数据时超时断开
382
+ - Keep-Alive心跳10秒间隔,确保连接活跃
383
+ - 适应客户长期不在家、总线无数据的场景
384
+ - 网络故障自动重连,恢复后立即恢复通信
308
385
 
309
386
  ## 技术规格
310
387
 
@@ -397,6 +474,80 @@ devices:
397
474
  3. **查看Node-RED调试日志**:部署后查看日志中的轮询信息
398
475
  4. **检查串口波特率**:确认波特率为9600(与从站设备一致)
399
476
  5. **检查从站地址**:确认从站地址正确(1-247)
477
+
478
+ ### 轮询超时或频繁报错
479
+
480
+ 1. **轮询永不停止原则**:
481
+ - 即使从站不响应,轮询也会持续运行
482
+ - 不会因超时而跳过任何从站
483
+ - 只记录错误日志,不影响总线轮询机制
484
+ 2. **正常超时**:偶尔超时是正常的,系统会自动重试
485
+ - 超时设置:2-3秒(串口/TCP)
486
+ - 只记录日志,不停止轮询
487
+ - 轮询会持续运行,不受超时影响
488
+ 3. **频繁超时**:
489
+ - 检查Modbus连接是否稳定
490
+ - 调整轮询间隔(默认200ms,可增加到500ms)
491
+ - 检查从站设备是否在线
492
+ - 查看总线是否有其他设备干扰
493
+ 4. **总线干扰**:
494
+ - 总线上的其他数据(如Symi网关通信、其他Modbus设备)可能导致偶尔超时或CRC错误
495
+ - 系统已优化容错机制,会自动忽略异常数据并继续轮询
496
+ - 非超时错误(如CRC错误)不累积计数,只记录日志
497
+ 5. **长期稳定性保障**:
498
+ - 轮询循环采用try-catch包裹,确保异常不会中断轮询
499
+ - 每1000轮输出一次调试日志,证明轮询持续运行
500
+ - 定时清理机制(每小时)防止内存泄漏
501
+ - 所有定时器在节点关闭时正确清除
502
+
503
+ ### 总线上出现未知数据
504
+
505
+ 1. **识别数据来源**:
506
+ - 使用`modbus-debug`节点监听总线数据(必须使用共享的serial-port-config,避免串口冲突)
507
+ - 查看Node-RED日志中的"写入线圈"日志,确认是否是本节点发送的
508
+ - 检查是否有其他Modbus设备或Symi网关在总线上通信
509
+ 2. **常见数据格式**:
510
+ - `01 05 00 01 FF 00 ...`:写单个线圈(功能码0x05)
511
+ - `01 0F 00 00 00 20 ...`:写多个线圈(功能码0x0F)
512
+ - `7E 01 03 ...`:Symi轻量级协议数据
513
+ 3. **影响**:
514
+ - 总线上的其他数据不会影响轮询稳定性
515
+ - 可能导致偶尔的CRC错误或超时,但系统会自动忽略并继续轮询
516
+
517
+ ### 串口冲突错误
518
+
519
+ **错误信息**:
520
+ ```
521
+ 串口监听错误: Port is not open
522
+ 串口监听错误: Error Resource temporarily unavailable Cannot lock port
523
+ ```
524
+
525
+ **原因**:
526
+ - 多个节点试图独立打开同一个串口
527
+ - 串口只能被一个进程同时打开
528
+
529
+ **解决方案**:
530
+ 1. **modbus-debug节点**:必须使用"serial"源类型,选择共享的`serial-port-config`配置节点
531
+ 2. **不要使用独立连接**:不要让多个节点独立打开同一个串口
532
+ 3. **共享连接配置**:所有节点(主站、从站开关、modbus-debug)都应该使用同一个`serial-port-config`配置节点
533
+
534
+ ### 批量更换连接配置
535
+
536
+ **问题**:如何批量更换所有节点的RS-485连接配置?
537
+
538
+ **Node-RED原生方法**(推荐):
539
+ 1. 创建新的`serial-port-config`配置节点
540
+ 2. 点击右上角菜单 → 配置节点
541
+ 3. 找到旧的`serial-port-config`配置节点
542
+ 4. 点击删除按钮
543
+ 5. Node-RED会提示"此配置节点被X个节点使用,是否替换为其他配置?"
544
+ 6. 选择新创建的配置节点
545
+ 7. 点击确认,所有使用旧配置的节点会自动更换为新配置
546
+
547
+ **注意**:
548
+ - 这是Node-RED的原生功能,安全可靠
549
+ - 删除配置节点前必须先创建新配置
550
+ - 替换后需要部署才能生效
400
551
  6. **确认从站设备在线**:使用Modbus调试工具测试从站是否响应
401
552
  7. **检查MQTT连接**:确保MQTT broker地址正确,轮询不依赖MQTT但状态发布需要MQTT
402
553
  8. **测试连接**:
@@ -405,10 +556,28 @@ devices:
405
556
 
406
557
  ### 从站开关无响应
407
558
 
408
- 1. 检查RS-485连接是否正常
409
- 2. 确认开关面板地址和按钮编号正确
410
- 3. 检查MQTT连接状态
411
- 4. 查看Node-RED日志中的协议解析信息
559
+ 1. **检查免连线通信**(v2.6.7+推荐):
560
+ - **无需连线**:主站和从站通过内部事件自动通信,无需手动连线
561
+ - 查看Node-RED日志,确认是否有"内部事件模式:发送命令到从站X 线圈Y"的日志
562
+ - 查看主站节点日志,确认是否有"收到内部事件:从站X 线圈Y"的日志
563
+ - 查看主站节点日志,确认是否有"内部事件写入成功,已广播状态变化"的日志
564
+ - 查看从站开关节点日志,确认是否有"收到状态变化事件"和"LED反馈已发送"的日志
565
+ 2. **检查RS-485连接**:
566
+ - 确认RS-485连接配置正确(串口路径、波特率等)
567
+ - 查看节点状态显示是否为"MQTT未启用 - 使用内部事件模式"
568
+ - 物理面板连接:确认物理面板连接到正确的RS-485总线(TCP或串口)
569
+ 3. **检查开关面板配置**:
570
+ - 确认开关面板地址和按钮编号正确
571
+ - 场景模式开关:操作信息为0x11、0x12、0x13等(高4位=1)
572
+ - 开关模式开关:操作信息为0x00(关)或0x01(开)
573
+ 4. **检查继电器映射**:
574
+ - 确认目标从站地址和线圈编号正确
575
+ - 线圈编号范围:0-31(对应用户输入的1-32路)
576
+ 5. **查看调试日志**:
577
+ - 使用modbus-debug节点抓取原始总线数据
578
+ - 查看Node-RED日志中的协议解析信息
579
+ - 确认按键事件是否被正确识别
580
+ - 确认LED反馈协议帧是否正确发送(查看日志中的HEX字符串)
412
581
 
413
582
  ## 输入消息格式
414
583
 
@@ -447,6 +616,40 @@ msg.payload = "ON"; // 或 "OFF"
447
616
  msg.payload = 1; // 或 0
448
617
  ```
449
618
 
619
+ ### HomeKit网桥节点
620
+
621
+ HomeKit网桥节点无需输入消息,自动同步主站配置和状态。
622
+
623
+ **配置参数**:
624
+ - **主站节点**:选择要桥接的Modbus主站节点(必填)
625
+ - **网桥名称**:在HomeKit中显示的网桥名称(默认:Modbus继电器网桥)
626
+ - **MAC地址**:HomeKit网桥的唯一标识符(自动生成,无需修改)
627
+ - **配对码**:HomeKit配对时使用的PIN码(格式:XXX-XX-XXX,默认:031-45-154)
628
+ - **端口**:HomeKit网桥监听端口(默认:51828)
629
+ - **继电器名称配置**:为每个继电器配置友好的中文名称(可选)
630
+
631
+ **自动同步规则**:
632
+ - 自动读取主站节点配置的所有从站和线圈
633
+ - 线圈0-15(1-16路):创建为开关(Switch)配件
634
+ - 线圈16-31(17-32路):创建为插座(Outlet)配件
635
+ - 监听主站的状态变化事件,实时同步到HomeKit
636
+ - 接收HomeKit控制命令,发送到主站执行
637
+
638
+ **使用示例**:
639
+ 1. 在Node-RED中配置好主站节点和从站
640
+ 2. 添加HomeKit网桥节点,选择主站节点
641
+ 3. 为每个继电器配置友好的名称(例如:客厅灯、卧室灯)
642
+ 4. 部署流程
643
+ 5. 在iPhone的"家庭"App中添加配件,输入配对码
644
+ 6. 完成配对后,即可在HomeKit中控制继电器,支持Siri语音控制
645
+
646
+ **注意事项**:
647
+ - 确保主站节点已正确配置并运行
648
+ - 配对码格式必须为XXX-XX-XXX(8位数字)
649
+ - 端口不能与其他服务冲突(默认51828)
650
+ - 配置信息持久化存储在~/.node-red/homekit-persist目录
651
+ - 重启Node-RED后自动恢复配对状态,无需重新配对
652
+
450
653
  ## 输出消息格式
451
654
 
452
655
  ### 主站节点
@@ -507,27 +710,48 @@ msg.payload = 1; // 或 0
507
710
 
508
711
  ## 项目信息
509
712
 
510
- **版本**: v2.6.6
713
+ **版本**: v2.6.8
511
714
 
512
715
  **核心功能**:
513
716
  - 支持多种Modbus协议(Telnet ASCII、RTU over TCP、Modbus TCP、Modbus RTU串口)
514
717
  - 多设备轮询(最多10台从站,每台32路继电器,轮询间隔100-10000ms可调)
515
- - Symi私有协议自动识别(支持两种485开关控制方式)
516
- - 智能轮询暂停机制(从站上报时自动暂停,处理完成后恢复)
517
718
  - 🔥 **双模式支持**(本地模式和MQTT模式可选切换,断网也能稳定运行)
518
- - MQTT集成(可选启用,Home Assistant自动发现,实体唯一性保证,QoS=0高性能发布)
519
- - 物理开关面板双向同步(亖米协议支持,LED反馈同步)
520
- - 共享连接架构(多个从站开关节点共享同一个串口/TCP连接,支持500+节点)
521
- - 长期稳定运行(内存管理、智能重连、错误日志限流、异步MQTT发布)
719
+ - 🔥 **免连线通信**(主站和从站通过内部事件通信,无需连线)
720
+ - 🔥 **HomeKit网桥**(一键桥接到Apple HomeKit,支持Siri语音控制)
721
+ - MQTT集成(可选启用,Home Assistant自动发现)
722
+ - 物理开关面板双向同步(支持开关模式和场景模式)
723
+ - 长期稳定运行(内存管理、智能重连、异步处理)
522
724
 
523
- **技术栈**:
524
- - modbus-serial: ^8.0.23(内部封装serialport,支持TCP和串口)
525
- - serialport: ^12.0.0(原生串口通信)
526
- - mqtt: ^5.14.1(最新稳定版,可选依赖)
725
+ **技术要求**:
527
726
  - Node.js: >=14.0.0
528
727
  - Node-RED: >=2.0.0
529
728
 
530
- **最新更新(v2.6.6)**:
729
+ **最新更新(v2.6.8)**:
730
+ - **🔥 新增HomeKit网桥节点**:
731
+ - 一键桥接Modbus继电器到Apple HomeKit
732
+ - 自动同步主站配置的所有从站和继电器
733
+ - 支持在Node-RED中配置继电器友好名称
734
+ - 双向同步:HomeKit控制继电器,继电器状态实时同步到HomeKit
735
+ - 支持Siri语音控制和HomeKit自动化场景
736
+ - 持久化存储配对信息,重启后自动恢复
737
+ - 线圈0-15显示为开关,线圈16-31显示为插座(避免误触发)
738
+
739
+ **v2.6.7更新**:
740
+ - **🔥 修复LED反馈功能**:
741
+ - 主站轮询检测到状态变化时自动广播事件
742
+ - 从站开关节点监听状态变化并发送LED反馈到物理面板
743
+ - 支持开关模式(SET协议)和场景模式(REPORT协议)
744
+ - LED反馈队列间隔20ms,避免总线拥堵
745
+ - **🔥 TCP连接稳定性优化**:
746
+ - 禁用TCP超时(永久连接),避免无数据时超时断开
747
+ - Keep-Alive间隔从30秒优化到10秒
748
+ - 适应客户长期不在家、总线无数据的场景
749
+ - **日志优化**:
750
+ - 移除频繁的轮询日志("轮询持续运行中"、"正在轮询从站X")
751
+ - 轮询永久稳定运行,无需频繁确认
752
+ - 减少日志输出,降低硬盘占用
753
+
754
+ **v2.6.6更新**:
531
755
  - **🔥 彻底解决MQTT日志刷屏问题**:
532
756
  - 局域网IP检测优化:配置192.168.x.x等IP后不再尝试fallback地址
533
757
  - 高频MQTT日志改为debug级别:broker候选、认证、重连等
@@ -632,7 +856,11 @@ msg.payload = 1; // 或 0
632
856
  - TCP网络故障自动恢复
633
857
  - 连接前彻底清理旧实例,避免资源泄漏
634
858
  - **互斥锁机制**:防止读写冲突导致的数据异常
635
- - **Keep-Alive心跳**:TCP连接启用30秒心跳检测
859
+ - **TCP永久连接**:
860
+ - 禁用TCP超时(永久连接),避免无数据时超时断开
861
+ - Keep-Alive心跳10秒间隔,确保连接活跃
862
+ - 适应客户长期不在家、总线无数据的场景
863
+ - 网络故障自动重连,恢复后立即恢复通信
636
864
 
637
865
  ## 技术规格
638
866
 
@@ -835,7 +1063,7 @@ msg.payload = 1; // 或 0
835
1063
 
836
1064
  ## 项目信息
837
1065
 
838
- **版本**: v2.6.6
1066
+ **版本**: v2.6.8
839
1067
 
840
1068
  **核心功能**:
841
1069
  - 支持多种Modbus协议(Telnet ASCII、RTU over TCP、Modbus TCP、Modbus RTU串口)
@@ -843,14 +1071,18 @@ msg.payload = 1; // 或 0
843
1071
  - Symi私有协议自动识别(支持两种485开关控制方式)
844
1072
  - 智能轮询暂停机制(从站上报时自动暂停,处理完成后恢复)
845
1073
  - 🔥 **双模式支持**(本地模式和MQTT模式可选切换,断网也能稳定运行)
1074
+ - 🔥 **免连线通信**(主站和从站通过内部事件通信,无需连线,支持本地模式和MQTT模式)
1075
+ - 🔥 **HomeKit网桥**(一键桥接到Apple HomeKit,支持Siri语音控制,名称可自定义)
846
1076
  - MQTT集成(可选启用,Home Assistant自动发现,实体唯一性保证,QoS=0高性能发布)
847
- - 物理开关面板双向同步(亖米协议支持,LED反馈同步)
1077
+ - 物理开关面板双向同步(亖米协议支持,LED反馈同步,支持开关模式和场景模式)
848
1078
  - 共享连接架构(多个从站开关节点共享同一个串口/TCP连接,支持500+节点)
849
- - 长期稳定运行(内存管理、智能重连、错误日志限流、异步MQTT发布)
1079
+ - 长期稳定运行(内存管理、智能重连、错误日志限流、异步MQTT发布、TCP永久连接)
850
1080
 
851
1081
  **技术栈**:
852
1082
  - modbus-serial: ^8.0.23(内部封装serialport,支持TCP和串口)
853
1083
  - serialport: ^12.0.0(原生串口通信)
854
1084
  - mqtt: ^5.14.1(最新稳定版,可选依赖)
1085
+ - hap-nodejs: ^1.2.0(HomeKit桥接)
1086
+ - node-persist: ^4.0.4(持久化存储)
855
1087
  - Node.js: >=14.0.0
856
1088
  - Node-RED: >=2.0.0