Datenbankeinträge in neuer Datenbank berechnen

Wenn mehr als ein Gerät an den Raspberry angeschlossen werden sollen. Z.B. ein Regler und ein Wechselrichter oder mehrere Wechselrichter. Das Maximum sind 6 Geräte pro Raspberry Pi.

Moderator: Ulrich

rocko821
Beiträge: 5
Registriert: Di 28. Jul 2020, 11:55
Hat sich bedankt: 1 Mal

Datenbankeinträge in neuer Datenbank berechnen

Beitrag von rocko821 »

Hallo zusammen,

ich habe bei mir Folgenden PV Hardware im Einsatz:

- zwei Wechselrichter (Kostal Plenticore)
- ein KSEM

und habe für diese die Multi-Reger-Version installiert. Ich habe es soweit geschafft, das ich mir für jedes
Gerät eine Eigene Datenbank angelegt habe.

- KSEM = Datenbank für KSEM
- WR1 = Datenbank für den 1. Wechselrichter
- WR2 = Datenbank für den 2. Wechselrichter

Ich bekomme für die einzelnen Geräte Daten anagezeigt soweit funktioniert also alles.

Nun würde ich gerne die Daten aus der Datenbank WR1 mit der Datenbank WR2 Summieren und in einer neune
Datenbank WRG (WechselRichterGesamt) schreiben. Wie ist dies am besten umzusetzen?
Soweit ich verstanden haben, muss dafür etwas Programmiert werden. Aber wo wir die Datei abgelegt bzw. wohin kommt der
Code? Ich kann C++ und VBA also Grundkenntnisse sind vorhanden. Könnte mir jemand eine kleine Vorlage geben wie ich
z.B. für die measurements (PV) die Werte aus den beiden Datenbanken (WR1 + WR2) in eine neue Datenbank schreibe?

Welche config ist dafür zu bearbeiten?

Danke und Gruß,
Kai

Bogeyof
Beiträge: 938
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 17 Mal
Danksagung erhalten: 103 Mal

Re: Datenbankeinträge in neuer Datenbank berechnen

Beitrag von Bogeyof »

Hallo Kai, nun also im Solaranzeige Forum ...
Ich werde Dir nachher eine _math.php hochladen, die Dir für ein paar Werte zeigt wie es geht.
Allerdings würde ich erst einmal vorschlagen, die Werte nicht in eine neue Datenbank zu schreiben, sondern nur ein neues Measurement in einer bestehenden Datenbank anzulegen. Warum? Die _math.php ist eine feine Sache um eigene Berechnungen anzustellen und die Werte anschließend in die Datenbank zu schreiben. Da die _math.php automatisch aufgerufen wird, wenn sie vorhanden ist (sie gehört aber nicht zur Standardinstallation von Solaranzeige), kann man darin eigene Werte berechnen ohne den Standard zu verändern und bleibt damit voll "updatefähig". D.h. ein Update überschreibt Deine eigenen Änderungen nicht.
Allerdings nutzt die _math.php die vorhandenen Standardroutinen (zum Lesen und Schreiben der Daten) und stützt sich dabei auch auf den aktuellen Datenbanknamen. Also will die Routine eigentlich in die Datenbank schreiben, welche gerade von dem Regler benutzt wird, welcher gerade ausgelesen wird. Es wäre zwar möglich seine eigene Schreibroutine in die _math.php einzubringen (und damit in eine neue Datenbank zu schreiben) allerdings werden dann Neuerungen bei einem Update hinsichtlich Datenbankzugriffe nicht mehr genutzt und es ist nicht mehr so updatefreundlich.

Wenn Du damit leben kannst werde ich eine _math.php erstellen, welche Werte in die Datenbank "WR2" schreibt (ich nehme an dieser wird als 2. ausgelesen und damit sind die aktuellen Werte für WR1 schon in WR1 vorhanden) und zwar ins neue Measurement "Gesamt". Nacharbeiten sind dann immer noch möglich...

Bogeyof
Beiträge: 938
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 17 Mal
Danksagung erhalten: 103 Mal

Re: Datenbankeinträge in neuer Datenbank berechnen

Beitrag von Bogeyof »

So im Anhang die kostal_plenticore_math.php, diese muss nur nach /var/www/html kopiert werden. In der /var/www/log/solaranzeige.log sollten dann bei jedem Durchlauf Hinweise stehen, dass eine Berechnung stattgefunden hat. Wenn es zu Problemen kommen würde (ich kann das nicht testen, sonst schreibt es mir in meine Datenbank) kannst Du evtl. Fehler in der Datei /var/www/log/php.log sehen. Einfaches löschen oder umbenennen der _math.php beendet den Spuk dann wieder. Für mich wären diese Informationen dann aber wichtig, sollte es wirklich zu einem Fehler kommen.

Was macht die _math.php:
- Sichern des aktuellen Tracelevel, setzen auf 7 damit Meldung in die LOG-Datei geschrieben wird
- Test ob WR1 oder WR2 gerade durchlaufen wird (beide starten automatisch die kostal_plenticore_math.php, aber nur bei WR2 wollen wir berechnen)
- Summe für Gesamtleistung aus PV der beiden Wechselrichter
- Summe für Solarleistung aus AC der beiden Wechselrichter
- Zurücksetzen des Tracelevel auf gesicherten Wert
- Erstellen der Zusatzquery, mit dieser werden die Werte dann automatisch in die Datenbank geschrieben, hier ins Measurement "Gesamt" mit den Feldnamen "Gesamtleistung" und "Solarleistung"

Das Ganze wäre jetzt beliebig erweiterbar...
Hinweise findest Du in dieser Doku: download/EigeneErweiterungen.pdf
Dateianhänge
kostal_plenticore_math.php
(2.68 KiB) 165-mal heruntergeladen

rocko821
Beiträge: 5
Registriert: Di 28. Jul 2020, 11:55
Hat sich bedankt: 1 Mal

Re: Datenbankeinträge in neuer Datenbank berechnen

Beitrag von rocko821 »

Hallo Christian,

es funktioniert!!!! Vielen dank. Das hätte ich ohne deine Hilfe aber nicht geschafft. Jetzt werde ich mal versuchen
die _math.php zu erweitern.

Danke und Gruß,
Kai

rocko821
Beiträge: 5
Registriert: Di 28. Jul 2020, 11:55
Hat sich bedankt: 1 Mal

Re: Datenbankeinträge in neuer Datenbank berechnen

Beitrag von rocko821 »

Als Ergänzung:

Ich habe die _math.php jetzt noch um die Berechnung des aktuellen Hausverbrauches erweitert. Somit bin ich wieder in der Lage diesen zu nahezu live zu sehen, denn das ist bei mehreren Kostal Wechselrichtern (Schwarm) nicht mehr möglich. Kostal bietet dazu im Nachgang nur das Kostal-Solarportal an, aber keine Livedaten mehr im Heimnetz.
Nächster Schritt ist jetzt die Erweiterung um die Wetterdaten und dann wäre die "Königsdisziplin" die Batterieladung damit "intelligenter" zu machen. Letzteres wird noch etwas dauern, da man alleine mit der Gestaltung des Dashboards, vieeeel Zeit verbringen kann ;)


Gruß,
Kai

olli.solar
Beiträge: 15
Registriert: Do 4. Mär 2021, 06:12
Hat sich bedankt: 1 Mal

Re: Datenbankeinträge in neuer Datenbank berechnen

Beitrag von olli.solar »

Hallo Begoyef,
müsste in der Datei die Sprungmarke Ausgang nicht vor die Zeile

Code: Alles auswählen

$Tracelevel = $TLevelSave;
, sonst wird der ursprüngliche Tracelevel ja nicht wiederhergestellt!?
Also nicht so

Code: Alles auswählen

$Tracelevel = $TLevelSave;
Ausgang:;
sonndern so?

Code: Alles auswählen

Ausgang:;
$Tracelevel = $TLevelSave;
Grüße Olli

Bogeyof
Beiträge: 938
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 17 Mal
Danksagung erhalten: 103 Mal

Re: Datenbankeinträge in neuer Datenbank berechnen

Beitrag von Bogeyof »

Da hast du natürlich recht, sollte davor...

olli.solar
Beiträge: 15
Registriert: Do 4. Mär 2021, 06:12
Hat sich bedankt: 1 Mal

Re: Datenbankeinträge in neuer Datenbank berechnen

Beitrag von olli.solar »

Hallo Zusammen,
bin auch gerade dabei ein Skript auf der Basis des Codes von hier zu erstellen.
Wie müsste jedoch der Codeschnipsel für den Abruf

Code: Alles auswählen

$aktuelleDaten["Query"] = "db=" . $Datenbank4 . "&q=" . urlencode("select * from " . $Measurement42 . " order by time desc limit 1");
aussehen, wenn ich mir den Verbrauch von heute anhand des Zählerstandes "Wh_GesamtBezug" errechnen möchte?
Also vom Grundsatz her:
"Letzter Eintrag in Wh_GesamtBezug" - "erster Eintrag von heute Wh_GesamtBezug"

Grüße Olli

Bogeyof
Beiträge: 938
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 17 Mal
Danksagung erhalten: 103 Mal

Re: Datenbankeinträge in neuer Datenbank berechnen

Beitrag von Bogeyof »

Ungetestet, aber vom Prinzip her muss es so gehen:

Code: Alles auswählen

$Heute_TS=".mktime( 0, 0, 0, date( "m" ), date( "d" ), date( "Y" ))."000000000";
$aktuelleDaten["Query"] = "db=" . $Datenbank4 . "&q=" . urlencode("select (mean(Zaehlerakt) - mean(Zaehlerheute)) from (select last(Wh_GesamtBezug) as Zaehlerakt from " . $Measurement42 . "),(select last(Wh_GesamtBezug) as Zaehlerheute from " . $Measurement42 . " where time <= " . $Heute_TS . ")");

olli.solar
Beiträge: 15
Registriert: Do 4. Mär 2021, 06:12
Hat sich bedankt: 1 Mal

Re: Datenbankeinträge in neuer Datenbank berechnen

Beitrag von olli.solar »

Musste folgende Korrektur noch machen

Code: Alles auswählen

$Heute_TS = mktime( 0, 0, 0, date( "m" ), date( "d" ), date( "Y" ))."000000000";
$aktuelleDaten["Query"] = "db=" . $Datenbank1 . "&q=" . urlencode("select (mean(Zaehlerakt) - mean(Zaehlerheute)) from (select last(Wh_GesamtBezug) as Zaehlerakt from " . $Measurement12 . "),(select last(Wh_GesamtBezug) as Zaehlerheute from " . $Measurement12 . " where time <= " . $Heute_TS . ")");
Also vor dem mktime muss das ". noch weg.

Bei der Berechnung habe ich aber noch das Problem das er die Differenz von jetzt zu dem Eintrag in der DB von 23:00Uhr gestern nimmt. Klingt schwer als ob da irgendwie noch die Zeitzonde nicht passt.
Mal eine Verständisfrage, die Aufrufe sehen ja ziemlich identisch zu dem in Grafana aus? Ist das gleich?

Grüße Olli

Antworten