@homebridge-plugins/homebridge-govee 11.32.0 → 11.32.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/README.md +1 -1
- package/lib/device/sensor-monitor.js +34 -0
- package/lib/homebridge-ui/public/index.html +1 -1
- package/lib/platform.js +22 -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.32.1 (2026-08-02)
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- docs: add node 26 to the supported node versions
|
|
10
|
+
- fix: read the H5106 monitor's temperature and humidity from the http device list too, so accounts whose aws channel never delivers still get readings (#1322)
|
|
11
|
+
|
|
5
12
|
## v11.32.0 (2026-08-02)
|
|
6
13
|
|
|
7
14
|
### Changed
|
package/README.md
CHANGED
|
@@ -27,7 +27,7 @@ Homebridge plugin to integrate Govee devices into HomeKit
|
|
|
27
27
|
### Prerequisites
|
|
28
28
|
|
|
29
29
|
- To use this plugin, you will need to already have:
|
|
30
|
-
- [Node](https://nodejs.org): latest version of `v22` or `
|
|
30
|
+
- [Node](https://nodejs.org): latest version of `v22`, `v24` or `v26` - any other major version is not supported.
|
|
31
31
|
- [Homebridge](https://homebridge.io): `v1.6` or above - refer to link for more information and installation instructions.
|
|
32
32
|
- For bluetooth connectivity, it may be necessary to install extra packages on your system, see [Bluetooth Control](https://github.com/homebridge-plugins/homebridge-govee/wiki/Bluetooth-Control). Bluetooth works best when using a Raspberry Pi, not been tested on Windows, and Mac devices are unsupported.
|
|
33
33
|
|
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
base64ToHex,
|
|
4
4
|
cenToFar,
|
|
5
5
|
getTwoItemPosition,
|
|
6
|
+
hasProperty,
|
|
6
7
|
hexToDecimal,
|
|
7
8
|
hexToTwoItems,
|
|
8
9
|
parseError,
|
|
@@ -61,6 +62,39 @@ export default class {
|
|
|
61
62
|
}
|
|
62
63
|
|
|
63
64
|
async externalUpdate(params) {
|
|
65
|
+
// Readings can also arrive from the HTTP device list (#1322), for accounts
|
|
66
|
+
// where the AWS channel never delivers for this model. The fields use the
|
|
67
|
+
// same semantics as the thermo-hygrometer sensors: hundredths of a degree
|
|
68
|
+
// and hundredths of a percent
|
|
69
|
+
if (hasProperty(params, 'temperature')) {
|
|
70
|
+
let newTemp = Number.parseInt(params.temperature + this.accessory.context.offTemp, 10)
|
|
71
|
+
newTemp /= 100
|
|
72
|
+
if (Number.isFinite(newTemp) && newTemp !== this.cacheTemp) {
|
|
73
|
+
this.cacheTemp = newTemp
|
|
74
|
+
this.tempService.updateCharacteristic(this.hapChar.CurrentTemperature, this.cacheTemp)
|
|
75
|
+
this.accessory.eveService.addEntry({ temp: this.cacheTemp })
|
|
76
|
+
|
|
77
|
+
// Log the change
|
|
78
|
+
this.accessory.log(`${platformLang.curTemp} [${this.cacheTemp}°C / ${cenToFar(this.cacheTemp)}°F]`)
|
|
79
|
+
|
|
80
|
+
// Update the cache file with the new temperature
|
|
81
|
+
this.updateCache()
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (hasProperty(params, 'humidity')) {
|
|
85
|
+
let newHumi = Number.parseInt(params.humidity + this.accessory.context.offHumi, 10)
|
|
86
|
+
newHumi /= 100
|
|
87
|
+
newHumi = Math.max(Math.min(newHumi, 100), 0)
|
|
88
|
+
if (Number.isFinite(newHumi) && newHumi !== this.cacheHumi) {
|
|
89
|
+
this.cacheHumi = newHumi
|
|
90
|
+
this.humiService.updateCharacteristic(this.hapChar.CurrentRelativeHumidity, this.cacheHumi)
|
|
91
|
+
this.accessory.eveService.addEntry({ humidity: this.cacheHumi })
|
|
92
|
+
|
|
93
|
+
// Log the change
|
|
94
|
+
this.accessory.log(`${platformLang.curHumi} [${this.cacheHumi}%]`)
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
64
98
|
// Check for some other scene/mode change
|
|
65
99
|
(params.commands || []).forEach((command) => {
|
|
66
100
|
const hexString = base64ToHex(command)
|
|
@@ -246,7 +246,7 @@
|
|
|
246
246
|
<ul>
|
|
247
247
|
<li>To use this plugin, you will need to already have:</li>
|
|
248
248
|
<ul>
|
|
249
|
-
<li><a href="https://nodejs.org" target="_blank">Node</a>: latest version of <code>v22</code> or <code>
|
|
249
|
+
<li><a href="https://nodejs.org" target="_blank">Node</a>: latest version of <code>v22</code>, <code>v24</code> or <code>v26</code> - any other major version is not supported.</li>
|
|
250
250
|
<li><a href="https://homebridge.io" target="_blank">Homebridge</a>: <code>v1.6</code> or above - refer to link for more information and installation instructions.</li>
|
|
251
251
|
<li>For bluetooth connectivity, it may be necessary to install extra packages on your system, see <a href="https://github.com/homebridge-plugins/homebridge-govee/wiki/Bluetooth-Control" target="_blank">Bluetooth Control</a>. Bluetooth works best when using a Raspberry Pi, not been tested on Windows, and Mac devices are unsupported.</li>
|
|
252
252
|
</ul>
|
package/lib/platform.js
CHANGED
|
@@ -1576,7 +1576,7 @@ export default class {
|
|
|
1576
1576
|
|
|
1577
1577
|
// Filter those which are leak sensors
|
|
1578
1578
|
for (const device1 of devices
|
|
1579
|
-
.filter(device => [...platformConsts.models.sensorLeak, ...platformConsts.models.sensorThermo].includes(device.sku))) {
|
|
1579
|
+
.filter(device => [...platformConsts.models.sensorLeak, ...platformConsts.models.sensorThermo, ...platformConsts.models.sensorMonitor].includes(device.sku))) {
|
|
1580
1580
|
try {
|
|
1581
1581
|
// Reformat the device id
|
|
1582
1582
|
if (!device1.device.includes(':')) {
|
|
@@ -1650,6 +1650,27 @@ export default class {
|
|
|
1650
1650
|
// distinguishes those accounts before converting anything.
|
|
1651
1651
|
accessory.logDebug(`[HTTP] raw sensor data: ${JSON.stringify(parsedData)}`)
|
|
1652
1652
|
|
|
1653
|
+
if (hasProperty(parsedSettings, 'battery')) {
|
|
1654
|
+
toReturn.battery = parsedSettings.battery
|
|
1655
|
+
}
|
|
1656
|
+
if (hasProperty(parsedData, 'tem')) {
|
|
1657
|
+
toReturn.temperature = parsedData.tem
|
|
1658
|
+
}
|
|
1659
|
+
if (hasProperty(parsedData, 'hum')) {
|
|
1660
|
+
toReturn.humidity = parsedData.hum
|
|
1661
|
+
}
|
|
1662
|
+
if (hasProperty(parsedData, 'online')) {
|
|
1663
|
+
toReturn.online = parsedData.online
|
|
1664
|
+
}
|
|
1665
|
+
} else if (platformConsts.models.sensorMonitor.includes(device1.sku)) {
|
|
1666
|
+
// The H5106 normally reports over AWS, but some accounts never
|
|
1667
|
+
// receive those messages, leaving the readings at zero (#1322).
|
|
1668
|
+
// The HTTP device list carries the same readings, so use it as a
|
|
1669
|
+
// second source. Every field is guarded and the raw payload is
|
|
1670
|
+
// logged, since the format for this model is not confirmed on
|
|
1671
|
+
// every account
|
|
1672
|
+
accessory.logDebug(`[HTTP] raw sensor data: ${JSON.stringify(parsedData)}`)
|
|
1673
|
+
|
|
1653
1674
|
if (hasProperty(parsedSettings, 'battery')) {
|
|
1654
1675
|
toReturn.battery = parsedSettings.battery
|
|
1655
1676
|
}
|
package/package.json
CHANGED