homebridge-bluos 1.0.0 → 1.0.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 -6
- package/DEVELOPMENT.md +1 -1
- package/README.md +1 -1
- package/dist/devices/base-accessory.js +6 -0
- package/docs/FEATURES.md +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,7 +1,22 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.0.2](https://github.com/tbaur/homebridge-bluos/compare/v1.0.1...v1.0.2) (2026-08-18)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* log when a player answers again after an outage ([7e26d9d](https://github.com/tbaur/homebridge-bluos/commit/7e26d9d449d36282d2aeb829cb436380520e3882))
|
|
9
|
+
|
|
10
|
+
## [1.0.1](https://github.com/tbaur/homebridge-bluos/compare/v1.0.0...v1.0.1) (2026-08-18)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* **deps:** hold @types/node at the Node 20 floor and ship the pending UI utils bump ([b2f4be3](https://github.com/tbaur/homebridge-bluos/commit/b2f4be3e9caa5d6fa8736c4ee2c5cd9a42cfeb1a))
|
|
16
|
+
|
|
3
17
|
## [1.0.0](https://github.com/tbaur/homebridge-bluos/compare/v0.1.1...v1.0.0) (2026-08-18)
|
|
4
18
|
|
|
19
|
+
First stable release. Volume, mute, volume presets, and battery for each discovered BluOS player, keyed to the player's MAC address so a new DHCP lease keeps the accessory — and with it the room and automations you attached to it. See [README.md](README.md) for what each accessory does and [docs/FEATURES.md](docs/FEATURES.md) for what is planned next.
|
|
5
20
|
|
|
6
21
|
### Miscellaneous Chores
|
|
7
22
|
|
|
@@ -14,10 +29,6 @@
|
|
|
14
29
|
|
|
15
30
|
* BluOS players in HomeKit, verified against real hardware ([643e029](https://github.com/tbaur/homebridge-bluos/commit/643e0298c127e9df92dc42841896c5844162f1ec))
|
|
16
31
|
|
|
17
|
-
##
|
|
18
|
-
|
|
19
|
-
All notable changes to this project are documented in this file. This file is maintained automatically by [release-please](https://github.com/googleapis/release-please) based on [Conventional Commits](https://www.conventionalcommits.org).
|
|
20
|
-
|
|
21
|
-
## Unreleased
|
|
32
|
+
## 0.1.0 (2026-08-18)
|
|
22
33
|
|
|
23
|
-
|
|
34
|
+
Published by hand to create the package name so an npm trusted publisher could be attached to it; see [RELEASING.md](RELEASING.md). Functionally identical to 0.1.1, which is the first version the release workflow published.
|
package/DEVELOPMENT.md
CHANGED
|
@@ -33,7 +33,7 @@ A capability ships if HomeKit can express it as a tile, a scene, an automation o
|
|
|
33
33
|
|
|
34
34
|
## Commands
|
|
35
35
|
|
|
36
|
-
Node 20+, matching `engines`. CI runs 20 / 22 / 24, a Homebridge 1.6 floor job, and a runtime `npm audit`.
|
|
36
|
+
Node 20+, matching `engines`. CI runs 20 / 22 / 24, a Homebridge 1.6 floor job, and a runtime `npm audit`. `@types/node` stays on the 20 line for the same reason: newer types let the compiler accept API that the oldest supported runtime does not have. Dependabot is told not to raise it — the floor and the types move together, deliberately.
|
|
37
37
|
|
|
38
38
|
```bash
|
|
39
39
|
npm install
|
package/README.md
CHANGED
|
@@ -26,7 +26,7 @@ What stays in the BluOS app is the part HomeKit has no vocabulary for: browsing,
|
|
|
26
26
|
- **Long-polling, not polling** — `/SyncStatus?timeout=100` with an `etag`, so a change made on the front panel, the remote or the BluOS app reaches HomeKit in about a second, without hammering the player
|
|
27
27
|
- **Follows the API's rate rules** — One second minimum between two requests for the same resource, per the BluOS specification; writes to one chassis are serialised, and separate chassis stay parallel
|
|
28
28
|
- **Survives a DHCP lease change** — Accessory identity is the player's MAC and zone port, never its address. If a player moves, the plugin re-resolves it and remembers the new address
|
|
29
|
-
- **Backs off when a player is off** — Exponential delay to a one-minute ceiling instead of dialling an absent player every second; the
|
|
29
|
+
- **Backs off when a player is off** — Exponential delay to a one-minute ceiling instead of dialling an absent player every second. A single failure is a debug line; the warning comes when the player has missed three polls and HomeKit is told No Response, then at most hourly while it stays away, with one line when it answers again
|
|
30
30
|
- **Answers HomeKit promptly** — A write returns inside HAP's patience window and finishes anything slower in the background, where the result still reaches HomeKit through the next poll
|
|
31
31
|
- **No volume jumps** — The pair of writes HomeKit sends when a slider leaves zero is coalesced into one command
|
|
32
32
|
- **Honest state** — An accessory reports No Response until the player has actually been read, and again once it stops answering, rather than showing a value it cannot confirm
|
|
@@ -53,6 +53,12 @@ class BaseAccessory {
|
|
|
53
53
|
}
|
|
54
54
|
/** Apply a fresh observation, and remember that state is now known. */
|
|
55
55
|
applyObservation(observation, reason) {
|
|
56
|
+
if (this.offline) {
|
|
57
|
+
// Every outage warns on its way in, so it gets a matching line on its way
|
|
58
|
+
// out: without one, a log shows a player failing and never recovering, and
|
|
59
|
+
// an outage that healed reads exactly like one still in progress.
|
|
60
|
+
this.host.log.info(`${(0, utils_1.forLog)(this.displayName)} [${(0, utils_1.forLog)(this.deviceId)}] is responding again`);
|
|
61
|
+
}
|
|
56
62
|
this.offline = false;
|
|
57
63
|
this.observed = true;
|
|
58
64
|
this.lastWarningAt = 0;
|
package/docs/FEATURES.md
CHANGED
|
@@ -29,7 +29,7 @@ A checklist of what is built. The plugin aims to cover everything about a BluOS
|
|
|
29
29
|
- ✅ The pair of writes HomeKit sends when a slider leaves zero is coalesced into one command
|
|
30
30
|
- ✅ Set/poll race protection with a generation counter, so a slider never springs back
|
|
31
31
|
- ✅ A deliberately cancelled poll is not counted as a failure
|
|
32
|
-
- ✅ Exponential backoff to a one-minute ceiling for an unreachable player;
|
|
32
|
+
- ✅ Exponential backoff to a one-minute ceiling for an unreachable player; a lone failure logs at debug, the warning waits for the third missed poll that turns the tile to No Response, repeats hourly at most, and is answered by a recovery line
|
|
33
33
|
- ✅ Automatic address re-resolution after repeated failures, rate-limited, so a DHCP lease change needs no user action
|
|
34
34
|
- ✅ New addresses persisted into the accessory cache so they survive a restart
|
|
35
35
|
- ✅ Accessory identity is `MAC:port:kind` (plus the preset level), never the address, so an IP change keeps your accessories
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "homebridge-bluos",
|
|
3
3
|
"displayName": "Homebridge BluOS",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.2",
|
|
5
5
|
"description": "Homebridge plugin for BluOS players — per-zone volume, mute, volume-preset and battery accessories over the LAN Custom Integration API. Verified on NAD and Bluesound hardware",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"brace-expansion": "^5.0.9"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@homebridge/plugin-ui-utils": "2.2.
|
|
47
|
+
"@homebridge/plugin-ui-utils": "2.2.5",
|
|
48
48
|
"multicast-dns": "7.2.5"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|