@homebridge-plugins/homebridge-govee 11.33.2-beta.0 → 11.33.2-beta.2

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
@@ -7,6 +7,9 @@ All notable changes to `@homebridge-plugins/homebridge-govee` will be documented
7
7
  ### Changed
8
8
 
9
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
+ - fix: report unrecognised device status as status rather than as scenes (#1340)
12
+ - fix: include the payload when reporting an undecoded sensor's messages (#1340)
10
13
 
11
14
  ## v11.33.1 (2026-08-04)
12
15
 
@@ -274,7 +274,7 @@ class ApplianceBasic extends GoveeDevice {
274
274
  }
275
275
 
276
276
  logUnknownData(this.accessory, {
277
- kind: 'scene',
277
+ kind: 'status',
278
278
  source: params.source,
279
279
  raw: command,
280
280
  hex: hexString,
@@ -162,7 +162,7 @@ export default class GoveeDehumidifierH7150 extends GoveeDevice {
162
162
  }
163
163
  }
164
164
 
165
- // Check for some other scene/mode change
165
+ // Check the status frames for anything else that changed
166
166
  (params.commands || []).forEach((command) => {
167
167
  const hexString = base64ToHex(command)
168
168
  const hexParts = hexToTwoItems(hexString)
@@ -190,7 +190,7 @@ export default class GoveeDehumidifierH7150 extends GoveeDevice {
190
190
  }
191
191
  default:
192
192
  logUnknownData(this.accessory, {
193
- kind: 'scene',
193
+ kind: 'status',
194
194
  source: params.source,
195
195
  raw: command,
196
196
  hex: hexString,
@@ -89,7 +89,7 @@ export default class extends GoveeDevice {
89
89
  this.accessory.log(`${platformLang.curMode} [${mode}]`)
90
90
  }
91
91
 
92
- // Check for some other scene/mode change
92
+ // Check the status frames for anything else that changed
93
93
  (params.commands || []).forEach((command) => {
94
94
  const hexString = base64ToHex(command)
95
95
  const hexParts = hexToTwoItems(hexString)
@@ -104,7 +104,7 @@ export default class extends GoveeDevice {
104
104
  switch (deviceFunction) {
105
105
  default:
106
106
  logUnknownData(this.accessory, {
107
- kind: 'scene',
107
+ kind: 'status',
108
108
  source: params.source,
109
109
  raw: command,
110
110
  hex: hexString,
@@ -334,7 +334,7 @@ export default class extends GoveeDevice {
334
334
  }
335
335
  default:
336
336
  logUnknownData(this.accessory, {
337
- kind: 'scene',
337
+ kind: 'status',
338
338
  source: params.source,
339
339
  raw: command,
340
340
  hex: hexString,
@@ -217,7 +217,7 @@ export default class GoveeFanH7100 extends GoveeDevice {
217
217
  }
218
218
  }
219
219
 
220
- // Check for some other scene/mode change
220
+ // Check the status frames for anything else that changed
221
221
  (params.commands || []).forEach((command) => {
222
222
  const hexString = base64ToHex(command)
223
223
  const hexParts = hexToTwoItems(hexString)
@@ -264,7 +264,7 @@ export default class GoveeFanH7100 extends GoveeDevice {
264
264
  // reports it instead - which is how it gets confirmed
265
265
  if (!this.readsSwingStatus) {
266
266
  logUnknownData(this.accessory, {
267
- kind: 'scene',
267
+ kind: 'status',
268
268
  source: params.source,
269
269
  raw: command,
270
270
  hex: hexString,
@@ -281,7 +281,7 @@ export default class GoveeFanH7100 extends GoveeDevice {
281
281
  }
282
282
  default:
283
283
  logUnknownData(this.accessory, {
284
- kind: 'scene',
284
+ kind: 'status',
285
285
  source: params.source,
286
286
  raw: command,
287
287
  hex: hexString,
@@ -382,7 +382,7 @@ export default class extends GoveeDevice {
382
382
  }
383
383
  }
384
384
 
385
- // Check for some other scene/mode change
385
+ // Check the status frames for anything else that changed
386
386
  (params.commands || []).forEach((command) => {
387
387
  const hexString = base64ToHex(command)
388
388
  const hexParts = hexToTwoItems(hexString)
@@ -487,7 +487,7 @@ export default class extends GoveeDevice {
487
487
  }
488
488
  default:
489
489
  logUnknownData(this.accessory, {
490
- kind: 'scene',
490
+ kind: 'status',
491
491
  source: params.source,
492
492
  raw: command,
493
493
  hex: hexString,
@@ -386,7 +386,7 @@ export default class extends GoveeDevice {
386
386
  }
387
387
  }
388
388
 
389
- // Check for some other scene/mode change
389
+ // Check the status frames for anything else that changed
390
390
  (params.commands || []).forEach((command) => {
391
391
  const hexString = base64ToHex(command)
392
392
  const hexParts = hexToTwoItems(hexString)
@@ -491,7 +491,7 @@ export default class extends GoveeDevice {
491
491
  }
492
492
  default:
493
493
  logUnknownData(this.accessory, {
494
- kind: 'scene',
494
+ kind: 'status',
495
495
  source: params.source,
496
496
  raw: command,
497
497
  hex: hexString,
@@ -314,7 +314,7 @@ export default class extends GoveeDevice {
314
314
  }
315
315
  }
316
316
 
317
- // Check for some other scene/mode change
317
+ // Check the status frames for anything else that changed
318
318
  (params.commands || []).forEach((command) => {
319
319
  const hexString = base64ToHex(command)
320
320
  const hexParts = hexToTwoItems(hexString)
@@ -395,7 +395,7 @@ export default class extends GoveeDevice {
395
395
  }
396
396
  default:
397
397
  logUnknownData(this.accessory, {
398
- kind: 'scene',
398
+ kind: 'status',
399
399
  source: params.source,
400
400
  raw: command,
401
401
  hex: hexString,
@@ -524,7 +524,7 @@ export default class extends GoveeDevice {
524
524
  }
525
525
  }
526
526
 
527
- // Check for some other scene/mode change
527
+ // Check the status frames for anything else that changed
528
528
  (params.commands || []).forEach((command) => {
529
529
  const hexString = base64ToHex(command)
530
530
  const hexParts = hexToTwoItems(hexString)
@@ -627,7 +627,7 @@ export default class extends GoveeDevice {
627
627
  break
628
628
  default:
629
629
  logUnknownData(this.accessory, {
630
- kind: 'scene',
630
+ kind: 'status',
631
631
  source: params.source,
632
632
  raw: command,
633
633
  hex: hexString,
@@ -695,7 +695,7 @@ export default class extends GoveeDevice {
695
695
  }
696
696
  }
697
697
 
698
- // Check for some other scene/mode change
698
+ // Check the status frames for anything else that changed
699
699
  (params.commands || []).forEach((command) => {
700
700
  const hexString = base64ToHex(command)
701
701
  const hexParts = hexToTwoItems(hexString)
@@ -845,7 +845,7 @@ export default class extends GoveeDevice {
845
845
  break
846
846
  default:
847
847
  logUnknownData(this.accessory, {
848
- kind: 'scene',
848
+ kind: 'status',
849
849
  source: params.source,
850
850
  raw: command,
851
851
  hex: hexString,
@@ -199,7 +199,7 @@ export default class extends GoveeDevice {
199
199
  }
200
200
  }
201
201
 
202
- // Check for some other scene/mode change
202
+ // Check the status frames for anything else that changed
203
203
  (params.commands || []).forEach((command) => {
204
204
  const hexString = base64ToHex(command)
205
205
  const hexParts = hexToTwoItems(hexString)
@@ -224,7 +224,7 @@ export default class extends GoveeDevice {
224
224
  }
225
225
  default:
226
226
  logUnknownData(this.accessory, {
227
- kind: 'scene',
227
+ kind: 'status',
228
228
  source: params.source,
229
229
  raw: command,
230
230
  hex: hexString,
@@ -169,7 +169,7 @@ export default class extends GoveeDevice {
169
169
  }
170
170
  }
171
171
 
172
- // Check for some other scene/mode change
172
+ // Check the status frames for anything else that changed
173
173
  (params.commands || []).forEach((command) => {
174
174
  const hexString = base64ToHex(command)
175
175
  const hexParts = hexToTwoItems(hexString)
@@ -233,7 +233,7 @@ export default class extends GoveeDevice {
233
233
  }
234
234
  default:
235
235
  logUnknownData(this.accessory, {
236
- kind: 'scene',
236
+ kind: 'status',
237
237
  source: params.source,
238
238
  raw: command,
239
239
  hex: hexString,
@@ -377,7 +377,7 @@ export default class extends GoveeDevice {
377
377
  }
378
378
  }
379
379
 
380
- // Check for some other scene/mode change
380
+ // Check the status frames for anything else that changed
381
381
  (params.commands || []).forEach((command) => {
382
382
  const hexString = base64ToHex(command)
383
383
  const hexParts = hexToTwoItems(hexString)
@@ -510,7 +510,7 @@ export default class extends GoveeDevice {
510
510
  }
511
511
  default:
512
512
  logUnknownData(this.accessory, {
513
- kind: 'scene',
513
+ kind: 'status',
514
514
  source: params.source,
515
515
  raw: command,
516
516
  hex: hexString,
@@ -134,7 +134,7 @@ export default class extends GoveeDevice {
134
134
  }
135
135
  }
136
136
 
137
- // Check for some other scene/mode change
137
+ // Check the status frames for anything else that changed
138
138
  (params.commands || []).forEach((command) => {
139
139
  const hexString = base64ToHex(command)
140
140
  const hexParts = hexToTwoItems(hexString)
@@ -163,7 +163,7 @@ export default class extends GoveeDevice {
163
163
  }
164
164
  default:
165
165
  logUnknownData(this.accessory, {
166
- kind: 'scene',
166
+ kind: 'status',
167
167
  source: params.source,
168
168
  raw: command,
169
169
  hex: hexString,
@@ -325,7 +325,7 @@ export default class extends GoveeDevice {
325
325
  }
326
326
  }
327
327
 
328
- // Check for some other scene/mode change
328
+ // Check the status frames for anything else that changed
329
329
  (params.commands || []).forEach((command) => {
330
330
  const hexString = base64ToHex(command)
331
331
  const hexParts = hexToTwoItems(hexString)
@@ -434,7 +434,7 @@ export default class extends GoveeDevice {
434
434
  }
435
435
  default:
436
436
  logUnknownData(this.accessory, {
437
- kind: 'scene',
437
+ kind: 'status',
438
438
  source: params.source,
439
439
  raw: command,
440
440
  hex: hexString,
@@ -168,7 +168,7 @@ export default class GoveeIceMaker extends GoveeDevice {
168
168
  }
169
169
  }
170
170
 
171
- // Check for some other scene/mode change
171
+ // Check the status frames for anything else that changed
172
172
  (params.commands || []).forEach((command) => {
173
173
  const hexString = base64ToHex(command)
174
174
  const hexParts = hexToTwoItems(hexString)
@@ -201,7 +201,7 @@ export default class GoveeIceMaker extends GoveeDevice {
201
201
  }
202
202
  default:
203
203
  logUnknownData(this.accessory, {
204
- kind: 'scene',
204
+ kind: 'status',
205
205
  source: params.source,
206
206
  raw: command,
207
207
  hex: hexString,
@@ -242,7 +242,7 @@ export default class extends GoveeDevice {
242
242
  this.accessory.log(`${platformLang.curMode} [${mode}]`)
243
243
  }
244
244
 
245
- // Check for some other scene/mode change
245
+ // Check the status frames for anything else that changed
246
246
  (params.commands || []).forEach((command) => {
247
247
  const hexString = base64ToHex(command)
248
248
  const hexParts = hexToTwoItems(hexString)
@@ -115,7 +115,7 @@ export default class extends GoveeDevice {
115
115
  })
116
116
  }
117
117
 
118
- // Check for some other scene/mode change
118
+ // Check the status frames for anything else that changed
119
119
  (params.commands || []).forEach((command) => {
120
120
  const hexString = base64ToHex(command)
121
121
  const hexParts = hexToTwoItems(hexString)
@@ -156,7 +156,7 @@ export default class extends GoveeDevice {
156
156
  }
157
157
  default:
158
158
  logUnknownData(this.accessory, {
159
- kind: 'scene',
159
+ kind: 'status',
160
160
  source: params.source,
161
161
  raw: command,
162
162
  hex: hexString,
@@ -312,7 +312,7 @@ export default class GoveePurifierH7120 extends GoveeDevice {
312
312
  }
313
313
  }
314
314
 
315
- // Check for some other scene/mode change
315
+ // Check the status frames for anything else that changed
316
316
  (params.commands || []).forEach((command) => {
317
317
  const hexString = base64ToHex(command)
318
318
  const hexParts = hexToTwoItems(hexString)
@@ -352,7 +352,7 @@ export default class GoveePurifierH7120 extends GoveeDevice {
352
352
  }
353
353
  default:
354
354
  logUnknownData(this.accessory, {
355
- kind: 'scene',
355
+ kind: 'status',
356
356
  source: params.source,
357
357
  raw: command,
358
358
  hex: hexString,
@@ -505,7 +505,7 @@ export default class extends GoveeDevice {
505
505
  }
506
506
  default:
507
507
  logUnknownData(this.accessory, {
508
- kind: 'scene',
508
+ kind: 'status',
509
509
  source: params.source,
510
510
  raw: command,
511
511
  hex: hexString,
@@ -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: 'scene',
480
+ kind: 'status',
472
481
  source: params.source,
473
482
  raw: command,
474
483
  hex: hexString,
@@ -270,7 +270,7 @@ export default class extends GoveeDevice {
270
270
  }
271
271
  }
272
272
 
273
- // Check for some other scene/mode change
273
+ // Check the status frames for anything else that changed
274
274
  (params.commands || []).forEach((command) => {
275
275
  const hexString = base64ToHex(command)
276
276
  const hexParts = hexToTwoItems(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: 'scene',
346
+ kind: 'status',
331
347
  source: params.source,
332
348
  raw: command,
333
349
  hex: hexString,
@@ -1,3 +1,4 @@
1
+ import { base64ToHex } from '../utils/functions.js'
1
2
  import { logUnknownData } from '../utils/report-unknown.js'
2
3
  import GoveeDevice from './base.js'
3
4
 
@@ -16,10 +17,27 @@ export default class GoveeSensorBasic extends GoveeDevice {
16
17
  }
17
18
 
18
19
  externalUpdate(params) {
19
- logUnknownData(this.accessory, {
20
- kind: 'scene',
21
- source: params.source,
22
- raw: params.scene,
20
+ // An update arrives as raw commands plus whatever fields came with it, and
21
+ // which of the two carries the readings is exactly what is not known yet -
22
+ // so both are reported. This used to read a `scene` field that nothing ever
23
+ // sets, so every line went out with no payload in it at all, which made the
24
+ // reports it exists to produce useless.
25
+ ;(params.commands || []).forEach((command) => {
26
+ logUnknownData(this.accessory, {
27
+ kind: 'reading',
28
+ source: params.source,
29
+ raw: command,
30
+ hex: base64ToHex(command),
31
+ })
23
32
  })
33
+
34
+ const fields = Object.keys(params).filter(key => !['commands', 'source'].includes(key))
35
+ if (fields.length > 0) {
36
+ logUnknownData(this.accessory, {
37
+ kind: 'update',
38
+ source: params.source,
39
+ raw: JSON.stringify(Object.fromEntries(fields.map(key => [key, params[key]]))),
40
+ })
41
+ }
24
42
  }
25
43
  }
@@ -88,7 +88,7 @@ export default class extends GoveeDevice {
88
88
  }
89
89
  }
90
90
 
91
- // Check for some other scene/mode change
91
+ // Check the status frames for anything else that changed
92
92
  (params.commands || []).forEach((command) => {
93
93
  const hexString = base64ToHex(command)
94
94
  const hexParts = hexToTwoItems(hexString)
@@ -16,7 +16,7 @@ export default class extends GoveeDevice {
16
16
  }
17
17
 
18
18
  externalUpdate(params) {
19
- // Check for some other scene/mode change
19
+ // Check the status frames for anything else that changed
20
20
  (params.commands || []).forEach((command) => {
21
21
  const hexString = base64ToHex(command)
22
22
  const hexParts = hexToTwoItems(hexString)
@@ -40,7 +40,7 @@ export default class extends GoveeDevice {
40
40
  }
41
41
  default:
42
42
  logUnknownData(this.accessory, {
43
- kind: 'scene',
43
+ kind: 'status',
44
44
  source: params.source,
45
45
  raw: command,
46
46
  hex: hexString,
@@ -22,7 +22,7 @@ export default class extends GoveeDevice {
22
22
  raw: params,
23
23
  })
24
24
 
25
- // Check for some other scene/mode change
25
+ // Check the status frames for anything else that changed
26
26
  ;(params.commands || []).forEach((command) => {
27
27
  const hexString = base64ToHex(command)
28
28
  const hexParts = hexToTwoItems(hexString)
@@ -37,7 +37,7 @@ export default class extends GoveeDevice {
37
37
  switch (deviceFunction) {
38
38
  default:
39
39
  logUnknownData(this.accessory, {
40
- kind: 'scene',
40
+ kind: 'status',
41
41
  source: params.source,
42
42
  raw: command,
43
43
  hex: hexString,
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@homebridge-plugins/homebridge-govee",
3
3
  "alias": "Govee",
4
4
  "type": "module",
5
- "version": "11.33.2-beta.0",
5
+ "version": "11.33.2-beta.2",
6
6
  "description": "Homebridge plugin to integrate Govee devices into HomeKit.",
7
7
  "author": {
8
8
  "name": "bwp91",