@homebridge-plugins/homebridge-govee 11.33.1 → 11.33.2-beta.1
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 +7 -0
- package/lib/device/fan-H7105.js +31 -22
- package/lib/device/purifier-H7123.js +10 -1
- package/lib/device/purifier-H7126.js +17 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `@homebridge-plugins/homebridge-govee` will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## v11.33.2 (Pending Release)
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- fix: implement the H7105 oscillation toggle, which threw a not-implemented error (#1339)
|
|
10
|
+
- fix: stop the purifiers reporting their startup status as unrecognised scenes (#1340)
|
|
11
|
+
|
|
5
12
|
## v11.33.1 (2026-08-04)
|
|
6
13
|
|
|
7
14
|
### Changed
|
package/lib/device/fan-H7105.js
CHANGED
|
@@ -187,33 +187,42 @@ export default class extends GoveeDevice {
|
|
|
187
187
|
|
|
188
188
|
async internalSwingUpdate(value) {
|
|
189
189
|
try {
|
|
190
|
-
|
|
191
|
-
if
|
|
190
|
+
const newValue = value ? 'on' : 'off'
|
|
191
|
+
// Don't continue if the new value is the same as before. The comparison
|
|
192
|
+
// has to be against the mapped string - cacheSwing holds 'on'/'off' and
|
|
193
|
+
// value arrives as a boolean, so comparing them directly never matched
|
|
194
|
+
if (this.cacheSwing === newValue) {
|
|
192
195
|
return
|
|
193
196
|
}
|
|
194
197
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
//
|
|
198
|
-
//
|
|
199
|
-
//
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
198
|
+
// Same oscillation shape as the H7107, which is the only other fan that
|
|
199
|
+
// reports a swing RANGE rather than a plain on/off. Turning ON carries
|
|
200
|
+
// over the range bytes from the last report seen; turning OFF must not,
|
|
201
|
+
// because a parameterised off command was answered with a zero-tailed
|
|
202
|
+
// frame while the fan kept oscillating (#1334, #1339)
|
|
203
|
+
const tailBytes = value && this.cacheSwingCode
|
|
204
|
+
? this.cacheSwingCode.slice(6, 14).match(/.{1,2}/g).map(byte => Number.parseInt(byte, 16))
|
|
205
|
+
: []
|
|
206
|
+
await this.platform.sendDeviceUpdate(this.accessory, {
|
|
207
|
+
cmd: 'ptReal',
|
|
208
|
+
value: generateCodeFromHexValues([0x33, 0x1D, value ? 0x01 : 0x00, ...tailBytes]),
|
|
209
|
+
openApi: this.accessory.context.openApiCapabilities?.oscillationToggle
|
|
210
|
+
? { instance: 'oscillationToggle', capabilityType: 'devices.capabilities.toggle', value: value ? 1 : 0 }
|
|
211
|
+
: undefined,
|
|
212
|
+
})
|
|
213
|
+
|
|
214
|
+
// The fan's own oscillation state travels as multiSync traffic, so send
|
|
215
|
+
// that shape too. Whichever the model ignores is harmless
|
|
216
|
+
await this.platform.sendDeviceUpdate(this.accessory, {
|
|
217
|
+
cmd: 'multiSync',
|
|
218
|
+
value: generateCodeFromHexValues([0x3A, 0x1D, value ? 0x01 : 0x00, ...tailBytes]),
|
|
219
|
+
})
|
|
211
220
|
|
|
212
221
|
// Cache the new state and log if appropriate
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
222
|
+
if (this.cacheSwing !== newValue) {
|
|
223
|
+
this.cacheSwing = newValue
|
|
224
|
+
this.accessory.log(`${platformLang.curSwing} [${newValue}]`)
|
|
225
|
+
}
|
|
217
226
|
} catch (err) {
|
|
218
227
|
this.failUpdate(err, () => {
|
|
219
228
|
this.service.updateCharacteristic(this.hapChar.SwingMode, this.cacheSwing === 'on' ? 1 : 0)
|
|
@@ -466,9 +466,18 @@ export default class GoveePurifierH7123 extends GoveeDevice {
|
|
|
466
466
|
case '3316': { // display light
|
|
467
467
|
break
|
|
468
468
|
}
|
|
469
|
+
// Sent in a burst when the connection comes up. What each one carries
|
|
470
|
+
// has not been worked out, and nothing here needs them, so they are
|
|
471
|
+
// known-and-ignored rather than reported every time (#1340)
|
|
472
|
+
case 'aa12':
|
|
473
|
+
case 'aa17':
|
|
474
|
+
case 'aa1f': {
|
|
475
|
+
this.accessory.logDebug(`startup status [${deviceFunction}]: ${hexString}`)
|
|
476
|
+
break
|
|
477
|
+
}
|
|
469
478
|
default:
|
|
470
479
|
logUnknownData(this.accessory, {
|
|
471
|
-
kind: '
|
|
480
|
+
kind: 'status',
|
|
472
481
|
source: params.source,
|
|
473
482
|
raw: command,
|
|
474
483
|
hex: hexString,
|
|
@@ -325,9 +325,25 @@ export default class extends GoveeDevice {
|
|
|
325
325
|
}
|
|
326
326
|
break
|
|
327
327
|
}
|
|
328
|
+
// Sent in a burst when the connection comes up. What each one carries
|
|
329
|
+
// has not been worked out, and nothing here needs them, so they are
|
|
330
|
+
// known-and-ignored rather than reported every time (#1340)
|
|
331
|
+
case '0500':
|
|
332
|
+
case '0502':
|
|
333
|
+
case '0503':
|
|
334
|
+
case '0800':
|
|
335
|
+
case '1202':
|
|
336
|
+
case '1300':
|
|
337
|
+
case '1301':
|
|
338
|
+
case '1702':
|
|
339
|
+
case '1900':
|
|
340
|
+
case '2600': {
|
|
341
|
+
this.accessory.logDebug(`startup status [${deviceFunction}]: ${hexString}`)
|
|
342
|
+
break
|
|
343
|
+
}
|
|
328
344
|
default:
|
|
329
345
|
logUnknownData(this.accessory, {
|
|
330
|
-
kind: '
|
|
346
|
+
kind: 'status',
|
|
331
347
|
source: params.source,
|
|
332
348
|
raw: command,
|
|
333
349
|
hex: hexString,
|
package/package.json
CHANGED