Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions CHANGELOG.de.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,60 @@
Alle nennenswerten Änderungen an dieser Integration werden hier dokumentiert.
Format lehnt sich an [Keep a Changelog](https://keepachangelog.com/) an.

## [1.20.0] – Steuerungsmodus, LOCAL-Modus und sparsameres Abfragen

### Inkompatible Änderungen
- **Home Assistant 2026.10.0 oder neuer ist Voraussetzung** (Python 3.14).
Auf älteren Versionen installiert HACS diese Version nicht
- **Der Steuerungsmodus ist jetzt ein Sensor statt einer Auswahl.** Beide
Testlautsprecher lehnen Schreibzugriffe darauf ab: Er folgt dem
CONTROL-Schalter auf der Rückseite (KH 750 DSP: CONTROL MODE), die Auswahl
konnte also nie etwas ändern. Die alte Auswahl-Entität wird aus der
Entitätsregistrierung entfernt; Automationen, Skripte und Dashboards, die
sie nutzen, müssen auf den neuen Sensor umgestellt werden, der
standardmäßig aktiviert ist
- **„Backup wiederherstellen“ schreibt den Steuerungsmodus nicht mehr**

### Geändert
- Auf `LOCAL` nennt eine abgelehnte Änderung den CONTROL-Schalter als Grund
und sagt, was zu tun ist, statt einer allgemeinen Ablehnung. Eine
Wiederherstellung bricht mit derselben Meldung ab und nennt, wie viele Werte
sie bis dahin geschrieben hatte
- Ein Backup wird abgelehnt, solange der Lautsprecher auf `LOCAL` steht: Er
meldet dann seine lokalen Einstellungen, und ein solches Backup ersetzte das
letzte gute. Ein gespeichertes Backup, das eine frühere Version auf `LOCAL`
angelegt hat, wird nicht zurückgeschrieben
- „Backup wiederherstellen“ schreibt die Stummschaltung vor den Pegeln und
das Aufheben danach. Die Benachrichtigung zählt Werte, die der Lautsprecher
abgelehnt oder nicht bestätigt hat, getrennt, und jeder davon wird
protokolliert (eine Ablehnung mit ihrem Fehlercode). Ein Lauf, in dem der
Lautsprecher keinen Wert bestätigt hat, wird als unbestätigt gemeldet statt
als „nichts geändert“
- Werte, die nur standardmäßig deaktivierte Entitäten anzeigen (Pegel,
Verzögerung und Stummschaltung der Ausgänge 1 und 2, Ausgangspegel- und
Clip-Anzeige, Standby-Countdown), werden nur abgefragt, solange eine solche
Entität aktiviert ist. Bei einer KH 750 sind das 9 der 21 Werte, die bisher
in jedem Zyklus gelesen wurden
- Wertabfragen tragen eine Transaktions-ID (`osc/xid`); eine verspätete
Antwort auf eine frühere Anfrage kann nicht mehr für die aktuelle gehalten
werden. EQ-Schreibvorgänge mit 20 Bändern und die Schema-Abfrage der
Geräte-Discovery laufen weiter ohne
- Einen Lautsprecher von Hand oder aus der Netzwerksuche hinzuzufügen klappt
auch, während für ihn noch eine Discovery-Karte offen ist; Home Assistant
schließt die Karte, sobald der Eintrag existiert. Bisher brach die
Einrichtung ab
- Auto-Standby-Zeit und Standby-Countdown sind als Dauer gekennzeichnet
- Die EQ-Schalter und der EQ-Reset schreiben so viele Bänder, wie der
Lautsprecher meldet, statt einer festen Zahl je Modell
- Ist ein Lautsprecher an eine neue Adresse gezogen, werden Kandidaten, die
ihre Seriennummer per mDNS ankündigen, nicht mehr nur zum Auslesen der
Seriennummer verbunden

### Behoben
- Eine Antwortzeile, die der JSON-Parser ablehnt (eine übergroße Zahl,
extreme Verschachtelung), wird übersprungen, statt den Abfragezyklus mit
einer unübersetzten Fehlermeldung scheitern zu lassen

## [1.19.1] – Die Fehlercodes der Lautsprecher lesen

### Behoben
Expand Down
46 changes: 46 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,52 @@
All notable changes to this integration are documented here.
The format is loosely based on [Keep a Changelog](https://keepachangelog.com/).

## [1.20.0] – Control mode, LOCAL mode and leaner polling

### Breaking changes
- **Home Assistant 2026.10.0 or newer is required** (Python 3.14). HACS
does not install this version on older releases
- **Control mode is now a sensor instead of a select.** Both test speakers
refuse writes to it: it follows the CONTROL switch on the back
(KH 750 DSP: CONTROL MODE), so the select could never change anything. The
old select entity is removed from the entity registry; automations,
scripts and dashboards that use it have to be pointed at the new sensor,
which is enabled by default
- **Restore backup no longer writes the control mode**

### Changed
- On `LOCAL` a refused change says that the CONTROL switch is the reason and
how to fix it, instead of a generic rejection. A restore stops with the same
message and says how many values it had written
- A backup is refused while the speaker is on `LOCAL`: it then reports its
local settings, and such a backup replaced the last good one. A stored
backup taken on `LOCAL` by an earlier version is not written back
- Restore backup writes mute before the levels and unmute after them. The
notification counts values the speaker refused or did not confirm
separately, and each of them is logged (a refusal with its error code). A
run in which the speaker confirmed no value is reported as unconfirmed
instead of "nothing changed"
- Values that only entities disabled by default show (level, delay and mute
of outputs 1 and 2, output meter and clip, standby countdown) are only
polled while such an entity is enabled. On a KH 750 that is 9 of the 21
values that were read every cycle
- Value requests carry a transaction id (`osc/xid`), so a late answer to an
earlier request can no longer be taken for the current one. EQ writes of
20 bands and the schema walk of the device discovery still go without one
- Adding a speaker by hand or from the network scan works while a discovery
card for the same speaker is still open; Home Assistant closes the card
once the entry exists. The setup used to abort
- Auto standby time and standby countdown are marked as durations
- The EQ on/off switches and the EQ reset write as many bands as the speaker
reports, instead of a fixed count per model
- When a speaker has moved to a new address, candidates that announce their
serial number over mDNS are no longer connected to just to read it

### Fixed
- A reply line the JSON parser refuses (an oversized number, extreme
nesting) is skipped instead of failing the poll cycle with an untranslated
error

## [1.19.1] – Reading the speakers' error codes

### Fixed
Expand Down
3 changes: 2 additions & 1 deletion README.de.md
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,8 @@ alles geholt: Selten wechselnde Werte (Identität, die meisten
Rückseiten-Einstellungen, Gerätename) werden nur in jedem zehnten Zyklus
abgefragt, also alle 5 Minuten. Steuerungsmodus und Auto-Standby-Schalter werden
in jedem Zyklus gelesen. Werte, die nur standardmäßig deaktivierte Entities
anzeigen (Ausgang 1 und 2, Ausgangspegel- und Clip-Anzeige, Standby-Countdown),
anzeigen (Pegel, Verzögerung und Stummschaltung von Ausgang 1 und 2,
Ausgangspegel- und Clip-Anzeige, Standby-Countdown),
werden nur abgefragt, solange eine solche Entity aktiviert ist.
Abgefragt wird **jeder Wert einzeln** (ein Blattpfad pro SSC-Nachricht), nicht als
Sammelnachricht und nicht als Container-Abfrage: Eine Container-Abfrage wie
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -258,8 +258,8 @@ A loudspeaker is polled every 30 seconds. Not everything is fetched on every
cycle: rarely changing values (identity, most rear-panel settings, device name)
are only queried on every tenth cycle, so every 5 minutes. The control mode and
auto standby switches are read on every cycle. Values that only entities
disabled by default show (outputs 1 and 2, output meter and clip, standby
countdown) are only polled while such an entity is enabled. Each value is fetched
disabled by default show (level, delay and mute of outputs 1 and 2, output
meter and clip, standby countdown) are only polled while such an entity is enabled. Each value is fetched
**individually** (one leaf path per SSC message), not as a combined
message and not as a container query: a container query such as
`{"device":null}` is answered with an error, and a combined message only
Expand Down
2 changes: 1 addition & 1 deletion custom_components/neumann_kh/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@
"iot_class": "local_polling",
"issue_tracker": "https://github.com/Varitras/neumann-connect/issues",
"requirements": [],
"version": "1.19.1",
"version": "1.20.0b1",
"zeroconf": ["_ssc._tcp.local."]
}
Loading