Was beim Hinzufügen abgefragt wird, was später unter Konfigurieren noch
umstellbar ist, und was die einzelnen Schalter bewirken.
Zugang
Gebraucht werden die IP der Steuerung und der Zugang zu ihrer
Weboberfläche. Es ist derselbe Zugang, mit dem man sich auch im Browser an der
Anlage anmeldet — kein Konto bei Windhager, kein Portal.
Ob der Weg frei ist, zeigt ein Blick in den Browser: Unter
http://<IP der Anlage> muss die Weboberfläche des InfoWIN Touch erscheinen.
Kommt sie, stimmen IP und Zugang.
Welches Passwort
Ab Werk kennt die Steuerung zwei Zugänge:
Zugang
Passwort ab Werk
USER
123
Service
123
An der geprüften Anlage sehen beide über die Schnittstelle dasselbe, auch
die Fachparameter. Die Trennung in Bedienebenen gilt am Bediengerät; was in
Home Assistant erscheint, entscheiden die Bedienebenen weiter unten. USER
genügt also. Für andere Baureihen ist das nicht belegt, deshalb bleibt der
Zugang wählbar — ein abweichender Benutzername lässt sich eintippen.
Passwort herausfinden
Wurde das Passwort einmal geändert, gilt das neue sofort auch für die
Schnittstelle. Drei Wege, es wiederzufinden:
Am Gerät nachsehen. Am InfoWIN Touch unter Passwort. Dort steht es im
Klartext und lässt sich auch neu setzen.
In der Weboberfläche der Anlage.http://<IP der Anlage> öffnen,
anmelden, unter Passwort nachsehen. Führt zum selben Parameter wie der Weg
über das Gerät.
Über Windhager Connect, falls die Anlage dort registriert ist. Anmelden,
Anlage auswählen — die Adresse endet dann auf /management. Dieses Wort
durch settings ersetzen:
https://connect.windhager.com/systems/<Kennung der Anlage>/management
https://connect.windhager.com/systems/<Kennung der Anlage>/settings
Auf der Einstellungsseite steht das Webserver-Passwort im Klartext und lässt
sich dort auch ändern.
Passwort ändern
Am InfoWIN Touch oder in dessen Weboberfläche unter Passwort — beide Wege
führen zum selben Parameter. Ein dort gesetztes Passwort gilt sofort auch für
die Schnittstelle. Danach muss es in Home Assistant über Neu anmelden
nachgezogen werden, sonst meldet die Integration eine abgelehnte Anmeldung.
Nach dem Verbinden mit myComfort geht nichts mehr? Windhager vergibt dabei
ein eigenes Passwort, die Werksangabe gilt dann nicht mehr. Kein dauerhafter
Ausschluss: auf einem der drei Wege oben ablesen oder neu setzen, danach
laufen App und HeatNexus wieder.
Ein Konfigurationseintrag kann mehrere Anlagen führen — bis zu sechs. Jede
bekommt eine eigene Bezeichnung, etwa Heizhaus und Wohnhaus. Diese
Bezeichnung erscheint überall dort, wo sonst zweimal dasselbe stünde: Zwei
Steuerungen melden beide ein B-PLMi PUFFER, und ohne Bezeichnung wäre nicht
zu erkennen, welcher gemeint ist.
Bedienebenen
Die Steuerung ordnet jeden Datenpunkt einer Ebene zu — dieselben Ebenen, die
auch das InfoWIN Touch kennt. Die Auswahl entscheidet, was HeatNexus überhaupt
anlegt.
Ebene
Was darin steckt
Vorgabe
Infoebene
Messwerte und Zustände
an
Betreiberebene
Betriebswahl, Sollwerte, Zeitprogramme
an
Serviceebene
Heizkurve, Grenzwerte, Estrichprogramm
an, Entitäten deaktiviert
Werksebene
Verbrennungsregelung, Zündung, Antriebe
aus
Die Serviceebene ist ein Sonderfall: Sie wird mitgelesen, ihre Entitäten
entstehen aber deaktiviert. Sie tauchen in der Geräteübersicht auf, kosten
aber keinen einzigen Abruf, solange niemand sie einschaltet. Erst beim
Aktivieren meldet sich die Entität beim Abfragezyklus an.
Zwei Haken steuern diesen Sonderfall:
Fortgeschrittene Werte aktivieren legt Service- und Werksebene sofort
aktiv an, statt deaktiviert.
Fortgeschrittene Werte bedienbar machen erlaubt das Schreiben auf diesen
Ebenen. Ohne den Haken bleiben sie lesbar, aber unveränderlich.
Eine abgewählte Ebene wird gelöscht, nicht deaktiviert. Wer die Werksebene
wieder abwählt, hat sich entschieden — die Einträge verschwinden aus der
Registrierung, statt als deaktivierte Zeilen liegen zu bleiben. Anders liegt
der Fall, wenn die Anlage einen Datenpunkt nicht mehr liefert: Dann wird die
Entität nur deaktiviert, damit Name, Bereich und Verlauf erhalten bleiben.
Abfrageintervall
Einstellbar zwischen 30 und 300 Sekunden, Vorgabe 30. Der Wert ist die
Untergrenze, kein Multiplikator: Nicht jeder Datenpunkt wird in jedem Takt
gelesen.
Welcher Klasse ein Wert zufällt, entscheidet die Art des Werts: Plattform,
Name, Zustandsklasse und Einheit. Die Bedienebene spielt dabei keine Rolle.
Betriebsstunden ändern sich nicht in dreißig Sekunden, egal wo sie stehen.
Ein kürzeres Intervall bringt deshalb wenig und kostet: Die Steuerung
beantwortet Anfragen nacheinander, mehr Gleichzeitigkeit verkürzt einen
Durchlauf nicht.
Was zusätzlich angelegt wird
Schalter
Vorgabe
Wirkung
Dashboard
an
Legt das mitgelieferte Dashboard an. Es wird bei jedem Öffnen neu gebaut.
Eigene Oberfläche
an
Die HeatNexus-Seite in der Seitenleiste.
Erklärungen
an
Die „?”-Knöpfe in der eigenen Oberfläche.
Systemuhr und Systemdatum
aus
Uhrzeit und Datum der Steuerung als eigene Entitäten.
Meldung beim Einlesen
aus
Benachrichtigung, während die Anlage gelesen wird.
LON-Adressraum
je nach Gerät
Liest einen zweiten Adressraum mit. Bringt nur dort zusätzliche Werte, wo die Steuerung auf dem normalen Weg wenig meldet.
Zusatzwerte
Laufzeit, Zähler
Abgeleitete Werte, gruppenweise an- und abwählbar.
Automations-Vorlagen
alle
Welche Blueprints mitgeliefert werden.
Darstellung
Sprache der Bezeichnungen, die die Steuerung selbst führt. Automatisch
folgt Home Assistant; Deutsch, Englisch, Französisch und Italienisch lassen
sich erzwingen.
Außentemperatur — welche Entität in der Kopfzeile der eigenen Oberfläche
gilt. Leer heißt: HeatNexus sucht sie sich in der Anlage. Nötig, weil der
Außenfühler oft an einem anderen Gerät hängt als an dem, das ihn meldet.
Kesselart wirkt nur auf die Zeichnung im Schaubild. Automatisch leitet
sie aus Brennstoff und Funktionsnamen ab; die Auswahl ist dafür da, dass eine
falsch erkannte Anlage trotzdem richtig aussieht.
Zweiter Kesselwert im Schaubild: Kesselleistung oder
Brennkammertemperatur.
Eco und Comfort
Beides ist dieselbe befristete Übersteuerung, die auch das Bediengerät
schreibt. Die Anlage kennt nur einen Übersteuerungswert; ob er Eco oder
Comfort heißt, entscheidet sie daran, ob er unter oder über dem Sollwert des
Zeitprogramms liegt. Einstellbar sind je eine Temperatur und eine Dauer —
Vorgabe 10 °C und 22 °C, jeweils 180 Minuten.
Wenn sich die Anlage ändert
Der Erkennungsstand wird gespeichert und in dieser Reihenfolge wiederverwendet:
Arbeitsspeicher, dann Platte, dann vollständige Neuerkennung. Verworfen wird er
bei geändertem Umfang, bei einem Alter über 30 Tagen oder durch den Dienst
heatnexus.rediscover.
Nach einer Aktualisierung ist nichts zu tun. Eine neue Fassung verwirft den
Stand bewusst nicht — das kostete jedes Mal einen vollen Neuabzug. Stattdessen
wird der gespeicherte Stand sofort hergestellt und im Hintergrund abgeglichen;
neue Entitäten melden sich, sobald sie da sind.
heatnexus.rediscover braucht es nur nach einem Umbau an der Heizung — ein
neuer Heizkreis, ein neues Modul. Der Dienst meldet danach je Anlage zurück,
was gefunden wurde.
Fehlersuche
Die Fälle, die in den Diskussionen immer wieder auftauchen — nach Symptom
sortiert.
Die Einrichtung schlägt fehl
„Anmeldung abgelehnt” — gefragt ist der Zugang der Weboberfläche der
Anlage, nicht der eines Portals. Ab Werk sind das USER und Service, beide
mit dem Passwort 123. Wurde es einmal geändert, gilt das neue sofort auch
hier — dann in Home Assistant über Neu anmelden nachziehen.
Wie man ein unbekanntes Passwort wiederfindet — am Gerät, in der
Weboberfläche oder über Windhager Connect — steht mit allen Schritten unter
Passwort herausfinden.
„Verbindung nicht möglich” — vorher im Browser prüfen: Unter
http://192.0.2.10 (die IP der eigenen Anlage) muss die Weboberfläche des
InfoWIN Touch erscheinen. Kommt dort nichts, liegt es nicht an HeatNexus.
Häufigste Ursachen: Die Steuerung hängt in einem anderen Netzsegment, oder das
Netzwerkmodul ist nicht freigeschaltet.
„Einrichtung noch nicht bereit” — der erste Durchlauf liest Struktur und
Kernwerte und darf dafür bis zu zwei Minuten brauchen. Bricht er ab, versucht
Home Assistant es von selbst erneut. Bleibt es dabei, antwortet die Steuerung
zu langsam — meist, weil parallel noch etwas anderes auf sie zugreift.
Es fehlen Entitäten
Erst die deaktivierten einblenden. Die Serviceebene wird gelesen, ihre
Entitäten entstehen aber deaktiviert. In der Geräteansicht steht dafür ein
Filter Deaktivierte Entitäten anzeigen. Wer sie dauerhaft aktiv haben will,
setzt in den Optionen den Haken Fortgeschrittene Werte aktivieren.
Dann die Bedienebenen prüfen. Die Werksebene ist ab Werk aus. Was in keiner
Ebene der mitgelieferten Datenbank steht, gilt als Werksebene und erscheint nur
mit dieser Auswahl.
Nach einem Umbau an der Heizung — neuer Heizkreis, neues Modul — den Dienst
heatnexus.rediscover aufrufen. Er verwirft den gespeicherten Stand und liest
alles neu.
Nach einer Aktualisierung ist nichts zu tun. Der gespeicherte Stand wird
sofort hergestellt und im Hintergrund abgeglichen. Neue Entitäten melden sich
von selbst.
Entitäten ohne Datenpunkt
Liefert die Anlage einen Wert nicht mehr, werden die betroffenen Entitäten
abgeschaltet und bleiben stehen. Name, Symbol, Bereich und Verlauf bleiben damit
erhalten. Kommt der Wert zurück, sind sie sofort wieder da.
Sollen sie ganz verschwinden, steht unter Einstellungen → System →
Reparaturen ein Eintrag mit ihrer Anzahl. Auf Bestätigung löscht er sie samt
Verlauf.
Eine abgewählte Bedienebene ist etwas anderes: Das ist eine Entscheidung,
ihre Entitäten werden gleich entfernt und beim Wiederdazuwählen neu angelegt.
Ein Wert bleibt leer
Antwortet die Steuerung auf einen Datenpunkt mit 404 oder mit 409 und
„invalid Identifier”, gibt es ihn auf dieser Anlage nicht — die Entität wird
gar nicht erst angelegt. Das ist kein Fehler, sondern die Antwort der Anlage.
Bleibt eine vorhandene Entität leer, steht dort None und nicht 0. Das ist
Absicht: Eine fehlende Messung ist keine Null. Wer in einer Automation darauf
prüft, prüft auf unavailable oder unknown, nicht auf den Zahlenwert.
Schreibbare Datenpunkte, die sich nicht lesen lassen, bleiben trotzdem
bedienbar. Sie zeigen keinen Zustand an, nehmen aber Befehle an.
Etwas lässt sich nicht verstellen
Der Datenpunkt ist schreibgeschützt. Meldet die Steuerung writeProt, legt
HeatNexus statt des Bedienelements den lesenden Zwilling an. Das ist eine
Auskunft der Anlage, keine Entscheidung der Integration.
Die Ebene ist nicht freigegeben. Service- und Werksebene sind ohne den
Haken Fortgeschrittene Werte bedienbar machen nur lesbar.
Der Heizkreis ist aus. Eine Solltemperatur lässt sich in den Betriebsarten
Standby und WW-Betrieb nicht setzen. Die Anlage würde dabei nur einen Timer
stellen, ohne zu heizen — deshalb wird der Schreibversuch abgelehnt statt still
verschluckt.
Die Änderung springt zurück. Geschriebene Werte werden sofort angezeigt und
erst durch den nächsten Abruf bestätigt. Nimmt die Anlage den Wert nicht an,
fällt die Anzeige nach kurzer Zeit auf den echten Stand zurück.
Dashboard oder Oberfläche fehlen
Beide sind Schalter in den Optionen. Das mitgelieferte Dashboard wird bei jedem
Öffnen neu gebaut und lässt sich deshalb nicht bearbeiten. Wer ein eigenes will,
ruft den Dienst heatnexus.dashboard_ausgeben auf, legt ein neues Dashboard an
und fügt den Text im Rohkonfigurations-Editor ein.
Meldungen stehen noch da
Die Störungsanzeige wird gelesen, nicht quittiert. Verschwindet die Meldung
an der Anlage, verschwindet auch die Anzeige. Der Dienst
heatnexus.meldungen_loeschen leert nur die von HeatNexus geführte Liste in
Home Assistant — der Störspeicher am Bediengerät bleibt unberührt und wird wie
gewohnt dort zurückgesetzt.
Etwas melden
Zum Melden gehören zwei Dinge:
Der Diagnose-Export. In der Geräteansicht der Integration unter den drei
Punkten → Diagnose herunterladen. Darin steht, was HeatNexus gefunden hat,
ohne Passwort.
Was die Anlage ist — Baureihe des Kessels und welche Module dranhängen.
Für Anlagen, die noch nicht abgedeckt sind, gibt es ein Sondenwerkzeug. Es ist
eine einzelne Python-Datei, braucht nichts außer der Standardbibliothek,
verändert nichts an der Anlage und läuft im Betrieb nicht mit:
python tools/heatnexus_probe.py all 192.0.2.10
Ohne Argument startet es geführt. Die Ergebnisse landen als JSON, CSV und
Bericht im Ordner probe/.
Die Oberfläche
HeatNexus bringt eine eigene Seite in der Seitenleiste von Home Assistant mit.
Hier steht, was darauf zu sehen ist — damit man es beurteilen kann, ohne die
Integration erst installieren zu müssen.
Alle Werte im Bild sind erfunden, der Aufbau ist echt: Aufgenommen wird
die ausgelieferte Oberfläche selbst.
Was der Rundgang zeigt
Übersicht. Oben die Heizungsübersicht: je Anlagenteil ein Leitwert, so wie
das Bediengerät der Anlage ihn zeigt — am Kessel die Kesseltemperatur, am
Puffer die obere, am Heizkreis die Raumtemperatur. Darunter das
Anlagenschaubild, dann der Systemstatus mit Betriebszustand,
Außentemperatur, Kesselleistung, Brennstoff, Vorratsbehälter und den
Restlaufzeiten.
Schaubild in Bewegung. Die Pumpen drehen sich, solange sie fördern, und
die Bänder auf Vor- und Rücklauf zeigen die Richtung. Im Rundgang läuft neben
Kessel, Puffer und Heizkreis auch die Zirkulation — an den senkrechten
Stichleitungen sieht man, wohin die Wärme gerade geht.
Störung. Liegt eine Meldung an, wechselt der Balken oben von „Anlage in
Ordnung” auf „Störung anliegend”, und die Störungskarte nennt den Klartext des
Herstellers samt Abhilfe. Verschwindet die Meldung an der Anlage, verschwindet
auch die Anzeige — sie wird nicht quittiert, sondern gelesen.
Steuerung. Was man an der Anlage wirklich verstellt: Sollwert des
Heizkreises, Eco und Comfort als befristete Übersteuerung, die Betriebswahl,
Warmwasser mit Sollwert und Einmalladung, dazu die Tasten am Kessel. Wo ein
Fehlgriff Arbeit macht oder Brennstoff kostet, kommt vorher eine Rückfrage.
Im Bild läuft dabei beides mit: Am Heizkreis steht „Vorgabe noch bis 10:09”
samt „abbrechen” — ein von Hand verschobener Sollwert überstimmt das
Zeitprogramm nur auf Zeit. Und die Warmwasserkarte zeigt eine laufende
Einmalladung: Die Betriebsart meldet „Warmwasser Einmalladung”, die Taste
heißt so lange „Warmwasser laden abbrechen”. Erkannt wird das an der
Betriebsart, nicht am Auslöser — der fällt zurück, sobald die Anlage den
Auftrag angenommen hat.
Wartung. Restlaufzeiten bis Ascheentleerung, Hauptreinigung und Wartung,
der Brennstoff, die Zählerstände.
Zeitprogramme. Je Programm ein Wochenraster: Blöcke wie „Mo–Fr” und
„Sa, So”, darin die Schaltzeiten als Balken, darunter als Text. Bearbeitet wird
in Blöcken und gespeichert als ganzes Programm — so, wie die Anlage es führt.
Der Reiter Verlauf fehlt im Rundgang. Er benutzt die Verlaufskarte von
Home Assistant, und die zeichnet nur mit einer laufenden Anlage dahinter. Eine
leere Karte im Bild würde also etwas Falsches zeigen.
Wie das Bild entsteht
Es ist kein Nachbau. Aufgenommen wird frontend/heatnexus-panel.js selbst,
mit frontend/stil.js, in einem kopflosen Browser:
Die Aufteilung rechnet panel.panel_daten über eine Beispielanlage
(tools/beispielanlage.py) — dieselbe, aus der auch das Anlagenschaubild im
README entsteht.
Die Zustandstabelle von Home Assistant wird nachgebildet. Je Auftritt lassen
sich einzelne Zustände überschreiben; so entsteht die Störung.
Die Oberfläche hängt an genau einem fremden Element, ha-icon. Es wird mit
den Symbolpfaden bedient, die das installierte Home-Assistant-Frontend
mitbringt — die Symbole sind also die echten, nicht nachgezeichnet.
python tools/build_panel_rundgang.py
Damit kann das Bild nicht veralten wie ein von Hand gemachter Bildschirmabzug:
Ändert sich die Oberfläche, ändert sie sich beim nächsten Lauf mit.
Erfundene Werte, echte Struktur. Kein Datenpunkt im Bild stammt von einer
Anlage; Namen und Adressen sind die der Geräte-Datenbank, die Zahlen sind
gewählt.
Anlagenschaubild als Karte
Das Anlagenschaubild gibt es nicht nur in der mitgelieferten Oberfläche,
sondern auch als Lovelace-Karte. Damit lässt es sich in ein selbst gebautes
Dashboard hängen – mit Werten, laufenden Pumpen und Glutbett wie in der
Oberfläche.
Einrichten
Die Karte steht ohne Zutun bereit, sobald HeatNexus eingerichtet ist. Kein
Eintrag unter Einstellungen → Dashboards → Ressourcen nötig.
Dashboard bearbeiten → Karte hinzufügen → nach „HeatNexus” suchen.
Oder in YAML:
type:custom:heatnexus-schaubild
Einstellungen
Feld
Bedeutung
Vorgabe
anlage
Kennung oder Name der Anlage, alle für sämtliche
die erste gefundene
farbsatz
auto, dunkel, hell, terrakotta, petrol, pflaume
auto
schrift
klein, normal, gross, sehr_gross
normal
animation
Pumpen und Leitungen bewegen sich
true
pumpen
Pumpen stehen als Marke im Bild
true
mischer
Mischerstellung steht im Bild
true
zeichnungen
je Anlagenteil eine andere Bauteilzeichnung
wie erkannt
liste
rechts oder unten – wo die Werteliste steht
rechts
zusatzwerte
Entitäten für die Werteliste neben dem Bild
leer
zeilen
Aufbau der Zeilen in der Liste
siehe unten
titel_bild
Überschrift über dem Bild, leer blendet sie aus
Anlagenübersicht
titel_liste
Überschrift über der Liste, leer blendet sie aus
Werte
teile_aus
Anlagenteile, die nicht gezeichnet werden
leer
werte
je Anlagenteil die Werte, die im Bild stehen
Vorgabe der Anlage
auto folgt dem Erscheinungsbild von Home Assistant. Die Schrift der Marken
wächst mit der Kartenbreite; schrift verschiebt das Maß nach oben oder unten.
Ein Farbsatz färbt Gehäuse, Rahmen und Schrift. Vor- und Rücklauf bleiben in
jedem Satz rot und blau — das ist eine Auskunft, keine Gestaltung.
Alles davon lässt sich im Karteneditor einstellen, YAML ist nicht nötig.
Welche Zeichnung ein Anlagenteil bekommt, entscheidet die Erkennung — Hackgut,
Pellets, Scheitholz, Gas/Öl, Wärmepumpe. Wer eine andere will, wählt sie im
Editor unter Werte im Schaubild → Zeichnungen; Warmwasser und Zirkulation
stehen dort ebenfalls.
Neben dem Bild steht eine Liste, die frei zusammengestellt wird — Werte der
Anlage und beliebige andere Entitäten nebeneinander. Im Karteneditor führt ein
Klick auf eine Zeile zu ihren Einzelheiten: Name, Symbol, Aufbau und wo das
Anlagenteil steht.
Feld unter zeilen
Bedeutung
Vorgabe
aufbau
name_links, wert_rechts oder kompakt
name_links
teil
unter_wert, unter_name oder aus
unter_wert
symbol
an oder aus
an
Je Eintrag lässt sich das überschreiben, dazu kommen name, beschriftung
(das Anlagenteil), symbol, farbe, einheit und klick. Ein Eintrag ist
entweder die Entität allein oder ein Satz eigener Angaben:
Das Symbol kommt ohne Angabe von HeatNexus: Flamme am Kessel, Heizkörper am
Vorlauf, Tank am Puffer. Fremde Entitäten behalten ihr eigenes.
Was die Karte zeigt
Dieselbe Zeichnung wie die Oberfläche: Kessel, Puffer, Heizkreise, Warmwasser
und Zirkulation in der Reihenfolge des Wärmeflusses, dazu die Messwerte an
ihren Kästen. Ein Klick auf einen Wert öffnet die Detailansicht der Entität.
Die Zeichnung entsteht aus dem, was die Anlage meldet – es gibt kein festes
Bild und keine Rollenliste, in die eine Anlage passen müsste. Was fehlt,
erscheint nicht.
Farben
Der Server schickt die Zeichnung einmal und dazu je Farbsatz eine Tabelle;
umgefärbt wird im Browser. Ein weiterer Farbsatz kostet dadurch nichts – und
das Umschalten des Erscheinungsbildes wirkt sofort, ohne dass etwas
nachgeladen wird.
Wenn nichts erscheint
„Custom element doesn’t exist: heatnexus-schaubild” – Home Assistant hat
das Modul noch nicht geladen. Einmal die Seite neu laden. Bleibt es dabei,
hilft ein Neustart von Home Assistant.
„Noch keine Anlage eingelesen.” – Die Erkennung läuft noch. Nach dem
ersten Einlesen steht das Bild von selbst da.
„Diese Anlage gibt es nicht mehr.” – Der Wert unter anlage passt zu
keiner vorhandenen Anlage. Ohne Angabe nimmt die Karte die erste.
Nach einer Aktualisierung von HeatNexus zeigt eine bereits offene Seite
weiterhin die alte Fassung der Karte: Ein Browser nimmt einen Kartentyp je
Seitensitzung nur einmal an, und der Typ heißt in jeder Fassung gleich – er
steht so in den Dashboards der Nutzer. Ein Neuladen mit Strg+Umschalt+R
(macOS: Cmd+Umschalt+R) holt die neue.
Regelung
Warum wird der Kessel auf 76 °C geheizt, wenn für den Puffer 60 °C eingestellt
sind? Warum bleibt die Pufferladung aus, obwohl unten nur 40 °C gemessen werden?
Die Anlage zeigt viele Temperaturen, aber nicht, wie sie zusammenhängen.
Dahinter stehen wenige Rechenregeln. Dieser Abschnitt erklärt sie und zeigt,
welche Einstellung was bewirkt.
Alle genannten Zahlen sind Werkseinstellungen. Was an einer Anlage wirklich
eingestellt ist, führt HeatNexus als Entität; die Adresse steht jeweils dabei.
Der Sollwert wird aus dem Bedarf berechnet
Für den Pufferspeicher ist keine feste Temperatur eingestellt. Die Regelung
berechnet seinen Sollwert aus dem, was gerade gebraucht wird — meist aus dem
Warmwasserkreis oder einem Heizkreis. Auf diesen Bedarf kommen zwei Aufschläge:
Warmwasser-Sollwert 50 °C
+ WW-Überhöhung 16/5/1 +10 K
= Puffer-Sollwert 16/1/15 60 °C
+ Hysterese 16/9/35 +16 K
= Kessel-Sollwert 14/1/7 76 °C
Der erste Aufschlag hält den Puffer wärmer als das Warmwasser. Ohne ihn ließe
sich der Boiler nicht aufheizen. Der zweite hebt die Kesseltemperatur darüber
hinaus an, damit nicht bei jeder kleinen Abweichung nachgeheizt werden muss.
Ohne Bedarf beträgt der Puffer-Sollwert 0. Dann findet keine Ladung statt,
unabhängig von der Speichertemperatur. Das ist der häufigste Grund für die
Frage, warum die Anlage nicht anspringt.
Wann geladen wird
Die Ladung beginnt nicht beim Sollwert, sondern eine halbe Hysterese darunter:
Puffer-Sollwert 60 °C
− Hysterese/2 − 8 K
= Einschaltpunkt 52 °C am oberen Fühler (TPE)
Sinkt der obere Fühler unter diesen Wert, wird Wärme angefordert. Der untere
Fühler (TPA) hat auf den Beginn der Ladung keinen Einfluss.
HeatNexus legt beide Größen als eigene Werte an: Einschaltpunkt ist die
Temperatur aus der Rechnung oben, Einschaltpunkt Delta der Abstand des
Fühlers dahin in Kelvin. Das Delta ist der Wert, auf den sich eine Automation
setzen lässt: „in zwei Kelvin fordert die Anlage an”.
Wann die Ladung endet
Sobald der Bedarf gedeckt ist. Nicht, wenn der Puffer voll ist.
Erreicht das Warmwasser seine Solltemperatur, sinkt der Puffer-Sollwert auf 0
und die Ladung endet. Im unteren Speicherbereich kann es dann noch kalt sein.
Für die Nutzung als Wärmevorrat ist das der entscheidende Punkt: Im
Automatikbetrieb wird der Puffer nie durchgeladen. Maßgeblich ist der Bedarf
des Augenblicks, ein Vorratsziel gibt es nicht.
Wann der Brenner startet
Der Brenner startet, sobald die Kesseltemperatur unter den Sollwert minus
Hysterese sinkt:
Kessel-Sollwert 76 °C
+ Hysterese Brenner EIN − 5 K Adresse 9/21, negativ angegeben
= Brenner startet bei 71 °C
Zwei Werte begrenzen das Ergebnis nach oben:
Adresse
Bedeutung
ab Werk
12/39
Maximalwert der Solltemperatur
80 °C
9/57
Solltemperatur bei externer Wärmeanforderung
80 °C
12/39 ist eine harte Obergrenze. Liegt sie unter dem berechneten Sollwert,
wird gekappt. Eine höhere Überhöhung oder Hysterese bleibt dann wirkungslos.
Was welche Einstellung bewirkt
Einstellung
Wirkung
WW-Überhöhung16/5/1
Bei gleichem Warmwasserbedarf steigt der Puffer-Sollwert. Wirkt nur bei Warmwasser-Anforderung.
Hysterese16/9/35
Ein größerer Wert erhöht die Kesseltemperatur und verzögert den Beginn der Ladung. Beides zugleich, denn die Hysterese wirkt nach oben und nach unten.
Puffer Minimaltemperatur16/9/32
Untergrenze für den Speicher.
Puffer Maximaltemperatur16/10/31
Obergrenze für den Speicher.
Betriebswahl16/20/15
Bestimmt, ob der Bedarf oder das Zeitprogramm den Sollwert liefert.
Minimale Laufzeit16/20/28
Eine begonnene Ladung läuft mindestens so lange weiter, auch wenn der Bedarf vorher entfällt.
Die Betriebswahl entscheidet über alles
Am Pufferspeicher steht eine Auswahl, die leicht übersehen wird:
Wert
Bedeutung
Wirkung
0
Standby
keine Anforderung, der Speicher bleibt kalt
1
Automatikbetrieb
der Bedarf bestimmt den Sollwert, das Zeitprogramm wirkt nicht
2
Festbrennstoffbetrieb
für Handbeschickung
3
Pufferbetrieb
4
Auto mit Zeitprogramm
das Zeitprogramm des Puffers bestimmt den Sollwert
6
Handbetrieb
7
Kaminkehrerfunktion
Bei 1 bleibt das Zeitprogramm des Puffers ohne Wirkung. Einstellen lässt es
sich, ausgewertet wird es nicht. Erst bei 4 bestimmt es den Sollwert, und zwar
unabhängig vom aktuellen Bedarf.
Anwendungsfälle
Puffer gezielt durchladen
Zum Beispiel abends, wenn für den nächsten Tag wenig Sonne gemeldet ist und von
der Solaranlage kein Beitrag zu erwarten ist.
Betriebswahl 16/20/15 auf 4 — Auto mit Zeitprogramm setzen
Im Zeitprogramm des Puffers die gewünschte Temperatur eintragen, über den
Dienst heatnexus.set_time_program
Am nächsten Morgen zurück auf 1 — Automatikbetrieb
Damit richtet sich die Ladung nach dem Plan statt nach dem Bedarf. Für eine
Automation, die eine Solarprognose auswertet und die Betriebswahl umstellt,
genügt ein einziger Schreibvorgang.
Anforderung unterbinden
Betriebswahl auf 0 — Standby setzen. Danach wird keine Wärme mehr
angefordert.
Damit entfällt allerdings auch die Notversorgung. Um lediglich die Ladung zu
begrenzen, eignen sich die WW-Überhöhung oder die Maximaltemperatur besser.
Warmwasser wärmer, ohne den Puffer stärker zu heizen
Getrennt geht das nicht. Der Puffer-Sollwert wird aus dem Warmwasser-Bedarf
berechnet und steigt bei gleichbleibender Überhöhung mit. Für einen wärmeren
Boiler bei gleicher Puffertemperatur muss die Überhöhung im selben Zug gesenkt
werden.
Wärme von Hand anfordern
Einen Datenpunkt „jetzt anfordern” gibt es nicht. Ein Eingriff läuft über die
Bedingungen, unter denen die Regelung selbst anfordert:
Ziel
Weg
jetzt laden
Betriebswahl auf 4, dazu ein Zeitprogramm mit hoher Temperatur
nie laden
Betriebswahl auf 0
tiefer laden
Puffer Minimaltemperatur anheben
heißer liefern
Solltemperatur ext. Wärmeanforderung anheben, an der liefernden Seite
Zwei Anlagen im Verbund
Steht der Kessel im Nebengebäude und versorgt beide Häuser, arbeiten zwei
Regelkreise zusammen. Die Verständigung läuft über ein Pumpen- und Relaismodul,
bei Windhager ZSP genannt.
Auf der anfordernden Seite schaltet der Brenner-Ausgang 16/1/100, sobald
die Puffertemperatur unter die Schaltschwelle sinkt. Das ist ein Relais und kein
Messwert; in HeatNexus erscheint es als Ja/Nein-Sensor.
Auf der liefernden Seite nimmt das ZSP die Anforderung an. Die
Kesseltemperatur wird daraus mit der vollen Hysterese berechnet:
Solltemperatur ext. Wärmeanforderung 16/9/57 60 °C
+ Hysterese 16/9/35 +16 K
= Analog-Sollwert am ZSP 20/0/95 76 °C
Beide Seiten rechnen also unterschiedlich. Auf der anfordernden Seite beginnt
die Ladung bei Sollwert minus halber Hysterese, auf der liefernden gilt
Sollwert plus voller Hysterese.
Dazwischen liegt eine dritte Stufe, die leicht übersehen wird: Die Anforderung
wird zuerst aus dem Vorrat des liefernden Puffers gedeckt. Erst wenn dessen
oberer Fühler unter Sollwert minus halbe Hysterese sinkt, wird der Kessel
angefordert.
Die vollständige Kette hat damit vier Stufen:
Verbraucher meldet Bedarf
→ anfordernder Puffer schaltet seinen Brenner-Ausgang
→ ZSP überträgt den Sollwert
→ liefernder Puffer fordert den Kessel an
→ Brenner startet
Das Pumpen- und Relaismodul
Ein ZSP ist ein Schaltgerät ohne feste Aufgabe. Vier Ja/Nein-Schalter legen
fest, was es tut, und sie schließen einander nicht aus:
Adresse
Rolle
29/0
Sammelalarm
29/1
Pumpensteuerung, regelt eine Pumpe über die Drehzahl
29/2
Ext. Wärmeanforderung, nimmt eine Anforderung von außen an
29/3
Relaisfunktion, schaltet einen Kontakt
HeatNexus wertet diese Schalter aus. Steht 29/1 auf Nein, erscheinen
Pumpendrehzahl und Kesseltemperatur des Moduls gar nicht erst. Diese
Abhängigkeit steht in den Herstellerunterlagen und wird beim Einlesen
ausgewertet. Was an einer Anlage keine Aufgabe hat, wird also auch nicht als
Entität angelegt.
Drei Sollwerte für drei Anforderungsarten
Steht 29/2 auf Ja, führt das Modul drei Sollwerte nebeneinander:
Adresse
Name
gilt für
9/57
Solltemperatur ext. Wärmeanforderung
digitale Anforderung Heizung
20/23
Digital-Sollwert WWK
digitale Anforderung Warmwasser
0/95
Analog-Sollwert
stufenlose Anforderung über 0–10 V
Welcher davon gilt, hängt an der Verdrahtung; das Modul hat getrennte Eingänge
für Heizung und Warmwasser. Im Betrieb zeigt 0/95 den gerade angeforderten
Wert und ist damit der zuverlässigste Anzeiger für eine anliegende Anforderung.
Der Pumpenausgang
Bei aktivem 29/1 gibt das Modul eine Drehzahl aus. Eine eigene Regelgröße
liegt dabei nicht vor, deshalb läuft die Pumpe mit der eingestellten
Mindestdrehzahl 20/14. Sie schaltet mit der Anforderung ein und aus, ohne zu
modulieren.
Zusätzlich führt das Modul einen eigenen Fühler 0/7. Er sitzt an der
Übergabestelle und steigt, sobald gefördert wird.
Vorlagen und Dienste
HeatNexus liefert sechs Automations-Vorlagen und sechs Dienste mit. Die
Vorlagen landen bei der Einrichtung unter
blueprints/automation/heatnexus/ und werden mit jeder neuen Fassung
aufgefrischt; welche mitkommen, steht in den Optionen.
Automations-Vorlagen
Störung melden
Meldet sich, sobald die Anlage eine Störung anzeigt, wiederholt die Meldung auf
Wunsch und meldet die Entwarnung.
Ausgewertet wird der Sensor Störung gemeldet, nicht der angezeigte Text.
Damit hängt die Automation nicht an einer Formulierung und läuft auch bei
mehreren gleichzeitigen Meldungen richtig. Jeder Anlagenteil hat einen eigenen
Sensor dieser Art; für den Kessel genügt meist einer.
In der Aktion stehen stoerungstext, anzahl und anlagenteil bereit.
Wartungswarnung mit Erinnerung
Dreistufige Warnung für eine Restlaufzeit: Vorwarnung bei der ersten Schwelle,
Warnung bei der zweiten, danach Erinnerung in festem Abstand. Erledigt ist die
Sache, sobald die Restlaufzeit wieder über der Rückstellschwelle liegt — den
Zähler setzt die Anlage nach der Arbeit selbst zurück.
Je Zähler eine Automation. Am PuroWIN sind das Laufzeit bis Ascheentleerung,
Laufzeit bis Hauptreinigung und Laufzeit bis Wartung. Helfer werden keine
gebraucht, den Zustand hält die Automation selbst.
Brennstoffvorrat niedrig
Meldet sich, wenn der Vorratsbehälter leer ist, und erinnert daran, solange
sich nichts ändert.
Ausgewertet wird der Sensor Vorratsbehälter Status. Er ist keine
Füllstandszahl, sondern eine Zustandsmeldung — am PuroWIN voll,
teilgefüllt, leer und Fehler Vorratsbehälter. Welche davon eine Meldung
wert sind, wird als Text eingetragen, genau so, wie der Sensor sie anzeigt.
Heizkreis bei Abwesenheit absenken
Senkt einen Heizkreis ab, sobald niemand mehr zu Hause ist, und stellt bei der
Rückkehr den vorherigen Betrieb wieder her. Die Betriebsart wird vor dem
Absenken gemerkt. Zur Auswahl stehen Absenkbetrieb, Standby und Heizbetrieb.
Betriebsdauer erfassen
Zählt, wie lange die Anlage tatsächlich gelaufen ist — anhand der Betriebsart
und der Zustände, die als Ruhe gelten.
Legionellenschutz nachbilden
Führt den Warmwasserspeicher in festem Turnus auf eine erhöhte Temperatur,
indem die Einmalladung dafür benutzt wird. Gedacht für Anlagen, deren Regler
die eingebaute Funktion nicht führt — dort gibt es keinen Datenpunkt, den man
einschalten könnte. Nach dem Lauf wird alles zurückgestellt: Ladung aus,
Ladetemperatur zurück, Betriebswahl zurück.
Verbrühungsgefahr. Wasser mit 60 °C verbrüht die Haut in wenigen
Sekunden. Diese Vorlage nur einsetzen, wenn hinter dem Speicher eine
thermostatische Verbrühschutz-Armatur sitzt und die Zapftemperatur begrenzt.
Nachtstunden als Vorgabe sind kein Ersatz dafür.
Kein zertifizierter Legionellenschutz. Die Vorlage ahmt nach, was der
Regler sonst selbst täte. Sie prüft nicht, ob jede Leitung die Temperatur
erreicht, und ersetzt keine Anlage nach DVGW W 551.
Dienste
Dienst
Ziel
Wofür
rediscover
—
Verwirft den Erkennungsstand und liest die Anlage neu ein. Nach Umbauten.
set_vorgabe
Thermostat
Befristete Raumtemperatur, dieselbe, die die Anlage „Eco / Comfort” nennt.
set_current_temp_compensation
Thermostat
Verschiebt die gemessene Raumtemperatur um einen festen Betrag.
set_time_program
Zeitprogramm-Sensor
Schreibt ein Wochenprogramm.
meldungen_loeschen
Sensor
Leert die Meldungsliste in Home Assistant.
dashboard_ausgeben
—
Gibt das mitgelieferte Dashboard als YAML zurück.
Befristete Vorgabe
Temperatur zwischen 10 und 30 °C, Dauer bis 400 Minuten. 0 beendet eine
laufende Vorgabe sofort. Danach stellt die Anlage von selbst auf die
Betriebswahl zurück, die Zeitprogramme bleiben unverändert. Steht der Kreis auf
Standby oder WW-Betrieb, wird für die Dauer in ein Heizprogramm geschaltet und
anschließend zurückgesprungen.
Für Fühler, die dauerhaft zu warm oder zu kalt messen, weil sie ungünstig
hängen. Der Betrag liegt zwischen −3 und +3 K und wird auf die gemessene
Raumtemperatur aufgeschlagen.
Zeitprogramm setzen
Zwei Wege. Vereinfacht über switch_points — mit weekdays, sonst gilt es
täglich:
blocks überschreibt switch_points und weekdays, wenn beides angegeben ist.
Geschrieben wird nur der Inhalt: HeatNexus liest das Objekt vorher, tauscht den
Wert aus und lässt die Hülle der Anlage unangetastet.
Dashboard ausgeben
Das mitgelieferte Dashboard wird bei jedem Öffnen neu gebaut und ist deshalb
nicht bearbeitbar. Der Dienst gibt es als YAML zurück — damit lässt sich ein
eigenes Dashboard anlegen: neues Dashboard erstellen, Rohkonfigurations-Editor
öffnen, Text einfügen. Ab da gehört es dir und ändert sich nicht mehr mit.
Datenpunkte
Erzeugt aus device_db.json – nicht von Hand ändern.
Neu erzeugen mit python tools/build_datenpunkte_doku.py.
Die Integration erkennt Datenpunkte auf zwei Wegen: über kuratierte Tabellen
in const.py (fester Name, Einheit, Kategorie, Symbol) und über diese
Geräte-Datenbank, die die Bedienebenen je Funktionstyp beschreibt. Welche
davon tatsächlich angelegt werden, entscheidet die Anlage: Nicht vorhandene
werden entfernt, schreibgeschützte nur lesend angelegt.
Eine OID ist <gn>/<mn>; die vollständige Adresse lautet
/1/<nodeId>/<fctId>/<gn>/<mn>/0. Siehe Geräteschnittstelle.
Funktionstypen
Die Anlage meldet je Funktion nur eine Zahl. Was sie bedeutet, ist aus der
Parameterliste des Herstellers abgeleitet – welche Datenpunkte ein Typ führt,
sagt, was er ist. Nicht aus dem Namen raten, den ein Installateur vergeben
hat.
Wiederholungen nach Flammenabriss in Flammenstabilisierung
Werk
38/84
Anzahl Stiring bis Entaschung (Modulation)
Service, Werk
38/85
Glutbettschieber Nachlaufzeit Endlage offen
Werk
38/86
Maximale Laufzeit Primärausbrand Brenner voll
Werk
38/87
Ascheschieber Nachlaufzeit Endlage offen
Werk
38/88
Minimale Laufzeit Sekundärausbrand
Werk
38/89
Saugturbine ohne / mit Frequenzumrichter
Service, Werk
38/90
Gebläsedrehzahl Sekundärausbrand bei O2 zu gering
Werk
38/91
Zeit bis Stiring Reinigungsausbrand
Werk
38/92
Verzögerung Überfüllung RAS
Werk
38/93
Maximale Zeit Level-Control erreicht im Modulationsbetrieb
Werk
38/94
Anzahl Stiring bis Entaschung (Ausbrand)
Service
38/95
Maximale Zeit Level-Control nicht erreicht im Modulationsbetrieb
Werk
38/96
Endposition Stirring
Werk
38/97
Einschaltverzögerung Schnecken
Service, Werk
38/98
Endposition Verteilung
Werk
38/99
Laufzeit bis HFR im Modulationsbetrieb
Werk
38/100
Laufzeit HFR im Modulationsbetrieb und Primärausbrand
Werk
38/101
Laufzeit HFR Standschutz
Werk
38/102
Betriebsstunden bis Ascheaustragung
Werk
38/103
Laufzeit Ascheaustragung
Werk
38/104
Laufzeit Ascheaustragung Standschutz
Werk
38/105
Pause vor Laufzeit 2 Primärzündung
Werk
38/106
Temperaturanstieg Thermocontrol in Primärzündung
Werk
38/107
RAS-Direktschnecke Mindeststrom relativ
Werk
38/108
RAS-Direktschnecke Spitzenststrom relativ
Werk
38/110
RAS-Direktschnecke Maximale Frequenz
Werk
38/111
RAS-Direktschnecke Minimale Frequenz
Werk
38/113
Laufzeit RAS-Direktschnecke Rückwärts bei Blockade oder Unterbrechung
Werk
38/114
Anzahl Versuche Blockade oder Unterbrechung RAS-Direktschnecke
Werk
38/115
Minimale Thermocontroltemperatur „Warten auf Lambda“
Werk
38/116
Sollwert O2„Warten auf Lambda“
Werk
38/117
Brennstoffdosierung Zeit Level-Control Ein
Werk
38/118
Saugturbine Mindeststrom
Werk
38/119
Saugturbine Spitzenststrom
Werk
38/120
Primärluftklappe Laufzeit Endlage - Endlage
Werk
38/121
Sekundärluftklappe Laufzeit Endlage - Endlage
Werk
38/122
Laufzeit in Modulation bis Pause Brennstoffdosierung
Werk
38/123
Pause Brennstoffdosierung
Werk
38/124
Laufzeit bis Pause Saugzuführung
Werk
38/125
Anzahl Saugzyklen
Service
38/126
Gewählter Brennstoff
Betreiber
38/127
Aktueller Brennstoff
Betreiber
39/3
Primärluftmenge
Service
39/23
Saugzuggebläse Soll-Drehzahl
Service
39/57
Aschetonne entleeren
Betreiber
39/61
Gerätetyp
Info
39/66
Interner Fehler
Service
39/82
Softwareversion EWM
Service
39/90
Brenner sperren
Service
39/94
Reinigung bestätigen
Betreiber
39/95
Brennstoffzuführung anfordern
Betreiber
39/100
Wartung
Service
40/0
RAS-Steigschnecke Mindeststrom relativ
Werk
40/1
RAS-Steigschnecke Spitzenststrom relativ
Werk
40/2
RAS-Steigschnecke Maximale Frequenz
Werk
40/3
RAS-Steigschnecke Minimale Frequenz
Werk
40/4
Anzahl der Steigschnecken
Service, Werk
40/5
Zeit bis Stiring bei 100% Leistung
Service, Werk
40/6
Zeit bis Stiring bei 30% Leistung
Service, Werk
40/7
Stokerschnecke Ansteuerung max.
Werk
40/8
Stokerschnecke Ansteuerung min.
Werk
40/9
RAS-Direktschnecke Ansteuerung max.
Werk
40/10
RAS-Direktschnecke Ansteuerung min.
Werk
40/11
RAS-Steigschnecke Ansteuerung max.
Werk
40/12
RAS-Steigschnecke Ansteuerung min.
Werk
40/13
Vorratsbehälterschnecke Ansteuerung max.
Werk
40/14
Vorratsbehälterschnecke Ansteuerung min.
Werk
40/15
Stokerschnecke Ansteuerung vorwärts bei Blockade oder Unterbrechung
Werk
40/16
Stokerschnecke Ansteuerung rückwärts bei Blockade oder Unterbrechung
Werk
40/17
RAS-Direktschnecke Ansteuerung vorwärts bei Blockade oder Unterbrechung
Werk
40/18
RAS-Direktschnecke Ansteuerung rückwärts bei Blockade oder Unterbrechung
Werk
40/19
RAS-Steigschnecke Ansteuerung vorwärts bei Blockade oder Unterbrechung
Werk
40/20
RAS-Steigschnecke Ansteuerung rückwärts bei Blockade oder Unterbrechung
Werk
40/21
Vorratsbehälterschnecke Ansteuerung vorwärts bei Blockade oder Unterbrechung
Werk
40/22
Vorratsbehälterschnecke Ansteuerung rückwärts bei Blockade oder Unterbrechung
Werk
40/23
Laufzeit RAS-Steigschnecke Rückwärts bei Blockade oder Unterbrechung
Werk
40/24
Anzahl Versuche Blockade oder Unterbrechung RAS-Steigschnecke
Werk
40/25
Betriebsstunden bis Reinigung Aschetonne 1
Werk
40/26
Betriebsstunden bis Hauptreinigung
Werk
40/27
Betriebsstunden bis Wartung
Werk
40/28
Wartung Aus/Ein
Service, Werk
40/29
Korrekturfaktor Stokerschnecke
Service, Werk
40/30
Korrekturfaktor RAS-Direktschnecke
Service, Werk
40/31
Korrekturfaktor RAS-Steigschnecke
Service, Werk
40/32
Korrekturfaktor Vorratsbehälterschnecke
Service, Werk
40/34
Korrekturfaktor RAS-Steigschnecke 2
Werk
40/35
Korrekturfaktor RAS-Steigschnecke 3
Werk
40/36
Index für Anzeige Steigschnecke
Werk
40/37
RAS-Saugschnecke Ansteuerung Betrieb
Werk
40/38
RAS-Saugschnecke Ansteuerung vorwärts bei Blockade oder Unterbrechung
Werk
40/39
RAS-Saugschnecke Ansteuerung rückwärts bei Blockade oder Unterbrechung
Werk
40/40
Korrekturfaktor RAS-Saugschnecke
Service, Werk
40/41
Frequenz Saugturbine Max
Werk
40/42
Frequenz Saugturbine Min
Werk
40/43
Ansteuerung Saugturbine
Werk
40/44
Blockade Stokerschnecke
Service
40/45
Blockade Direktschnecke
Service
40/46
Blockade Saugzuführung
Service
40/47
Blockade Vorratsbehälterschnecke
Service
40/48
Blockade Steigschnecke
Service
40/49
Überfüllung Direktschnecke
Service
40/50
Überfüllung Saugzuführung
Service
40/51
Überfüllung Steigschnecke
Service
40/52
Blockade Glutbettschieber
Service
40/53
Blockade Entaschung
Service
40/54
Blockade Füllstandschalter
Service
40/55
Korrekturfaktor Saugturbine
Service, Werk
40/56
Brennstoffbewertung Normierungsfaktor
Werk
40/57
Brennstoffbewertung Bezugsfrequenz
Werk
40/58
Brennstoffbewertung Bezugsleistung
Werk
40/60
Blockade Ascheaustragung
Service
40/61
Blockade Heizflächenreinigung
Service
40/66
Blockade Ascheförderer
Service
40/69
Ascheaustragung mit Freigabezeit Beginn
Betreiber
40/70
Ascheaustragung mit Freigabezeit Ende
Betreiber
40/101
Ventil Abgas-Rezirkulation
Service
40/105
Abgas-Rezirkulation
Service
42/21
Sensor Pelletförderung
Service
43/34
Sonde 1
Betreiber
43/35
Sonde 2
Betreiber
43/36
Sonde 3
Betreiber
43/37
Sonde 4
Betreiber
43/38
Sonde 5
Betreiber
43/39
Sonde 6
Betreiber
43/40
Sonde 7
Betreiber
43/41
Sonde 8
Betreiber
43/79
Sonden zurücksetzen
Betreiber
376
–
Werk
fctType 26 – Wärmepumpe (Energiemanagement)
OID
Name
Ebene
4/92
Softwareversion
Info
4/93
Hardwareversion
Info
39/66
Interner Fehler
Service
50/5
Betriebswahl
Betreiber
50/43
Puffertemperatur
Info
51/35
Sollwert Spreizung
Service, Werk
51/84
Hysterese Umschaltventil bei EnergyHold
Werk
51/85
Rücklauftemperatur für EnergyHold Heizen
Werk
51/86
Hysterese für EnergyHold Heizen
Werk
51/87
EnergyHold Max für Heizen
Werk
51/88
Frostschutztemperatur 1
Werk
51/89
Hysterese Frostschutztemperatur 1
Werk
51/90
Frostschutztemperatur 2
Werk
51/93
Frostschutztemperatur Aussentemperatur
Werk
51/94
Verzögerung Error bei Frostschutz
Werk
52/10
Aussentemperatur Regelung
Info
54/0
Kosten Pellets
Betreiber, Werk
54/1
Wärmemenge Pellets (kWh/kg)
Werk
54/2
Wirkungsgrad Pelletskessel
Werk
54/5
Verzögerung Bewertung COP Oekonomischer Betrieb
Werk
54/6
Verzögerung COP Mittelwert < COP Soll
Werk
54/7
Zeitprogramm Stromtarife
Betreiber, Werk
54/8
Tarif 1
Betreiber, Werk
54/9
Tarif 2
Betreiber, Werk
54/10
Tarif 3
Betreiber, Werk
54/11
Tarif 4
Betreiber, Werk
54/12
Tarif 5
Betreiber, Werk
54/13
Maximale Laufzeit im Bivalenzzustand 1 bei PV Eingang
Werk
54/15
Zeitprogramm Pufferspeicher
Betreiber, Werk
54/16
Sollwert Pufferspeicher bei PV
Betreiber, Werk
54/17
Umschaltventil immer auf BioWIN
Werk
54/18
EnergyHold Max BioWIN im Zustand Bivalenz 3
Werk
54/19
Maximale Laufzeit EnergyHold Max bei BioWIN
Werk
54/20
Mindestlaufzeit beide WEZ freigegeben BioWIN Hybrid
Werk
54/22
Mindestlaufzeit beide WEZ freigegeben AeroWIN
Werk
54/23
Verzögerung Error Volumenstrom
Werk
54/24
Abweichung Volumenstrom zu Soll für Error
Werk
54/25
Regler Spreizung P-Band
Werk
54/26
Regler Spreizung Nachstellzeit
Werk
54/27
Untere Einsatzgrenze Wärmepumpe
Betreiber, Werk
54/28
Bivalenztemperatur Heizung
Betreiber, Werk
54/29
Regler Volumenstrom P-Band
Werk
54/30
Regler Volumenstrom Nachstellzeit
Werk
54/31
Verzögerungszeit Bivalenz Heizung
Betreiber, Werk
54/32
Verzögerungszeit Bivalenz WW
Betreiber, Werk
54/33
Notbetrieb
Betreiber, Werk
54/34
Nachlaufzeit Pumpe
Werk
54/35
Verzögerungszeit WP nicht verfügbar für Heizung
Werk
54/37
Hysterese Bivalenz
Service, Werk
54/38
Minimale Kesseltemperatur Pelletskesssel
Werk
54/39
Hysterse Minimale Kesseltemperatur Pelletskesssel
Werk
54/40
Laufzeit Umschaltventil
Werk
54/41
Bivalenztemperatur WW
Betreiber, Werk
54/43
SG Ready
Betreiber, Werk
54/45
Hybrid-Assistent
Betreiber, Werk
54/46
Helligkeit Hybrid-Assistent
Betreiber, Werk
54/49
SG Ready Status
Info
54/50
Ladeventil
Service, Werk
54/51
Pufferspeicher
Service, Werk
54/52
EnergyHold WW mit Boilerladeventil
Werk
54/53
Offset Sollwert Warmwasser
Werk
54/54
Hysterse Offset Sollwert Warmwasser
Werk
54/55
Laufzeit Boilerladeventil
Werk
54/56
EnergyHold BioWIN Status bei Frostschutz 2. WEZ
Werk
fctType 27 – Wärmepumpe
OID
Name
Ebene
0/0
Aussentemperatur
Info
2/70
Datum
Info
2/72
Uhrzeit
Info
4/92
Softwareversion
Info
4/93
Hardwareversion
Info
9/57
Solltemperatur ext. Wärmeanforderung
Service
12/38
Gerätetyp
Info
20/14
min. Drehzahl
Service
20/22
max. Drehzahl
Service
29/30
Summenstörmeldung Alarm
Service
29/31
Summenstörmeldung Fehler
Service
29/32
Summenstörmeldung Info
Service
39/66
Interner Fehler
Service
39/112
MAC-Adresse
Info
50/11
Silentmode
Betreiber
50/14
Zeitprogramm Silentmode
Betreiber
50/22
Externe Anforderung
Service
50/28
Solltemperatur ext. Kühlanforderung
Service
50/31
Silentmode Faktor
Betreiber
50/39
Lüftersolldrehzahl A
Service
50/41
Verdichter Istdrehzahl
Service
50/42
Lüftersolldrehzahl B
Service
50/68
Betriebswahl
Betreiber
50/70
Betriebsphase
Service
50/71
Heizgrenze aktiv
Service
50/72
Kühlgrenze aktiv
Service
50/73
Kondensationswächter
Service
50/88
Software Wärmepumpe
Service
51/21
Leistung Heizen
Service
51/22
Leistung Kühlen
Service
51/64
Hysterese Aus
Service
51/65
Hysterese Ein
Service
51/70
Pausenzeit Wärmepumpe
Service
51/71
Pausenzeit abbrechen
Service
51/80
Hysterese Kühlen Aus
Service
51/81
Hysterese Kühlen Ein
Service
52/12
Aussentemperatur Wärmepumpe
Service
52/14
Heißgastemperatur
Service
52/15
Vorlauftemperatur
Service
52/16
Rücklauftemperatur
Service
52/17
Sauggastemperatur
Service
52/18
Verdampferausstrittstemperatur
Service
52/20
Verflüssigeraustrittstemperatur
Service
52/30
Niederdruck
Service
52/32
Hochdruck
Service
52/49
Anzahl Starts Heizen
Info
52/70
Expansionsventil
Service
52/72
Volumenstrom
Service
52/80
Energiezähler Wärmepumpe Wirkleistung
Info
52/81
Energiezähler Wärmepumpe Gesamtenergie
Info
52/82
Energiezähler PV-Überschuss Wirkleistung
Info
52/83
Energiezähler PV-Überschuss Gesamtenergie
Info
52/121
Vorlauftemperatur Soll
Info
54/21
Zustand Bivalenz
Service
54/27
Untere Einsatzgrenze Wärmepumpe
Betreiber
54/28
Bivalenztemperatur Heizung
Betreiber
54/31
Verzögerungszeit Bivalenz Heizung
Betreiber
54/32
Verzögerungszeit Bivalenz WW
Betreiber
54/37
Hysterese Bivalenz
Service
54/41
Bivalenztemperatur WW
Betreiber
54/43
SG Ready
Betreiber
56/5
Aktuelle Stufe E-Heizung
Info
56/6
Betriebsphase
Info
56/29
Betriebsstunden
Info
58/5
Pumpensteuerung
Service
58/12
Pumpe Wärmeerzeuger
Service
59/7
Anlagenkonfiguration
Service
59/45
Temperatur Lastausgleich
Info
59/71
Anzahl Starts
Info
59/72
Anzahl Stufen E-Heizung
Service
59/77
Vorlauftemperatur Soll
Info
59/92
Verzögerungszeit PV-Überschuss Heizkreis
Betreiber
59/93
Verzögerungszeit PV-Überschuss Warmwasser
Betreiber
59/95
Zeitprogramm Freigabezeit Energy Pilot
Betreiber
59/99
Betriebswahl
Betreiber
59/111
PV-Überschuss für WW-Ladung
Betreiber
60/5
Energy Pilot aktivieren
Service
60/8
Pausenzeit nach Heizen / Kühlen
Service
60/9
Ventil Inneneinheit
Service
60/18
Wärmemenge Heizen
Info
60/19
Energiemenge Kühlen
Info
63/7
Ventil Deckenkühlung invertiert
Service
63/8
Ventil Inneneinheit invertiert
Service
Auswahlwerte
Erzeugt aus device_db.json – nicht von Hand ändern.
Neu erzeugen mit python tools/build_datenpunkte_doku.py.
167 Auswahltabellen. Sie sind keine Listen: Die Zahlen haben
Lücken, weil nicht jede Anlage jeden Wert kennt. Zusätzlich meldet die Anlage
im Feld enum ihrer Metadaten, welche Werte sie tatsächlich zulässt – erst
das ergibt die Auswahl, die HeatNexus anbietet.
Weicht ein Text an der echten Anlage nachweislich ab, steht die
berichtigte Tabelle in const.ENUMS und geht der erzeugten vor.
Derzeit ist das bei keiner nötig.
2/1
Wert
Bedeutung
0
Brenner gesperrt
1
Selbsttest
2
WE ausschalten
3
Standby
4
Brenner AUS
5
Vorspülen
6
Zündphase
7
Stabilisierung
8
Modulation
9
Gerät gesperrt
10
Standby Sperrzeit
11
Gebläse AUS
12
Verkleidungstür offen
13
Zündung bereit
14
Abbruch Zündung
15
Anheizvorgang
16
Schichtladung
17
Ausbrand
2/2
Wert
Bedeutung
0
Brenner
1
Pufferladepumpe
2
Umschaltventil
3
Umschaltventil
4
WW-Ladepumpe
6
Puffertransferpumpe
7
Kesselkreispumpe
12
Brenner ZSK
13
Pumpe ZSK
14
Kühlen
2/9
Wert
Bedeutung
0
Standby
1
Heizbetrieb
2
Absenkbetrieb
3
WW-Ladung
4
Eco / Comfort
5
Urlaubsprogramm
6
Estrich
7
Frostschutz
8
Standby
9
Handbetrieb
10
Testbetrieb
11
Kaminkehrer
12
Brenner AUS
13
Brenner EIN
14
Automatikkessel
15
FB-Kessel
16
Pufferspeicher
17
Warmwasser Hygiene-Programm
18
Warmwasser Einmalladung
19
Automatikbetrieb
20
Kühlen
21
Standby
2/16
Wert
Bedeutung
0
Nein
1
Ja
2/59
Wert
Bedeutung
0
Ausgeschaltet
1
Abschaltvorgang
2
Festbrennstoff-/Pufferbetrieb
3
Brennstoffzuführung in Betrieb
4
Brennstoffzuführung
5
Kessel-Temperatur
6
Brennstoffzuführung in Betrieb
7
Brennstoffzuführung
8
Handbetrieb
9
Kaminkehrerfunktion
10
Aktorentest
11
Installationsvorgang aktiv
12
Brennstoffzuführung in Betrieb
13
Inbetriebnahme
14
Lagerraum befüllen
15
Lagerraum befüllen
16
Grundeinstellungen
2/73
Wert
Bedeutung
0
Mo
1
Di
2
Mi
3
Do
4
Fr
5
Sa
6
So
3/50
Wert
Bedeutung
0
Standby
1
Programm 1
2
Programm 2
3
Programm 3
4
Heizbetrieb
5
Absenkbetrieb
6
WW-Betrieb
7
Handbetrieb
8
Kühlen
4/12
Wert
Bedeutung
0
senden
1
verwenden
2
lokale Zeit
4/13
Wert
Bedeutung
0
senden
1
verwenden
2
lokale TA
4/14
Wert
Bedeutung
0
senden
1
verwenden
2
lokale BW
4/33
Wert
Bedeutung
0
Schaltkontakt
1
Interface ZSP 4601
4/60
Wert
Bedeutung
0
beenden
1
Belegreifheizen
2
Funktionsheizen
4/77
Wert
Bedeutung
0
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
5/2
Wert
Bedeutung
0
Nein
1
Ja
5/6
Wert
Bedeutung
0
Aus
1
Mit Zeitsteuerung
2
Mit Temperatursteuerung
3
Mit Impulssteuerung
4
EIN
5/76
Wert
Bedeutung
0
inaktiv
1
WW-Ladepumpe
2
Ladeventil
3
Umschaltventil
4
Ventil Inneneinheit
5
Ventil Inneneinheit und WW-Ladepumpe
7/12
Wert
Bedeutung
0
AUS
1
0..10V
2
PWM
3
PWM
4
ohne
5
LIN
7/76
Wert
Bedeutung
0
inaktiv
1
Radiatoren
2
Fussboden
3
Pumpenkreis
4
Vorlauf Regelung
5
Fan Coil
9/75
Wert
Bedeutung
0
AUS
1
EIN
2
Handbetrieb
3
Kaminkehrer
4
Aktorentest
5
Inbetriebnahme
6
Serviceausbrand
7
Lagerraum befüllen
11/76
Wert
Bedeutung
0
Nein
1
Ja
12/103
Wert
Bedeutung
0
Automatische Erkennung
1
Normal
2
Gluterhaltung
12/105
Wert
Bedeutung
0
Nein
1
Ja
14/19
Wert
Bedeutung
0
ausgeschaltet
1
ohne Zeitsteuerung
2
mit Freigabezeit
3
mit Startzeit
14/21
Wert
Bedeutung
0
alle Sonden
1
nur Sonde 1
2
nur Sonde 2
3
nur Sonde 3
4
nur Sonde 4
5
nur Sonde 5
6
nur Sonde 6
7
nur Sonde 7
8
nur Sonde 8
16
nur Zone 1
17
nur Zone 2
14/23
Wert
Bedeutung
0
ohne Zuführsystem
1
Saugturbine mit 3 Sonden
2
Saugturbine mit 2 Sonden
3
Saugturbine mit Rührwerk
17
Saugturbine mit Rührwerk
18
Saugturbine mit 2 Sonden
19
Saugturbine mit 3 Sonden
20
Saugturbine mit 4 Sonden
22
Saugturbine mit 6 Sonden
24
Saugturbine mit 8 Sonden
14/74
Wert
Bedeutung
0
Nein
1
Ja
14/76
Wert
Bedeutung
0
Stufe 0
1
Stufe 1
2
Stufe 2
3
Stufe 3
14/77
Wert
Bedeutung
0
Rauchgasthermostat
1
Zuluftklappe
2
Ext. Verbrennungsluft
20/0
Wert
Bedeutung
0
Nein
1
Ja
20/1
Wert
Bedeutung
0
Nein
1
Ja
20/2
Wert
Bedeutung
0
Nein
1
Ja
20/3
Wert
Bedeutung
0
Auto mit Umschaltung
1
Auto mit Laufzeitverlängerung
2
Auto mit Parallelbetrieb
3
FB-/Pufferbetrieb
20/4
Wert
Bedeutung
0
Brenner und Transferpumpe
1
Brenner und Kesselpumpe
2
Pufferladung mit TPE
3
Pufferladung mit TPE/TPA
4
Pufferladung bedarfsopt.
5
Pufferladung Kaskade
20/5
Wert
Bedeutung
0
Pufferfühler mitte
1
Rauchgasfühler
2
Rauchgasthermostat
20/6
Wert
Bedeutung
0
Motor
1
Th. Antrieb
20/8
Wert
Bedeutung
0
Nein
1
Ja
20/15
Wert
Bedeutung
0
Standby
1
Automatikbetrieb
2
Festbrennstoffbetrieb
3
Pufferbetrieb
4
Auto mit Zeitprogramm
6
Handbetrieb
7
Kaminkehrerfunktion
20/18
Wert
Bedeutung
0
Transferpumpe
1
Pufferladepumpe
2
Kesselkreispumpe
3
Heizkreispumpe
20/19
Wert
Bedeutung
0
Pufferladung mit TPE
1
Pufferladung mit TPE/TPA
2
Hydr. Weiche mit TWE
3
Hydr. Weiche mit TWE/TWA
20/20
Wert
Bedeutung
0
Automatik
1
gering
2
mittel
3
hoch
4
maximal
20/21
Wert
Bedeutung
0
Automatik
1
gering
2
mittel
3
hoch
4
maximal
20/26
Wert
Bedeutung
0
AUS
1
Notkessel
2
Spitzenlast
20/27
Wert
Bedeutung
0
Nein
1
Ja
20/81
Wert
Bedeutung
0
19,2 kbit/s
1
38,4 kbit/s
2
76,8 kbit/s
3
115,2 kbit/s
20/105
Wert
Bedeutung
0
0
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
10
10
11
11
12
12
13
13
14
14
15
15
16
16
17
17
18
18
19
19
20
20
21
21
20/106
Wert
Bedeutung
0
Stufe 0
1
Stufe 1
2
Stufe 2
3
Stufe 3
20/107
Wert
Bedeutung
0
¤
1
EUR
2
CHF
3
GBP
4
DKK
5
SEK
6
NOK
7
PLN
8
CZK
9
HUF
10
HRK
11
RON
12
BGN
20/118
Wert
Bedeutung
0
Nein
1
Ja
20/124
Wert
Bedeutung
0
Thermisches Mischventil
1
Motor Mischventil
22/31
Wert
Bedeutung
0
Aus
1
Ein
23/94
Wert
Bedeutung
0
AUS
1
EIN
23/95
Wert
Bedeutung
0
AUS
1
EIN
23/97
Wert
Bedeutung
0
AUS
1
EIN
29/0
Wert
Bedeutung
0
Nein
1
Ja
29/1
Wert
Bedeutung
0
Nein
1
Ja
29/2
Wert
Bedeutung
0
Nein
1
Ja
29/3
Wert
Bedeutung
0
Nein
1
Ja
29/21
Wert
Bedeutung
0
Nein
1
Ja
29/30
Wert
Bedeutung
0
Nein
1
Ja
29/31
Wert
Bedeutung
0
Nein
1
Ja
29/32
Wert
Bedeutung
0
Nein
1
Ja
37/44
Wert
Bedeutung
0
AUS
1
EIN
38/89
Wert
Bedeutung
0
ohne
1
mit
38/126
Wert
Bedeutung
0
Hackgut normal
1
Hackgut feucht
2
Pellets
3
Hackgut normal schlackend
4
Hackgut feucht schlackend
5
Hackgut trocken
38/127
Wert
Bedeutung
0
Hackgut normal
1
Hackgut feucht
2
Pellets
3
Hackgut normal schlackend
4
Hackgut feucht schlackend
5
Hackgut trocken
39/57
Wert
Bedeutung
0
Nein
1
Ja
39/76
Wert
Bedeutung
0
Fehler Vorratsbehälter
1
Vorratsbehälter leer
2
Vorratsbehälter teilgefüllt
3
Vorratsbehälter voll
39/90
Wert
Bedeutung
0
Nein
1
Ja
39/94
Wert
Bedeutung
0
Nein
1
Reinigung
2
Hauptreinigung
3
Wartung
4
Hauptreinigung und Aschetonnen entleeren
39/95
Wert
Bedeutung
0
Nein
1
Ja
39/100
Wert
Bedeutung
0
Nein
1
Reinigung
2
Hauptreinigung
3
Wartung
4
Hauptreinigung und Aschetonnen entleeren
39/107
Wert
Bedeutung
0
Gesperrt
1
Freigegeben
39/108
Wert
Bedeutung
0
AUS
1
EIN
40/28
Wert
Bedeutung
0
Aus
1
Ein
40/105
Wert
Bedeutung
0
Nein
1
Ja
41/51
Wert
Bedeutung
0
Aus
1
Ein
41/54
Wert
Bedeutung
0
Nein
1
Ja
41/110
Wert
Bedeutung
0
Nein
1
Ja
42/18
Wert
Bedeutung
1
Tagesbehälter
2
Wochenbehälter
10
Saugturbine mit Rührwerk
11
Saugturbine mit 3 Sonden
12
Saugturbine mit 8 Sonden
13
Saugturbine mit SBT 400
42/19
Wert
Bedeutung
0
Nein
1
Ja
42/21
Wert
Bedeutung
0
Nein
1
Ja
42/46
Wert
Bedeutung
0
Pumpe Wärmeerzeuger
1
Absperreinheit
2
Summenstörmeldung
42/75
Wert
Bedeutung
0
Nein
1
Ja
42/89
Wert
Bedeutung
0
Klassik
1
Exklusiv
2
Alpha
43/34
Wert
Bedeutung
0
Aus
1
Ein
2
Leer
43/35
Wert
Bedeutung
0
Aus
1
Ein
2
Leer
43/36
Wert
Bedeutung
0
Aus
1
Ein
2
Leer
43/37
Wert
Bedeutung
0
Aus
1
Ein
2
Leer
43/38
Wert
Bedeutung
0
Aus
1
Ein
2
Leer
43/39
Wert
Bedeutung
0
Aus
1
Ein
2
Leer
43/40
Wert
Bedeutung
0
Aus
1
Ein
2
Leer
43/41
Wert
Bedeutung
0
Aus
1
Ein
2
Leer
43/49
Wert
Bedeutung
0
Sonde
1
Sonde 1 saugen
2
Sonde 1 spülen
3
Sonde 2 saugen
4
Sonde 2 spülen
5
Sonde 3 saugen
6
Sonde 3 spülen
7
Sonde 4 saugen
8
Sonde 4 spülen
9
Sonde 5 saugen
10
Sonde 5 spülen
11
Sonde 6 saugen
12
Sonde 6 spülen
13
Sonde 7 saugen
14
Sonde 7 spülen
15
Sonde 8 saugen
16
Sonde 8 spülen
43/103
Wert
Bedeutung
0
Aus
1
Intern
2
Volumenstromsensor
3
Externer Wärmemengenzähler
43/106
Wert
Bedeutung
0
Aus
1
DN 20 PWM
2
DN 25 PWM
3
DN 20 NPN
4
DN 25 NPN
44/69
Wert
Bedeutung
0
Nein
1
Ja
44/70
Wert
Bedeutung
0
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
50/1
Wert
Bedeutung
0
Nein
1
Ja
50/2
Wert
Bedeutung
0
Typ undefiniert
1
AEK 4.5
2
AEK 8.6
3
AEP 7.6
4
AEP 13.9
50/4
Wert
Bedeutung
0
Typ undefiniert
1
AEK 4.5
2
AEK 8.6
3
AEP 7.6
4
AEP 13.9
50/5
Wert
Bedeutung
0
AUS
1
Frostschutz
2
Automatik
3
Singlebetrieb Pellets
4
Singlebetrieb Wärmepumpe
5
Handbetrieb Heizen
6
Handbetrieb Kühlen
7
Eco-Betrieb
10
Aktorentest
11
Inbetriebnahme
12
Einstellungen
13
Automatik Heizen
14
Automatik Kühlen
50/6
Wert
Bedeutung
0
Gesperrt
1
Selbsttest
2
Frostschutz
3
Standby
4
Heizen
5
Kühlen
6
Abtauen
7
Silentmode 1 Heizen
8
Silentmode 1 Kühlen
9
Silentmode 2
10
EVU Sperre aktiv
11
Heizgrenze aktiv
12
Aktorentest
50/7
Wert
Bedeutung
0
AUS
1
Frostschutz
2
Automatik
3
Singlebetrieb Pellets
4
Singlebetrieb Wärmepumpe
5
Handbetrieb Heizen
6
Handbetrieb Kühlen
7
Eco-Betrieb
10
Aktorentest
11
Inbetriebnahme
12
Einstellungen
13
Automatik Heizen
14
Automatik Kühlen
50/11
Wert
Bedeutung
0
Aus
1
Mode 1
2
Mode 2
50/22
Wert
Bedeutung
0
Aus
1
Mode 1
2
Mode 2
50/68
Wert
Bedeutung
0
AUS
1
Frostschutz
2
Automatik
3
Vorrang Wärmepumpe
4
Wärmepumpe
5
E-Heizung
50/70
Wert
Bedeutung
0
Gesperrt
1
Standby
2
Pausenzeit aktiv
3
Vorwärmen
4
Heizen
5
Kühlen
6
Abtauen
7
Aktorentest vorbereiten
8
Aktorentest
50/73
Wert
Bedeutung
0
Nein
1
Ja
50/96
Wert
Bedeutung
0
AUS
1
EIN
50/97
Wert
Bedeutung
0
AUS
1
EIN
51/71
Wert
Bedeutung
0
Nein
1
Ja
51/100
Wert
Bedeutung
0
Standby
1
Warmwasser
2
Automatik
3
Automatik Heizen
4
Automatik Kühlen
5
Urlaubsprogramm
51/101
Wert
Bedeutung
0
Standby
1
Vorlauf
2
Automatik
3
Abtauen
4
Kühlen
5
Nachlauf
6
PumpDown
7
Abschaltung
8
Fehler
9
Quellenspülung
51/106
Wert
Bedeutung
0
AUS
1
EIN
51/112
Wert
Bedeutung
0
Standby
1
Automatik
2
Normalbetrieb
3
Absenkbetrieb
51/113
Wert
Bedeutung
0
Typ undefiniert
1
Sole
2
Wasser
3
Luft
4
DX
5
Luft-Sole
6
Quellen Man.
7
DX Quelle
51/115
Wert
Bedeutung
0
Typ undefiniert
1
Heizen
2
Kühlen
3
Heizen/Passiv Kühlen
4
Heizen/Kühlen
52/113
Wert
Bedeutung
0
AUS
1
Heizen
2
Kühlen
52/115
Wert
Bedeutung
0
AUS
1
Heizen
2
Kühlen
52/117
Wert
Bedeutung
0
AUS
1
EIN
2
Notbetrieb
54/33
Wert
Bedeutung
0
Nein
1
Ja
54/43
Wert
Bedeutung
0
Nein
1
Ja
54/45
Wert
Bedeutung
0
AUS
1
EIN
54/49
Wert
Bedeutung
0
Aus
1
Zustand 1
2
Zustand 2
3
Zustand 3
4
Zustand 4
54/50
Wert
Bedeutung
0
Nein
1
Ja
54/51
Wert
Bedeutung
0
Nein
1
Ja
55/20
Wert
Bedeutung
0
Nein
1
Ja
56/6
Wert
Bedeutung
0
Gesperrt
1
Selbsttest
2
Frostschutz
3
Standby
4
Heizen
5
Kühlen
6
Abtauen
7
Silentmode 1 Heizen
8
Silentmode 1 Kühlen
9
Silentmode 2
10
EVU Sperre aktiv
11
Heizgrenze aktiv
12
Aktorentest
58/5
Wert
Bedeutung
0
AUS
1
0..10V
2
PWM
3
PWM
4
ohne
5
LIN
58/38
Wert
Bedeutung
0
Aus
1
Standby
2
Automatik
3
Absenkbetrieb
4
Heizbetrieb
5
Handbetrieb
58/63
Wert
Bedeutung
0
Aus
1
Standby
2
Automatik
3
Absenkbetrieb
4
Heizbetrieb
5
Handbetrieb
58/70
Wert
Bedeutung
0
AUS
1
EIN
58/83
Wert
Bedeutung
0
AUS
1
3-Punkt (230VAC)
2
0 - 10V
58/86
Wert
Bedeutung
0
0
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
10
10
11
11
12
12
13
13
14
14
15
15
16
16
17
17
18
18
19
19
20
20
21
21
58/101
Wert
Bedeutung
0
Nein
1
Ja
58/102
Wert
Bedeutung
0
Nein
1
Ja
58/107
Wert
Bedeutung
0
Mo
1
Di
2
Mi
3
Do
4
Fr
5
Sa
6
So
58/111
Wert
Bedeutung
0
Nein
1
Ja
58/113
Wert
Bedeutung
0
Nein
1
Ja
58/116
Wert
Bedeutung
0
Nein
1
Ja
58/117
Wert
Bedeutung
0
Nein
1
Ja
58/121
Wert
Bedeutung
0
Nein
1
Ja
58/122
Wert
Bedeutung
0
Nein
1
Ja
58/123
Wert
Bedeutung
0
Nein
1
Ja
59/7
Wert
Bedeutung
0
0
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
10
10
11
11
12
12
13
13
14
14
15
15
16
16
17
17
18
18
19
19
20
20
21
21
59/17
Wert
Bedeutung
0
Standby
1
In Betrieb
2
Brenner gesperrt
59/23
Wert
Bedeutung
0
ohne
1
Thermisches Mischventil
2
Motor Mischventil
59/28
Wert
Bedeutung
0
Nein
1
Ja
59/32
Wert
Bedeutung
0
Nein
1
Ja
59/47
Wert
Bedeutung
0
Nein
1
Ja
59/96
Wert
Bedeutung
0
AUS
1
2
59/98
Wert
Bedeutung
0
AUS
1
2
3
59/99
Wert
Bedeutung
0
AUS
1
PV-Überschuss
2
Variable Stromtarife
3
PV-Überschuss und variable Stromtarife
60/5
Wert
Bedeutung
0
Nein
1
Ja
60/6
Wert
Bedeutung
0
Nein
1
Ja
60/10
Wert
Bedeutung
0
AUS
1
Umschaltventil
2
Motor
60/14
Wert
Bedeutung
0
Nein
1
Ja
60/26
Wert
Bedeutung
0
Nein
1
Ja
63/0
Wert
Bedeutung
0
Nein
1
Ja
63/1
Wert
Bedeutung
0
Nein
1
Ja
63/2
Wert
Bedeutung
0
Nein
1
Ja
63/4
Wert
Bedeutung
0
Linkslauf
1
Rechtslauf
63/5
Wert
Bedeutung
0
Nein
1
Ja
63/6
Wert
Bedeutung
0
Nein
1
Ja
63/7
Wert
Bedeutung
0
Nein
1
Ja
63/8
Wert
Bedeutung
0
Nein
1
Ja
63/9
Wert
Bedeutung
0
Nein
1
Ja
Geräte-API
Basis: http://<host>/api/1.0/…, HTTP-Digest-Authentifizierung, Benutzer USER,
Passwort = Service-Passwort der Anlage.
Zugänge
Die Steuerung kennt zwei Benutzer, USER und Service. Der Name wird geprüft —
ein erfundener Benutzer wird mit 401 abgewiesen —, aber beide sehen über die
Schnittstelle dasselbe: dieselben Datenpunkte, dieselben Werte, dasselbe
writeProt. Auch Parameter der Serviceebene beantwortet die Anlage einem
USER, und sie meldet sie als schreibbar.
Die Trennung in Bedienebenen ist damit eine Eigenschaft des Bediengeräts,
nicht der Schnittstelle. Was HeatNexus davon anlegt und bedienbar macht,
entscheidet die Integration selbst über die gewählten Bedienebenen — nicht der
Zugang.
Nachgemessen an einer PuroWIN-Installation mit InfoWIN Touch. Für andere
Baureihen ist es nicht belegt, deshalb bleibt der Zugang in der Einrichtung
wählbar.
Endpunkte
Zweck
Aufruf
Anlagenstruktur
GET /api/1.0/lookup/1
Funktions-Root (Menü-IDs)
GET /api/1.0/lookup/1/<node>/<fct>
Menü-Ebene (Sammelabruf)
GET /api/1.0/lookup/1/<node>/<fct>/<menuId>
Einzelner Datenpunkt mit Metadaten
GET /api/1.0/lookup/<OID>
Einzelner Datenpunkt, nur der Wert
GET /api/1.0/datapoint/<OID>
Datenpunkt schreiben
PUT /api/1.0/datapoint, Body {"OID":"…","value":"…"}
Strukturiertes Objekt
GET/PUT/api/1.0/object?OID=<OID>
Gerätekennung der Steuerung
GET /api/1.0/info/deviceinfo
Knotenliste mit Werksbezeichnung
GET /api/1.0/nodes
Statische Positionen
GET /res/xml/StaticNav.xml, GET /res/xml/StaticNavAssignment.xml
gn/mn ist die Adresse des Datenpunkts, der Präfix /1/<nodeId>/<fctId> gehört
zur Funktion. fctId ist nicht immer 0 – ein Modul kann mehrere Funktionen
desselben Typs führen (z. B. zwei Heizkreise).
Grenze: Ein Menü-Abruf liefert von sich aus höchstens zehn Datenpunkte,
auch wenn der Funktions-Root für die Ebene mehr meldet. Zwei Wege führen an der
Grenze vorbei:
GET /api/1.0/lookup/1/60/0/100?count=-1&offset=0 ganze Ebene auf einmal
GET /api/1.0/lookup/1/60/0/100?offset=10 seitenweise nachladen
count=-1 ist der Weg, den das Bediengerät der Anlage selbst geht, und spart
den Großteil der Anfragen; er wird zuerst versucht. Antwortet die Steuerung
darauf nicht mit mehr als zehn Einträgen, wird über offset geblättert.
Große Ebenen brauchen spürbar Zeit. Die Steuerung beantwortet Anfragen der
Reihe nach, deshalb verkürzt höhere Parallelität einen Abzug nicht — der Hebel
liegt darin, weniger zu fragen, nicht gleichzeitiger.
Datenpunkt-Metadaten
Feld
Bedeutung
value
Rohwert als String; "-.-", "-", "" bedeuten „kein Wert”
unit, unitId
Einheit
minValue, maxValue, step
Wertebereich schreibbarer Datenpunkte
writeProt
true = nur lesbar
enum
erlaubte Werte, z. B. "[1,2]"
typeId
30 = strukturiertes Objekt (Zeitprogramm), sonst Skalar
Fehlerantworten:
404 – Datenpunkt existiert nicht.
409 mit "Target returns invalid Identifier" – auf dieser Anlage nicht
vorhanden.
409 beim Schreiben – Gerät verweigert den Zugriff.
Schreiben
PUT /api/1.0/datapoint
{"OID":"/1/15/0/3/50/0","value":"1"}
Werte immer als String, Kommazahlen mit Punkt.
Strukturierte Objekte
GET /api/1.0/object?OID=/1/15/0/3/61/0
Parameter OID groß geschrieben, vollständige OID, Schrägstriche unkodiert.
Die einzige maschinenlesbare Kennung der Steuerung samt Firmwarestand, eine
Anfrage. „RC7030” ist die Bezeichnung aus der Herstellerdokumentation,
MES_RC7030 die des Konfigurationsmenüs; die Hardware selbst meldet MB66xx.
Ergänzt lookup/1 um die Werksbezeichnung des Moduls, seine Geräteklasse
und das Busprotokoll; lookup/1 liefert unter device nur eine Zahl. Unter
name steht dort der vergebene Name, hier die Bezeichnung ab Werk. Die Liste
kann Knoten enthalten, die lookup/1 nicht führt – ein Bedienteil meldet sich
mit protocol: "none".
Statische Positionen
GET /res/xml/StaticNav.xml und StaticNavAssignment.xml nennen Datenpunkte,
die in keiner Menü-Ebene stehen (Zeitprogramme, Störspeicher). Beide sind
ohne Anmeldung ladbar. Sie gehören zur Firmware, nicht zur einzelnen Anlage:
Eine dort deklarierte Position kann an dieser Installation trotzdem mit 404
oder 409 antworten. Ob es sie gibt, klärt erst die Abfrage.
Zwei Wege zum Wert
lookup und datapoint liefern denselben Wert derselben Adresse. Der
Unterschied ist der Umfang der Antwort: lookup gibt den ganzen
Metadatensatz her — Einheit, Grenzen, Schrittweite, Aufzählung,
Schreibschutz —, datapoint nur den Wert. Entsprechend ist datapoint
deutlich schneller.
Für die Erkennung ist lookup der richtige Weg: Genau diese Metadaten
bestimmen, welche Art von Entität entsteht. Beim zyklischen Abruf wird nichts
davon gebraucht, weil es längst im Deskriptor steht.
Beide Wege lesen aus dem Zwischenspeicher der Steuerung. cacheCtl=0 umgeht
ihn und holt den Wert frisch vom Bus; das kostet spürbar Zeit und ist nur
sinnvoll, wo es auf Frische ankommt — etwa direkt nach einem Schreibvorgang.
lookup nimmt den Parameter nicht an.
Textwerk der Steuerung
Neben der statischen Navigation liegen unter /res/xml/ die Klartexte, mit
denen das Bedienteil arbeitet – je Datei in vier Sprachen (_de, _en,
_fr, _it), alle ohne Anmeldung ladbar:
Datei
Inhalt
Aufbau
VarIdentTexte_<L>.xml
Datenpunktnamen
<gn id><mn id>Text
AufzaehlTexte_<L>.xml
Aufzählungstexte
<gn id><mn id><enum id>Text
EbenenTexte_<L>.xml
Ebenenbezeichnungen
<fcttyp id><ebene id>Text
ErrorTexte_<L>.xml
Störungstexte
<error code text>
Damit lassen sich Bezeichnungen aus der Anlage selbst nehmen statt aus einer
mitgelieferten Datenbank. Der Gewinn liegt bei fremder Sprache und bei
Baureihen, für die keine Datenbank gepflegt wird: Die Steuerung antwortet in
ihrer Fassung und mit ihren Adressen.
Die Namen der Dateien sind nicht überall gleich; ein Verzeichnislisting unter
/res/xml/ nennt die tatsächlich vorhandenen. Der Endpunkt steht in keiner
Beschreibung des Herstellers – er ist eine Zugabe, kein Teil der
Datenschnittstelle, und jeder Fehlschlag muss folgenlos bleiben.
Endpunkte, die nichts einbringen
Aufruf
Warum nicht
GET /api/1.0/datapoints
Abzug des Datenzwischenspeichers, kein Inventar – enthält nur, was vorher schon abgefragt wurde, und ist damit als Erkennungsquelle wie als Abkürzung zirkulär. Der dokumentierte Filter ?OID=… wird zwar ausgewertet – er unterscheidet vorhandene von unbekannten Adressen –, liefert bei einem Treffer aber ein leeres Ergebnis. Ein gefilterter Sammelabruf ist damit nicht zu haben
GET /api/1.0/recorder/oids, …/datalogs
501, solange die Datenaufzeichnung nicht läuft; recorder/settings antwortet mit enabled: false
LON-Netzwerkvariablen unter /1/<node>/32
Die Steuerung deutet die Adresse dort um: der Member gilt als nvIndex, die Gruppe wird ignoriert. Jeder Wert kostet eine eigene Anfrage
Grenzen
Digest-Authentifizierung erfordert zwei Roundtrips pro neuer Verbindung; die
Challenge wird wiederverwendet.
Die Steuerung beantwortet Anfragen der Reihe nach; höhere Parallelität
verkürzt einen Abzug nicht (siehe oben). Zeitlimit 30 s, weil große
Menü-Ebenen länger brauchen als eine Einzelabfrage.
Ein Menü-Abruf liefert ohne count=-1 maximal zehn Datenpunkte.
Zeichensatz: Antworten sind nicht durchgängig UTF-8. Von Hand vergebene
Namen kommen in der DOS-Codepage der Steuerung – dort liegt „ü” auf 0x81,
einem Byte, das CP1252 gar nicht belegt. Beim Dekodieren deshalb der Reihe
nach utf-8, cp1252, cp850 versuchen, sonst stehen Fragezeichen in
Geräte- und Entitätsnamen.
Architektur
Descriptor-Liste als zentrale Schnittstelle
client.py kapselt das gesamte Gerätewissen und erzeugt flache Beschreibungen:
{"id":"0702bb000002-0-0-7-0",# unique_id: <neuronId>-<fctId>-<gn>-<mn>-<idx>
"alt_id":"…",# frühere Kennung, nur für die Umstellung
"oid":"/1/60/0/0/7/0","name":"Kesseltemperatur Ist","type":"temperature",# bestimmt die Plattform
"unit":"°C","device_class":None,"state_class":None,"category":None,"icon":None,"min":None,"max":None,"step":None,"write_prot":True,"device_id":"0702bb000002-0",# HA-Gerät
"device_name":"PuroWIN","fct_type":25}# Funktionstyp, ordnet das Dashboard
Die Kennung hängt an der neuronId – der Seriennummer des Bausteins, die
jeder Knoten in der Struktur meldet. Sie übersteht einen Adresswechsel der
Anlage; nur wenn ein Knoten keine meldet, tritt die Adresse als Notnagel ein.
Das alt_id jedes Deskriptors trägt die frühere, adressgebundene Kennung, mit
der migration.py bestehende Registrierungseinträge umschreibt.
Jede Plattform filtert coordinator.data["devices"] nach type. Eine neue
Plattform benötigt daher nur einen neuen type im Client, ein Modul, das darauf
filtert, und den Eintrag in PLATFORMS.
Die Felder und ihre Vorgaben stehen an einer Stelle
(client.DESKRIPTOR_VORGABE); die drei Quellen — kuratierte Tabelle,
Menü-Erkennung, LON-Adressraum — bauen ihre Beschreibung über
client._deskriptor(). Vorher standen sie dreimal nebeneinander und liefen
auseinander: Zwei führten level und enabled_default, die dritte nicht.
Ablauf beim Start
Cache – RAM (Reload) → Platte (Store, Neustart) → vollständige Discovery.
Verworfen wird der Stand bei geändertem Umfang (Bedienebenen, Zugang,
Schalter), bei einem Alter über 30 Tagen oder durch den Dienst
heatnexus.rediscover. Eine neue Fassung der Integration verwirft ihn
bewusst nicht: Das kostete nach jeder Aktualisierung einen vollen Neuabzug
von 30 bis 120 Sekunden. Der gespeicherte Stand wird sofort hergestellt, ein
vollständiger Abzug läuft im Hintergrund nach und ergänzt, was neu ist.
Deskriptoren laufen beim Wiederherstellen durch helpers.messgroesse –
geänderte Einheiten und Geräteklassen wirken damit ohne Neuabzug, eine
geänderte Plattformauflösung nicht.
Discovery – /1 liefert Knoten und Funktionen. Je Funktion entstehen
Entities aus den kuratierten Tabellen in const.py (FCT_ENTITY_MAP) und aus
der Geräte-Datenbank (device_db.json, Ebenen info/operate/service).
Heizkreise erhalten zusätzlich eine Climate-Entity, Knoten mit FE01msg
je einen Meldungs- und Klartextsensor.
Metadaten – jeder Datenpunkt wird einmal gelesen: Typauflösung,
Wertebereiche, Einheiten und Enum-Listen kommen vom Gerät. Nicht vorhandene
Datenpunkte werden entfernt, schreibgeschützte als Nur-Lese-Entity angelegt.
Poll-Set – standardmäßig aktive Entities plus die Climate-Datenpunkte.
Entities der Serviceebene sind deaktiviert und melden ihre OID erst beim
Aktivieren zum Polling an.
Die Einrichtung wartet nur auf die Grunddaten (async_init_basic(), eigenes
Zeitlimit INIT_TIMEOUT, getrennt vom Zeitlimit des Pollings). Der Vollabzug
läuft danach als Hintergrundaufgabe und meldet die zusätzlich gefundenen
Entities nach.
Wird der Umfang verkleinert, werden die betroffenen Entities stillgelegt,
nicht gelöscht – eigene Namen, Bereichszuordnung und Verlauf bleiben damit
erhalten und leben beim Wiederdazuwählen weiter.
LON-Netzwerkvariablen
Jeder Knoten meldet neben seinen Funktionen einen Bereich NV's mit
fctType -1: den LON-Adressraum unter /1/<knoten>/32. Dort deutet die
Steuerung die Adresse um – der Member ist der nvIndex, die Gruppe fällt
weg, und die Einträge führen keine OID. Deshalb läuft er nicht durch die
gewöhnliche Erkennung, sondern über client._lese_nv.
Was ihn wertvoll macht: Die Namen kommen aus den Funktionsblöcken des Bus
(WET Wärmeerzeuger, LX Kreis, M Mischer, GB Gebläse, PMX
Verbrennungsregler, OXY Lambdasonde, FS Förderung, FWN Wartung) und
bedeuten an jeder Baureihe dasselbe. Eine Anlage, für die es keine kuratierte
Adresstabelle gibt, bekommt darüber trotzdem benannte Werte.
lon.py hält die Zuordnung Name → Klarname, Klassen und kanonischer
Schlüssel. Was dort nicht steht, wird trotzdem angelegt: mit dem Namen der
Anlage und ab Werk deaktiviert.
Die Größe kommt vom Standard, der Begriff aus der Tabelle. Jeder Eintrag
führt einen snvtName – den LonMark-Typ. Er sagt Einheit und Statistikklasse,
ohne dass der Name bekannt sein muss: SNVT_temp_p ist eine Temperatur,
SNVT_count ein Zählerstand. Damit bekommt auch ein unbenannter Wert eine
brauchbare Anzeige. SNVT_address und SNVT_obj_request sind Innenleben des
Bus und werden gar nicht erst angelegt; SNVT_obj_status bleibt als Diagnose,
weil er an manchen Knoten die einzige Auskunft ist.
Gemessen: eine fremde BioWIN führt 99 Namen, die eigene PuroWIN 133 – mit
teils anderen Blöcken (BUF Pufferladung, RLH Rücklaufanhebung, WZP
Zirkulation, TVSTPT Raumtemperatur). Ein Wert, dessen kanonischer Schlüssel schon
von einem Datenpunkt belegt ist, bleibt ebenfalls deaktiviert – entschieden
wird nach _apply_metadata, weil erst dann feststeht, welche Datenpunkte die
Anlage wirklich führt.
Geschrieben wird nichts: nvi-Variablen sind Eingänge der Regelung zwischen
den Knoten.
Ein Knoten ohne brauchbare Funktion besteht nur aus diesem Bereich – das
Bedienteil (MB6611 LOP) ist so einer. Er bekommt sein eigenes Gerät; Knoten
mit Funktion hängen ihre Netzwerkvariablen an deren Gerät.
Zeichensatz
Die Steuerung antwortet nicht in UTF-8. Von Hand vergebene Namen kommen in der
DOS-Zeichentabelle der Anlage; das „ü” liegt dort auf einem Byte, das CP1252
nicht kennt. client._decode probiert deshalb der Reihe nach utf-8,
cp1252, cp850 und zuletzt latin-1, das jedes Byte abbilden kann.
Dashboard
dashboard.py baut die Lovelace-Konfiguration in Home Assistant aus der
Geräte- und Entitätsregistrierung und liefert sie fertig aus; bei jedem Öffnen
neu. Die Reihenfolge der Abschnitte kommt aus dem Funktionstyp (FCT_RANG:
Kessel, Puffer, Heizkreis, Warmwasser, Zirkulation), unbekannte Typen stehen
hinten. Ein Frontend-Modul gibt es bewusst nicht: Eine Strategie im Browser
steht erst zur Verfügung, wenn die Seite sie geladen hat – nach einem Neustart
ist das nicht der Fall.
Anlagenschaubild
schema.py setzt das Schaubild aus SVG-Dateien in anlagenteile/
zusammen und übergibt es als data:-URL an eine picture-elements-Karte; die
Live-Werte liegen als eigene Marken darüber. Jede Datei zeichnet ein Bauteil in
ein Feld von 200 × 392 mit der Mitte bei x = 100, dem Vorlauf auf y = 92 und dem
Rücklauf auf y = 318. Farben stehen darin als Platzhalter
({{korpus}}, {{glut}}, …) und werden beim
Zusammensetzen eingesetzt; Kennungen bekommen je
Anlagenteil einen eigenen Präfix, damit zwei Puffer sich nicht denselben Verlauf
teilen. Fehlt eine Datei, greift eine schlichte gezeichnete Ersatzform.
Für den Kessel entscheidet die Kesselart über die Datei
(kessel-<art>.svg, Rückfall kessel.svg). Sie kommt aus der Option
kesselart je Anlage; steht die auf „automatisch”, wird sie aus dem gemeldeten
Brennstoff (38/126, 38/127) und sonst aus dem Funktionsnamen abgeleitet. Die
Kesselart wirkt nur auf die Zeichnung – sie steht bewusst nicht im
Umfangs-Fingerabdruck, ein Wechsel liest die Anlage also nicht neu ein.
schema.py importiert nichts aus Home Assistant und ist ohne HA testbar.
Die Bewegung steckt nicht in der Zeichnung: Sie liegt als eigene Ebene
darüber (frontend/teile/schaubild.js mit den Regeln aus frontend/stil.js) –
strömende Bänder auf den Leitungen, drehende Pumpen, das Glutbett nach
Kesselleistung, die Schichtung des Puffers zwischen seinen beiden Fühlern.
Die Bilder für README und Dokumentation entstehen aus derselben Quelle wie das
Schaubild der Anlage, nicht von Hand:
Werkzeug
Ergebnis
tools/build_schaubild_beispiel.py
Standbild je Farbsatz (assets/anlagenschema_beispiel*.svg)
tools/build_schaubild_animation.py
Bewegtbild je Farbsatz (assets/anlagenschema_animation*.gif)
Beide beschreiben dieselbe Beispielanlage (tools/beispielanlage.py). Das
Bewegtbild hält die Bewegung der Oberfläche an und stellt sie Bild für Bild
weiter (animation-delay plus animation-play-state: paused); aufgenommen
wird mit einem kopflosen Browser, zusammengelegt mit Pillow. Es benutzt dabei
dasselbe Stylesheet wie die Oberfläche – ändert sich dort die Bewegung,
ändert sie sich beim nächsten Lauf im Bild mit.
Automations-Vorlagen
blueprints.py legt die mitgelieferten Vorlagen aus
blueprints/automation/heatnexus/ unter <config>/blueprints/automation/heatnexus/
ab und frischt sie beim Versionswechsel auf.
Zyklisches Polling
fetch_all() liefert:
{"devices":[...],# Descriptor-Liste
"oids":{"/1/60/0/0/7/0":"59.4"},# Rohwerte als String, None = kein Wert
"objects":{oid:[blöcke]},# Zeitprogramme
"status":{"15":"PCM 00 OK"}}# Gerätemeldungen je Knoten
Werte bleiben Strings und werden von den Entities selbst geparst. Fehlende Werte
sind None, nie 0.
Gestaffelter Takt
Nicht jeder Wert bewegt sich gleich schnell. Jeder Datenpunkt bekommt eine
Poll-Klasse, der Coordinator zählt seine Durchläufe und nimmt die trägen
Klassen nur jeden n-ten mit:
Klasse
Ziel
Inhalt
fast
30 s
Climate, Ist- und Solltemperaturen, Pumpen, Betriebsphase, Meldungen
normal
2 min
alles ohne besonderes Merkmal
slow
15 min
Zähler und Restlaufzeiten, total/total_increasing, träge Einheiten, deaktiviert angelegte Fachparameter
Eingestuft wird nach dem, was der Wert ist – Plattform, Name, state_class
und Einheit –, nicht danach, in welcher Bedienebene er steht. Im Zweifel bleibt
es beim mittleren Takt: eine Anfrage zu viel ist harmloser als eine Anzeige,
die nachhinkt. Die Ziele sind Sollwerte; der tatsächliche Takt ergibt sich aus
dem eingestellten Abfrageintervall.
Enums
Enum-Tabellen sind dict[int, str], da die Wertebereiche Lücken enthalten
können. Quellenreihenfolge: kuratierte Tabelle in const.py, danach
device_db.get_enum(); die vom Gerät gemeldete enum-Liste schränkt die
auswählbaren Werte zusätzlich ein.
Climate
Der Sollwert wird als befristeter Komfort-Override geschrieben:
3/4 (Temperatur) und 2/10 (Dauer in Minuten).
Angezeigt wird der aktive Raum-Sollwert 1/1.
In den Betriebsarten Standby (0) und WW-Betrieb (6) heizt der Heizkreis nicht;
ein Sollwert wird dort mit einer Meldung abgelehnt.
Nach einer Bedienung wird der eingestellte Wert sofort angezeigt und beim
nächsten Poll bestätigt; zusätzlich lädt ein kurzer Burst gezielt die
Climate-Datenpunkte nach.
Datendateien
Datei
Inhalt
device_db.json
Datenpunktnamen, Enum-Tabellen und Ebenenlisten je Funktionstyp
error_texts_de.json
Störungstexte und Handlungsempfehlungen je Code
Beide werden aus den offiziellen Windhager-Parameterdateien erzeugt und nicht
von Hand gepflegt.
Ein Web-Component ist eine Klasse. Um sie trotzdem auf mehrere Dateien zu
verteilen, bringt jede Datei unter teile/ ihren Abschnitt als Mixin mit
((Basis) => class extends Basis { … }), und heatnexus-panel.js setzt sie
zusammen. Die Methoden bleiben dadurch Methoden derselben Klasse; es gibt kein
durchgereichtes this und keine geänderten Aufrufstellen.
tests/test_oberflaeche.py baut die Oberfläche in Node gegen eine schmale
DOM-Attrappe einmal komplett auf – mit der Aufteilung, die die echte
Serverseite liefert. Ein reiner Ladetest hätte den Fehler nicht gefunden, der
diesen Test veranlasst hat: eine Konstante ohne export, die erst beim
Aufräumen einer Rückmeldung auffiel.