matterbridge-ha-roborock 3.1.0 → 3.4.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.
@@ -0,0 +1,228 @@
1
+ # Matterbridge Web UI 配置指南
2
+
3
+ 本插件完全支持通过 Matterbridge Web UI 进行可视化配置,无需手动编辑 JSON 文件。
4
+
5
+ ## 📱 访问 Web UI
6
+
7
+ 1. 启动 Matterbridge:
8
+ ```bash
9
+ matterbridge
10
+ ```
11
+
12
+ 2. 打开浏览器访问:
13
+ ```
14
+ http://localhost:8283
15
+ ```
16
+
17
+ 3. 如果是远程服务器,将 `localhost` 替换为服务器 IP 地址
18
+
19
+ ## ⚙️ 配置步骤
20
+
21
+ ### 1. 找到插件
22
+
23
+ 在 Matterbridge Web UI 的插件列表中找到 `matterbridge-ha-roborock`
24
+
25
+ ### 2. 点击配置按钮
26
+
27
+ 点击插件旁边的配置图标(齿轮图标)
28
+
29
+ ### 3. 填写配置项
30
+
31
+ #### 必填项
32
+
33
+ **Home Assistant URL**
34
+ - 格式:`http://IP:端口`
35
+ - 示例:`http://192.168.1.100:8123`
36
+ - 说明:你的 Home Assistant 完整地址
37
+
38
+ **Home Assistant 长期访问令牌**
39
+ - 在 Home Assistant 中创建:
40
+ 1. 点击左下角用户名
41
+ 2. 选择"安全"
42
+ 3. 滚动到"长期访问令牌"
43
+ 4. 点击"创建令牌"
44
+ 5. 复制生成的令牌
45
+ - 这是一个密码字段,输入后会自动隐藏
46
+
47
+ **Matter 模式**
48
+ - `server`(推荐):每个设备独立配对
49
+ - `bridge`:所有设备通过一个桥接器
50
+
51
+ #### 可选项(推荐配置)
52
+
53
+ **设备白名单**
54
+ - 点击"添加项"按钮
55
+ - 输入扫地机的 entity_id
56
+ - 示例:`vacuum.dreame_vacuum_r2254`
57
+ - 可以添加多个设备
58
+
59
+ **电池传感器映射**
60
+ - 格式:`vacuum.xxx` → `sensor.xxx_battery_level`
61
+ - 示例:
62
+ ```
63
+ 键: vacuum.dreame_vacuum_r2254
64
+ 值: sensor.dreame_vacuum_r2254_battery_level
65
+ ```
66
+
67
+ **充电状态传感器映射**
68
+ - 格式:`vacuum.xxx` → `binary_sensor.xxx_charging_state`
69
+ - 示例:
70
+ ```
71
+ 键: vacuum.dreame_vacuum_r2254
72
+ 值: binary_sensor.dreame_vacuum_r2254_charging_state
73
+ ```
74
+
75
+ **清洁模式实体映射**
76
+ - 格式:`vacuum.xxx` → `select.xxx_cleaning_mode`
77
+ - 示例:
78
+ ```
79
+ 键: vacuum.dreame_vacuum_r2254
80
+ 值: select.dreame_vacuum_r2254_cleaning_mode
81
+ ```
82
+
83
+ **错误传感器映射**
84
+ - 格式:`vacuum.xxx` → `sensor.xxx_error`
85
+ - 示例:
86
+ ```
87
+ 键: vacuum.dreame_vacuum_r2254
88
+ 值: sensor.dreame_vacuum_r2254_error
89
+ ```
90
+
91
+ **当前房间传感器映射**
92
+ - 格式:`vacuum.xxx` → `sensor.xxx_current_room`
93
+ - 示例:
94
+ ```
95
+ 键: vacuum.dreame_vacuum_r2254
96
+ 值: sensor.sao_di_ji_current_room
97
+ ```
98
+
99
+ **已清洁面积传感器映射**
100
+ - 格式:`vacuum.xxx` → `sensor.xxx_cleaned_area`
101
+ - 示例:
102
+ ```
103
+ 键: vacuum.dreame_vacuum_r2254
104
+ 值: sensor.dreame_vacuum_r2254_cleaned_area
105
+ ```
106
+
107
+ **清洁时间传感器映射**
108
+ - 格式:`vacuum.xxx` → `sensor.xxx_cleaning_time`
109
+ - 示例:
110
+ ```
111
+ 键: vacuum.dreame_vacuum_r2254
112
+ 值: sensor.dreame_vacuum_r2254_cleaning_time
113
+ ```
114
+
115
+ **房间面积配置**
116
+ - 用于计算清洁进度和预计完成时间
117
+ - 格式:`房间名称` → `面积(平方米)`
118
+ - 示例:
119
+ ```
120
+ 键: 浴室
121
+ 值: 5.5
122
+
123
+ 键: 儿童房
124
+ 值: 12
125
+
126
+ 键: 卧室
127
+ 值: 15
128
+
129
+ 键: 阳光房
130
+ 值: 10
131
+ ```
132
+
133
+ #### 高级选项
134
+
135
+ **轮询间隔 (毫秒)**
136
+ - 默认:30000 (30秒)
137
+ - 范围:5000 - 300000
138
+ - 说明:状态更新的轮询间隔
139
+
140
+ **调试模式**
141
+ - 默认:关闭
142
+ - 开启后会输出详细的调试日志
143
+
144
+ **关闭时注销设备**
145
+ - 默认:关闭
146
+ - 开启后插件关闭时会从 Matter 网络注销设备
147
+
148
+ ### 4. 保存配置
149
+
150
+ 点击"保存"按钮保存配置
151
+
152
+ ### 5. 重启插件
153
+
154
+ 保存后需要重启插件使配置生效:
155
+ 1. 在插件列表中找到 `matterbridge-ha-roborock`
156
+ 2. 点击重启按钮
157
+ 3. 等待插件重新加载
158
+
159
+ ## 🎯 配置验证
160
+
161
+ ### 检查插件状态
162
+
163
+ 在 Web UI 中查看插件状态:
164
+ - ✅ 绿色:运行正常
165
+ - ⚠️ 黄色:有警告
166
+ - ❌ 红色:有错误
167
+
168
+ ### 查看日志
169
+
170
+ 在 Web UI 中点击"日志"按钮查看详细日志:
171
+ - 确认 Home Assistant 连接成功
172
+ - 确认设备已注册
173
+ - 查看配对码
174
+
175
+ ### 测试配置
176
+
177
+ 1. 在苹果家庭或其他 Matter 控制器中添加设备
178
+ 2. 使用配对码配对
179
+ 3. 测试基本功能:
180
+ - 开始/暂停清扫
181
+ - 返回充电
182
+ - 选择房间清扫
183
+
184
+ ## 💡 常见问题
185
+
186
+ ### Q: 配置保存后没有生效?
187
+ A: 需要重启插件才能使配置生效
188
+
189
+ ### Q: 如何查看我的 entity_id?
190
+ A: 在 Home Assistant 中:
191
+ 1. 开发者工具 → 状态
192
+ 2. 搜索你的设备
193
+ 3. 复制 entity_id
194
+
195
+ ### Q: 房间名称从哪里获取?
196
+ A: 房间名称来自你的 Home Assistant 集成配置,通常在扫地机的地图配置中
197
+
198
+ ### Q: 配置了传感器映射但没有效果?
199
+ A: 确保:
200
+ 1. entity_id 正确(在 HA 中存在)
201
+ 2. 传感器有值(不是 unavailable)
202
+ 3. 已重启插件
203
+
204
+ ### Q: Web UI 无法访问?
205
+ A: 检查:
206
+ 1. Matterbridge 是否正在运行
207
+ 2. 防火墙是否允许 8283 端口
208
+ 3. 如果是远程访问,使用服务器 IP 而不是 localhost
209
+
210
+ ## 📚 更多信息
211
+
212
+ - [完整文档](./README.md)
213
+ - [配置示例](./config.example.json)
214
+ - [更新日志](./CHANGELOG.md)
215
+
216
+ ## 🆘 获取帮助
217
+
218
+ 如果遇到问题:
219
+ 1. 查看 Matterbridge 日志
220
+ 2. 启用调试模式获取详细信息
221
+ 3. 在 GitHub 提交 Issue
222
+
223
+
224
+
225
+
226
+
227
+
228
+
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "matterbridge-ha-roborock",
3
+ "type": "AccessoryPlatform",
4
+ "haUrl": "http://homeassistant.local:8123",
5
+ "haToken": "YOUR_LONG_LIVED_ACCESS_TOKEN_HERE",
6
+ "matterMode": "server",
7
+ "pollInterval": 30000,
8
+ "debug": false,
9
+ "deviceWhitelist": [
10
+ "vacuum.dreame_vacuum_r2254"
11
+ ],
12
+ "batterySensorMap": {
13
+ "vacuum.dreame_vacuum_r2254": "sensor.dreame_vacuum_r2254_battery_level"
14
+ },
15
+ "chargingSensorMap": {
16
+ "vacuum.dreame_vacuum_r2254": "binary_sensor.dreame_vacuum_r2254_charging_state"
17
+ },
18
+ "cleaningModeEntityMap": {
19
+ "vacuum.dreame_vacuum_r2254": "select.dreame_vacuum_r2254_cleaning_mode"
20
+ },
21
+ "errorSensorMap": {
22
+ "vacuum.dreame_vacuum_r2254": "sensor.dreame_vacuum_r2254_error"
23
+ },
24
+ "currentRoomSensorMap": {
25
+ "vacuum.dreame_vacuum_r2254": "sensor.sao_di_ji_current_room"
26
+ },
27
+ "cleanedAreaSensorMap": {
28
+ "vacuum.dreame_vacuum_r2254": "sensor.dreame_vacuum_r2254_cleaned_area"
29
+ },
30
+ "cleaningTimeSensorMap": {
31
+ "vacuum.dreame_vacuum_r2254": "sensor.dreame_vacuum_r2254_cleaning_time"
32
+ },
33
+ "roomAreaSizes": {
34
+ "浴室": 5.5,
35
+ "儿童房": 12,
36
+ "卧室": 15,
37
+ "阳光房": 10
38
+ },
39
+ "unregisterOnShutdown": false
40
+ }
41
+
42
+
43
+
44
+
45
+
46
+
47
+
package/config.json CHANGED
@@ -6,5 +6,29 @@
6
6
  "deviceWhitelist": [
7
7
  "vacuum.dreame_vacuum_r2254"
8
8
  ],
9
+ "batterySensorMap": {
10
+ "vacuum.dreame_vacuum_r2254": "sensor.dreame_vacuum_r2254_battery_level"
11
+ },
12
+ "chargingSensorMap": {
13
+ "vacuum.dreame_vacuum_r2254": "binary_sensor.dreame_vacuum_r2254_charging_state"
14
+ },
15
+ "cleaningModeEntityMap": {
16
+ "vacuum.dreame_vacuum_r2254": "select.dreame_vacuum_r2254_cleaning_mode"
17
+ },
18
+ "errorSensorMap": {
19
+ "vacuum.dreame_vacuum_r2254": "sensor.dreame_vacuum_r2254_error"
20
+ },
21
+ "currentRoomSensorMap": {
22
+ "vacuum.dreame_vacuum_r2254": "sensor.sao_di_ji_current_room"
23
+ },
24
+ "cleanedAreaSensorMap": {
25
+ "vacuum.dreame_vacuum_r2254": "sensor.dreame_vacuum_r2254_cleaned_area"
26
+ },
27
+ "roomAreaSizes": {
28
+ "浴室": 5.5,
29
+ "儿童房": 12.0,
30
+ "卧室": 15.0,
31
+ "阳光房": 10.0
32
+ },
9
33
  "debug": true
10
34
  }
@@ -0,0 +1,129 @@
1
+ #!/bin/bash
2
+
3
+ SERVER="root@10.10.10.167"
4
+ PASSWORD="19940725"
5
+ VERSION=$(node -p "require('./package.json').version")
6
+ PACKAGE_FILE="matterbridge-ha-roborock-${VERSION}.tgz"
7
+
8
+ echo "🚀 部署 matterbridge-ha-roborock v${VERSION} 到服务器..."
9
+ echo ""
10
+
11
+ # 检查包文件是否存在
12
+ if [ ! -f "$PACKAGE_FILE" ]; then
13
+ echo "❌ 包文件不存在: $PACKAGE_FILE"
14
+ echo "请先运行: npm pack"
15
+ exit 1
16
+ fi
17
+
18
+ echo "📦 1/4 上传包到服务器..."
19
+ expect << EOF
20
+ set timeout 30
21
+ spawn scp $PACKAGE_FILE $SERVER:/tmp/
22
+ expect {
23
+ "password:" { send "$PASSWORD\r"; exp_continue }
24
+ "yes/no" { send "yes\r"; exp_continue }
25
+ eof
26
+ }
27
+ EOF
28
+
29
+ if [ $? -ne 0 ]; then
30
+ echo "❌ 上传失败"
31
+ exit 1
32
+ fi
33
+ echo "✅ 上传成功"
34
+ echo ""
35
+
36
+ echo "🔧 2/4 连接到服务器..."
37
+ echo ""
38
+
39
+ expect << 'EOFEXPECT'
40
+ set timeout 60
41
+ set password "19940725"
42
+ set server "root@10.10.10.167"
43
+ set version [exec node -p "require('./package.json').version"]
44
+
45
+ spawn ssh $server
46
+
47
+ expect {
48
+ "password:" { send "$password\r" }
49
+ "yes/no" { send "yes\r"; exp_continue }
50
+ }
51
+
52
+ expect "# "
53
+ send "echo '=== 停止 Matterbridge ==='\r"
54
+
55
+ expect "# "
56
+ send "pkill -f matterbridge || true\r"
57
+
58
+ expect "# "
59
+ send "sleep 2\r"
60
+
61
+ expect "# "
62
+ send "echo '=== 安装新版本 ==='\r"
63
+
64
+ expect "# "
65
+ send "npm install -g /tmp/matterbridge-ha-roborock-$version.tgz\r"
66
+
67
+ expect "# "
68
+ send "echo '=== 验证安装 ==='\r"
69
+
70
+ expect "# "
71
+ send "npm list -g matterbridge-ha-roborock\r"
72
+
73
+ expect "# "
74
+ send "echo '=== 清理临时文件 ==='\r"
75
+
76
+ expect "# "
77
+ send "rm -f /tmp/matterbridge-ha-roborock-*.tgz\r"
78
+
79
+ expect "# "
80
+ send "echo '=== 启动 Matterbridge ==='\r"
81
+
82
+ expect "# "
83
+ send "cd ~ && nohup matterbridge > /tmp/matterbridge.log 2>&1 &\r"
84
+
85
+ expect "# "
86
+ send "sleep 3\r"
87
+
88
+ expect "# "
89
+ send "echo '=== 检查运行状态 ==='\r"
90
+
91
+ expect "# "
92
+ send "ps aux | grep matterbridge | grep -v grep\r"
93
+
94
+ expect "# "
95
+ send "exit\r"
96
+
97
+ expect eof
98
+ EOFEXPECT
99
+
100
+ if [ $? -eq 0 ]; then
101
+ echo ""
102
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
103
+ echo "✅ 部署完成!"
104
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
105
+ echo ""
106
+ echo "📊 服务器信息:"
107
+ echo " 地址: $SERVER"
108
+ echo " 版本: v${VERSION}"
109
+ echo ""
110
+ echo "🔍 查看日志:"
111
+ echo " ssh $SERVER 'tail -f /tmp/matterbridge.log'"
112
+ echo ""
113
+ echo "🛑 停止服务:"
114
+ echo " ssh $SERVER 'pkill -f matterbridge'"
115
+ echo ""
116
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
117
+ else
118
+ echo ""
119
+ echo "❌ 部署失败"
120
+ exit 1
121
+ fi
122
+
123
+
124
+
125
+
126
+
127
+
128
+
129
+
@@ -5,6 +5,7 @@ import { HomeAssistantClient } from './homeassistant-client.js';
5
5
  */
6
6
  export interface VacuumState {
7
7
  state: string;
8
+ detailedState?: string;
8
9
  batteryLevel: number;
9
10
  isCharging: boolean;
10
11
  fanSpeed?: string;
@@ -12,6 +13,9 @@ export interface VacuumState {
12
13
  error?: string;
13
14
  errorMsg?: string;
14
15
  currentRoom?: string;
16
+ cleanedArea?: number;
17
+ cleaningTime?: number;
18
+ hepaFilterLife?: number;
15
19
  rawAttributes?: any;
16
20
  }
17
21
  /**
@@ -33,8 +37,17 @@ export declare class HAVacuumController extends EventEmitter {
33
37
  private cleaningModeEntityId?;
34
38
  private errorSensorId?;
35
39
  private currentRoomSensorId?;
40
+ private stateSensorId?;
41
+ private cleanedAreaSensorId?;
42
+ private cleaningTimeSensorId?;
43
+ private hepaFilterSensorId?;
44
+ private roomAreaSizes?;
45
+ private selectedRoomNames;
36
46
  private currentState?;
37
- constructor(haClient: HomeAssistantClient, entityId: string, batterySensorId?: string, chargingSensorId?: string, cleaningModeEntityId?: string, errorSensorId?: string, currentRoomSensorId?: string);
47
+ private roomTimers;
48
+ private lastRoom?;
49
+ private taskStartTime;
50
+ constructor(haClient: HomeAssistantClient, entityId: string, batterySensorId?: string, chargingSensorId?: string, cleaningModeEntityId?: string, errorSensorId?: string, currentRoomSensorId?: string, stateSensorId?: string, cleanedAreaSensorId?: string, cleaningTimeSensorId?: string, hepaFilterSensorId?: string, roomAreaSizes?: Record<string, number>);
38
51
  /**
39
52
  * 初始化控制器 - 获取初始状态并设置监听
40
53
  */
@@ -51,6 +64,18 @@ export declare class HAVacuumController extends EventEmitter {
51
64
  * 获取当前状态
52
65
  */
53
66
  getState(): VacuumState | undefined;
67
+ /**
68
+ * 获取选择的房间名称列表
69
+ */
70
+ getSelectedRoomNames(): string[];
71
+ /**
72
+ * 设置选择的房间名称列表
73
+ */
74
+ setSelectedRoomNames(roomNames: string[]): void;
75
+ /**
76
+ * 获取房间面积配置
77
+ */
78
+ getRoomAreaSizes(): Record<string, number> | undefined;
54
79
  /**
55
80
  * 强制刷新状态(用于主动更新)
56
81
  */
@@ -97,6 +122,23 @@ export declare class HAVacuumController extends EventEmitter {
97
122
  * @param segmentMap Matter ID 到 Dreame ID 的映射
98
123
  */
99
124
  cleanSegments(segments: number[], segmentMap?: Record<number, string>): Promise<void>;
125
+ /**
126
+ * 更新房间计时器
127
+ * 当房间切换时记录上一个房间的时间,开始新房间的计时
128
+ */
129
+ updateRoomTimer(currentRoom: string | undefined, isCleaningState: boolean): void;
130
+ /**
131
+ * 获取指定房间的清扫时间(秒)
132
+ */
133
+ getRoomTime(roomName: string): number;
134
+ /**
135
+ * 重置所有房间计时器
136
+ */
137
+ resetRoomTimers(): void;
138
+ /**
139
+ * 获取房间计时信息(用于调试)
140
+ */
141
+ getRoomTimersInfo(): Record<string, number>;
100
142
  /**
101
143
  * 销毁控制器
102
144
  */