node-red-contrib-symi-mesh 1.2.3

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/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 SYMI 亖米
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
package/README.md ADDED
@@ -0,0 +1,592 @@
1
+ # node-red-contrib-symi-mesh
2
+
3
+ 一个为Node-RED设计的Symi蓝牙Mesh网关集成包,提供完整的设备控制和Home Assistant MQTT Discovery自动发现功能。
4
+
5
+ [![npm version](https://badge.fury.io/js/node-red-contrib-symi-mesh.svg)](https://www.npmjs.com/package/node-red-contrib-symi-mesh)
6
+ [![Node-RED](https://img.shields.io/badge/Node--RED-%3E%3D3.0.0-red)](https://nodered.org)
7
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
8
+
9
+ ## 功能特性
10
+
11
+ - **完整协议支持**:TCP/串口双模式,严格遵循蓝牙MESH网关串口协议V1.0
12
+ - **自动设备发现**:连接后自动发现所有设备,无需手动配置
13
+ - **MQTT Discovery**:自动发布HA Discovery配置,设备即插即用
14
+ - **双向状态同步**:支持0x80状态事件,实时反馈设备状态变化
15
+ - **多设备类型**:支持开关、灯光、窗帘、温控器、传感器等12+种设备
16
+ - **三合一面板**:完整支持空调+新风+地暖三合一控制面板
17
+ - **KNX集成**:支持与KNX系统双向同步
18
+ - **稳定可靠**:完善的错误处理和自动重连机制
19
+
20
+ ## 快速开始
21
+
22
+ ### 1. 安装
23
+
24
+ **方式一:通过npm安装(推荐)**
25
+ ```bash
26
+ cd ~/.node-red
27
+ npm install node-red-contrib-symi-mesh
28
+ ```
29
+
30
+ **方式二:通过Node-RED界面安装**
31
+ 1. 打开Node-RED界面
32
+ 2. 点击右上角菜单 → 节点管理
33
+ 3. 搜索 `node-red-contrib-symi-mesh`
34
+ 4. 点击安装
35
+
36
+ **方式三:本地开发安装**
37
+ ```bash
38
+ cd ~/.node-red
39
+ npm install /path/to/node-red-contrib-symi-mesh
40
+ ```
41
+
42
+ 安装后重启Node-RED:
43
+ ```bash
44
+ node-red-restart
45
+ ```
46
+
47
+ ### 2. 配置网关节点
48
+
49
+ 添加"Symi Gateway"配置节点:
50
+
51
+ **TCP模式**(推荐):
52
+ - 主机地址: 网关IP(如 192.168.2.110)
53
+ - 端口: 4196(默认)
54
+
55
+ **串口模式**:
56
+ - 串口路径: /dev/ttyUSB0
57
+ - 波特率: 115200
58
+
59
+ ### 3. 配置MQTT节点
60
+
61
+ 添加"Symi MQTT"节点:
62
+
63
+ - **网关**: 选择已配置的网关节点
64
+ - **MQTT Broker**: mqtt://localhost:1883
65
+ - **用户名/密码**: MQTT认证信息(可选)
66
+ - **Discovery前缀**: homeassistant(默认)
67
+
68
+ ### 4. 部署并验证
69
+
70
+ 1. 点击右上角"部署"按钮
71
+ 2. 检查调试面板确认连接状态:
72
+ - `Gateway connected` - 网关连接成功
73
+ - `Device discovery complete` - 设备发现完成
74
+ - `MQTT已连接` - MQTT连接成功
75
+ - `发布设备 XXX` - 设备发布到MQTT
76
+ 3. 在Home Assistant中查看自动发现的设备
77
+ 4. 测试设备控制和状态反馈
78
+
79
+ ## 支持的设备类型
80
+
81
+ | 设备类型 | 类型码 | HA实体 | 功能说明 |
82
+ |---------|-------|--------|---------|
83
+ | 零火开关 | 0x01 | switch | 1-6路独立控制,状态反馈 |
84
+ | 单火开关 | 0x02 | switch | 1-6路独立控制,状态反馈 |
85
+ | 智能插座 | 0x03 | switch | 单路开关控制 |
86
+ | 双色调光灯 | 0x04 | light | 亮度+色温调节 |
87
+ | 智能窗帘 | 0x05 | cover | 开关+位置控制(0-100%) |
88
+ | 门磁传感器 | 0x07 | binary_sensor | 门窗开关状态 |
89
+ | 人体感应 | 0x08 | binary_sensor | 人体活动检测 |
90
+ | 插卡取电 | 0x09 | switch + binary_sensor | 插卡检测+开关控制 |
91
+ | 温控器/三合一 | 0x0A | climate | 温度/模式/风速控制,当前温度采集 || 空调+新风+地暖三合一控制面板 |
92
+ | 温湿度传感器 | 0x0B | sensor | 温湿度监测 |
93
+ | 五色调光灯 | 0x18 | light | RGB+亮度+色温调节 |
94
+
95
+
96
+ ### 三合一设备说明
97
+
98
+ 三合一设备集成了空调、新风和地暖控制,在Home Assistant中自动创建3个独立实体:
99
+
100
+ #### 实体说明
101
+
102
+ **1. 空调(climate实体)**
103
+ - 温度调节:16-30°C
104
+ - 工作模式:制冷/制热/送风/除湿/关闭
105
+ - 风速控制:高/中/低/自动
106
+
107
+ **2. 新风(fan实体)**
108
+ - 开关控制:ON/OFF
109
+ - 风速档位:高/中/低/自动
110
+ - 送风/排风:支持送风和排风方向控制
111
+
112
+ **3. 地暖(climate实体)**
113
+ - 温度调节:18-32°C
114
+ - 工作模式:制热/关闭
115
+
116
+ #### 使用方式
117
+
118
+ **自动识别**:部署后自动区分普通温控器和三合一设备,无需手动配置
119
+
120
+ **控制方式**:
121
+ - HA中直接控制:设置温度/模式自动开启设备
122
+ - 面板物理操作:状态自动同步到HA
123
+ - MQTT直接控制:支持完整的MQTT命令
124
+
125
+ **KNX同步**:
126
+ 在Symi Device节点中选择三合一设备,通过"子实体"下拉选项选择与KNX同步的功能:
127
+ - 空调 ↔ KNX空调控制器
128
+ - 新风 ↔ KNX新风控制器
129
+ - 地暖 ↔ KNX地暖控制器
130
+
131
+ 每个功能独立同步,互不干扰。
132
+
133
+ ## 协议说明
134
+
135
+ ### 核心协议格式
136
+
137
+ ```
138
+ [Header(0x53)] [Opcode] [Status] [Length] [Data] [Checksum]
139
+ ```
140
+
141
+ ### 关键操作码
142
+
143
+ | 操作码 | 名称 | 方向 | 说明 |
144
+ |-------|------|------|------|
145
+ | 0x12 | 设备列表查询 | 主机→网关 | 查询所有设备 |
146
+ | 0x92 | 设备列表响应 | 网关→主机 | 返回设备信息 |
147
+ | 0x30 | 设备控制 | 主机→网关 | 控制指定设备 |
148
+ | 0xB0 | 控制响应 | 网关→主机 | 控制结果 |
149
+ | 0x80 | 状态事件 | 网关→主机 | 设备状态主动上报 |
150
+ | 0x32 | 状态查询 | 主机→网关 | 查询设备状态 |
151
+
152
+ ### 开关状态编码(重要)
153
+
154
+ **协议规则**: 每2位表示1路,b01=关,b10=开
155
+
156
+ | 路数 | 全关 | 全开 | 示例 |
157
+ |-----|------|------|------|
158
+ | 1路 | 0x01 | 0x02 | 直接值 |
159
+ | 2路 | 0x05 | 0x0A | 0x06=第1路开、第2路关 |
160
+ | 3路 | 0x15 | 0x2A | 从低位开始 |
161
+ | 4路 | 0x55 | 0xAA | 每2位1路 |
162
+ | 6路 | 0x5555 | 0xAAAA | 2字节小端序 |
163
+
164
+ ### 常用消息类型
165
+
166
+ | 消息类型 | 代码 | 数据格式 | 范围/说明 |
167
+ |---------|------|---------|----------|
168
+ | 开关状态 | 0x02 | 1-2字节 | 见上表 |
169
+ | 亮度 | 0x03 | 1字节 | 0-100% |
170
+ | 色温 | 0x04 | 1字节 | 0%=暖白, 100%=冷白 |
171
+ | 窗帘动作 | 0x05 | 1字节 | 1=开/2=关/3=停 |
172
+ | 窗帘位置 | 0x06 | 1字节 | 0-100% |
173
+ | 人体感应 | 0x0C | 1字节 | 0=无活动/1=检测到 |
174
+ | 插卡状态 | 0x0E | 1字节 | 0=无卡/1=有卡 |
175
+ | RGB颜色 | 0x11 | 5字节 | R(0-255)/G/B/WW(0-100)/CW |
176
+ | 当前温度 | 0x16 | 2字节LE | 温度*100 |
177
+ | 目标温度 | 0x1B | 2字节LE | 16-30°C, *100 |
178
+ | 风速 | 0x1C | 1字节 | 1=高/2=中/3=低/4=自动 |
179
+ | 模式 | 0x1D | 1字节 | 1=制冷/2=制热/3=送风/4=除湿 |
180
+
181
+ ## MQTT主题结构
182
+
183
+ ### Discovery主题
184
+
185
+ ```
186
+ homeassistant/[platform]/[object_id]/config
187
+ ```
188
+
189
+ 例如:
190
+ - 开关:`homeassistant/switch/9361c820dacc_switch/config`
191
+ - 温控器:`homeassistant/climate/142e68468cac_climate/config`
192
+ - 三合一空调:`homeassistant/climate/894ab820dacc_climate/config`
193
+ - 三合一新风:`homeassistant/fan/894ab820dacc_fresh_air/config`
194
+ - 三合一地暖:`homeassistant/climate/894ab820dacc_floor_heating/config`
195
+
196
+ ### 状态和命令主题
197
+
198
+ **普通设备**:
199
+ ```
200
+ symi_mesh/[mac_clean]/[entity]/state
201
+ symi_mesh/[mac_clean]/[entity]/set
202
+ ```
203
+
204
+ **三合一设备**(关键:空调使用climate主题):
205
+ ```
206
+ 空调:symi_mesh/[mac_clean]/climate/mode
207
+ 新风:symi_mesh/[mac_clean]/fresh_air/state
208
+ 地暖:symi_mesh/[mac_clean]/floor_heating/mode
209
+ ```
210
+
211
+ 例如(三合一设备 894ab820dacc):
212
+ - 空调状态: `symi_mesh/894ab820dacc/climate/target_temp`
213
+ - 空调命令: `symi_mesh/894ab820dacc/climate/target_temp/set`
214
+ - 新风状态: `symi_mesh/894ab820dacc/fresh_air/state`
215
+ - 新风命令: `symi_mesh/894ab820dacc/fresh_air/set`
216
+ - 地暖状态: `symi_mesh/894ab820dacc/floor_heating/mode`
217
+ - 地暖命令: `symi_mesh/894ab820dacc/floor_heating/mode/set`
218
+
219
+ ## KNX双向同步
220
+
221
+ 本节点支持与`node-red-contrib-knx-ultimate`完整双向同步,实现Symi Mesh设备与KNX系统的互联互通。
222
+
223
+ ### 配置步骤
224
+
225
+ #### 1. 安装KNX节点
226
+ ```bash
227
+ cd ~/.node-red
228
+ npm install node-red-contrib-knx-ultimate
229
+ ```
230
+
231
+ #### 2. 导入示例Flow
232
+ 在Node-RED中:
233
+ - 菜单 → 导入 → 选择文件
234
+ - 导入 `examples/knx-sync-example.json`
235
+ - 修改网关IP地址和设备MAC地址
236
+ - 修改KNX组地址匹配您的系统
237
+
238
+ #### 3. 设备类型映射
239
+
240
+ | Symi设备 | KNX类型 | DPT | 说明 |
241
+ |---------|--------|-----|------|
242
+ | 开关 | 开关执行器 | 1.001 | 布尔开关 |
243
+ | 双色调光 | 调光执行器 | 1.001 + 5.001 | 开关+亮度(0-255) |
244
+ | 五色调光 | RGB调光器 | 1.001 + 5.001 + 232.600 | 开关+亮度+RGB |
245
+ | 窗帘 | 窗帘执行器 | 1.008 + 5.001 | 上下+位置(0-255) |
246
+ | 温控器 | 空调控制器 | 1.001 + 9.001 + 20.102 | 开关+温度+模式 |
247
+ | 人体感应 | 移动传感器 | 1.002 | 布尔值 |
248
+ | 插卡取电 | 开关+传感器 | 1.001 + 1.002 | 开关+插卡检测 |
249
+ | 三合一-空调 | 空调控制器 | 1.001 + 9.001 + 20.102 | 开关+温度+模式 |
250
+ | 三合一-新风 | 风机控制器 | 1.001 + 5.001 | 开关+风速 |
251
+ | 三合一-地暖 | 地暖控制器 | 1.001 + 9.001 | 开关+温度 |
252
+
253
+ ### 同步逻辑
254
+
255
+ #### Symi → KNX(状态反馈)
256
+ 1. Symi设备状态变化
257
+ 2. symi-device节点输出状态
258
+ 3. function节点转换格式
259
+ 4. knxUltimate-out发送到KNX总线
260
+
261
+ #### KNX → Symi(远程控制)
262
+ 1. KNX总线命令
263
+ 2. knxUltimate-in接收命令
264
+ 3. function节点转换为MQTT格式
265
+ 4. mqtt-out发送到symi_mesh topic
266
+ 5. symi-mqtt节点处理并控制设备
267
+
268
+ ### 转换函数示例
269
+
270
+ #### 开关转换
271
+ ```javascript
272
+ // Symi→KNX
273
+ const value = msg.payload ? 1 : 0;
274
+ msg.destination = '1/1/1';
275
+ return msg;
276
+
277
+ // KNX→Symi
278
+ const mac = 'device_mac_clean';
279
+ return {
280
+ topic: `symi_mesh/${mac}/switch/set`,
281
+ payload: msg.payload === 1 ? 'ON' : 'OFF'
282
+ };
283
+ ```
284
+
285
+ #### 调光灯转换
286
+ ```javascript
287
+ // Symi→KNX (亮度)
288
+ const brightness = Math.round(msg.payload.brightness * 255 / 100);
289
+ msg.destination = '2/1/2';
290
+ msg.dpt = '5.001';
291
+ return msg;
292
+
293
+ // KNX→Symi
294
+ return {
295
+ topic: `symi_mesh/${mac}/light/set`,
296
+ payload: JSON.stringify({
297
+ brightness: msg.payload // 0-255
298
+ })
299
+ };
300
+ ```
301
+
302
+ #### 窗帘转换
303
+ ```javascript
304
+ // Symi→KNX (位置)
305
+ const position = Math.round(msg.payload.curtainPosition * 255 / 100);
306
+ msg.destination = '3/1/2';
307
+ msg.dpt = '5.001';
308
+ return msg;
309
+
310
+ // KNX→Symi
311
+ return {
312
+ topic: `symi_mesh/${mac}/cover/position/set`,
313
+ payload: Math.round(msg.payload * 100 / 255).toString()
314
+ };
315
+ ```
316
+
317
+ #### 三合一设备转换
318
+
319
+ ##### 空调转换(使用climate主题)
320
+ ```javascript
321
+ // Symi→KNX (温度)
322
+ msg.destination = '4/1/1';
323
+ msg.dpt = '9.001';
324
+ msg.payload = parseFloat(msg.payload.temp);
325
+ return msg;
326
+
327
+ // KNX→Symi (温度)
328
+ return {
329
+ topic: `symi_mesh/${mac}/climate/target_temp/set`,
330
+ payload: msg.payload.toString()
331
+ };
332
+
333
+ // Symi→KNX (模式)
334
+ const modeMap = { 'cool': 1, 'heat': 2, 'fan_only': 3, 'dry': 4 };
335
+ msg.destination = '4/1/2';
336
+ msg.dpt = '20.102';
337
+ msg.payload = modeMap[msg.payload.mode] || 0;
338
+ return msg;
339
+
340
+ // KNX→Symi (模式)
341
+ const modes = ['off', 'cool', 'heat', 'fan_only', 'dry'];
342
+ return {
343
+ topic: `symi_mesh/${mac}/climate/mode/set`,
344
+ payload: modes[msg.payload] || 'off'
345
+ };
346
+ ```
347
+
348
+ ##### 新风转换
349
+ ```javascript
350
+ // Symi→KNX (开关)
351
+ msg.destination = '4/2/1';
352
+ msg.dpt = '1.001';
353
+ msg.payload = msg.payload.switch ? 1 : 0;
354
+ return msg;
355
+
356
+ // KNX→Symi (开关)
357
+ return {
358
+ topic: `symi_mesh/${mac}/fresh_air/set`,
359
+ payload: msg.payload === 1 ? 'ON' : 'OFF'
360
+ };
361
+
362
+ // Symi→KNX (风速)
363
+ msg.destination = '4/2/2';
364
+ msg.dpt = '5.001';
365
+ msg.payload = Math.round(msg.payload.speed * 2.55);
366
+ return msg;
367
+
368
+ // KNX→Symi (风速)
369
+ return {
370
+ topic: `symi_mesh/${mac}/fresh_air/speed/set`,
371
+ payload: Math.round(msg.payload / 2.55).toString()
372
+ };
373
+ ```
374
+
375
+ ##### 地暖转换
376
+ ```javascript
377
+ // Symi→KNX (温度)
378
+ msg.destination = '4/3/1';
379
+ msg.dpt = '9.001';
380
+ msg.payload = parseFloat(msg.payload.temp);
381
+ return msg;
382
+
383
+ // KNX→Symi (温度)
384
+ return {
385
+ topic: `symi_mesh/${mac}/floor_heating/target_temp/set`,
386
+ payload: msg.payload.toString()
387
+ };
388
+ ```
389
+
390
+ ### 注意事项
391
+
392
+ 1. **组地址配置**:根据您的KNX系统修改组地址
393
+ 2. **DPT类型**:确保DPT类型与KNX设备匹配
394
+ 3. **MAC地址**:使用小写无冒号格式(如:`1427c920dacc`)
395
+ 4. **双向同步**:避免循环控制,使用`outputRBE: true`防抖
396
+ 5. **测试验证**:先测试单向同步,确认正常后再启用双向
397
+
398
+ ## 故障排除
399
+
400
+ ### 网关连接失败
401
+
402
+ **症状**: 日志显示连接错误
403
+
404
+ **解决方法**:
405
+ 1. 检查网关IP和端口(默认4196)
406
+ 2. 确认网关电源和网络正常
407
+ 3. 尝试ping网关IP
408
+ 4. 检查防火墙设置
409
+
410
+ ### 设备不显示
411
+
412
+ **症状**: MQTT连接正常但HA中无设备
413
+
414
+ **解决方法**:
415
+ 1. 确认HA的MQTT集成已启用
416
+ 2. 检查Discovery前缀是否正确(默认homeassistant)
417
+ 3. 查看MQTT日志:`symi_mesh/#`
418
+ 4. 重启Node-RED重新发布Discovery
419
+
420
+ ### 状态不同步
421
+
422
+ **症状**: 控制正常但状态不更新
423
+
424
+ **解决方法**:
425
+ 1. 检查日志中是否有`[状态事件]`
426
+ 2. 确认0x80事件正常接收
427
+ 3. 验证设备MAC地址和网络地址映射
428
+ 4. 重启网关和Node-RED
429
+
430
+ ### 控制无响应
431
+
432
+ **症状**: HA发送命令但设备不动作
433
+
434
+ **解决方法**:
435
+ 1. 检查MQTT命令是否发送(查看Node-RED日志)
436
+ 2. 确认网络地址正确
437
+ 3. 查看是否有`[控制响应] 0xB0`
438
+ 4. 尝试手动发送控制命令测试
439
+
440
+ ### 常见日志说明
441
+
442
+ ```
443
+ [INFO] Gateway connected - 网关连接成功
444
+ [INFO] Device discovery complete - 设备发现完成
445
+ [INFO] [TCP Frame] 接收: 53 80 ... - 状态事件接收
446
+ [INFO] [状态事件] 地址=0x... - 设备状态解析成功
447
+ [INFO] MQTT已连接 - MQTT连接成功
448
+ [INFO] 发布设备 XXX - 设备发布到MQTT
449
+ [WARN] 未找到topic订阅 - MQTT订阅问题
450
+ [ERROR] Connection refused - 连接被拒绝
451
+ ```
452
+
453
+ ## 节点说明
454
+
455
+ ### Symi Gateway(网关配置节点)
456
+
457
+ 配置节点,管理与Symi蓝牙Mesh网关的连接。
458
+
459
+ **配置项**:
460
+ - 连接类型:TCP或串口
461
+ - TCP模式:IP地址和端口(默认4196)
462
+ - 串口模式:串口路径和波特率(默认115200)
463
+
464
+ **功能**:
465
+ - 自动设备发现
466
+ - 状态事件处理
467
+ - 自动重连机制
468
+
469
+ ### Symi MQTT(MQTT桥接节点)
470
+
471
+ 将Symi设备桥接到MQTT broker,实现Home Assistant Discovery。
472
+
473
+ **配置项**:
474
+ - MQTT Broker地址
475
+ - 用户名/密码(可选)
476
+ - Discovery前缀(默认homeassistant)
477
+
478
+ **功能**:
479
+ - 自动发布Discovery配置
480
+ - 双向MQTT消息处理
481
+ - 设备状态同步
482
+
483
+ ### Symi Device(设备控制节点)
484
+
485
+ 用于Flow中直接控制和监听Symi设备状态。
486
+
487
+ **配置项**:
488
+ - 设备MAC地址
489
+ - 通道选择(多路开关)
490
+ - 子实体(三合一设备)
491
+
492
+ **功能**:
493
+ - 接收设备状态变化
494
+ - 发送控制命令
495
+ - 支持KNX双向同步
496
+
497
+ ## 开发者信息
498
+
499
+ ### 项目结构
500
+
501
+ ```
502
+ node-red-contrib-symi-mesh/
503
+ ├── lib/
504
+ │ ├── device-manager.js # 设备管理和状态缓存
505
+ │ ├── mqtt-helper.js # MQTT Discovery配置生成
506
+ │ ├── protocol.js # 协议构建和解析
507
+ │ ├── tcp-client.js # TCP连接客户端
508
+ │ └── serial-client.js # 串口连接客户端
509
+ ├── nodes/
510
+ │ ├── symi-gateway.js/html # 网关配置节点
511
+ │ ├── symi-mqtt.js/html # MQTT节点
512
+ │ └── symi-device.js/html # 设备控制节点
513
+ ├── examples/
514
+ │ └── knx-sync-example.json # KNX双向同步示例
515
+ ├── LICENSE
516
+ ├── README.md
517
+ └── package.json
518
+ ```
519
+
520
+ ### 协议参考
521
+
522
+ 本项目严格遵循"蓝牙MESH网关(初级版)串口协议V1.0"文档实现。
523
+
524
+ ### 贡献指南
525
+
526
+ 欢迎提交Issue和Pull Request:
527
+
528
+ 1. Fork本仓库
529
+ 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
530
+ 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
531
+ 4. 推送到分支 (`git push origin feature/AmazingFeature`)
532
+ 5. 提交Pull Request
533
+
534
+ **开发要求**:
535
+ - 遵循现有代码风格
536
+ - 添加必要的注释和文档
537
+ - 测试所有更改
538
+ - 更新README(如需要)
539
+
540
+ ## 技术支持
541
+
542
+ 如遇问题,请提供以下信息:
543
+
544
+ 1. **环境信息**:
545
+ - Node-RED版本
546
+ - Node.js版本
547
+ - 操作系统
548
+
549
+ 2. **网关信息**:
550
+ - 网关型号
551
+ - 固件版本
552
+ - 连接方式(TCP/串口)
553
+
554
+ 3. **问题描述**:
555
+ - 完整错误日志
556
+ - 设备类型和数量
557
+ - 复现步骤
558
+
559
+ 4. **调试日志**:
560
+ - Node-RED调试日志
561
+ - MQTT日志(如相关)
562
+ - 网关串口日志(如可用)
563
+
564
+ ## 更新日志
565
+
566
+ ### v1.2.3 (2025-10-28)
567
+ - 修复三合一设备新风方向状态同步问题
568
+ - 优化日志输出,提升系统性能
569
+ - 完善Home Assistant MQTT Discovery兼容性
570
+
571
+ ### v1.2.0 (2025-10-27)
572
+ - 完整支持三合一设备(空调+新风+地暖)
573
+ - 新增MQTT Discovery自动发现功能
574
+ - 优化设备识别和状态同步机制
575
+
576
+
577
+ ## 许可证
578
+
579
+ MIT License
580
+
581
+ Copyright (c) 2025 SYMI 亖米
582
+
583
+ ---
584
+
585
+ ## 关于
586
+
587
+ **作者**: SYMI 亖米
588
+ **版本**: 1.2.3
589
+ **协议**: 蓝牙MESH网关(初级版)串口协议V1.0
590
+ **最后更新**: 2025-10-28
591
+ **仓库**: https://github.com/symi-daguo/node-red-contrib-symi-mesh
592
+ **npm包**: https://www.npmjs.com/package/node-red-contrib-symi-mesh