@homebridge-plugins/homebridge-wemo 7.5.0 → 7.5.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 +17 -0
- package/README.md +1 -1
- package/eslint.config.js +0 -1
- package/lib/device/crockpot.js +11 -6
- package/lib/device/heater.js +11 -6
- package/lib/platform.js +26 -10
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `@homebridge-plugins/homebridge-wemo` will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## v7.5.2 (2026-07-14)
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- fix: never pass the hidden wemo link accessory to the homebridge cache so saving no longer fails
|
|
10
|
+
|
|
11
|
+
## v7.5.1 (2026-07-12)
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- fix: clear wemo link subdevices from the pending list (#263)
|
|
16
|
+
- fix: show target temperature slider for heater and crockpot (#110)
|
|
17
|
+
- chore: update actions/checkout to v7
|
|
18
|
+
- chore: remove stray exit 1 from deprecation workflow
|
|
19
|
+
- chore: dependency updates
|
|
20
|
+
- docs: note homebridge v2 support in prerequisites
|
|
21
|
+
|
|
5
22
|
## v7.5.0 (2026-05-05)
|
|
6
23
|
|
|
7
24
|
### Changed
|
package/README.md
CHANGED
|
@@ -34,7 +34,7 @@ Homebridge plugin to integrate Wemo devices into HomeKit
|
|
|
34
34
|
|
|
35
35
|
- To use this plugin, you will need to already have:
|
|
36
36
|
- [Node](https://nodejs.org): latest version of `v22` or `v24` - any other major version is not supported.
|
|
37
|
-
- [Homebridge](https://homebridge.io): `v1.6` - refer to link for more information and installation instructions.
|
|
37
|
+
- [Homebridge](https://homebridge.io): `v1.6` or above - refer to link for more information and installation instructions.
|
|
38
38
|
- For the UPnP connection, make sure your Homebridge instance has an allocated IP from the same IP network or VLAN as your Wemo devices. Otherwise, you should disable the UPnP connection to avoid connection errors.
|
|
39
39
|
|
|
40
40
|
### Setup
|
package/eslint.config.js
CHANGED
|
@@ -35,7 +35,6 @@ export default antfu(
|
|
|
35
35
|
'style/brace-style': ['error', '1tbs', { allowSingleLine: true }],
|
|
36
36
|
'style/quote-props': ['error', 'consistent-as-needed'],
|
|
37
37
|
'test/no-only-tests': 'error',
|
|
38
|
-
'unicorn/no-useless-spread': 'error',
|
|
39
38
|
'unused-imports/no-unused-vars': ['error', { caughtErrors: 'none' }],
|
|
40
39
|
},
|
|
41
40
|
typescript: false,
|
package/lib/device/crockpot.js
CHANGED
|
@@ -27,12 +27,17 @@ export default class {
|
|
|
27
27
|
.removeOnSet()
|
|
28
28
|
.onSet(async value => this.internalStateUpdate(value))
|
|
29
29
|
|
|
30
|
-
//
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
30
|
+
// Restrict the target state to HEAT so Apple Home shows a single target
|
|
31
|
+
// temperature slider. Locking it to AUTO makes newer Home versions expect a
|
|
32
|
+
// temperature range (two thresholds) and hide the slider entirely (#110).
|
|
33
|
+
this.service
|
|
34
|
+
.getCharacteristic(this.hapChar.TargetHeaterCoolerState)
|
|
35
|
+
.setProps({
|
|
36
|
+
minValue: 1,
|
|
37
|
+
maxValue: 1,
|
|
38
|
+
validValues: [1],
|
|
39
|
+
})
|
|
40
|
+
.updateValue(1)
|
|
36
41
|
|
|
37
42
|
// Add the set handler and a range to the heater target temperature characteristic
|
|
38
43
|
this.service
|
package/lib/device/heater.js
CHANGED
|
@@ -29,12 +29,17 @@ export default class {
|
|
|
29
29
|
.removeOnSet()
|
|
30
30
|
.onSet(async value => this.internalStateUpdate(value))
|
|
31
31
|
|
|
32
|
-
//
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
32
|
+
// Restrict the target state to HEAT so Apple Home shows a single target
|
|
33
|
+
// temperature slider. Locking it to AUTO makes newer Home versions expect a
|
|
34
|
+
// temperature range (two thresholds) and hide the slider entirely (#110).
|
|
35
|
+
this.service
|
|
36
|
+
.getCharacteristic(this.hapChar.TargetHeaterCoolerState)
|
|
37
|
+
.setProps({
|
|
38
|
+
minValue: 1,
|
|
39
|
+
maxValue: 1,
|
|
40
|
+
validValues: [1],
|
|
41
|
+
})
|
|
42
|
+
.updateValue(1)
|
|
38
43
|
|
|
39
44
|
// Add the set handler and a range to the heater target temperature characteristic
|
|
40
45
|
this.service
|
package/lib/platform.js
CHANGED
|
@@ -415,8 +415,7 @@ export default class {
|
|
|
415
415
|
}
|
|
416
416
|
|
|
417
417
|
// Update the changes to the accessory to the platform
|
|
418
|
-
this.
|
|
419
|
-
devicesInHB.set(accessory.UUID, accessory)
|
|
418
|
+
this.saveAccessoryUpdate(accessory)
|
|
420
419
|
})
|
|
421
420
|
|
|
422
421
|
// Set up the listener server for device notifications
|
|
@@ -963,9 +962,15 @@ export default class {
|
|
|
963
962
|
subAcc.context.upnpOnline = true
|
|
964
963
|
}
|
|
965
964
|
|
|
965
|
+
// Remove the subdevice from the pending connection list, otherwise the
|
|
966
|
+
// 'still not been initially found' warning is logged for it indefinitely.
|
|
967
|
+
// Match both the raw and normalised serial as the list can contain either.
|
|
968
|
+
cacheSerialsToConnect = cacheSerialsToConnect.filter(
|
|
969
|
+
el => el !== subdevice.deviceId && el !== parseSerialNumber(subdevice.deviceId),
|
|
970
|
+
)
|
|
971
|
+
|
|
966
972
|
// Update any changes to the accessory to the platform
|
|
967
|
-
this.
|
|
968
|
-
devicesInHB.set(uuidSub, subAcc)
|
|
973
|
+
this.saveAccessoryUpdate(subAcc)
|
|
969
974
|
} catch (err) {
|
|
970
975
|
// Catch any errors during the process
|
|
971
976
|
const eText = parseError(err)
|
|
@@ -1234,14 +1239,27 @@ export default class {
|
|
|
1234
1239
|
}
|
|
1235
1240
|
|
|
1236
1241
|
// Update any changes to the accessory to the platform
|
|
1237
|
-
this.
|
|
1238
|
-
devicesInHB.set(uuid, accessory)
|
|
1242
|
+
this.saveAccessoryUpdate(accessory)
|
|
1239
1243
|
} catch (err) {
|
|
1240
1244
|
// Catch any errors during the process
|
|
1241
1245
|
this.log.warn('[%s] %s %s.', device.friendlyName, platformLang.devNotInit, parseError(err))
|
|
1242
1246
|
}
|
|
1243
1247
|
}
|
|
1244
1248
|
|
|
1249
|
+
saveAccessoryUpdate(accessory) {
|
|
1250
|
+
// Persist any context/characteristic changes to Homebridge, then keep the
|
|
1251
|
+
// accessory in our in-memory map. Hidden accessories (the Wemo Link hub) are
|
|
1252
|
+
// deliberately never registered (see addAccessory), so they have no associated
|
|
1253
|
+
// plugin, and Homebridge 2 adds any accessory passed to
|
|
1254
|
+
// updatePlatformAccessories to its cached list, where every cache save then
|
|
1255
|
+
// fails to serialize it ('Cannot serialize accessory ...'). We still keep them
|
|
1256
|
+
// in devicesInHB so lookups continue to work.
|
|
1257
|
+
if (!accessory.context.hidden) {
|
|
1258
|
+
this.api.updatePlatformAccessories([accessory])
|
|
1259
|
+
}
|
|
1260
|
+
devicesInHB.set(accessory.UUID, accessory)
|
|
1261
|
+
}
|
|
1262
|
+
|
|
1245
1263
|
addAccessory(device, isPri, hidden = false) {
|
|
1246
1264
|
const accName = device.friendlyName || device.deviceId || device.serialNumber
|
|
1247
1265
|
try {
|
|
@@ -1321,8 +1339,7 @@ export default class {
|
|
|
1321
1339
|
|
|
1322
1340
|
// Remove the accessory from the pending connection list
|
|
1323
1341
|
existSerialsToConnect = existSerialsToConnect.filter(el => el !== deviceData.serialNumber)
|
|
1324
|
-
this.
|
|
1325
|
-
devicesInHB.set(accessory.UUID, accessory)
|
|
1342
|
+
this.saveAccessoryUpdate(accessory)
|
|
1326
1343
|
}
|
|
1327
1344
|
|
|
1328
1345
|
disableUPNP(accessory, err) {
|
|
@@ -1336,8 +1353,7 @@ export default class {
|
|
|
1336
1353
|
existSerialsToConnect.push(accessory.context.serialNumber)
|
|
1337
1354
|
|
|
1338
1355
|
// Update any changes to the accessory to the platform
|
|
1339
|
-
this.
|
|
1340
|
-
devicesInHB.set(accessory.UUID, accessory)
|
|
1356
|
+
this.saveAccessoryUpdate(accessory)
|
|
1341
1357
|
|
|
1342
1358
|
// Perform a http poll to see if the device is still reachable
|
|
1343
1359
|
if (accessory.control?.requestDeviceUpdate) {
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@homebridge-plugins/homebridge-wemo",
|
|
3
3
|
"alias": "Wemo",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "7.5.
|
|
5
|
+
"version": "7.5.2",
|
|
6
6
|
"description": "Homebridge plugin to integrate Wemo devices into HomeKit.",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "bwp91",
|
|
@@ -55,15 +55,15 @@
|
|
|
55
55
|
"lint:fix": "npm run lint -- --fix"
|
|
56
56
|
},
|
|
57
57
|
"dependencies": {
|
|
58
|
-
"@homebridge/plugin-ui-utils": "^2.2.
|
|
59
|
-
"axios": "^1.
|
|
58
|
+
"@homebridge/plugin-ui-utils": "^2.2.5",
|
|
59
|
+
"axios": "^1.18.1",
|
|
60
60
|
"ip": "^2.0.1",
|
|
61
61
|
"node-ssdp": "^4.0.1",
|
|
62
|
-
"p-queue": "^9.
|
|
62
|
+
"p-queue": "^9.3.1",
|
|
63
63
|
"xml2js": "^0.6.2",
|
|
64
64
|
"xmlbuilder": "^15.1.1"
|
|
65
65
|
},
|
|
66
66
|
"devDependencies": {
|
|
67
|
-
"@antfu/eslint-config": "^
|
|
67
|
+
"@antfu/eslint-config": "^9.1.0"
|
|
68
68
|
}
|
|
69
69
|
}
|