Was ist Ingest?
Ingest ist ein Proxy, der die Messwerte der Kollektoren entgegennimmt, daraus einen korrigierten Hausverbrauch berechnet und alles an die InfluxDB weiterleitet.
Der momentan einzige Einsatzzweck ist die Unterstützung von Balkonkraftwerken. Ohne Balkonkraftwerk hat Ingest keine Funktion.
Ein Balkonkraftwerk speist direkt ins Hausnetz ein. Der Wechselrichter bzw. Stromspeicher meldet deshalb einen zu niedrigen Hausverbrauch.
Der Hausverbrauch lässt sich aber rückwärts berechnen, sobald die anderen Werte der Strombilanz bekannt sind:
Hausverbrauch = Erzeugung vom Dach + Erzeugung des Balkonkraftwerks + Netzbezug + Batterieentladung (falls Batterie vorhanden) - Batterieladung (falls Batterie vorhanden) - Netzeinspeisung - Wallbox (falls vorhanden) - Wärmepumpe (falls vorhanden)Steht die Wallbox oder die Wärmepumpe in INFLUX_EXCLUDE_FROM_HOUSE_POWER, entfällt ihre Zeile in der Formel. Ihr Anteil steckt dann weiterhin im berechneten Hausverbrauch, und erst das Dashboard zieht ihn bei der Anzeige ab. Für die Wärmepumpe ist das der Regelfall. Die Variable muss bei Ingest und Dashboard gleich gesetzt sein. Ein negatives Ergebnis setzt Ingest auf 0.
Gibt es einen Sensor für die Gesamterzeugung (INFLUX_SENSOR_INVERTER_POWER), rechnet Ingest allein mit diesem Wert. Die Einzelwerte der Wechselrichter bleiben dann außen vor, statt aufaddiert zu werden.
Der Puffer
Abschnitt betitelt „Der Puffer“Kollektoren liefern nicht im Gleichtakt, und einzelne fallen vorübergehend aus. Ingest puffert deshalb alle Messwerte 12 Stunden lang in einer SQLite-Datenbank und interpoliert daraus die Werte zwischen zwei Messpunkten. Trägt ein Kollektor seine Werte verspätet nach, holt Ingest die Berechnung nach.
Gerechnet wird nur für Zeitpunkte, zu denen jeder beteiligte Sensor einen Wert hat. Fehlt einer, entsteht an dieser Stelle eine Lücke im Hausverbrauch. Ein Sensor, der noch keinen neueren Messpunkt geliefert hat, zählt dabei höchstens 15 Minuten lang mit seinem letzten Wert.
Das Zusammenspiel der Container ändert sich also wie folgt:
Bisher (ohne Ingest)
Abschnitt betitelt „Bisher (ohne Ingest)“graph LR CollectorA[SENEC-Collector] CollectorB[Shelly-Collector] CollectorC[MQTT-Collector] Influx[InfluxDB] Dashboard[Dashboard] CollectorA -->|push| Influx CollectorB -->|push| Influx CollectorC -->|push| Influx Influx -->|pull| Dashboard
Mit Ingest
Abschnitt betitelt „Mit Ingest“graph LR CollectorA[SENEC-Collector] CollectorB[Shelly-Collector] CollectorC[MQTT-Collector] Influx[InfluxDB] Ingest[Ingest] Dashboard[Dashboard] CollectorA -->|push| Ingest CollectorB -->|push| Ingest CollectorC -->|push| Ingest Ingest -->|push| Influx Influx -->|pull| Dashboard
Damit wird Ingest zu einer kritischen Komponente, die im Fehlerfall den gesamten Datenfluss unterbricht. Ingest muss deshalb permanent laufen – wie die InfluxDB auch.
Quelltext
Abschnitt betitelt „Quelltext“Ingest ist in Ruby implementiert, der Quelltext ist auf GitHub verfügbar:
github.com/solectrus/ingest