Senec

Dieser Adapter liest verfügbare Werte von einem Senec Home V2.1 (und später) System mit lala.cgi

Aktueller Release
2.16.4
Entwickler
NoBl
Lizenz
MIT

SENEC Adapter für ioBroker

Überwachen und steuern Sie Ihr SENEC Heimspeichersystem. Der Adapter unterstützt vier unabhängige Konnektoren, die einzeln oder kombiniert genutzt werden können:

  • Lokal (lala.cgi) — Direkte LAN-Abfrage mit 10-Sekunden-Echtzeitdaten. Liefert vollständige BMS-Daten, Netzzähler, Wallbox-Daten und Gerätesteuerung.
  • SENEC App API — Cloud-basierte Abfrage über die SENEC App API. Dashboard-Daten, Messverlauf, Systemdetails und Wallbox-Informationen.
  • mein-senec.de — Web-Portal-Abfrage. Statusübersicht, Messverlauf, Autarkie, Notstrom, Peak Shaving, SG-Ready und Steuerung schaltbarer Steckdosen.
  • SENEC.Connect — Azure-basierte API. Batterie- und Zählerdaten über Subscription-Key.

Es müssen nicht alle Konnektoren aktiviert werden. Wählen Sie je nach Bedarf — rein lokale Setups funktionieren ebenso wie reine Cloud-Konfigurationen für Systeme ohne lokales Webinterface.

Unterstützte Systeme

Praktisch jedes SENEC-Speichersystem funktioniert: die Home-Reihe von den frühen Blei- und Lithium-Modellen über V2, V2.1 und V3 bis zur aktuellen Generation V4 | P4 | E4, die Business-Modelle sowie die Partnervarianten ADS Tec, OEM LG und Solarinvert.

Systeme mit lokalem Webinterface können alle fünf Konnektoren nutzen. Systeme ohne — darunter die V4-Generation — laufen über die SENEC App API, mein-senec.de und SENEC.Connect. Die lokale OpenAPI auf Port 4424 setzt ebenfalls ein lokales Webinterface voraus und steht daher auf den Generationen V2 und V3 zur Verfügung, nicht auf V4 | P4 | E4. Welche Datenpunkte verfügbar sind, hängt vom Modell ab.

Die vollständige Modellliste hilft beim Wiederfinden des eigenen Systems.

Haftungsausschluss

Alle Produkt- und Firmennamen oder -logos sind Warenzeichen™ oder eingetragene® Warenzeichen der jeweiligen Inhaber. Ihre Verwendung impliziert keine Zugehörigkeit oder Befürwortung durch diese oder zugehörige Tochtergesellschaften! Dieses persönliche Projekt wird in der Freizeit gepflegt und hat kein geschäftliches Ziel.

Keine Gewährleistung und keine Haftung. Dieser Adapter ist ein Freizeitprojekt und wird wie besehen unter der MIT-Lizenz bereitgestellt. Er spricht mit einem teuren Gerät über Schnittstellen, die SENEC weder dokumentiert noch unterstützt, und er kann Befehle senden, die das Verhalten dieses Geräts verändern. Alles, was Sie damit tun, geschieht auf eigene Verantwortung. Der Autor haftet nicht für Schäden an Ihrer Anlage, für verlorene oder falsche Daten, entgangene Einspeisung oder sonstige Folgen der Nutzung — und kann Ihnen auch nicht sagen, ob die Nutzung Auswirkungen auf Gewährleistung oder Support durch SENEC oder Ihren Installateur hat. Wer das nicht akzeptieren möchte, sollte diesen Adapter nicht einsetzen.

Voraussetzungen

  • ioBroker mit Node.js >= 22
  • SENEC Speichersystem im lokalen Netzwerk (für lokalen Konnektor)
  • mein-senec.de Konto (für API- und Web-Konnektor)
  • ioBroker.web Adapter installiert (für das integrierte Dashboard)

Installation

Installieren Sie den Adapter über das ioBroker Adapter-Repository. Nach der Installation erstellen Sie eine Adapter-Instanz und konfigurieren mindestens einen Konnektor.

Konfiguration

Die Adaptereinstellungen sind in Tabs organisiert — je einer pro Konnektor sowie allgemeine Einstellungen und Debug-Optionen. Die beiden lokalen Schnittstellen, lala.cgi und die OpenAPI auf Port 4424, teilen sich den Tab Lokale Verbindung und die Anlagenadresse.

SENEC Konto

SENEC Konto

Geben Sie hier Ihre mein-senec.de Zugangsdaten ein. Diese werden von der SENEC App API und mein-senec.de gemeinsam genutzt. Hier lässt sich auch der User-Agent-Modus für ausgehende HTTP-Anfragen konfigurieren.

Zwei-Faktor-Authentifizierung (2FA)

Ist für das mein-senec.de-Konto eine Zwei-Faktor-Authentifizierung aktiv, kann sich der Adapter trotzdem selbstständig anmelden — es muss niemand danebensitzen und einen Code eintippen.

Bei der Einrichtung wird ein QR-Code für die Authenticator-App angezeigt und daneben dasselbe Geheimnis als Text. Dieser Text gehört in das Feld TOTP-Secret. Notieren Sie ihn, solange die Einrichtungsseite offen ist: Nach dem Aktivieren wird das Geheimnis nicht erneut angezeigt, ein neues gibt es nur durch erneutes Einrichten. Leer- und Bindestriche darin spielen keine Rolle.

Gemeint ist das dauerhafte Geheimnis, nicht der sechsstellige Code aus der App — der wechselt alle dreißig Sekunden und wäre längst abgelaufen, bevor der Adapter ihn verwenden könnte.

Ein Geheimnis genügt für beide Cloud-Konnektoren, da sich beide am selben Konto anmelden. Fehlt der Eintrag, obwohl 2FA verlangt wird, weist der Adapter im Log ausdrücklich darauf hin, statt nur einen fehlgeschlagenen Login zu melden.

Lokale Verbindung (lala.cgi)

Lokale Verbindung

EinstellungBeschreibungStandard
Über lala.cgi verbindenLokale Abfrage aktivierenAus
SENEC System IPIP-Adresse oder FQDN des SENEC Geräts—

Abfrage-Einstellungen aufklappen für Timing-Optionen:

EinstellungBeschreibungStandard
Abfrageintervall (hohe Priorität)Intervall für Echtzeitdaten (Sekunden)10
Abfrageintervall (niedrige Priorität)Intervall für selten geänderte Daten (Minuten)60
Abfrage-TimeoutZeitlimit für HTTP-Anfragen (ms)5000

Der Adapter wiederholt automatisch mit exponentiellem Backoff bei Verbindungsfehlern — keine manuelle Konfiguration nötig. Wenn das SENEC Gerät vorübergehend nicht erreichbar ist (Neustart, Firmware-Update), wird die Abfrage automatisch fortgesetzt, sobald das Gerät wieder online ist.

TLS-Zertifikatsvalidierung

Der Adapter validiert das HTTPS-Zertifikat des SENEC Geräts mit einem mehrstufigen Verfahren:

  1. Benutzer-CA — Laden Sie das SenecGui-Root CA-Zertifikat über das Dashboard hoch (System-Tab → TLS-Zertifikat). Herunterladen von mein-senec.de (Dokumente / Allgemeine Dokumente / SenecGui-Root), dann die .pem- oder .zip-Datei hochladen. SENEC verteilt dieses Zertifikat hinter einem Login, daher kann der Adapter es nicht mitliefern.
  2. Zwischengespeichertes CA-Zertifikat — Falls kein Benutzer-Zertifikat vorhanden ist, kann der Adapter das CA-Zertifikat automatisch von mein-senec.de herunterladen (setzt voraus, dass der mein-senec.de-Connector aktiviert ist). Das heruntergeladene Zertifikat wird im Adapter-State gespeichert und bleibt über Neustarts erhalten.
  3. TOFU (Trust On First Use) — Falls kein CA-Zertifikat validiert, merkt sich der Adapter den Fingerabdruck des Gerätezertifikats beim ersten Kontakt und vergleicht jede weitere Verbindung damit. Bei einer Änderung (z.B. nach einem Firmware-Update) wird eine Warnung protokolliert und der neue Fingerabdruck anschließend automatisch übernommen.

Der Adapter probiert jede Stufe der Reihe nach und verwendet die erste, die validiert.

TOFU ist eine Kontinuitätsprüfung, kein Certificate Pinning: Es meldet Ihnen, dass sich das Zertifikat des Geräts geändert hat, weist das neue aber nicht zurück und prüft auch die Zertifikatskette nicht. Das ist eine bewusste Abwägung für ein Gerät im eigenen Netz — eine legitime Zertifikatsänderung darf den Adapter nicht so lange abkoppeln, bis jemand eine Logzeile bemerkt. Für die vollständige Prüfung hinterlegen Sie die CA: Der Upload ist optional, aber die stärkere Variante.

Falls der automatische CA-Download fehlgeschlagen ist und Sie es erneut versuchen möchten, setzen Sie _local.tls.certFetchFailed auf false — der Adapter versucht den Download beim nächsten Neustart oder sofort, falls er läuft.

Wichtig: Zu häufige Abfragen oder zu viele Datenpunkte können das SENEC Gerät überlasten. Dies kann zu Neustarts, Nicht-Erreichbarkeit oder fehlender Cloud-Synchronisation führen. Bei Problemen die Abfragefrequenz reduzieren oder den Adapter stoppen.

Zusätzliche HighPrio-Polling-Datenpunkte

HighPrio Polling

Sie können zusätzliche Datenbereiche (z.B. BMS, PV1, WALLBOX) zum hochprioritären Polling hinzufügen. Dies erfordert die Bestätigung eines Haftungsausschlusses. Es sind nur Zeichen A-Z, Ziffern 0-9 und Kommas erlaubt.

Lokale OpenAPI (Port 4424)

Eine zweite lokale Schnittstelle, unabhängig von lala.cgi und per HTTPS auf Port 4424 der Anlage erreichbar. Sie teilt sich den Tab Lokale Verbindung und die Anlagenadresse mit dem lokalen Konnektor; jeder der beiden funktioniert auch ohne den anderen.

Registrierung und Freigabe

EinstellungBeschreibungStandard
Lokale OpenAPI der Anlage nutzenAbfrage über Port 4424 aktivierenAus
GerätenameDer Name, der im SENEC-Portal freigegeben wirdioBroker
Automatisch registrierenBeim Start ein Token anfordern, wenn keines gespeichert istEin
Automatisch freigebenDie eigene Registrierung über das Portal selbst freigebenEin
Anlage für den Freigabe-LinkWelche Anlage des Kontos diese Anlage istAutomatisch
AbfrageintervallWie oft die gewählten Bereiche gelesen werden (Sekunden)60
Anfrage-TimeoutWie lange auf eine Anfrage gewartet wird (ms)10000
Abzufragende BereicheWelche Routen pro Zyklus abgefragt werden. Das Typenschild wird zusätzlich zur Auswahl gelesen; Wallboxen müssen bewusst zugeschaltet werdenBatterie, Zähler, Typenschild

Die Schnittstelle ist nur lesend. Die Routen, die eine Lade- oder Entladeleistung setzen würden, lehnen jede Anfrage ab, die ein Kunden-Token stellen kann — vor wie nach der Freigabe. Es gibt dort also nichts zu schreiben. Was die Schnittstelle bietet und was sie verweigert, ist in LOCAL_OPENAPI_4424.md festgehalten.

Nur Systeme mit lokalem Webinterface öffnen diesen Port: die Generationen V2 und V3 ja, die Generation V4 | P4 | E4 nicht. Eine Anlage, die 4424 bedient, aber kein lala.cgi, ist nicht bekannt — diese Schnittstelle ergänzt das lokale Polling also, sie ersetzt es nicht.

Das Abfrageintervall steht mit Absicht auf 60 Sekunden. Wie viel dieser Dienst verträgt, ist nicht erprobt, und die Anlage ist leicht zu überlasten — der Hinweis oben zum zu häufigen Abfragen von lala.cgi gilt hier genauso.

Registrierung

Anders als lala.cgi verlangt diese Schnittstelle eine einmalige Registrierung, die nur der Kontoinhaber freigeben kann.

Sind die SENEC-Kontodaten im Tab SENEC Konto eingetragen, erledigt sich das von selbst: Der Adapter registriert sich, gibt seine eigene Registrierung frei und beginnt zu lesen. Der mein-senec.de-Konnektor muss dafür nicht aktiviert sein — der Adapter meldet sich einmal für die Freigabe an und verwirft die Sitzung gleich danach wieder.

Wer den mein-senec.de-Konnektor zuerst einrichtet, speichert und den Adapter neu starten lässt, bevor er diesen hier einschaltet, hat es im Log leichter: Die Sitzung besteht dann schon und die Anlage ist bekannt, sodass sich dieser Konnektor überhaupt nicht anmelden muss.

Ohne Kontodaten läuft die Freigabe von Hand:

  1. Die Anlagenadresse oben im Tab eintragen und speichern.
  2. Diese Instanz registrieren drücken. Die Anlage gibt ein Token aus, der Adapter speichert es. Gelesen wird noch nichts.
  3. Zuerst bei mein-senec.de anmelden, dann dem Freigabe-Link im Tab folgen. Die Adresse ist ein Fragment — wer sie abgemeldet öffnet, landet auf der Anmeldeseite und das Ziel ist verloren. Über das Portalmenü ist die Seite nicht erreichbar, nur über diesen Link.
  4. Den Eintrag mit dem eigenen Gerätenamen über das blaue Häkchen freigeben.
  5. Freigabe prüfen drücken. Sobald freigegeben gemeldet wird, läuft die Abfrage von selbst an.

_openapi.info.approvalState zeigt jederzeit den Stand: unregistered, pending, approved, rejected — das Token wurde im Portal zurückgezogen oder gehört zu einer anderen Anlage — oder error.

Token verwerfen löscht das gespeicherte Token und zieht die Registrierung auch im Portal zurück, sofern die Kontodaten eingetragen sind und die Anlage ermittelt werden konnte, sodass kein verwaister Eintrag bleibt; die Anlage akzeptiert das alte Token etwa eine Minute später nicht mehr. Kann der Adapter das Portal nicht fragen, meldet er das, und der Eintrag muss dort von Hand entfernt werden. Bei eingeschalteter automatischer Registrierung wird sofort ein neues Token angefordert — so wird also auch neu begonnen. Zweimal registrieren, ohne den ersten Eintrag zurückzuziehen, hinterlässt zwei Einträge mit gleichem Namen und nichts, woran sie zu unterscheiden wären; deshalb wird eine Registrierung abgelehnt, solange ein Token gespeichert ist.

SENEC App API

SENEC App API

EinstellungBeschreibungStandard
SENEC App API nutzenCloud-API-Abfrage aktivierenAus
Dashboard-IntervallAbfrageintervall für Dashboard/aktuelle Daten (Minuten)6
Detail-IntervallAbfrageintervall für Tagesmesswerte (Minuten)60
Heavy-IntervallAbfrageintervall für Monats-/Jahresmesswerte (Minuten)1440 (24h)
Parallelität / Max. ParallelitätLimits für parallele API-Anfragen1 / 1
Min. AnfrageintervallMindestzeit zwischen API-Anfragen (ms)400
Zeitlimit für API-AnfragenWie lange auf eine normale API-Anfrage gewartet wird — Dashboard, Systemstatus, Details (ms). Erhöhen, wenn diese Abfragen im Log in Timeouts laufen30000
Zeitlimit für MesswertabfragenWie lange auf eine Messwert-Aggregation gewartet wird (ms). Erhöhen, wenn im Log Heavy-Polls in Timeouts laufen60000

History Rebuild

Der API-Konnektor kann historische Messdaten (AllTime-Summen) komplett neu aufbauen. Konfigurieren Sie bei Bedarf den Rebuild-Modus und das Startjahr. Dies läuft als Hintergrundprozess während des Heavy-Polling-Zyklus.

mein-senec.de

mein-senec.de

EinstellungBeschreibungStandard
mein-senec.de nutzenWeb-Portal-Abfrage aktivierenAus
Status-IntervallAbfrageintervall für Statusdaten (Minuten)6
Medium-IntervallAbfrageintervall für Gestern/Autarkie/Reservekapazität (Minuten)360 (6h)
Slow-IntervallAbfrageintervall für Monats-/Jahres-/AllTime-Daten (Minuten)1440 (24h)
Messverlauf abfragenMessdatenabfrage aktivierenAus
5-Min-Detaildaten einbeziehenFeingranulare Detaildaten abfragen (~3.500 zusätzliche States)Aus
Parallelität / Max. ParallelitätLimits für parallele Anfragen1 / 2
Min. AnfrageintervallMindestzeit zwischen Anfragen (ms)500

Weitere Anlagen des Kontos

Sind dem mein-senec.de-Konto mehrere Anlagen zugeordnet — ein ersetztes Gerät bleibt neben seinem Nachfolger sichtbar —, erkennt der Adapter beim Start alle und legt jede unter _meinsenec.Plants.{steuereinheitnummer}. an.

Abgefragt wird standardmäßig nur die erste Anlage. Jede weitere erhält einen eigenen Schalter unter control.Plants.{steuereinheitnummer}.poll, der zunächst aus ist. Wird er gesetzt, nimmt die langsame Abfrage-Ebene diese Anlage mit auf und füllt dieselbe Messwertstruktur wie bei der Hauptanlage:

StateInhalt
_meinsenec.Plants.{sn}.System.*Produktname, Gerätenummer, Anlagennummer
_meinsenec.Plants.{sn}.Measurements.Daily.today / .yesterdayStundenwerte
_meinsenec.Plants.{sn}.Measurements.Monthly.*Tageswerte je Monat
_meinsenec.Plants.{sn}.Measurements.Yearly.*Monatswerte je Jahr
_meinsenec.Plants.{sn}.Measurements.AllTime.*Gesamtsummen
_meinsenec.Plants.{sn}.Autarky.*Autarkie je Zeitraum

Die Gesamtsummen werden einmal beim ersten Erkennen einer Anlage geholt, auch bei ausgeschaltetem Schalter — so liegen die Endwerte eines stillgelegten Geräts vor, ohne es dauerhaft abzufragen.

Beachten Sie, dass jede zusätzlich aktivierte Anlage die Anzahl der Portal-Anfragen erhöht. Wer nur die historischen Summen eines Altgeräts braucht, lässt den Schalter am besten aus.

SENEC.Connect

SENEC.Connect

EinstellungBeschreibungStandard
SENEC.Connect nutzenAzure-API-Abfrage aktivierenAus
AbfrageintervallAbfragefrequenz (Sekunden)300
Anfrage-TimeoutWartezeit auf eine Antwort (ms)30000
Subscription KeyAzure API Subscription Key—
Enthaltene BereicheWelche Datenbereiche abgefragt werdenbattery,meter,evse,bessNameplate

Externe Quellen

Externe Quellen

Fügen Sie externe Energiequellen aus anderen ioBroker-Adaptern hinzu — z.B. Balkon-PV, zusätzliche Wechselrichter, eigenständige Wallboxen, Wärmepumpen oder externe Batteriespeicher. Werte werden auf Watt normalisiert und im Dashboard-Energieflussdiagramm und der Live-Leistungskurve angezeigt.

Verwenden Sie die State-ID Suche um die State-ID des gewünschten Datenpunkts zu finden und fügen Sie sie in die Tabelle ein.

SpalteBeschreibung
State-ID / FormelEinzelne State-ID (z.B. solar.0.power) oder Formel mit {stateId}-Referenzen (z.B. {wallbox.0.l1_amps} * {wallbox.0.l1_volts})
TypPV, Verbraucher (Wallbox, Wärmepumpe, etc.) oder Batterie
EinheitW oder kW — wird auf den Endwert angewendet
ModusIntegrieren = zum SENEC-Gesamtwert addieren (ein Knoten). Separat = als eigener Knoten im Energiefluss anzeigen
SOC-State(Nur Batterie) State-ID für den Ladezustand (%)
Kapazität(Nur Batterie) Batteriekapazität in kWh — ermöglicht Zeitschätzungen
BezeichnungAnzeigename im Energieflussdiagramm

Formeln unterstützen + - * / ( ) Operatoren. State-IDs ohne geschweifte Klammern werden automatisch erkannt wenn sie Rechenoperatoren enthalten. Für komplexe Formeln ist ein Dashboard-basierter Konfigurator mit interaktiver State-Auswahl geplant.

Gerätesteuerung

Gerätesteuerung

Steuerungsfunktionen ermöglichen das Ändern von Einstellungen am SENEC Gerät. Jede Steuerung ist über bestimmte Konnektoren verfügbar:

SteuerungLokalAPIWeb
Akku-Zwangsladungx
Entladung blockierenx
Gerät neustartenx
Notstromreservex
Peak Shavingx
SG-Readyx
Schaltbare Steckdosenxx
Wallbox-Steuerungxx

Nutzung auf eigenes Risiko. Steuerungsfunktionen müssen in den Einstellungen explizit mit Haftungsausschluss aktiviert werden. Der Adapter schützt nicht vor widersprüchlichen Befehlen von mehreren Konnektoren.

Debug & Logging

Debug & Logging

Konfigurierbar pro Konnektor (Lokal, lokale OpenAPI, API, mein-senec.de, Connect):

  • Polling im Info-Log anzeigen — Zeigt Polling-Statusmeldungen im Info-Log statt nur im Debug-Log
  • Requests & Responses loggen — Loggt HTTP-Details auf Debug-Ebene (kann sensible Daten enthalten)
  • Queue-Diagnose ins Info-Log — Zeigt Queue-Statistiken im Info-Log (nur API + Web)
  • Diagnose in States schreiben — Schreibt Queue-Daten in dedizierte ioBroker-States (nur API + Web)

Debug-Log erstellen

Die meisten Probleme lassen sich aus einem Log ablesen, und fast keines ohne.

  1. Log-Level der Instanz auf debug setzen: ioBroker-Admin → Instanzen → senec-Instanz → Auswahlfeld für den Log-Level. silly gibt es auch, bringt aber selten mehr Erkenntnis und erzeugt sehr viel Rauschen.
  2. Im Adapter-Tab Debug & Protokollierung für den betroffenen Konnektor Anfragen & Antworten protokollieren aktivieren. Diese Einstellung macht aus „eine Anfrage ist fehlgeschlagen" ein „diese URL hat mit diesem Status geantwortet".
  3. Lange genug laufen lassen, damit das Problem mindestens einmal auftritt. Bei den langsamen Abfrage-Ebenen — Messwerte, Monats- oder Jahresdaten — kann das bedeuten, auf den nächsten Zyklus zu warten statt neu zu starten.
  4. Das Log aus dem ioBroker-Log-Tab kopieren oder die Datei aus /opt/iobroker/log/ verwenden.
  5. Anschließend wieder auf info zurückstellen. Debug-Logging ist umfangreich und füllt über Wochen die Festplatte.

Vor dem Weitergeben bitte durchsehen. Die Anfrage-Protokollierung enthält URLs und Antworten, darin können Anlagen-ID, Anlagennummer und Seriennummer stehen. Passwörter sind nicht dabei, aber es sind Ihre Daten. Ersetzen Sie, was nicht öffentlich werden soll.

Fehler melden

Meldungen bitte über GitHub. Was eine Meldung schnell bearbeitbar macht:

  • Welches System — Modell und, falls bekannt, die Firmware-Version (FACTORY.* und SYS_UPDATE.* enthalten beides, sofern der lokale Konnektor läuft)
  • Welche Konnektoren aktiv sind, denn dasselbe Symptom hat lokal und in der Cloud unterschiedliche Ursachen
  • Adapter- und ioBroker-Version sowie die Node.js-Version
  • Was erwartet wurde und was stattdessen passiert ist — „der Batteriestand fehlt" lässt sich bearbeiten, „geht nicht" erfordert erst eine Rückfrage
  • Der passende Log-Ausschnitt auf Debug-Level, mit ein paar Zeilen vor und nach dem Fehler statt nur der Fehlerzeile

Vorab noch: Unplausible Werte stammen meist vom Gerät und nicht vom Adapter. Er reicht Werte weitgehend durch, eine im Dashboard falsch wirkende Temperatur oder ein falscher Ladezustand sieht deshalb in der Weboberfläche des Geräts in der Regel genauso falsch aus. Ein Blick dorthin klärt die Frage oft schon — und wenn nicht, ist genau dieser Vergleich die nützlichste Angabe in der Meldung.

Integriertes Dashboard

Der Adapter enthält ein vollständiges Web-Dashboard, erreichbar unter http://<iobroker-ip>:8082/senec/. Es benötigt den ioBroker.web Adapter und erscheint auf der ioBroker.web Startseite.

Funktionen:

  • Dunkles und helles Design (umschaltbar in der Titelleiste)
  • Internationalisierung — 11 Sprachen, folgt der Browser-Spracheinstellung
  • Echtzeit-Updates über socket.io State-Subscriptions
  • Daten von allen Konnektoren mit Quell-Badges
  • Tastaturzugänglich (Tab-Navigation, ARIA-Labels)

Übersicht-Tab

Dashboard Übersicht

Energiefluss-Diagramm — Live-SVG-Visualisierung der Energieflüsse zwischen PV, Batterie, Netz, Haus und Wallbox. Animierte Flusspfade mit leistungsproportionaler Dicke. Batterie-SOC-Anzeige mit Füllstand. Betriebsmodus-Badge. Zeitschätzungen (bis leer/voll). Periodensummen (Heute/Monat/Jahr) mit Autarkie-Prozent. Datenquellen-Auswahl (Auto/Lokal/API/Web).

Live-Leistungskurve — Echtzeit-Liniendiagramm der Leistung über die Zeit für alle fünf Messwerte (PV, Haus, Netz, Batterie, Wallbox). Glatte monotone kubische Interpolation zwischen Datenpunkten. Zeitfenster-Voreinstellungen von 10 Minuten bis 24 Stunden, plus Mausrad-Zoom (5min–30 Tage, heruntergesampelt für Performance). Ziehen zum Blättern durch die Historie mit Lazy-Loading und Mitternachts-Datumsmarkern. Einzelne Linien ein-/ausblendbar, inklusive einer optionalen Ladezustandslinie (standardmäßig aus) auf einer eigenen rechten 0–100-%-Achse. Pause-/Deaktivierungsschalter. „Live"-Button zum Zurückspringen zur Echtzeit. Bei aktiviertem History-Adapter (InfluxDB, SQL oder History) auf den Leistungs-States wird das Diagramm beim Laden mit historischen Daten vorbefüllt. Jeder State wird einzeln aufgelöst — States können also von unterschiedlichen History-Adaptern aufgezeichnet werden, und ein nicht aufgezeichneter State betrifft nur seine eigene Linie. Der ⓘ-Button listet die States hinter jeder Linie zusammen mit dem aufzeichnenden History-Adapter auf — damit lässt sich nachvollziehen, warum eine Linie keine Vergangenheitsdaten hat. Der Farben-Button legt die Farbe jeder Linie fest, Standardfarben setzt sie zurück; ein Typ behält seine Farbe in jedem Diagramm, das ihn zeichnet, und die Palette liegt im Adapter statt im Browser — alle Seiten, die auf die Instanz zeigen, teilen sie sich.

Live-Leistungskurve

Ereignis-Timeline — Kompakter 24-Stunden-Streifen mit heutigen Warnungen (orange), Fehlern (rot) und Panics (lila) aus dem Geräte-Log. Hover für Details. Automatische Aktualisierung alle 10 Minuten. Erfordert eine konfigurierte Geräte-IP.

Ereignis-Timeline

Batterie-Tab

Batterie-Tab

  • Zustandsbericht (SOH) — System- und pro-Pack-SOH mit farbkodierten Indikatoren (grün > 80%, orange > 60%, rot)
  • Modulstatus — Anzahl aktiver/ladender/entladender Module
  • Ladezyklen — Pro-Pack Zyklenanzahl und Lebensdauer-Energie (geladen/entladen)
  • Zellspannungs-Heatmap — Farbkodiertes Raster der einzelnen Zellspannungen über alle Module. Rot = niedrigste, Grün = höchste. Pro-Modul-Delta-Indikatoren. Macht Zellimbalancen sofort sichtbar.
  • Temperaturen — Gesamt, pro Modul und pro Zelle
  • Pack-Elektrik — Pro-Pack Spannung und Strom

Daten aus Lokal (BMS) und/oder API (SystemDetails) mit Quell-Badges.

Zellspannungs-Heatmap

Diagramme-Tab

Diagramme - Heute

Balkendiagramme für Energiemessdaten:

  • Heute — Stundenbalken (automatisch auf Stunden mit Daten beschränkt)
  • Dieser Monat — Tagesbalken
  • Dieses Jahr — Monatsbalken

Funktionen:

  • Einzelne Messtypen ein-/ausblendbar (PV, Verbrauch, Netzbezug/-einspeisung, Batterieladung/-entladung)
  • Gestapelte Ansicht (Erzeugung vs. Verbrauch)
  • Vergleichsmodus (Gestern, Vormonat, wählbares Jahr)
  • Batteriestand (%) Linienoverlay. Der API-Konnektor liest ihn aus der Messwert-Historie. mein-senec.de bietet keine solche Historie, daher tastet der Web-Konnektor stattdessen den Live-Ladezustand ab: Stundenmittel für die Tagesansicht, Tagesmittel für die Monatsansicht. Diese Werte beginnen folglich erst mit dem Adapterbetrieb — für einen Tag, an dem der Adapter über Mitternacht nicht lief, existiert kein Tagesmittel, und es lässt sich auch nicht nachträglich abrufen. Die Jahresansicht hat beim Web-Konnektor keinen Batteriestand.
  • Datenquellen-Auswahl (Auto/API/Web)
  • Datentabelle
  • PNG-Bildexport
  • Auto-Update-Modus
  • Reihenfarben hinter dem Farben-Button, mit Standardfarben zum Zurücksetzen. Vergleichsreihen fehlen in der Auswahl mit Absicht: ein Vergleich wird in der Farbe seines eigenen Typs mit reduzierter Deckkraft gezeichnet und folgt damit automatisch dessen Einstellung.

Diagramme - Jahr

System-Tab

System-Tab

  • Netzqualität — Frequenz, Gesamtleistung, pro-Phase Spannung/Leistung/Strom. Unterstützt EnFluRi 1 und EnFluRi 2 (automatische Erkennung).
  • PV-Strings — Pro-Tracker MPP-Leistung, Spannung und Strom
  • Wallbox — EV-Verbindungsstatus, Smart Charge, pro-Phase Ladestrom
  • Feature-Flags — Aktive Funktionen pro Konnektor mit Abweichungserkennung
  • Systemdetails — Produkt, Firmware, GUI/NPU-Version, Wechselrichter-Status, Temperaturen (Gehäuse, MCU, Batterie, Wechselrichter), Betriebsstunden, Installationsdatum, Installateurskontakt

Quell-Badges zeigen an, welcher Konnektor den jeweiligen Wert liefert.

Steuerung-Tab

Steuerung-Tab

Interaktive Steuerung passend zu den Steuerungsfähigkeiten des Adapters:

  • Akku-Zwangsladung (Schalter)
  • Gerät neustarten (mit Bestätigungsdialog)
  • Notstromreserve (Prozenteinstellung)
  • Peak Shaving (modusabhängige Felder)
  • SG-Ready (Aktivierung + Schwellwerte)
  • Schaltbare Steckdosen (pro Steckdose Modus, Schwellwerte, Namensbearbeitung)
  • Wallbox (Smart Charge, Stromgrenze)

Steuerungen prüfen die Konnektor-Verfügbarkeit und zeigen Warnungen wenn der benötigte Konnektor nicht aktiv ist. Die Übernehmen-Schaltfläche gibt "Gesendet"-Feedback.

Statistik-Tab

mein-senec.de bietet einen wöchentlichen CSV-Export mit 5-Minuten-Auflösung, der Jahre zurückreicht — weit mehr Daten, als in ioBroker-States gehören. Daher wird nichts dauerhaft gespeichert: Der Adapter hält nur die einmal täglich aktualisierte Liste der verfügbaren Wochen vor und lädt eine einzelne Woche erst auf Anforderung. Die Daten bestehen nur, solange der Tab geöffnet ist.

  • Anlagenauswahl, die auch frühere Geräte des Kontos aufführt (entfällt bei nur einer Anlage). Die von dieser Instanz abgefragte Anlage ist vorausgewählt.
  • Wochenauswahl mit Datumsbereich je Woche
  • Tagesfilter — grenzt eine Woche mit ~2.000 Zeilen auf einen Tag ein
  • Auflösung — Stundenmittel oder 5-Minuten-Rohwerte
  • Spaltenschalter für die zehn exportierten Spalten, inklusive Akkuspannung, -strom und -füllstand
  • Sortierbare Spaltenköpfe; ein dritter Klick stellt die chronologische Reihenfolge wieder her
  • Zusammenfassungszeile mit Minimum, Mittelwert und Maximum der angezeigten Zeilen
  • Tabellen- oder Diagrammansicht; im Diagramm teilen sich die Leistungsspalten eine linke kW-Achse, Prozentwerte erhalten eine eigene rechte 0–100-%-Achse, und Lücken in einer Reihe unterbrechen die Linie, statt überbrückt zu werden
  • Download der aktuellen Auswahl als CSV

Erfordert einen aktivierten und verbundenen mein-senec.de-Konnektor.

Protokolle-Tab

Protokolle-Tab

Durchsuchen der SENEC Geräteprotokolle nach Datum:

  • Filterbare Tabelle (Zeit, Stufe, Kategorie, Nachricht)
  • Stufenfilter: Info, Warnung, Fehler, Panik
  • Kategoriefilter (automatisch aus Logeinträgen befüllt)
  • Freitextsuche
  • Farbkodierte Zeilenhervorhebung nach Schweregrad
  • Neueste Einträge zuerst
  • Live-Modus — aktualisiert automatisch das heutige Log (UTC-berücksichtigt)
  • Download der rohen Logdateien

Erfordert eine konfigurierte Geräte-IP (auch wenn der lokale Konnektor nicht aktiviert ist).

State-Referenz

Der Adapter erstellt States, organisiert nach Konnektor und Datenbereich. Alle States sind schreibgeschützt, sofern sie in den folgenden Tabellen nicht als beschreibbar gekennzeichnet sind.

Verbindung & Status (info.*)

StateBeschreibung
info.connectionGesamtverbindungsstatus (true wenn ein Konnektor aktiv)
info.connectionStatusDetaillierter Verbindungsstatus: all (alle konfigurierten Konnektoren verbunden), partial (teilweise verbunden), none
info.localConnectedLokal (lala.cgi) Verbindungsstatus
info.apiConnectedSENEC App API Verbindungsstatus
info.webConnectedmein-senec.de Verbindungsstatus
info.connectConnectedSENEC.Connect Verbindungsstatus
info.openapiConnectedVerbindungsstatus der lokalen OpenAPI (Port 4424)
info.lastPoll.HighPrioZeitstempel der letzten hochprioritären lokalen Abfrage
info.lastPoll.LowPrioZeitstempel der letzten niedrigprioritären lokalen Abfrage

TLS States (_local.tls.*)

StateTypSchreibenBeschreibung
_local.tls.modestringneinAktiver TLS-Validierungsmodus: user, cached, tofu oder none
_local.tls.fingerprintstringneinSHA-256-Fingerabdruck des akzeptierten Gerätezertifikats (TOFU-Modus, verschlüsselt)
_local.tls.userCaPemstringjaVom Benutzer hochgeladenes CA-Zertifikat (PEM, verschlüsselt)
_local.tls.cachedCaPemstringneinVon mein-senec.de heruntergeladenes CA-Zertifikat (PEM, verschlüsselt)
_local.tls.certFetchFailedbooleanjaAuf false setzen um einen neuen CA-Download-Versuch auszulösen

Web-Dashboard-Einstellungen (_dashboard.*)

StateTypSchreibenBeschreibung
_dashboard.colorsstringjaIm Web-Dashboard gewählte Diagrammfarben, als JSON-Objekt von Paletteneintrag zu #rrggbb. Gespeichert werden nur Einträge, die vom eingebauten Standard abweichen. Das Dashboard schreibt den Wert, der Adapter hält ihn nur und wertet ihn nie aus — er liegt hier statt im Browser, damit alle Seiten derselben Instanz dieselbe Palette verwenden. Einträge, die das Dashboard nicht kennt, werden beim Laden ignoriert.

Lokale States

Daten aus der lala.cgi-Abfrage werden direkt unter dem Bereichsnamen gespeichert (z.B. ENERGY.*, BMS.*, PV1.*, WIZARD.*).

Wichtige ENERGY-States:

StateTypBeschreibung
ENERGY.GUI_INVERTER_POWERZahl (W)Aktuelle PV-Erzeugung
ENERGY.GUI_BAT_DATA_POWERZahl (W)Batterieleistung (positiv = Laden, negativ = Entladen)
ENERGY.GUI_GRID_POWZahl (W)Netzleistung (positiv = Bezug, negativ = Einspeisung)
ENERGY.GUI_HOUSE_POWZahl (W)Aktueller Hausverbrauch
ENERGY.GUI_BAT_DATA_FUEL_CHARGEZahl (%)Batterie-Ladezustand
ENERGY.STAT_STATEZahlBetriebszustandscode
ENERGY.STAT_STATE_TextTextBetriebszustand in Klartext
ENERGY.STAT_HOURS_OF_OPERATIONZahl (h)Betriebsstunden

Wichtige BMS-States:

StateTypBeschreibung
BMS.MODULE_COUNTZahlAnzahl der Batteriemodule
BMS.SOH.{n}Zahl (%)Gesundheitszustand pro Modul
BMS.CYCLES.{n}ZahlLadezyklen pro Modul
BMS.CELL_VOLTAGES_MODULE_{A-D}.{n}Zahl (mV)Einzelne Zellspannungen
BMS.TEMP_MIN.{n} / BMS.TEMP_MAX.{n}Zahl (°C)Modul-Temperaturbereich
BMS.VOLTAGE.{n} / BMS.CURRENT.{n}Zahl (V/A)Pack-Spannung und -Strom

API-States (_api.*)

Cloud-API-Daten werden unter _api.Anlagen.{systemId}.* gespeichert:

  • Dashboard.currently.* — Echtzeit-Leistungswerte (W)
  • Measurements.Daily.* — Stündliche Messdaten (kWh)
  • Measurements.Monthly.* — Tägliche Messdaten (kWh)
  • Measurements.Yearly.* — Monatliche Messdaten (kWh)
  • Measurements.AllTime.* — Lebensdauer-Summen (kWh)
  • SystemDetails.* — Batteriedetails, Temperaturen, Firmware
  • SystemStatus.* — Betriebszustand, Feature-Flags

Web-States (_meinsenec.*)

mein-senec.de Daten werden unter _meinsenec.* gespeichert:

  • Status.* — Aktuelle Leistungswerte (kW), Betriebszustand
  • Measurements.* — Historische Messdaten (kWh)
  • Autarky.* — Autarkie-Prozentsätze (Tag/Woche/Monat/Jahr/Gesamt)
  • EmergencyPower.* — Notstromreserve-Einstellungen
  • PeakShaving.* — Peak-Shaving-Konfiguration
  • SGReady.* — SG-Ready-Einstellungen
  • Sockets.* — States der schaltbaren Steckdosen

Connect-States (_connect.*)

SENEC.Connect Daten werden unter _connect.Systems.{system_id}.* mit Batterie- und Zähler-Unterbereichen gespeichert. Ein Konto kann mehrere Systeme umfassen; jedes erhält einen eigenen Kanal, benannt nach seinem Modell und adressiert über die in bessNameplate gemeldete System-ID — dadurch behält ein System seine States auch dann, wenn die API die Systeme in anderer Reihenfolge zurückgibt. _connect.info.systemCount meldet, wie viele Systeme die API sieht.

Der Abschnitt bessNameplate wird unabhängig von den konfigurierten Abschnitten immer abgefragt, weil er diese ID enthält.

Wallboxen werden genauso abgelegt, unter der jeweils gemeldeten id: _connect.Systems.{system_id}.evse.{wallbox_id}.*. Verschwindet eine Wallbox aus der Antwort, werden ihre States entfernt, statt mit den letzten Werten stehen zu bleiben.

Meldet ein System keine system_id, wird stattdessen seine Seriennummer verwendet. Ein System wird über jede jemals gemeldete Kennung wiedererkannt — eine Antwort, in der eine davon fehlt, verschiebt das System also nicht auf einen neuen Pfad. Enthält eine Antwort überhaupt keine Kennung, greift für dieses System die Position in der Antwort, genau wie vor 2.15.0, und die Bereinigung wird währenddessen ausgesetzt.

States eines Systems, das die API nicht mehr meldet, werden entfernt. Adapter vor 2.15.0 nummerierten die Systeme nach ihrer Position in der Antwort (_connect.Systems.0.*); diese States werden beim ersten Poll nach dem Update gelöscht, sobald die Systeme identifiziert sind.

Wer SENEC.Connect-States mit einem History-Adapter aufzeichnet (History, InfluxDB, SQL): Diese Einstellung hängt am State selbst und geht mit dem alten State verloren. Die Aufzeichnung läuft nicht von allein weiter — bitte das Logging nach dem Update für die States unter den neuen Pfaden wieder einschalten.

OpenAPI-States (_openapi.*)

Die Messwerte der lokalen OpenAPI liegen unter _openapi.*, ein Kanal pro Bereich:

KanalInhalt
_openapi.battery.*Ladezustand, Betriebszustand, Leistung, Spannung, Strom
_openapi.meter.*Netzleistung, Hausverbrauch, PV, Überschuss
_openapi.bessNameplate.*Modell, Seriennummer, Kapazität und Nennwerte
_openapi.evse.{wallbox_id}.*Ein Kanal pro Wallbox-Steckplatz — die Anlage meldet vier, auch ohne angeschlossene Wallbox
_openapi.bess.*Nur bei Auswahl — mehrere Werte kommen leer zurück
_openapi.info.approvalStateunregistered, pending, approved, rejected oder error
_openapi.info.lastPollZeitstempel der letzten erfolgreichen Abfrage

Das Typenschild wird in jedem Zyklus gelesen, auch wenn es nicht ausgewählt ist. Normalerweise erkennt der Adapter die Anlage am Common Name des Zertifikats, das sie auf Port 4424 vorweist — dieser Name ist die Seriennummer der Anlage selbst, das Zertifikat benennt also genau dieses Gerät, was das Zertifikat des lokalen Webinterfaces nicht leistet. Das Typenschild ist der Rückfallweg für den Fall, dass dieser Name nicht lesbar ist: Dann identifiziert seine Seriennummer die Anlage, und nur so lässt sich die Anlage im Konto noch zuordnen — und damit die Registrierung automatisch freigeben.

Das Registrierungs-Token liegt verschlüsselt in _openapi.token; im Objektbaum steht also der Geheimtext, nicht das Token selbst. Der State ist als nicht lesbar gekennzeichnet, doch diese Kennzeichnung ist in ioBroker nur ein Hinweis — der eigentliche Schutz ist die Verschlüsselung.

Diese States kommen direkt von der Anlage und sind von den lala.cgi-States unabhängig. Wo beide dieselbe Größe melden, messen sie an unterschiedlichen Punkten und müssen nicht auf das Watt übereinstimmen.

Externe States (_external.*)

Daten externer Quellen werden unter _external.{typ}.{index}.* gespeichert:

StateBeschreibung
_external.pv.{n}.powerExterne PV-Leistung (W)
_external.consumer.{n}.powerExterner Verbraucher (W)
_external.battery.{n}.powerExterne Batterieleistung (W, vorzeichenbehaftet)
_external.battery.{n}.socExterner Batterie-Ladezustand (%)
_external.battery.{n}.capacityExterne Batterie-Kapazität (kWh)
_external.{typ}.{n}.labelBenutzerdefinierte Bezeichnung
_external.{typ}.{n}.modeAnzeigemodus (integrate/separate)
_external.{typ}.{n}.sourceIdFremde State-ID oder Formel

Steuerungs-States (control.*)

Schreibbare States zur Gerätesteuerung:

StateTypBeschreibung
control.ForceLoadBatteryBooleanAkku-Zwangsladung ein/aus
control.RebootApplianceBooleanGerät neustarten auslösen
control.EmergencyPower.ReserveInPercentZahlNotstromreserve (%)
control.PeakShaving.*DiversePeak-Shaving-Einstellungen
control.SGReady.*DiverseSG-Ready-Einstellungen
control.Sockets.{n}.*DiversePro-Steckdose Steuerung
control.Wallbox.{n}.*DiverseWallbox-Steuerung

Steuerungs-States werden nur erstellt, wenn die entsprechende Funktion aktiviert und über den konfigurierten Konnektor verfügbar ist.

Fehlerbehebung

Gerät reagiert nicht / häufige Neustarts: Reduzieren Sie das hochprioritäre Abfrageintervall oder entfernen Sie benutzerdefinierte HighPrio-Datenpunkte. Das SENEC Gerät hat begrenzte Ressourcen.

Keine Daten von API/Web: Prüfen Sie Ihre mein-senec.de Zugangsdaten im SENEC Konto Tab. Der Adapter protokolliert Authentifizierungsfehler auf Warnungsstufe.

Dashboard lädt nicht: Stellen Sie sicher, dass ioBroker.web auf Port 8082 läuft. Das Dashboard wird als Web-Extension unter /senec/ bereitgestellt.

Fehlende States: Die verfügbaren States hängen von Ihrem SENEC Modell, der Firmware-Version und den konfigurierten Konnektoren ab. Nicht alle States sind auf allen Systemen verfügbar.

Steuerungs-States erscheinen nicht: Steuerungsfunktionen müssen in den Gerätesteuerungseinstellungen explizit aktiviert werden. Jede Steuerung erfordert einen bestimmten aktiven Konnektor.

TLS-Zertifikatsfehler bei lokaler Verbindung: Der Adapter übernimmt die Zertifikatsvalidierung automatisch. Prüfen Sie _local.tls.mode um zu sehen, welche Validierungsmethode aktiv ist. Wenn TOFU-Modus aktiv ist und Sie auf CA-Validierung upgraden möchten, aktivieren Sie den mein-senec.de-Connector — der Adapter versucht das CA-Zertifikat automatisch herunterzuladen. Falls ein früherer Download fehlgeschlagen ist, setzen Sie _local.tls.certFetchFailed auf false um es erneut zu versuchen.

Hilfe und Austausch

Für Fragen, Konfigurationen und den Austausch mit anderen Nutzern gibt es einen eigenen Thread im ioBroker-Forum — meist der schnellste Weg zu einer Antwort.

Sieht es nach einem Fehler aus, bitte ein Issue auf GitHub anlegen. Wie ein Debug-Log erstellt wird und was eine Meldung bearbeitbar macht, steht weiter oben.

Changelog

2.16.4 (2026-10-28)

  • New: Chart colors can be changed. The Live Power chart and the Measurement History tab each carry a Colors button that opens a picker per series, plus a Default colors button that puts them all back. A type keeps one color across both charts, so setting PV once is enough; a comparison series has nothing to pick, because it is drawn in its own type's color. The palette is stored in the adapter, not in the browser, so a phone and a wall tablet looking at the same system agree on it — and a color changed on one page appears on any other page that is open.
  • Change: Battery charge level is drawn in one color now rather than two — the live chart's state-of-charge line takes the purple the measurement history already used, and the live chart's wallbox line moves to the shade the energy flow's wallbox total uses, so the two are still told apart. Both are pickable.

2.16.3 (2026-10-27)

  • dependency updates

2.16.2 (2026-10-26)

  • fixed bogus readme

2.16.1 (2026-10-26)

  • New: The web dashboard now reads the local OpenAPI. Until now its values were polled but nothing on the dashboard looked at them, so an installation running only that connector saw an energy flow with no data in it. The energy flow, the live power chart and its history backfill now take it as a source of their own — selectable beside the diagram, and chosen automatically when lala.cgi polling is off. lala.cgi still wins where both run, because it polls six times as often.
  • New: A Battery (now) card — state of charge, charge or discharge power, voltage, current and capacity — filled from whichever connectors you have enabled. An installation running only the local OpenAPI previously showed no battery readings at all.
  • New: A Local OpenAPI card on the system tab, showing where the registration stands (including not registered, with what to do about it), whether the appliance is reachable, how long ago it last answered, and the certificate fingerprint. Reachability is reported separately from registration, because an approved registration whose appliance is switched off is still approved.
  • New: The system tab fills in from the OpenAPI nameplate where it has nothing else — model, serial number, manufacturer, rated charge and discharge power, the AC-side readings, and each wallbox slot. Values read this way carry an O badge, alongside the existing L, A and W.
  • New: _openapi.info.lastCompletePoll records the last cycle in which every requested section answered. _openapi.info.lastPoll is stamped as soon as one does, which is what the connection state needs, but anything reading several sections as one measurement needs to know they came from the same cycle.
  • Fix: The dashboard no longer shows values from a connector you have switched off. Nothing deletes a connector's states when you disable it, so every card went on rendering whatever it last wrote — on one development system that meant an energy flow, an operating-mode badge and an entire battery tab built from readings two months old, presented as current. This applies everywhere, including the Measurement History tab, which could even pick a disabled connector as its source. A row that can come from several connectors keeps whichever is still in use, and a connector that is enabled but currently failing keeps its place, so nothing disappears while a connection is merely flapping.
  • Fix: The dashboard now recovers from a dropped connection. It never did: the recovery ran only on the very first connect, so after any blip the page stopped noticing deleted states — a wallbox slot that had gone stayed on display — stopped hearing about configuration changes, and left a permanent hole in the live chart.
  • Fix: Several ways the live power chart could stop backfilling and never start again: a history request lost to a dropped connection, a connection lost while it was working out which states are recorded, or panning while disconnected, which marked that stretch as loaded without ever asking for it. Collapsing or pausing the chart also left a permanent hole for the interval it skipped; it is now filled in when you resume.
  • Fix: Switching the chart's data source while history was loading could mix the two sources together and issue several overlapping sets of queries at once.
  • Fix: The live chart no longer empties and reloads its entire history every time the lala.cgi connector drops a single poll.
  • Fix: Tabs that your enabled connectors cannot fill are hidden rather than shown empty, and the Control tab is no longer hidden when lala.cgi polling is off — a command is dispatched to whichever connector can carry it.
  • Fix: The energy flow no longer presents zeros as a measurement when the connector it chose has published no power reading, and today's totals are cleared when no connector supplies them rather than staying on the last figures a cloud connector reported.
  • Fix: A value the appliance reports as unavailable, or as a number too large to represent, is no longer published as NaN or Infinity on a state declared numeric — which silently breaks recording in InfluxDB — and no longer makes an export read as an import.
  • Fix: A last-update time older than 36 hours now carries its date, instead of showing a time of day that reads as current at a glance.
  • Fix: An external energy source's configured name is escaped where it is drawn into the energy-flow diagram.
  • Fix: A few states could still be written while the adapter was shutting down.
  • Dependency updates

2.16.0 (2026-10-25)

  • New: A connector for the appliance's local OpenAPI on port 4424 — a second local interface, independent of lala.cgi and read-only. It is off by default and available on V2 and V3 systems only; V4, P4 and E4 do not open the port. It shares the Local Connection tab and the appliance address with the lala.cgi connector, and either one works without the other. It needs a one-time registration that is approved in the SENEC portal, on a page reachable only by link. With your SENEC account credentials filled in, the adapter handles that itself — registering, approving and starting to poll, without the mein-senec.de connector having to be enabled; otherwise it writes the exact approval link to the log for you to open. _openapi.info.approvalState shows where the registration stands — not registered, waiting, approved, or no longer accepted — with buttons beside it to re-check the approval, or to de-register and discard the token. It serves battery, meter, nameplate and wallbox readings under _openapi.*. There is nothing writable: the two routes that would set a charge or discharge power refuse every request an end customer can make, approved or not. What the interface offers and refuses is documented in docs/LOCAL_OPENAPI_4424.md.
  • New: The appliance address moved to the top of the Local Connection tab and is shown whenever either local connector is enabled. It was previously hidden unless lala.cgi polling was switched on, which left anyone who wanted only the new connector unable to enter it at all.
  • New: The battery state read through SENEC.Connect now has a companion state spelling the code out in words, at _connect.Systems.<system_id>.battery.state_Text. Only lala.cgi states carried these before.
  • Change: BAT1.SPARE_CAPACITY is now named Emergency Power Reserve and carries % as its unit. It is the local mirror of the emergency power reserve set on mein-senec.de, so the value you set in the portal is what appears here. It was previously listed under its raw name with no unit, which told nobody what the number meant.
  • Change: SENEC.Connect honours a Retry-After the API sends with a 429 or 503 instead of coming back at the configured interval regardless. The endpoint is rate-limited per subscription, and ignoring the wait it asks for invites a longer block.
  • Change: The house consumption from SENEC.Connect is now named for what its schema says it is — the figure excludes the wallbox load, which matters to anyone comparing it against the appliance's own.
  • Fix: The documentation listed a writable state control.BlockDischarge for blocking battery discharge. No such state exists and none ever has, so the row is removed. The force-charge switch in the same table was misnamed too: it is control.ForceLoadBattery, not control.ForceCharge, and it is created on every instance alongside control.RebootAppliance. Whether the appliance offers a discharge block at all is tracked as a question of its own (#543).
  • Fix: The documentation named _local.FACTORY and _local.SYS_UPDATE as the states holding model and firmware version for a bug report. Those are FACTORY.* and SYS_UPDATE.* at the root of the instance — _local. holds the TLS states and nothing else.
  • Dependency updates

Former Updates

License

MIT License

Copyright (c) 2020-2026 Norbert Bluemle github@bluemle.org

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.