@homebridge-plugins/homebridge-govee 11.32.0-beta.25 → 11.32.0-beta.26
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
|
@@ -29,6 +29,7 @@ All notable changes to `@homebridge-plugins/homebridge-govee` will be documented
|
|
|
29
29
|
- docs(changelog): list every unreleased commit in the pending section
|
|
30
30
|
- fix(fans): rebuild the fan service once when it was cached under the old speed scale, so the top of the slider stops setting the slowest speed (#1326) (@cwhett)
|
|
31
31
|
- fix: show the H5089 night light tile again, but refuse control commands, so it reports the real state instead of quietly ignoring taps (#1323)
|
|
32
|
+
- fix(ice-makers): stop the home app showing an ice size of 0 when one has never been set (#1329) (@cwhett)
|
|
32
33
|
|
|
33
34
|
## v11.31.0 (2026-07-24)
|
|
34
35
|
|
|
@@ -52,6 +52,13 @@ export default class {
|
|
|
52
52
|
.onSet(async value => this.internalSizeUpdate(value))
|
|
53
53
|
this.cacheSize = this.service.getCharacteristic(this.hapChar.RotationSpeed).value || 2
|
|
54
54
|
|
|
55
|
+
// Keep the characteristic in step with the cache. Without this an accessory
|
|
56
|
+
// that has never had a size set reports Active=1 with RotationSpeed=0, which
|
|
57
|
+
// is contradictory and which the Home app renders as "0".
|
|
58
|
+
if (this.service.getCharacteristic(this.hapChar.RotationSpeed).value !== this.cacheSize) {
|
|
59
|
+
this.service.updateCharacteristic(this.hapChar.RotationSpeed, this.cacheSize)
|
|
60
|
+
}
|
|
61
|
+
|
|
55
62
|
// Output the customised options to the log
|
|
56
63
|
const opts = JSON.stringify({})
|
|
57
64
|
platform.log('[%s] %s %s.', accessory.displayName, platformLang.devInitOpts, opts)
|
|
@@ -105,8 +112,15 @@ export default class {
|
|
|
105
112
|
|
|
106
113
|
async internalSizeUpdate(value) {
|
|
107
114
|
try {
|
|
108
|
-
//
|
|
115
|
+
// 0 is not a valid ice size. Put the slider back, otherwise HomeKit keeps 0
|
|
116
|
+
// while the device carries on at cacheSize - and that 0 is what gets written
|
|
117
|
+
// to the accessory cache, so it returns on the next restart. Deferred for the
|
|
118
|
+
// same reason as the error reverts below: an immediate update would be
|
|
119
|
+
// overwritten by the value HomeKit is currently writing.
|
|
109
120
|
if (value === 0) {
|
|
121
|
+
setTimeout(() => {
|
|
122
|
+
this.service.updateCharacteristic(this.hapChar.RotationSpeed, this.cacheSize)
|
|
123
|
+
}, 1000)
|
|
110
124
|
return
|
|
111
125
|
}
|
|
112
126
|
|
|
@@ -145,8 +159,11 @@ export default class {
|
|
|
145
159
|
if (params.workMode) {
|
|
146
160
|
const mode = params.workMode.workMode
|
|
147
161
|
if (mode > 0 && mode <= 3) {
|
|
148
|
-
this.cacheState
|
|
149
|
-
|
|
162
|
+
if (this.cacheState !== 'on') {
|
|
163
|
+
this.cacheState = 'on'
|
|
164
|
+
this.service.updateCharacteristic(this.hapChar.Active, 1)
|
|
165
|
+
this.accessory.log(`${platformLang.curState} [on]`)
|
|
166
|
+
}
|
|
150
167
|
if (this.cacheSize !== mode) {
|
|
151
168
|
this.cacheSize = mode
|
|
152
169
|
this.service.updateCharacteristic(this.hapChar.RotationSpeed, this.cacheSize)
|
|
@@ -184,6 +201,14 @@ export default class {
|
|
|
184
201
|
}
|
|
185
202
|
break
|
|
186
203
|
}
|
|
204
|
+
case 'aa05': {
|
|
205
|
+
// Ice size report. The payload encoding is deliberately NOT decoded here:
|
|
206
|
+
// sizeCodes runs small=0x03..large=0x01 while the OpenAPI path sends
|
|
207
|
+
// workMode un-inverted, and which is authoritative is unresolved (#1329).
|
|
208
|
+
// Claiming a mapping here could silently swap sizes, so this case exists
|
|
209
|
+
// only to stop a routine status report being logged as a new scene code.
|
|
210
|
+
break
|
|
211
|
+
}
|
|
187
212
|
default:
|
|
188
213
|
this.accessory.logWarn(`${platformLang.newScene}: [${command}] [${hexString}]`)
|
|
189
214
|
break
|
|
@@ -52,6 +52,13 @@ export default class {
|
|
|
52
52
|
.onSet(async value => this.internalSizeUpdate(value))
|
|
53
53
|
this.cacheSize = this.service.getCharacteristic(this.hapChar.RotationSpeed).value || 2
|
|
54
54
|
|
|
55
|
+
// Keep the characteristic in step with the cache. Without this an accessory
|
|
56
|
+
// that has never had a size set reports Active=1 with RotationSpeed=0, which
|
|
57
|
+
// is contradictory and which the Home app renders as "0".
|
|
58
|
+
if (this.service.getCharacteristic(this.hapChar.RotationSpeed).value !== this.cacheSize) {
|
|
59
|
+
this.service.updateCharacteristic(this.hapChar.RotationSpeed, this.cacheSize)
|
|
60
|
+
}
|
|
61
|
+
|
|
55
62
|
// Output the customised options to the log
|
|
56
63
|
const opts = JSON.stringify({})
|
|
57
64
|
platform.log('[%s] %s %s.', accessory.displayName, platformLang.devInitOpts, opts)
|
|
@@ -105,8 +112,15 @@ export default class {
|
|
|
105
112
|
|
|
106
113
|
async internalSizeUpdate(value) {
|
|
107
114
|
try {
|
|
108
|
-
//
|
|
115
|
+
// 0 is not a valid ice size. Put the slider back, otherwise HomeKit keeps 0
|
|
116
|
+
// while the device carries on at cacheSize - and that 0 is what gets written
|
|
117
|
+
// to the accessory cache, so it returns on the next restart. Deferred for the
|
|
118
|
+
// same reason as the error reverts below: an immediate update would be
|
|
119
|
+
// overwritten by the value HomeKit is currently writing.
|
|
109
120
|
if (value === 0) {
|
|
121
|
+
setTimeout(() => {
|
|
122
|
+
this.service.updateCharacteristic(this.hapChar.RotationSpeed, this.cacheSize)
|
|
123
|
+
}, 1000)
|
|
110
124
|
return
|
|
111
125
|
}
|
|
112
126
|
|
|
@@ -145,8 +159,11 @@ export default class {
|
|
|
145
159
|
if (params.workMode) {
|
|
146
160
|
const mode = params.workMode.workMode
|
|
147
161
|
if (mode > 0 && mode <= 3) {
|
|
148
|
-
this.cacheState
|
|
149
|
-
|
|
162
|
+
if (this.cacheState !== 'on') {
|
|
163
|
+
this.cacheState = 'on'
|
|
164
|
+
this.service.updateCharacteristic(this.hapChar.Active, 1)
|
|
165
|
+
this.accessory.log(`${platformLang.curState} [on]`)
|
|
166
|
+
}
|
|
150
167
|
if (this.cacheSize !== mode) {
|
|
151
168
|
this.cacheSize = mode
|
|
152
169
|
this.service.updateCharacteristic(this.hapChar.RotationSpeed, this.cacheSize)
|
|
@@ -184,6 +201,14 @@ export default class {
|
|
|
184
201
|
}
|
|
185
202
|
break
|
|
186
203
|
}
|
|
204
|
+
case 'aa05': {
|
|
205
|
+
// Ice size report. The payload encoding is deliberately NOT decoded here:
|
|
206
|
+
// sizeCodes runs small=0x03..large=0x01 while the OpenAPI path sends
|
|
207
|
+
// workMode un-inverted, and which is authoritative is unresolved (#1329).
|
|
208
|
+
// Claiming a mapping here could silently swap sizes, so this case exists
|
|
209
|
+
// only to stop a routine status report being logged as a new scene code.
|
|
210
|
+
break
|
|
211
|
+
}
|
|
187
212
|
default:
|
|
188
213
|
this.accessory.logWarn(`${platformLang.newScene}: [${command}] [${hexString}]`)
|
|
189
214
|
break
|
|
@@ -52,6 +52,13 @@ export default class {
|
|
|
52
52
|
.onSet(async value => this.internalSizeUpdate(value))
|
|
53
53
|
this.cacheSize = this.service.getCharacteristic(this.hapChar.RotationSpeed).value || 2
|
|
54
54
|
|
|
55
|
+
// Keep the characteristic in step with the cache. Without this an accessory
|
|
56
|
+
// that has never had a size set reports Active=1 with RotationSpeed=0, which
|
|
57
|
+
// is contradictory and which the Home app renders as "0".
|
|
58
|
+
if (this.service.getCharacteristic(this.hapChar.RotationSpeed).value !== this.cacheSize) {
|
|
59
|
+
this.service.updateCharacteristic(this.hapChar.RotationSpeed, this.cacheSize)
|
|
60
|
+
}
|
|
61
|
+
|
|
55
62
|
// Output the customised options to the log
|
|
56
63
|
const opts = JSON.stringify({})
|
|
57
64
|
platform.log('[%s] %s %s.', accessory.displayName, platformLang.devInitOpts, opts)
|
|
@@ -105,8 +112,15 @@ export default class {
|
|
|
105
112
|
|
|
106
113
|
async internalSizeUpdate(value) {
|
|
107
114
|
try {
|
|
108
|
-
//
|
|
115
|
+
// 0 is not a valid ice size. Put the slider back, otherwise HomeKit keeps 0
|
|
116
|
+
// while the device carries on at cacheSize - and that 0 is what gets written
|
|
117
|
+
// to the accessory cache, so it returns on the next restart. Deferred for the
|
|
118
|
+
// same reason as the error reverts below: an immediate update would be
|
|
119
|
+
// overwritten by the value HomeKit is currently writing.
|
|
109
120
|
if (value === 0) {
|
|
121
|
+
setTimeout(() => {
|
|
122
|
+
this.service.updateCharacteristic(this.hapChar.RotationSpeed, this.cacheSize)
|
|
123
|
+
}, 1000)
|
|
110
124
|
return
|
|
111
125
|
}
|
|
112
126
|
|
|
@@ -145,8 +159,11 @@ export default class {
|
|
|
145
159
|
if (params.workMode) {
|
|
146
160
|
const mode = params.workMode.workMode
|
|
147
161
|
if (mode > 0 && mode <= 3) {
|
|
148
|
-
this.cacheState
|
|
149
|
-
|
|
162
|
+
if (this.cacheState !== 'on') {
|
|
163
|
+
this.cacheState = 'on'
|
|
164
|
+
this.service.updateCharacteristic(this.hapChar.Active, 1)
|
|
165
|
+
this.accessory.log(`${platformLang.curState} [on]`)
|
|
166
|
+
}
|
|
150
167
|
if (this.cacheSize !== mode) {
|
|
151
168
|
this.cacheSize = mode
|
|
152
169
|
this.service.updateCharacteristic(this.hapChar.RotationSpeed, this.cacheSize)
|
|
@@ -184,6 +201,14 @@ export default class {
|
|
|
184
201
|
}
|
|
185
202
|
break
|
|
186
203
|
}
|
|
204
|
+
case 'aa05': {
|
|
205
|
+
// Ice size report. The payload encoding is deliberately NOT decoded here:
|
|
206
|
+
// sizeCodes runs small=0x03..large=0x01 while the OpenAPI path sends
|
|
207
|
+
// workMode un-inverted, and which is authoritative is unresolved (#1329).
|
|
208
|
+
// Claiming a mapping here could silently swap sizes, so this case exists
|
|
209
|
+
// only to stop a routine status report being logged as a new scene code.
|
|
210
|
+
break
|
|
211
|
+
}
|
|
187
212
|
default:
|
|
188
213
|
this.accessory.logWarn(`${platformLang.newScene}: [${command}] [${hexString}]`)
|
|
189
214
|
break
|
package/package.json
CHANGED