@homebridge-plugins/homebridge-govee 11.29.2 → 11.30.0-beta.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
@@ -2,6 +2,19 @@
2
2
 
3
3
  All notable changes to `@homebridge-plugins/homebridge-govee` will be documented in this file.
4
4
 
5
+ ## v11.30.0 (Pending Release)
6
+
7
+ ### Changed
8
+
9
+ - chore(ble): let noble apply its own adapter timeout instead of racing a second one
10
+ - fix: restore aws brightness scaling, so lights reach the brightness asked for (#1262) (@gradyg21)
11
+
12
+ ## v11.29.3 (2026-07-21)
13
+
14
+ ### Changed
15
+
16
+ - chore: log the raw sensor payload to diagnose thermometers reading too high (#1269)
17
+
5
18
  ## v11.29.2 (2026-07-18)
6
19
 
7
20
  ### Changed
package/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <a href="https://github.com/homebridge-plugins/homebridge-govee"><img src="https://user-images.githubusercontent.com/43026681/101324574-5e997d80-3862-11eb-81b0-932330f6e242.png" width="600px" alt="Plugin Logo"></a>
2
+ <a href="https://github.com/homebridge-plugins/homebridge-govee"><img src="https://raw.githubusercontent.com/homebridge-plugins/homebridge-govee/latest/branding/Homebridge_x_Govee.png" width="600px" alt="Plugin Logo"></a>
3
3
  </p>
4
4
  <span align="center">
5
5
 
@@ -35,7 +35,7 @@ Homebridge plugin to integrate Govee devices into HomeKit
35
35
 
36
36
  - [Installation](https://github.com/homebridge-plugins/homebridge-govee/wiki/Installation)
37
37
  - [Configuration](https://github.com/homebridge-plugins/homebridge-govee/wiki/Configuration)
38
- - [Beta Version](https://github.com/homebridge/homebridge/wiki/How-to-Install-Alternate-Plugin-Versions)
38
+ - [Beta Version](https://github.com/homebridge-plugins/homebridge-govee/wiki/Beta-Version)
39
39
  - [Node Version](https://github.com/homebridge-plugins/homebridge-govee/wiki/Node-Version)
40
40
 
41
41
  ### Features
Binary file
@@ -5,7 +5,7 @@
5
5
  "strictValidation": true,
6
6
  "customUi": true,
7
7
  "customUiPath": "./lib/homebridge-ui",
8
- "headerDisplay": "<p align=\"center\"><img width=\"60%\" src=\"https://user-images.githubusercontent.com/43026681/101324574-5e997d80-3862-11eb-81b0-932330f6e242.png\"></p><p align=\"center\">For help and support please visit our <a href=\"https://github.com/homebridge-plugins/homebridge-govee/wiki\">GitHub Wiki</a>. We hope you find this plugin useful!</p>",
8
+ "headerDisplay": "<p align=\"center\"><img width=\"250px\" src=\"https://raw.githubusercontent.com/homebridge-plugins/homebridge-govee/latest/branding/Homebridge_x_Govee.png\"></p><p align=\"center\">For help and support please visit our <a href=\"https://github.com/homebridge-plugins/homebridge-govee/wiki\">GitHub Wiki</a>. We hope you find this plugin useful!</p>",
9
9
  "schema": {
10
10
  "type": "object",
11
11
  "properties": {
@@ -174,20 +174,16 @@ export default class BLEConnection {
174
174
  return true
175
175
  }
176
176
 
177
- let timeoutId
178
177
  try {
179
- await Promise.race([
180
- btClient.waitForPoweredOnAsync(),
181
- new Promise((_, reject) => {
182
- timeoutId = setTimeout(() => reject(new Error('timeout waiting for bluetooth adapter')), timeout)
183
- }),
184
- ])
178
+ // noble applies the timeout itself and removes its own state listener when
179
+ // it expires. Racing it against a second, shorter timer here just meant
180
+ // noble kept waiting - and holding its listener - for another five seconds
181
+ // after we had already given up.
182
+ await btClient.waitForPoweredOnAsync(timeout)
185
183
  return true
186
184
  } catch (err) {
187
185
  this.log.warn('[BLE] failed to power on adapter: %s.', err.message)
188
186
  return false
189
- } finally {
190
- clearTimeout(timeoutId)
191
187
  }
192
188
  }
193
189
 
package/lib/platform.js CHANGED
@@ -217,6 +217,7 @@ export default class {
217
217
  }
218
218
  break
219
219
  }
220
+ case 'awsBrightnessNoScale':
220
221
  case 'hideLight':
221
222
  case 'hideModeGreenTea':
222
223
  case 'hideModeOolongTea':
@@ -1363,6 +1364,7 @@ export default class {
1363
1364
 
1364
1365
  if (this.awsClient) {
1365
1366
  accessory.context.useAwsControl = true
1367
+ accessory.context.awsBrightnessNoScale = deviceConf.awsBrightnessNoScale
1366
1368
  accessory.context.awsColourMode = deviceConf.awsColourMode || platformConsts.defaultValues.awsColourMode
1367
1369
  awsDevices.push(device.device)
1368
1370
 
@@ -1574,6 +1576,13 @@ export default class {
1574
1576
  toReturn.leakDetected = hasUnreadLeak
1575
1577
  toReturn.online = parsedData.gwonline && parsedData.online
1576
1578
  } else if (platformConsts.models.sensorThermo.includes(device1.sku)) {
1579
+ // Some accounts report `tem` in hundredths of a degree Fahrenheit
1580
+ // rather than Celsius, which lands in HomeKit as a reading roughly
1581
+ // 90 degrees too high (#1269). The unit is not stated anywhere in
1582
+ // the response, so log the raw payload to work out what
1583
+ // distinguishes those accounts before converting anything.
1584
+ accessory.logDebug(`[HTTP] raw sensor data: ${JSON.stringify(parsedData)}`)
1585
+
1577
1586
  if (hasProperty(parsedSettings, 'battery')) {
1578
1587
  toReturn.battery = parsedSettings.battery
1579
1588
  }
@@ -111,7 +111,15 @@ function buildBrightnessCommand(params, context) {
111
111
  return {
112
112
  awsParams: {
113
113
  cmd: 'brightness',
114
- data: { val: params.value },
114
+ // Most devices take 0-254 over AWS, so HomeKit's 0-100 has to be scaled
115
+ // up. A handful expect 0-100 already and are opted out per device with
116
+ // `awsBrightnessNoScale`. Dropping this scaling made every AWS device
117
+ // land at roughly a third of the requested brightness (#1262).
118
+ data: {
119
+ val: context.awsBrightnessNoScale
120
+ ? params.value
121
+ : Math.round(params.value * 2.54),
122
+ },
115
123
  },
116
124
  bleParams: {
117
125
  cmd: CMD.BRIGHTNESS,
@@ -49,8 +49,18 @@ export function parseDeviceUpdate(params, context) {
49
49
 
50
50
  // BRIGHTNESS
51
51
  if (params.state && hasProperty(params.state, 'brightness')) {
52
- data.brightness = params.state.brightness
52
+ // AWS reports 0-254 on most devices, so it has to come back down to
53
+ // HomeKit's 0-100. Without this every AWS reading of 100 or more clamped
54
+ // to full brightness (#1262). The other sources already report 0-100.
55
+ if (params.source === 'AWS') {
56
+ data.brightness = context.awsBrightnessNoScale
57
+ ? params.state.brightness
58
+ : Math.round(params.state.brightness / 2.54)
59
+ } else {
60
+ data.brightness = params.state.brightness
61
+ }
53
62
  }
63
+ // Govee occasionally sends a value outside [0, 100] anyway
54
64
  if (hasProperty(data, 'brightness')) {
55
65
  data.brightness = Math.max(Math.min(data.brightness, 100), 0)
56
66
  }
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.29.2",
5
+ "version": "11.30.0-beta.0",
6
6
  "description": "Homebridge plugin to integrate Govee devices into HomeKit.",
7
7
  "author": {
8
8
  "name": "bwp91",