homebridge-roborock-matter 2.8.1 → 2.9.0

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/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.9.0
4
+
5
+ - **All Apple Home feature toggles are now visible in the plugin settings UI.** The custom settings page previously exposed only a subset of the configuration; options like suction-level cleaning modes, live room tracking, room/map selection, cleaning mode selection, battery and Returning status could only be set by editing the JSON config by hand. They now live in a dedicated **Apple Home Features** section, with a clear "⚠ re-pair" marker on every option that changes the robot's announced Matter capabilities (Matter locks capabilities at commissioning — after toggling those, restart Homebridge, then remove and re-pair the robot).
6
+ - No functional changes to the plugin itself.
7
+
3
8
  ## 2.8.1
4
9
 
5
10
  - **Suction modes now render with proper localized names in Apple Home.** Field observation: Apple ignores Matter mode labels and renders its own localized names from the mode TAGS (a variant with only the Vacuum tag displays as plain "Vacuum"). Balanced and Turbo therefore now carry distinct intensity tags (Auto and Quick), matching Quiet and Max — in Apple Home the five levels render as Quiet / Automatic / Quick / Max (+ Deep Clean for Max+ on Q7). Remember: enabling `enableFanPowerCleanModes` requires one remove/re-pair of the robot, since Matter fixes the mode list at commissioning.
package/README.md CHANGED
@@ -66,6 +66,12 @@ While a robot is actively cleaning, the plugin fetches its live position from th
66
66
 
67
67
  Enabled by default; opt out with `enableLiveRoomTracking: false`.
68
68
 
69
+ ## Suction modes (optional)
70
+
71
+ Enable **Enable Suction-Level Cleaning Modes** (`enableFanPowerCleanModes`) and Apple Home's mode picker gains the suction levels — rendered by Apple with localized names from the Matter mode tags: **Quiet / Automatic / Quick / Max** (+ **Deep Clean** for the Q7's Max+ level). The current mode follows the robot live, so suction changed in the Roborock app shows up in Apple Home too.
72
+
73
+ > ⚠️ **Re-pairing required:** Matter locks an accessory's mode list at commissioning. After enabling (or disabling) this option, restart Homebridge, then **remove the robot from Apple Home and pair it again** — otherwise the new modes will not appear. The same applies to any option that changes announced capabilities.
74
+
69
75
  ## Supported robots
70
76
 
71
77
  - **B01/Q7-series (2025):** `roborock.vacuum.sc05` and compatible (Q7 M5 / M5+), including manual-tank mopping with vacuum/mop mode switching.
@@ -82,39 +82,6 @@
82
82
  </label>
83
83
  </div>
84
84
 
85
- <label class="checkbox">
86
- <input id="enable-matter-charging-docked" type="checkbox" />
87
- <span>
88
- Show Charging/Docked on the Apple Home tile
89
- <small
90
- >Reports real Matter Charging and Docked states instead of Ready while
91
- on the dock. Requires a recent iOS/tvOS; turn off and restart the
92
- bridge if the tile misbehaves.</small
93
- >
94
- </span>
95
- </label>
96
- <label class="field">
97
- <span>Charged Battery Threshold (%)</span>
98
- <input
99
- id="matter-charged-battery-threshold"
100
- type="number"
101
- min="1"
102
- max="100"
103
- step="1"
104
- placeholder="100"
105
- />
106
- <small
107
- >The tile shows Charging while docked below this battery percentage, and
108
- Docked at or above it. Lower it (e.g. 90) if a worn battery makes the
109
- robot report fully charged early.</small
110
- >
111
- </label>
112
- <p class="help matter-setup-note">
113
- After saving and restarting the Roborock bridge, use the Matter Pairing
114
- section below. Apple Home may need both the bridge QR code and the
115
- vacuum's 11-digit setup code.
116
- </p>
117
-
118
85
  <details id="advanced-settings" class="advanced-settings">
119
86
  <summary>Advanced troubleshooting</summary>
120
87
  <p class="help">
@@ -164,6 +131,130 @@
164
131
  </div>
165
132
  </section>
166
133
 
134
+ <section class="panel">
135
+ <div class="section-header">
136
+ <div>
137
+ <h2>Apple Home Features</h2>
138
+ <p class="help">
139
+ What each robot exposes through Matter. Options marked
140
+ <strong>&#9888; re-pair</strong> change the robot's announced
141
+ capabilities: after toggling them, save, restart Homebridge, then
142
+ remove the robot from Apple Home and pair it again — Matter locks
143
+ capabilities at pairing time.
144
+ </p>
145
+ </div>
146
+ </div>
147
+
148
+ <label class="checkbox">
149
+ <input id="enable-matter-service-area" type="checkbox" />
150
+ <span>
151
+ Room &amp; map selection <strong>&#9888; re-pair</strong>
152
+ <small
153
+ >Pick rooms to clean directly in Apple Home, using your Roborock room
154
+ names (multi-map homes included).</small
155
+ >
156
+ </span>
157
+ </label>
158
+
159
+ <label class="checkbox">
160
+ <input id="enable-live-room-tracking" type="checkbox" />
161
+ <span>
162
+ Live room tracking
163
+ <small
164
+ >While cleaning, the robot's map position is resolved to the room it
165
+ is physically inside and shown as the current room in Apple Home
166
+ (fetched every ~20 s during active runs only).</small
167
+ >
168
+ </span>
169
+ </label>
170
+
171
+ <label class="checkbox">
172
+ <input id="enable-matter-clean-mode" type="checkbox" />
173
+ <span>
174
+ Cleaning mode selection <strong>&#9888; re-pair</strong>
175
+ <small
176
+ >Vacuum / Mop / Vacuum + Mop in Apple Home's mode picker,
177
+ capability-gated per robot.</small
178
+ >
179
+ </span>
180
+ </label>
181
+
182
+ <label class="checkbox">
183
+ <input id="enable-fan-power-clean-modes" type="checkbox" />
184
+ <span>
185
+ Suction-level cleaning modes <strong>&#9888; re-pair</strong>
186
+ <small
187
+ >Adds Quiet / Balanced / Turbo / Max (and Max+ on Q7) to the mode
188
+ picker — Apple renders them as Quiet / Automatic / Quick / Max / Deep
189
+ Clean. Requires cleaning mode selection above.</small
190
+ >
191
+ </span>
192
+ </label>
193
+
194
+ <label class="checkbox">
195
+ <input id="enable-matter-power-source" type="checkbox" />
196
+ <span>
197
+ Battery status <strong>&#9888; re-pair</strong>
198
+ <small
199
+ >Battery percentage and charging state on the Matter accessory. See
200
+ the README for a known Apple-side limitation on percentage
201
+ refresh.</small
202
+ >
203
+ </span>
204
+ </label>
205
+
206
+ <label class="checkbox">
207
+ <input id="enable-matter-extended-states" type="checkbox" />
208
+ <span>
209
+ Returning status
210
+ <small
211
+ >Shows the extended Matter Returning state while the robot heads back
212
+ to the dock. Off by default for maximum Apple Home
213
+ compatibility.</small
214
+ >
215
+ </span>
216
+ </label>
217
+
218
+ <label class="checkbox">
219
+ <input id="enable-matter-charging-docked" type="checkbox" />
220
+ <span>
221
+ Show Charging/Docked on the Apple Home tile
222
+ <small
223
+ >Reports real Matter Charging and Docked states instead of Ready while
224
+ on the dock. Requires a recent iOS/tvOS; turn off and restart the
225
+ bridge if the tile misbehaves.</small
226
+ >
227
+ </span>
228
+ </label>
229
+ <label class="field">
230
+ <span>Charged Battery Threshold (%)</span>
231
+ <input
232
+ id="matter-charged-battery-threshold"
233
+ type="number"
234
+ min="1"
235
+ max="100"
236
+ step="1"
237
+ placeholder="100"
238
+ />
239
+ <small
240
+ >The tile shows Charging while docked below this battery percentage, and
241
+ Docked at or above it. Lower it (e.g. 90) if a worn battery makes the
242
+ robot report fully charged early.</small
243
+ >
244
+ </label>
245
+ <p class="help matter-setup-note">
246
+ After saving and restarting the Roborock bridge, use the Matter Pairing
247
+ section below. Apple Home may need both the bridge QR code and the
248
+ vacuum's 11-digit setup code.
249
+ </p>
250
+
251
+ <div class="actions">
252
+ <button id="save-feature-settings" class="secondary">
253
+ Save Settings
254
+ </button>
255
+ </div>
256
+ </section>
257
+
167
258
  <section class="panel">
168
259
  <div class="section-header">
169
260
  <div>
@@ -8,6 +8,21 @@ const elements = {
8
8
  devicesEmpty: document.getElementById("devices-empty"),
9
9
  refreshDevices: document.getElementById("refresh-devices"),
10
10
  debugMode: document.getElementById("debug-mode"),
11
+ enableMatterServiceArea: document.getElementById(
12
+ "enable-matter-service-area"
13
+ ),
14
+ enableLiveRoomTracking: document.getElementById("enable-live-room-tracking"),
15
+ enableMatterCleanMode: document.getElementById("enable-matter-clean-mode"),
16
+ enableFanPowerCleanModes: document.getElementById(
17
+ "enable-fan-power-clean-modes"
18
+ ),
19
+ enableMatterPowerSource: document.getElementById(
20
+ "enable-matter-power-source"
21
+ ),
22
+ enableMatterExtendedStates: document.getElementById(
23
+ "enable-matter-extended-states"
24
+ ),
25
+ saveFeatureSettings: document.getElementById("save-feature-settings"),
11
26
  enableMatterChargingDocked: document.getElementById(
12
27
  "enable-matter-charging-docked"
13
28
  ),
@@ -124,6 +139,35 @@ async function loadConfig() {
124
139
  elements.skipDevices.value = config.skipDevices;
125
140
  }
126
141
  elements.debugMode.checked = Boolean(config.debugMode);
142
+ // Apple Home feature toggles. Service Area, clean mode, power source and
143
+ // live room tracking default ON (config semantics: `!== false`);
144
+ // suction-level modes and extended states default OFF.
145
+ if (elements.enableMatterServiceArea) {
146
+ elements.enableMatterServiceArea.checked =
147
+ config.enableMatterServiceArea !== false;
148
+ }
149
+ if (elements.enableLiveRoomTracking) {
150
+ elements.enableLiveRoomTracking.checked =
151
+ config.enableLiveRoomTracking !== false;
152
+ }
153
+ if (elements.enableMatterCleanMode) {
154
+ elements.enableMatterCleanMode.checked =
155
+ config.enableMatterCleanMode !== false;
156
+ }
157
+ if (elements.enableFanPowerCleanModes) {
158
+ elements.enableFanPowerCleanModes.checked = Boolean(
159
+ config.enableFanPowerCleanModes
160
+ );
161
+ }
162
+ if (elements.enableMatterPowerSource) {
163
+ elements.enableMatterPowerSource.checked =
164
+ config.enableMatterPowerSource !== false;
165
+ }
166
+ if (elements.enableMatterExtendedStates) {
167
+ elements.enableMatterExtendedStates.checked = Boolean(
168
+ config.enableMatterExtendedOperationalStates
169
+ );
170
+ }
127
171
  if (elements.enableMatterChargingDocked) {
128
172
  elements.enableMatterChargingDocked.checked = Boolean(
129
173
  config.enableMatterChargingDockedStates
@@ -213,6 +257,16 @@ function getFormValues() {
213
257
  baseURL: getBaseUrl(),
214
258
  skipDevices: getSkipDevices(),
215
259
  debugMode: getDebugMode(),
260
+ enableMatterServiceArea: Boolean(elements.enableMatterServiceArea?.checked),
261
+ enableLiveRoomTracking: Boolean(elements.enableLiveRoomTracking?.checked),
262
+ enableMatterCleanMode: Boolean(elements.enableMatterCleanMode?.checked),
263
+ enableFanPowerCleanModes: Boolean(
264
+ elements.enableFanPowerCleanModes?.checked
265
+ ),
266
+ enableMatterPowerSource: Boolean(elements.enableMatterPowerSource?.checked),
267
+ enableMatterExtendedOperationalStates: Boolean(
268
+ elements.enableMatterExtendedStates?.checked
269
+ ),
216
270
  enableMatterChargingDockedStates: Boolean(
217
271
  elements.enableMatterChargingDocked?.checked
218
272
  ),
@@ -1207,6 +1261,11 @@ function init() {
1207
1261
  showToast("error", "Failed to load current config.");
1208
1262
  });
1209
1263
  elements.saveSettings.addEventListener("click", () => saveCredentials(true));
1264
+ if (elements.saveFeatureSettings) {
1265
+ elements.saveFeatureSettings.addEventListener("click", () =>
1266
+ saveCredentials(true)
1267
+ );
1268
+ }
1210
1269
  elements.login.addEventListener("click", login);
1211
1270
  elements.send2fa.addEventListener("click", sendTwoFactorEmail);
1212
1271
  elements.verify2fa.addEventListener("click", verifyTwoFactorCode);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "homebridge-roborock-matter",
3
- "version": "2.8.1",
3
+ "version": "2.9.0",
4
4
  "description": "Matter-only Homebridge plugin publishing Roborock robot vacuums (including 2025 B01/Q7-series) as native Matter accessories for Apple Home. Fork of homebridge-roborock-vacuum2.",
5
5
  "license": "MIT",
6
6
  "author": {