Firmware-Einstellung – technische Auswirkungen¶
Diese Seite beschreibt, wo die Firmware-Version in der Integration gesetzt wird, wie sie ausgewertet wird und welche Folgen die initiale Konfiguration gegenüber einer späteren Änderung der Firmware haben.
Speicherort der Firmware-Version¶
- Initiale Konfiguration (Config Flow, Schritt „user“): Die gewählte Firmware wird nur in den Optionen des Eintrags gespeichert (
entry.options["firmware_version"]). Sie wird bewusst nicht inentry.dataübernommen (config_flow.py Zeilen 333–336:firmware_versionwird aususer_inputfürdata_for_entryentfernt). - Options-Flow (spätere Änderung): Die Firmware ist im Options-Schema (config_flow.py Zeilen 871–877). Beim Speichern werden die Optionen aktualisiert, inkl.
firmware_version. - Reconfigure-Flow: Beim Neukonfigurieren der Integration wird die Firmware in
entry.datageschrieben (config_flow.py Zeilen 689–697). Nach Reconfigure kann die Firmware also indatastehen.
Die Auswertung erfolgt einheitlich über die Hilfsfunktionen in utils.py: zuerst entry.options, Fallback entry.data, sonst DEFAULT_FIRMWARE.
Auswertung im Code¶
Konstanten (const_base.py)¶
FIRMWARE_VERSION = {
"V1.1.0-3K": 8,
"V0.0.9-3K": 7,
"V0.0.8-3K": 6,
"V0.0.7-3K": 5,
"V0.0.6-3K": 4,
"V0.0.5-3K": 3,
"V0.0.4-3K": 2,
"V0.0.3-3K": 1,
}
Jede Firmware-Zeichenkette ist einer numerischen Version (1–8) zugeordnet. Diese Zahl wird für die Kompatibilitätsprüfung verwendet.
Abfrage der Firmware¶
get_firmware_version(entry)– liefert die Zeichenkette (z. B."V0.0.8-3K"), u. a. für Anzeige unddevice_info.get_firmware_version_int(entry)– liefert die Zahl (1–8). Wird überall genutzt, wo nach Firmware gefiltert wird.
Reihenfolge: entry.options → entry.data → DEFAULT_FIRMWARE.
Sensor-Filterung¶
get_compatible_sensors(sensor_templates, fw_version) (utils.py Zeilen 50–67):
- Ein Sensor-Template wird einbezogen, wenn:
- es ein numerisches
firmware_versionhat undtemplate["firmware_version"] <= fw_versionist, oder - es kein numerisches
firmware_versionhat (dann gilt der Sensor für alle Firmware-Versionen). - Templates mit
firmware_versiongrößer als die konfigurierte Firmware werden nicht verwendet.
In den Konstanten (const_sensor.py, const_calculated_sensors.py) haben die allermeisten Sensoren "firmware_version": 1; einzelne können höhere Werte haben (z. B. firmware_version: 3). Nur bei höherer konfigurierter Firmware werden diese zusätzlichen Sensoren erzeugt.
Wo die Firmware-Version verwendet wird¶
| Komponente | Verwendung |
|---|---|
| Coordinator | Beim Aufbau der Register-/Sensor-Mappings (coordinator.py Zeilen 1317–1343) und in _async_update_data (Zeilen 1527–1545): get_firmware_version_int(entry) und get_compatible_sensors(...) für HP, Boil, Buff, Sol, HC. Nur zu den kompatiblen Sensoren gehörende Register werden gelesen. |
| Sensor-Plattform | sensor.py Zeilen 108–113: fw_version = get_firmware_version_int(entry); es werden nur Entities für Sensoren aus get_compatible_sensors(...) erstellt. |
| Climate-Plattform | climate.py Zeilen 191–194: gleiche Logik – nur kompatible Climate-Templates. |
| Template-Sensoren | template_sensor.py Zeilen 79–82: Filterung nach Firmware-Version. |
| Migration/Cleanup | migration.py nutzt get_firmware_version_int für kompatible Sensoren. |
| device_info | utils.py build_device_info: model wird mit get_firmware_version(entry) (Zeichenkette) gesetzt. |
Initiale Konfiguration¶
- Der Nutzer wählt im Config Flow eine Firmware aus der Liste
FIRMWARE_VERSION.keys()(config_flow.py Zeilen 397–398, 266). - Beim Erstellen des Eintrags landet die Firmware nur in options.
- Beim ersten
async_setup_entrylesen alle Plattformen und der Coordinator die Firmware aus den Optionen (überget_firmware_version_int(entry)) und erstellen ausschließlich zu dieser Version passende Entities bzw. Register-Zuordnungen. - Effekt: Von Anfang an existieren nur Sensoren/Climate-Entities, die zur gewählten Firmware passen; es werden nur die zugehörigen Modbus-Register gelesen.
Spätere Änderung der Firmware¶
Über den Options-Flow¶
- Nutzer ändert unter „Optionen“ der Integration die Firmware und speichert.
entry.options["firmware_version"]wird aktualisiert.- Der Update-Listener löst
async_reload_entryaus (init.py Zeile 319). - Ablauf:
async_unload_entry: Alle Plattformen (Sensor, Climate, etc.) und der Coordinator werden entladen, Entities entfernt.async_setup_entry: Setup läuft erneut;get_firmware_version_int(entry)liefert die neue Firmware.- Alle Plattformen und der Coordinator bauen ihre Listen ausschließlich mit
get_compatible_sensors(..., fw_version)für die neue Version auf.
Folgen:
- Firmware-Erhöhung (z. B. 1 → 6): Es werden mehr Sensoren/Register kompatibel. Es entstehen neue Entities; ggf. erscheinen neue Entity-IDs (und bei bereits belegten IDs im Entity-Register z. B. Suffixe wie
_2). - Firmware-Absenkung (z. B. 6 → 1): Sensoren mit
firmware_version> 1 werden aus der Liste gestrichen. Die zugehörigen Entities werden beim Unload entfernt. Die alten Entity-IDs können im Entity-Register als „verwaist“ (restored) zurückbleiben; die zugehörigen Verlaufsdaten bleiben in der Recorder-Datenbank unter der alten Entity-ID, sind aber für die neue Konfiguration nicht mehr sichtbar.
Es findet keine automatische Migration von Entity-IDs oder Verlaufsdaten beim Firmware-Wechsel statt.
Über den Reconfigure-Flow¶
- Beim Rekonfigurieren wird die Firmware in
entry.datageschrieben und der Eintrag perasync_reloadneu geladen. - Danach greifen
get_firmware_version/get_firmware_version_intwegen der Fallback-Reihenfolge (options vor data) weiterhin zuerst aufentry.optionszu. Wenn options unverändert bleiben, kann die neue Firmware ausdataerst nach einer Options-Anpassung oder wenn options leer sind wirksam werden. In der Praxis wird nach Reconfigure oft die Integration neu gesetzt; dann sind die gleichen inhaltlichen Auswirkungen wie bei der Options-Änderung zu erwarten (Reload, Neuaufbau der Entities nach neuer Firmware).
Kurzüberblick¶
| Aspekt | Initiale Konfiguration | Spätere Änderung (Options) |
|---|---|---|
| Speicherort | Nur entry.options |
entry.options aktualisiert |
| Wann wirksam | Beim ersten Setup | Nach Speichern der Optionen und Reload |
| Entities | Nur zur gewählten Firmware passend | Beim Reload komplett neu aufgebaut; je nach Richtung (Hoch/Runter) neue oder weniger Entities |
| Modbus | Nur Register für kompatible Sensoren | Nach Reload nur noch Register für die neue Firmware |
| Verlauf/Statistik | Keine Besonderheit | Keine Migration; bei entfernten Entities bleiben alte IDs ggf. als Waisen im Register, Verlauf bleibt unter alter Entity-ID |
Die technische Grundlage für die Anzeige und Konfiguration der Firmware im UI bildet die gleiche Stelle im Config Flow (config_flow.py Zeilen 397–398: firmware_options = list(FIRMWARE_VERSION.keys()) für die Dropdown-Liste; die tatsächlichen Auswirkungen entstehen durch die beschriebene Filterung in Coordinator und allen Plattformen.