Summe von 2 WR in Influx DB schreiben
Moderator: Ulrich
-
- Beiträge: 41
- Registriert: Di 9. Feb 2021, 17:49
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
Summe von 2 WR in Influx DB schreiben
Hallo!
Ich versuche schon seit Tagen schlau zu werden wie man innerhalb von der Solaranzeige werte addieren kann und als eigenen Wert in die Influx DB schreibt.
Den passendsten Thread den ich dazu gefunden habe ist dieser hier:
viewtopic.php?t=4592
Darin wird auf "etliche" andere Threads verwiesen wo es Beispiele geben sollte, aber die finde ich einfach nicht, bzw. suche ich wohl falsch.
Ich würde einfach nur mal gerne die Summe meiner beiden Fronius WR addieren und als Summenwert in die DB schreiben, damit ich ihn mir dann in Grafana grafisch oder tabelarisch darstellen lassen kann.
Einzeln werden sie schon seit langem ausgelesen, in die DB geschrieben und auch einzeln in Grafana dargestellt.
Mit der math expression in Grafana konnte ich mir auch eine Kurve anzeigen lassen, welche auch halbwegs korrekt ist (leider immer wieder Lücken in der Anzeige). Ich denke mit einem schon vorher berechneten Wert in der DB wäre das viel eleganter und genauer.
Leider habe ich so gut wie keine PHP Kenntnisse, sodass ich mir das selber erstellen könnte und wäre auf code snipplets angewiesen, welche ich mir zurechtbasteln könnte.
Hat da vielleicht jemand schon so eine Herausforderung gehabt und könnte mir hier weiterhelfen?
Ich werde ja nicht der einzige sein, der 2 WR summieren möchte?
Danke u. LG
Alex
Ich versuche schon seit Tagen schlau zu werden wie man innerhalb von der Solaranzeige werte addieren kann und als eigenen Wert in die Influx DB schreibt.
Den passendsten Thread den ich dazu gefunden habe ist dieser hier:
viewtopic.php?t=4592
Darin wird auf "etliche" andere Threads verwiesen wo es Beispiele geben sollte, aber die finde ich einfach nicht, bzw. suche ich wohl falsch.
Ich würde einfach nur mal gerne die Summe meiner beiden Fronius WR addieren und als Summenwert in die DB schreiben, damit ich ihn mir dann in Grafana grafisch oder tabelarisch darstellen lassen kann.
Einzeln werden sie schon seit langem ausgelesen, in die DB geschrieben und auch einzeln in Grafana dargestellt.
Mit der math expression in Grafana konnte ich mir auch eine Kurve anzeigen lassen, welche auch halbwegs korrekt ist (leider immer wieder Lücken in der Anzeige). Ich denke mit einem schon vorher berechneten Wert in der DB wäre das viel eleganter und genauer.
Leider habe ich so gut wie keine PHP Kenntnisse, sodass ich mir das selber erstellen könnte und wäre auf code snipplets angewiesen, welche ich mir zurechtbasteln könnte.
Hat da vielleicht jemand schon so eine Herausforderung gehabt und könnte mir hier weiterhelfen?
Ich werde ja nicht der einzige sein, der 2 WR summieren möchte?
Danke u. LG
Alex
-
- Beiträge: 76
- Registriert: Fr 28. Jan 2022, 19:41
- Hat sich bedankt: 11 Mal
- Danksagung erhalten: 4 Mal
Re: Summe von 2 WR in Influx DB schreiben
viewtopic.php?t=2308&hilit=automation+addieren
viewtopic.php?t=1384&hilit=Math.php
Hilft dir das weiter?
Viel Erfolg
Rüdiger
viewtopic.php?t=1384&hilit=Math.php
Hilft dir das weiter?
Viel Erfolg
Rüdiger
-
- Beiträge: 41
- Registriert: Di 9. Feb 2021, 17:49
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
Re: Summe von 2 WR in Influx DB schreiben
Hallo!
Vielen Dank für die Threads!!
Hat etwas gedauert, aber ich habe mal versucht aus den Codezeilen was für mich zusammen zu reimen... aber wie erwartet, war ich nicht erfolgreich... Ich verstehe es noch nicht wirklich.
Ich habe mir mal eine "fronius_symo_serie_math.php" gebastelt und konnte auch erfolgreich die Raspi Temperatur in die Datenbank schreiben und auch im Grafana anzeigen lassen. Soweit so gut.
Dann wollte ich mithilfe der Infos aus dem Thread die Daten aus der DB lesen und dann verrechnen. Dazu habe ich einfach mal den Code des Beispieles in einem der Threads genommen um zu sehen, ob es überhaupt einmal klappt oder nicht - egal ob das jetzt dann Werte sind die ich überhaupt jetzt brauche...
Das curl funktioniert schon mal nicht..
Folgende Einträge bekomme ich dann in den logs php.log und solaranzeige.log
Die Zeilen 40 und 41 welche hier im php.log aufgeworfen werden sind:
Die Frage welche ich mir stelle ist, muss ich denn eigentlich die Datenbanken auslesen oder könnte ich direkt mit den Werten arbeiten die die Scripte sowieso aus den beiden WR holen?
Und wenn ja, wie mache ich das? Vorallem funktioniert das abholen der Daten aus der externen InfluxDB ohnehin nicht.
Vielen Dank für die Threads!!
Hat etwas gedauert, aber ich habe mal versucht aus den Codezeilen was für mich zusammen zu reimen... aber wie erwartet, war ich nicht erfolgreich... Ich verstehe es noch nicht wirklich.
Ich habe mir mal eine "fronius_symo_serie_math.php" gebastelt und konnte auch erfolgreich die Raspi Temperatur in die Datenbank schreiben und auch im Grafana anzeigen lassen. Soweit so gut.
Dann wollte ich mithilfe der Infos aus dem Thread die Daten aus der DB lesen und dann verrechnen. Dazu habe ich einfach mal den Code des Beispieles in einem der Threads genommen um zu sehen, ob es überhaupt einmal klappt oder nicht - egal ob das jetzt dann Werte sind die ich überhaupt jetzt brauche...
Das curl funktioniert schon mal nicht..
Code: Alles auswählen
<?php
/*****************************************************************************
// Raspberry Temperatur in die Infux Datenbank speichern // Die Temperatur steckt in der Variable $RaspiTemp
*****************************************************************************/
// So wird die Zusatz Query zusammengestellt.
// Alle Daten werden in die aktuelle Datenbank des Gerätes in das Measurement "Service" geschrieben
// Der Zeitstempel ist der 'zentrale Timestempel'
// Damit ist die Visualisierung in Grafana sehr einfach.
$aktuelleDaten["ZusatzQuery"] = "Service RaspiTemp=".round($RaspiTemp,1);
$aktuelleDaten["ZusatzQuery"] .= " ".$aktuelleDaten["zentralerTimestamp"];
// Wenn der Wert auch in die LOG Datei geschrieben werden soll.
$funktionen->log_schreiben("Rasperry Temperatur: ".round($RaspiTemp,1)." °C","> ",5);
//$funktionen->log_schreiben(print_r($aktuelleDaten,1)," ",1);
/*****************************************************************************
// Berechnung einzelner Werte um sie in einem Dashboard anzeigen zu können
//
*****************************************************************************/
// $DB1 = Datenbank des Wechselrichters Measurement: PV
// Hier wird der neueste Eintrag der Datenbank ausgelesen und im Array $DB1 gespeichert.
$Datenbank1 = "solaranzeige";
$Measurement = "PV";
$ch = curl_init('http://10.0.0.110/query?db='.$Datenbank1.'&precision=s&q='.urlencode('select * from '.$Measurement.' order by time desc limit 1'));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_TIMEOUT, 15); //timeout in second s
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 12);
curl_setopt($ch, CURLOPT_PORT, 8086);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$Ergebnis["result"] = curl_exec($ch);
$Ergebnis["rc_info"] = curl_getinfo ($ch);
$Ergebnis["JSON_Ausgabe"] = json_decode($Ergebnis["result"],true,10);
$Ergebnis["errorno"] = curl_errno($ch);
if ($Ergebnis["rc_info"]["http_code"] == 200 or $Ergebnis["rc_info"]["http_code"] == 204) {
$Ergebnis["Ausgabe"] = true;
}
curl_close($ch);
unset($ch);
if (!isset($Ergebnis["JSON_Ausgabe"]["results"][0]["series"])) {
$funktionen->log_schreiben("Es fehlt die Datenbank solaranzeige mit dem Measurement PV oder sie ist leer.","|- ",3);
$funktionen->log_schreiben("Fehler: ".$Ergebnis["JSON_Ausgabe"]["results"][0]["error"],"|- ",4);
}
else {
for ($h = 1; $h < count($Ergebnis["JSON_Ausgabe"]["results"][0]["series"][0]["columns"]); $h++) {
$DB1[$Ergebnis["JSON_Ausgabe"]["results"][0]["series"][0]["columns"][$h]] = $Ergebnis["JSON_Ausgabe"]["results"][0]["series"][0]["values"][0][$h];
}
$funktionen->log_schreiben("Datenbank: solaranzeige DB1 ".print_r($DB1,1)," ",10);
}
$Datenbank2 = "Fronius_Symo";
$Measurement2 = "PV";
$ch = curl_init('http://10.0.0.110/query?db='.$Datenbank2.'&precision=s&q='.urlencode('select * from '.$Measurement.' order by time desc limit 1'));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_TIMEOUT, 15); //timeout in second s
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 12);
curl_setopt($ch, CURLOPT_PORT, 8086);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$Ergebnis2["result"] = curl_exec($ch);
$Ergebnis2["rc_info"] = curl_getinfo ($ch);
$Ergebnis2["JSON_Ausgabe"] = json_decode($Ergebnis["result"],true,10);
$Ergebnis2["errorno"] = curl_errno($ch);
if ($Ergebnis2["rc_info"]["http_code"] == 200 or $Ergebnis2["rc_info"]["http_code"] == 204) {
$Ergebnis2["Ausgabe"] = true;
}
curl_close($ch);
unset($ch);
if (!isset($Ergebnis2["JSON_Ausgabe"]["results"][0]["series"])) {
$funktionen->log_schreiben("Es fehlt die Datenbank Fronius_Symo mit dem Measurement PV oder sie ist leer.","|- ",3);
$funktionen->log_schreiben("Fehler: ".$Ergebnis2["JSON_Ausgabe"]["results"][0]["error"],"|- ",4);
}
else {
for ($h = 1; $h < count($Ergebnis2["JSON_Ausgabe"]["results"][0]["series"][0]["columns"]); $h++) {
$DB2[$Ergebnis2["JSON_Ausgabe"]["results"][0]["series"][0]["columns"][$h]] = $Ergebnis2["JSON_Ausgabe"]["results"][0]["series"][0]["values"][0][$h];
}
$funktionen->log_schreiben("Datenbank: solaranzeige DB2 ".print_r($DB2,1)," ",10);
}
// Hier wurde die Datenbank "solaranzeige" und Measurement "PV" ausgelesen.
// Die Daten sind jetzt im Array $DB1 und $DB2[]
// Alle Daten der Fronius WR sind im Array $aktuelleDaten[]
/*****************************************************************************/
// Jetzt wird die Berechnung gestartet
// Zur Überprüfung werden die Werte bei Tracelevel = 8 in die LOG Datei geschrieben.
/*****************************************************************************/
$funktionen->log_schreiben(" PV-Leistung: ".$DB1["Leistung"],"",8);
$funktionen->log_schreiben(" Bezug: ".$aktuelleDaten["Bezug"],"",8);
$funktionen->log_schreiben(" Einspeisung: ".$aktuelleDaten["Einspeisung"],"",8);
$funktionen->log_schreiben(" Eigenverbrauch: ".($DB1["Leistung"]-$aktuelleDaten["Einspeisung"]+$aktuelleDaten["Bezug"]),"",8);
// So wird die Zusatz Query zusammengestellt.
// Alle Daten werden in die Datenbank des HomeManager in ein neues Measurement "Dashboard" geschrieben.
// Der Zeitstempel ist der 'zentrale Timestempel'
// Damit ist die Visualisierung in Grafana sehr einfach.
$aktuelleDaten["ZusatzQuery"] = "Dashboard Erzeugung=".$DB1["Leistung"].",Bezug=".$aktuelleDaten["Bezug"];
$aktuelleDaten["ZusatzQuery"] .= ",Einspeisung=".$aktuelleDaten["Einspeisung"].",Eigenverbrauch=".($DB1["Leistung"]-$aktuelleDaten["Einspeisung"]+$aktuelleDaten["Bezug"]);
$aktuelleDaten["ZusatzQuery"] .= " ".$aktuelleDaten["zentralerTimestamp"];
return;
?>
Code: Alles auswählen
17.03. 08:00:02 -Multi Regler Auslesen [Start].
17.03. 08:00:02 -Verarbeitung von: '1.user.config.php' Regler: 12
17.03. 08:00:02 |---------------- Start fronius_symo_serie.php ---------------
17.03. 08:00:02 -API Version: 1 CompatibilityRange: 1.8-0
17.03. 08:00:02 -Modell = Fronius GEN 24
17.03. 08:00:02 > -Rasperry Temperatur: 43 °C
17.03. 08:00:02 -MQTT Daten zum [ localhost ] senden.
17.03. 08:00:03 MQT-MQTT Daten zum Broker gesendet: localhost Port: 1883
17.03. 08:00:04 -Alle 10 Minuten werden die Statistikdaten remote übertragen.
17.03. 08:00:04 * -Daten zur entfernten InfluxDB [ solaranzeige ] gesendet.
17.03. 08:00:04 -Multi-Regler-Ausgang. 5
17.03. 08:00:09 -Daten zur HomeMatic gesendet.
17.03. 08:00:09 -OK. Datenübertragung erfolgreich.
17.03. 08:00:09 |---------------- Stop fronius_symo_serie.php ---------------
17.03. 08:00:09 -Verarbeitung von: '2.user.config.php' Regler: 12
17.03. 08:00:09 |---------------- Start fronius_symo_serie.php ---------------
17.03. 08:00:09 -API Version: 1 CompatibilityRange: 1.8-1
17.03. 08:00:12 > -Rasperry Temperatur: 43 °C
==> php.log <==
[17-Mar-2025 08:00:12 Europe/Berlin] PHP Warning: It is not yet possible to assign complex types to attributes in /var/www/html/fronius_symo_serie_math.php on line 40
[17-Mar-2025 08:00:12 Europe/Berlin] PHP Warning: It is not yet possible to assign complex types to attributes in /var/www/html/fronius_symo_serie_math.php on line 41
==> solaranzeige.log <==
17.03. 08:00:12 |- -Es fehlt die Datenbank solaranzeige mit dem Measurement PV oder sie ist leer.
17.03. 08:00:12 |- -Fehler:
17.03. 08:00:12 -MQTT Daten zum [ localhost ] senden.
17.03. 08:00:13 MQT-MQTT Daten zum Broker gesendet: localhost Port: 1883
17.03. 08:00:13 -Alle 10 Minuten werden die Statistikdaten remote übertragen.
17.03. 08:00:14 * -Daten zur entfernten InfluxDB [ Fronius_Symo ] gesendet.
17.03. 08:00:14 -Multi-Regler-Ausgang. 2
17.03. 08:00:16 -OK. Datenübertragung erfolgreich.
17.03. 08:00:16 |---------------- Stop fronius_symo_serie.php ---------------
17.03. 08:00:16 -Multi Regler Auslesen [Stop].
Code: Alles auswählen
$Ergebnis["rc_info"] = curl_getinfo ($ch);
$Ergebnis["JSON_Ausgabe"] = json_decode($Ergebnis["result"],true,10);
Und wenn ja, wie mache ich das? Vorallem funktioniert das abholen der Daten aus der externen InfluxDB ohnehin nicht.
-
- Beiträge: 41
- Registriert: Di 9. Feb 2021, 17:49
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
Re: Summe von 2 WR in Influx DB schreiben
Ich kriegs einfach nicht hin..mein Wissen über php ist da leider viel zu gering...
Alles was ich hier im Forum gefunden habe, klappt nicht wirklich... schon die Abfrage der externen influx ist ein problem.
Wenn vielleicht jemand eine Idee hätte, was ich anders machen könnte wäre ich sehr dankbar!
Alles was ich hier im Forum gefunden habe, klappt nicht wirklich... schon die Abfrage der externen influx ist ein problem.
Wenn vielleicht jemand eine Idee hätte, was ich anders machen könnte wäre ich sehr dankbar!

- mr.big
- Beiträge: 596
- Registriert: Mi 7. Sep 2022, 12:12
- Wohnort: tief im Osten...
- Hat sich bedankt: 18 Mal
- Danksagung erhalten: 126 Mal
Re: Summe von 2 WR in Influx DB schreiben
https://github.com/Deepintheeast/Ulanzi ... main/Tools
Da habe ich mal was dazu gebastelt, eventuell kommst du ja damit klar!
Da habe ich mal was dazu gebastelt, eventuell kommst du ja damit klar!

-
- Beiträge: 76
- Registriert: Fr 28. Jan 2022, 19:41
- Hat sich bedankt: 11 Mal
- Danksagung erhalten: 4 Mal
Re: Summe von 2 WR in Influx DB schreiben
Hallo,
ich finde zwar den thread nicht mehr, aber das war die Basis für meine Math.php und ich hatte es noch auf dem Rechner.
Der Trick ist vor allem, das nur bei einem WR die math php durchlaufen wird.
Ich hab leider nur so ein ungesundes Halbwissen, was Programmieren angeht (bin damit weit gekommen, aber Fehle finde ich nicht so schnell.
Viele Grüsse
Rüdiger
ich finde zwar den thread nicht mehr, aber das war die Basis für meine Math.php und ich hatte es noch auf dem Rechner.
Der Trick ist vor allem, das nur bei einem WR die math php durchlaufen wird.
Ich hab leider nur so ein ungesundes Halbwissen, was Programmieren angeht (bin damit weit gekommen, aber Fehle finde ich nicht so schnell.
Viele Grüsse
Rüdiger
Code: Alles auswählen
#!/usr/bin/php
<?php
/*****************************************************************************
// Solaranzeige Projekt Copyright (C) [2015-2020] [Ulrich Kunz]
//
// Dieses Programm ist freie Software. Sie können es unter den Bedingungen
// der GNU General Public License, wie von der Free Software Foundation
// veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß
// Version 3 der Lizenz oder (nach Ihrer Option) jeder späteren Version.
//
// Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß es
// Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne
// die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN
// BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License.
//
// Ein original Exemplar der GNU General Public License finden Sie hier:
// http://www.gnu.org/licenses/
//
// Dies ist ein Programmteil des Programms "Solaranzeige"
//
// Es dient dem Berechnen von Summenwerten von 2 KOSTAL Plenticore Wechselrichtern
//
*****************************************************************************/
$TLevelSave = $Tracelevel;
$now = time();
$Tracelevel = 7;
/****************************************************************************
// InfluxDB Zugangsdaten ...stehen in der user.config.php
****************************************************************************/
$WR1 = "WR1";
$WR2 = "WR2";
if ($InfluxDBName == $WR1) {
$funktionen->log_schreiben("WR1 ohne Berechnung der Summen...", " ", 7);
goto Ausgang;
}
$aktuelleDaten["Query"] = "db=" . $WR1 . "&q=" . urlencode("select last(Gesamtleistung) from PV");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$aktuelleDaten["Gesamtleistung"] = $rc["results"][0]["series"][0]["values"][0][1] + $aktuelleDaten["PV_Leistung"];
$aktuelleDaten["Query"] = "db=" . $WR1 . "&q=" . urlencode("select last(Solarleistung) from AC");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$aktuelleDaten["Solarleistung"] = $rc["results"][0]["series"][0]["values"][0][1] + $aktuelleDaten["AC_Solarleistung"];
$funktionen->log_schreiben("WR2 Gesamtberechnungen der Summen durchgeführt", " ", 7);
//****************************************************************************/
// Aufbereiten Query für Speichern der Daten
// ***************************************************************************
$aktuelleDaten["ZusatzQuery"] = "Gesamt ";
$aktuelleDaten["ZusatzQuery"] .= "Gesamtleistung=".$aktuelleDaten["Gesamtleistung"];
$aktuelleDaten["ZusatzQuery"] .= ",Solarleistung=".$aktuelleDaten["Solarleistung"];
$aktuelleDaten["ZusatzQuery"] .= " ".$aktuelleDaten["zentralerTimestamp"];
$Tracelevel = $TLevelSave;
Ausgang:;
return;
?>
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste