Zeroinput: skalierbare Nulleinspeisung mit Volkszähler-Monitor

zeroinput v2.2 – Funktionsübersicht

zeroinput ist eine PV-Nulleinspeisungssteuerung für den Raspberry Pi (Linux). Sie regelt batteriegespeiste Netzwechselrichter so, dass der Bezug aus dem Netz möglichst auf null gehalten wird, ohne ungewollt einzuspeisen. Die Regelung liest den Stromzähler über eine vzlogger-FIFO und stellt im Sekundentakt die Wechselrichterleistung nach.

Robustheit und Architektur

  • Drahtgebundene Verbindungen statt Funk: Zähler, Wechselrichter und Laderegler sind über serielle Leitungen und lokale Schnittstellen angebunden. Auf Funkstrecken (WLAN, Bluetooth, Funksteckdosen) wird im Regelpfad bewusst verzichtet, da sie Latenz, Aussetzer und Störquellen einbringen.
  • Schlanker Stack ohne überflüssige Protokollschichten: Die Sekundenregelung kommt ohne MQTT, HTTP-Broker, Message-Bus oder ähnliche Zwischenschichten aus. Werte werden direkt über serielle Protokolle und eine lokale FIFO ausgetauscht. Das hält den Regelkreis kurz, vorhersehbar und unabhängig von zusätzlichen Diensten, die ausfallen oder verzögern könnten.
  • Wenige Abhängigkeiten: Lokale Ausführung auf einem Raspberry Pi unter Linux, ohne Cloud-Anbindung im Regelpfad. Der Lastprediktor arbeitet rein lokal aus dem beobachteten Lastverlauf, ohne externe Datenquelle. Externe Zugriffe gibt es nur in den optionalen Tools, die die Entladezeiten planen — dirt_shift (liest den Volkszähler-Verlauf) und tib_zero_tas (liest den Volkszähler-Verlauf und die dynamischen Strompreise aus einer lokalen Datei, schaltet optional Tasmota-Steckdosen). Diese Tools laufen getrennt von der Regelung und sind nicht regelkritisch.

Kernregelung

  • Nulleinspeisungsregelung im ~1-Sekunden-Takt: Der gemessene Netzbezug wird über einen n-2-Integrator in einen Leistungssollwert (power_demand) umgesetzt, der an die Wechselrichter verteilt wird.
  • Nullverschiebung (Zero-shift) verschiebt den angestrebten Nullpunkt des Zählers wahlweise leicht in Richtung Bezug oder Einspeisung, oder regelt ihn automatisch.
  • Sägezahnverhinderung: Erkennt aufschwingende Oszillation und glättet den Sollwert.
  • Rampenverhalten: Reagiert auf große Laständerungen mit kontrolliertem Hochlauf, ohne kurze Lastspitzen sofort voll auszuregeln.
  • Lastprediktor (predictor.py): Erkennt zyklische Verbraucher und speist eine Vorhersage in die Regelung ein.

Wechselrichtersteuerung

  • Mehrstufiges Staging: Mehrere Wechselrichter werden in zwei Stufen betrieben. Stufe 1 deckt den Grundbereich (besserer Wirkungsgrad), Stufe 2 schaltet bei höherem Bedarf zu. Der Übergang ist über eine Schwelle (single_inverter_threshold) geregelt und durch ein Cross-Fade geglättet.
  • Lastverteilung auf parallele Einheiten mit Sättigungslogik (jede Einheit nur bis zu ihrer konfigurierten max_power).
  • Unterstützte Wechselrichter: Soyosource (GTN-Serie) und Victron MultiPlus (VE.Bus). PV-String-, Mikro- und Insel-Wechselrichter ohne aktiven 1-Sekunden-Sollwert werden bewusst nicht unterstützt.

Batterieverwaltung

  • Spannungsabhängige Entladebegrenzung: Nahe dem leeren Zustand wird die Entladeleistung über eine Spannungskurve heruntergeregelt, mit Abschaltung an der unteren Schwelle.
  • Einstellbare Zellzahl (cell_count): Alle Batteriespannungs-Schwellen skalieren mit der Zahl der LiFePO4-Zellen in Serie. Standard ist 16S (51,2 V); auch 15S (48 V), 8S (24/28 V) und andere sind möglich.
  • Freie Einspeisung (optional): Oberhalb einer Spannungsschwelle wird bewusst etwas Leistung ins Netz gegeben, um den Nullpunkt „nach unten zu ziehen", wenn die Batterie voll ist.
  • Robuste Spannungsmessung: Unplausible Messwerte einzelner Laderegler werden bei der Mittelung verworfen. Liefert kein Regler eine Messung — etwa nachts, wenn die MPPTs mangels PV in den Ruhezustand gehen —, wird der zuletzt gültige Spannungswert gehalten, sodass keine fehlende Messung als leere Batterie missdeutet wird.

Hitzeschutz

  • Leistungsdeckel nach Temperatur: Ein auswählbarer Temperatursensor begrenzt power_demand linear. Unterhalb einer unteren Schwelle (heat_temp_low) volle Leistung, ab einer oberen Schwelle (heat_temp_high) wird der Wechselrichter abgeschaltet (null), dazwischen linear.
  • Funktioniert mit jedem temperaturführenden Geber (eigener Temperatursensor, eSmart3, Modbus-Laderegler, Aggregator-Subsensor). Genau ein Sensor ist als Auslöser wählbar; ohne Auswahl ist der Schutz aus. Fällt der Sensor aus, greift sicherheitshalber ein fester Anteil der Maximalleistung.

PV-Durchleitung

  • pvpt: Direkt verfügbare PV-Leistung wird unabhängig von der Batterielogik durchgereicht.

MPPT-Laderegler

  • Auslesen und teilweise Steuern verschiedener Laderegler zur Erfassung von PV-Leistung, Batteriespannung und Temperaturen: eSmart3, Victron (einzeln und als Aggregator über mehrere Seriennummern an einem Port), sowie Modbus-Regler (EPEver, Renogy, Morningstar).
  • Temperaturalarme je Gerät mit frei definierbarem Shell-Befehl bei Über-/Unterschreitung.

Entladetimer

  • Zeitgesteuerte Entladevorgaben über eine timer.txt (täglich wiederkehrendes Schema, sekundengenaue Auflösung): begrenzt oder gibt Entladung und Durchleitung zu frei definierbaren Zeitpunkten frei. Schnittstelle für externe Tools.

Externe Tools (nutzen die timer.txt)

  • dirt_shift: Verschiebt die Batterieentladung gezielt in die Netzstunden mit hoher CO₂-Intensität (Abend, Nacht, früher Morgen), abgeleitet allein aus dem berechneten Sonnenstand plus festen Last-Schranken, ohne externe Netzdaten. Alternative zum preisgesteuerten Ansatz.
  • tib_zero_tas.py: Preisgesteuerte Variante (dynamischer Tarif). Legt die Entladezeiten in die teuersten Stunden und kann zusätzlich Tasmota-Steckdosen in günstige Stunden schalten. Schreibt dieselbe timer.txt – nicht gleichzeitig mit dirt_shift betreiben. Dieser Code wird derzeit nicht gepflegt.

MultiPlus / VE.Bus (vebus.py)

  • ESS-Sollwertsteuerung für Victron MultiPlus über VE.Bus, mit automatischer Ermittlung der Sollwert-RAM-Adresse (robust über verschiedene Modelle).

Weboberfläche (webconfig.py)

  • Konfiguration im Browser: strukturierte Editoren für Laderegler, Wechselrichter, Temperaturalarme, vz-Kanäle, Timer und allgemeine Einstellungen (inklusive Zellzahl und Hitzeschutz-Schwellen).
  • Dienst-Neustart per Knopf für zeroinput und vzlogger.
  • Live-Statusseite (optional).

Betrieb

  • Hot-Reload: Geänderte Einstellungen werden im laufenden Betrieb übernommen; nur strukturelle Änderungen (Laderegler, Wechselrichter) erfordern einen Neustart.
  • Datenprotokollierung der Messwerte für Volkszähler.
  • Ausgabemodi mit unterschiedlich ausführlicher Konsolenausgabe zur Diagnose.
4 „Gefällt mir“

Super sieht top aus. :+1:
Wie ist Wirkungsgrad was geht rein und kommt auch wieder raus?
Macht Laderegler alle paar Minuten Global Scan wie ein Victron?
Habe noch 1,2kWp Normale Module rumliegen die zuviel sind!

Bei 1,3kWp Süd + 200Wp an Ost u. West Wand die aktuell 10kWh für 2 Häuser liefert ist mein 1,5kWh Akku definitiv noch zu klein.
Viel Energiespartechnik und keine Klimas, da Nachtauskühlung. :thinking:

1 „Gefällt mir“

Hallo,
danke für den Beitrag.
Die Einspeisung wird man damit wegen Meßungenauigkeiten, Latenzen etc. nicht ganz auf Null runter fahren können.
Dh., der Zähler zeigt eine Einspeisung ungleich Null an. Das gibt bei der Ablesung Probleme, oder?

Wie ist Wirkungsgrad was geht rein und kommt auch wieder raus?
Macht Laderegler alle paar Minuten Global Scan wie ein Victron?
Ich kann es Dir nicht genau sagen, da einige wesentliche Parameter auch veränderlich sind,
wie die Menge an Strom, die durch den Akku geht, oder die Höhe der Leistung an sich.
Im Grunde interessiert es mich auch nicht wirklich, ob da ein paar % mehr oder weniger verloren gehen.
Die Anlage besteht aus den technisch notwendigen Komponenten.
Der Blick auf den Stromzähler mit minimalen Werten - öfter auch Null - reicht mir als Bestätigung.
Zur der Thematik werde ich aber oben auch noch etwas nachtragen!
Nachtrag: Der Hersteller nennt 90% Wirkungsgrad für den GTN1200W, im Script rechne ich mit 85%.

Der esmart3 Laderegler startet das Tracking tagsüber einmal pro Stunde neu, indem er von der Leerlaufspannung herunterwandert.
Bei wirklich schlechtem Wetter sowie früh und spät am Tag macht er das alle 3 Minuten, wo der Grenzwert dafür ist, weiß ich nicht.
Die Einspeisung wird man damit wegen Meßungenauigkeiten, Latenzen etc. nicht ganz auf Null runter fahren können.
Dh., der Zähler zeigt eine Einspeisung ungleich Null an. Das gibt bei der Ablesung Probleme, oder?
Eigentlich nicht. Der Zähler arbeitet intern mit 2 Werten:
- "1-0:16.7.0" die tatsächlich gemessenen Werte, mit der Genauigkeit der amtlichen Eichung und Typrüfung. Auch die saldierte Einspeisung, als negativer Wert.
- "1-0:1.8.0" das was der Zähler anzeigt und als Verbrauch aufsummiert.
Da wird nur der (bereits saldierte!) Verbrauch gezählt, keine negativen Werte (Einspeisung), das ist die "Rücklaufsperre". In meinen Grafiken sind das die roten Linien.

Im volkszähler kann man alle Werte anzeigen lassen, die der Stromzähler herausrückt, also durchaus mal die Anleitung dazu wälzen!
Auf Zeit ist der Unterschied zwischen diesen beiden Werten ein guter Indikator für die Effizienz der Regelung. Auch dazu werde ich noch was nachtragen.

Der Lesekopf ist normalerweise nur per Magnet "angeklebt", wer Bauchschmerzen bei einer Ablesung hat, zieht den einfach ab und wartet 1 Sekunde.
Aber es ist vollkommen legal den Stromzähler auszulesen! Oft braucht es dafür übrigens eine PIN vom Netzbetreiber (nicht Stromanbieter).

@E-t0m

Vielen Dank für deine Infos, kann ich sehr gebrauchen.
Viel ist damit bei mir aber erst mal nicht mehr zu holen.
1-2kWh eventuell, und hat sich bald auch wieder erledigt.
Habe aber noch das doppelte an PV Material rumliegen.
Dafür werde ich es wohl brauchen.

Aktuell 10Tages Durchschnitt von zwei Hâusern mit 1,3kWp Süd.
Ost und West befinden sich senkrecht an Wand 40cm überdacht.
Bis 10:30Uhr und ab 15:30Uhr zusätzliche 120-150Watt.

~1kWh Verluste AC-DC-AC
1,2kWh Netzeinspeisung 2.8.0
7,5kWh Eigenverbrauch
7,2kWh Netzbezug 1.8.0

Verbrauch der Gebäude reduziere ich aktuell noch weiter.

Lustige Jahre
Mit Rogowski des VNB stieg Netzbezug von 17 auf 24kWh am Tag.
Schock nach 3Monaten bereits 800kWh mehr mit PV Einspeisung, und ohne 15kW Durchlauferhitzer für das gesamte WW eines EFH.
Auf 2.8.0 standen nach einem halbem Jahr immer noch 0kWh.
Schaltnetzteile sind heute auf einem Aussenleiter gebündelt.
Nun einen QS1 ohne 77kHz PLCC mit bewustem Dirty Sinus.
Ursache aber heute noch unklar, Hauptsache wieder weg.

1Vorteil er zählt nun ~1kWh weniger als der alte Ferarris.
Und auch etwas mehr PV Ertrag als eigentlich möglich.
Besten geeigneten Aussenleiter des Zählers benutzt.
Heute kaum Unterschiede zum Rückwärts Ferarris,
der zuvor ebenfalls 7-8Wh Bezug in 24h anzeigte.
Ich empfehle heute das Shunt Messverfahren.
Den Ärger hat man damit jedenfalls nicht. :grin:

Besten geeigneten Aussenleiter des Zählers benutzt.
Das ist für mich ein völlig neuer Ansatzpunkt!
Ich ging einfach davon aus, der mMe Zähler würde halbwegs tun was er soll...
Gibt es irgendwo Info zur (legalen) Stromzähleroptimierung?

Da mein Script die Daten des Zählers einrechnet, sind auch Wandlungsverluste der Gerätschaften automatisch mit erfasst,
natürlich nur soweit sie der Zähler auch erkennen kann. Darum ist bei kontinuierlichem Verbrauch eine Nullung durchaus drin.

Nutze den Verkehrfehler von Iskraemeco, macht 1,5-2kWh weniger Bezug, bei saldiertem PV Gesamtumsatz von ~24kWh Täglich aus.

Rogowskispulen sind für ihre Messfehler von >500% bekannt.
Die Luftspulen werden nach wie vor in Deutschland eingebaut.
Die EMV Prüfnormen sind weiterhin unverändert mangelhaft.

Bemerkt erst nach 3Monaten mit 4x EVT248 (77kHz PLCC) und hundert Schaltnetzteilen in zwei Häusern +800kWh Bezug.
Zähler 2.8.0 auf 0kWh, Nachts 4kWh bei 70-150Wh Grundlast.
Kühlgeräte verfügen alle moderne Inverter Energiespartechnik.

Die Abtastraten und Rechenleistungen der verwendeten Hardwaren sind zu gering, also keine nachträgliche Software Lösung möglich.
Das kann man also auch ausnutzen.

https://www.elektropraktiker.de/pv-2010-01-55-56.pdf?eID=tx_nawsecuredl&falId=14500&hash=f41c903c374502f7033ca134c0eef1f6
https://www.elektropraktiker.de/nachricht/verlorenes-vertrauen-digitale-stromzaehler-weiterhin-in-der-kritik/
https://www.energieverbraucher.de/de/eich--und-fehlergrenzen__746/NewsDetail__6414/

1 „Gefällt mir“

Die kleinstmögliche Ausstattung wäre übrigens:

  • 1x PV nach Belieben
  • 1x eSmart3 oder victron MPPT Laderegler
  • 1x soyosource gtn Inverter (mit RS485 Buchse)
  • 1x 16s LiFePo Akku
  • 1x Raspberry Pi (bzw. Volkszähler tauglicher Kleinrechner)
  • 1x Lesekopf (oder EM etc. zum einlesen der Verbrauchsdaten)
  • 1x RS485-Stick bzw. 2x bei einem victron Regler

Fast "wie gerufen" kam dann gestern die freundliche Dame zur Jahresablesung.
(Die vorherigen zwei Mal wurde Coronakonform selbst abgelesen.)

Weder der Messkopf am Zähler, noch die einstellige Verbrauchsanzeige hat ihr eine Reaktion entlockt.
Da die PV-Anlage unübersehbar ist, bin ich mal gespannt, ob da noch was kommt. :wink:

Nachtrag: hier das Ende der Geschichte

Wenn plötzlich viel wenige auf dem Zähler steht, kommt bei uns immer einer vorbei, der Algorithmus meines VNB schlägt ab ~25% mehr oder weniger als im Vorjahr Alarm.

Bei mehr kommt oder fragt aber keiner.
Also besser nicht alles auf einmal.

Bei -50% kommen unsere Stromdetektive definitiv, wenn kein entsprechende Erzeugung und Eigenverbrauch gemeldet ist. :grin:

Wenn plötzlich viel wenige auf dem Zähler steht, kommt bei uns immer einer vorbei, der Algorithmus meines VNB schlägt ab ~25% mehr oder weniger als im Vorjahr Alarm.

Also besser nicht alles auf einmal.

Bei -50% kommen unsere Stromdetektive definitiv, wenn kein entsprechende Erzeugung und Eigenverbrauch gemeldet ist. 😁
Und was wollen die dann?
Bei mir kommen die nichtmal ablesen, weil wir nie da sind.

Was die wollen ist 900 mal unterschiedlich.
Lass dich einfach überraschen. :grin:

1 „Gefällt mir“
Und was wollen die dann?
Sie haben das Recht, den Hausanschlusskasten und den Zähler zu sehen. (Ihr Eigentum)
Natürlich nicht nach Belieben, aber rechtlich durchsetzbar.
Schließlich *wäre* Stromklau eine Straftat.
Ansonsten können sie nur drohen und fordern, nervt natürlich...

Abstellen können sie aber auch. :kissing:

Abstellen können sie aber auch. 😗
Muss man dann weiter Zählermiete zahlen? :roll:

Nein :grin:

Jeder Anschluss von 0-10000kWh bei uns nun schon 140€ Gebühr.
BHKW mit Pellet Stirling wäre dafür nicht schlecht, die Dinger sind aber fast alle 8-10Jahre Schrottreif. :thinking:

Abstellen können sie aber auch. 😗
Mit ne guten Begründung, ja. Ohne kriegen sie ganz schnell Ärger mit Justiz, Medien und Verbraucher Beratung.

In meinem Kopf nimmt das Ofen-Seebeck-Projekt seit Jahren Fahrt auf.
Dann hat der Laderegler auch Nachts was zu tun, toll!

Nach 13 Jahren mit Inselanlagen, fern ab jedes Stromanschlusses, macht mir das Abschalten wenig Sorge.
Dieses Projekt ist wohl nur eine Substitution um die schlimmsten Entzugserscheinungen zu lindern.

In meinem Kopf nimmt das Ofen-Seebeck-Projekt seit Jahren Fahrt auf.
Dann hat der Laderegler auch Nachts was zu tun, toll!
Also mindestens 100kWh LiFePo4 sollten es dann schon sein.
An Seebeck im Pelletofen vor Jahrzehnten auch gedacht.
Wirkungsgrad damals bescheiden, Sterling schnitt besser ab.
Gibts die schon um meine wassergekühlten Brennkammern auszukleiden? 😁
Also mindestens 100kWh LiFePo4 sollten es dann schon sein.
Warum denn? Wenn der Ofen in der dunklen Zeit zu 80% brennt ist doch genug Nachschub in Sicht?
Die PV ist ja auch immer noch da. Ein Windrädchen und ein Pumpspeicherchen zumindest denkbar.

Es gibt ein paar YT zum Ofen, sehr interessant!