Ich habe mir eine _math.php auf Basis einer von einem anderen User geteilten Datei konfiguriert. Diese addiert die selben Datenfelder meiner 4 Effekta WR + 1 Growatt WR (z.B. PV-Leistung, Ladestom etc.) um so einen gesamt Wert heraus zu bekommen, dann werden diese Werte in die Datenbank bzw. in ein Neues Measurement von einem der WR geschrieben (Gesamt). Das Funktioniert auch soweit gut (in Grafana problemlos verwendbar), nun weiß ich allerdings nicht wie die in der _math berechneten Daten über MQTT versendet werden können um sie dann in Homeassistant weiter zu verarbeiten (power-flow-card-plus). Mir ist bewusst das ich die Daten aller WR auch einzeln per MQTT an Homeassistant senden könnte um sie dann dort zu addieren aber mir wäre es lieber wenn die Berechnungen auf dem RPi direkt stattfinden würden, statt diese erst an den Homeserver zu senden. Wahrscheinlich ist die Lösung sogar Simple aber ich komme nicht drauf.
ax_wechselrichter_math.php:
Code: Alles auswählen
<?php
// Das Auslesen wird hier mit einer Schleife durchgefuehrt. Wie oft die Daten
// ausgelesen und gespeichert werden steht in der user.config.php
//
//
// *****************************************************************************/
$TLevelSave = $Tracelevel;
$Tracelevel = 8;
// ------------ Zus�tzlich zum berechnen der Gesamtsummen --------
$WR1 = "Schuppen";
$WR2 = "solaranzeige";
$WR3 = "solaranzeige2";
$WR4 = "solaranzeige3";
$WR5 = "solaranzeige4";
// ---------------------------------------------------------------------------
// -------------- Namen des LOG-Eintrags leichtg ge�ndert ------------
$funktionen->log_schreiben("------------- Start ax_wechselrichter_math.php --------------- ","|--",6);
$funktionen->log_schreiben("Zentraler Timestamp: ".$zentralerTimestamp," ",9);
// ------------ Zus�tzlich zum berechnen der Gesamtsummen --------
$aktuelleDaten["ladestrom"] = 0;
$aktuelleDaten["entladestrom"] = 0;
$aktuelleDaten["solarleistung"] = 0;
$aktuelleDaten["ACscheinleistung"] = 0;
$aktuelleDaten["ACwirkleistung"] = 0;
$aktuelleDaten["ACWhHeute"] = 0;
if ($InfluxDBLokal == $WR1 or $InfluxDBLokal == $WR2) {
$funktionen->log_schreiben("WR1 und WR2 ohne Berechnung der Summen...", " ", 7);
goto Ausgang;
}
$aktuelleDaten["Query"] = "db=" . $WR2 . "&q=" . urlencode("select last(Ladestrom) from Batterie");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$aktuelleDaten["ladestrom"] = $rc["results"][0]["series"][0]["values"][0][1] + $aktuelleDaten["Batterie_Ladestrom"];
$aktuelleDaten["Query"] = "db=" . $WR3 . "&q=" . urlencode("select last(Ladestrom) from Batterie");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$aktuelleDaten["ladestrom"] = $aktuelleDaten["ladestrom"] + $rc["results"][0]["series"][0]["values"][0][1];
$aktuelleDaten["Query"] = "db=" . $WR4 . "&q=" . urlencode("select last(Ladestrom) from Batterie");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$aktuelleDaten["ladestrom"] = $aktuelleDaten["ladestrom"] + $rc["results"][0]["series"][0]["values"][0][1];
$aktuelleDaten["Query"] = "db=" . $WR5 . "&q=" . urlencode("select last(Ladestrom) from Batterie");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$aktuelleDaten["ladestrom"] = $aktuelleDaten["ladestrom"] + $rc["results"][0]["series"][0]["values"][0][1];
$aktuelleDaten["Query"] = "db=" . $WR2 . "&q=" . urlencode("select last(Entladestrom) from Batterie");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$aktuelleDaten["entladestrom"] = $rc["results"][0]["series"][0]["values"][0][1] + $aktuelleDaten["Batterie_Entladestrom"];
$aktuelleDaten["Query"] = "db=" . $WR3 . "&q=" . urlencode("select last(Entladestrom) from Batterie");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$aktuelleDaten["entladestrom"] = $aktuelleDaten["entladestrom"] + $rc["results"][0]["series"][0]["values"][0][1];
$aktuelleDaten["Query"] = "db=" . $WR4 . "&q=" . urlencode("select last(Entladestrom) from Batterie");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$aktuelleDaten["entladestrom"] = $aktuelleDaten["entladestrom"] + $rc["results"][0]["series"][0]["values"][0][1];
$aktuelleDaten["Query"] = "db=" . $WR5 . "&q=" . urlencode("select last(Entladestrom) from Batterie");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$aktuelleDaten["entladestrom"] = $aktuelleDaten["entladestrom"] + $rc["results"][0]["series"][0]["values"][0][1];
$aktuelleDaten["Query"] = "db=" . $WR1 . "&q=" . urlencode("select last(Leistung) from PV");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$aktuelleDaten["solarleistung"] = $rc["results"][0]["series"][0]["values"][0][1] + $aktuelleDaten["PV_Leistung"];
$aktuelleDaten["Query"] = "db=" . $WR2 . "&q=" . urlencode("select last(Leistung) from PV");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$aktuelleDaten["solarleistung"] = $aktuelleDaten["solarleistung"] + $rc["results"][0]["series"][0]["values"][0][1];
$aktuelleDaten["Query"] = "db=" . $WR3 . "&q=" . urlencode("select last(Leistung) from PV");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$aktuelleDaten["solarleistung"] = $aktuelleDaten["solarleistung"] + $rc["results"][0]["series"][0]["values"][0][1];
$aktuelleDaten["Query"] = "db=" . $WR4 . "&q=" . urlencode("select last(Leistung) from PV");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$aktuelleDaten["solarleistung"] = $aktuelleDaten["solarleistung"] + $rc["results"][0]["series"][0]["values"][0][1];
$aktuelleDaten["Query"] = "db=" . $WR5 . "&q=" . urlencode("select last(Leistung) from PV");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$aktuelleDaten["solarleistung"] = $aktuelleDaten["solarleistung"] + $rc["results"][0]["series"][0]["values"][0][1];
$aktuelleDaten["Query"] = "db=" . $WR2 . "&q=" . urlencode("select last(Scheinleistung) from AC");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$aktuelleDaten["ACscheinleistung"] = $rc["results"][0]["series"][0]["values"][0][1] + $aktuelleDaten["AC_Scheinleistung"];
$aktuelleDaten["Query"] = "db=" . $WR3 . "&q=" . urlencode("select last(Scheinleistung) from AC");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$aktuelleDaten["ACscheinleistung"] = $aktuelleDaten["ACscheinleistung"] + $rc["results"][0]["series"][0]["values"][0][1];
$aktuelleDaten["Query"] = "db=" . $WR4 . "&q=" . urlencode("select last(Scheinleistung) from AC");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$aktuelleDaten["ACscheinleistung"] = $aktuelleDaten["ACscheinleistung"] + $rc["results"][0]["series"][0]["values"][0][1];
$aktuelleDaten["Query"] = "db=" . $WR5 . "&q=" . urlencode("select last(Scheinleistung) from AC");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$aktuelleDaten["ACscheinleistung"] = $aktuelleDaten["ACscheinleistung"] + $rc["results"][0]["series"][0]["values"][0][1];
$aktuelleDaten["Query"] = "db=" . $WR2 . "&q=" . urlencode("select last(Wirkleistung) from AC");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$aktuelleDaten["ACwirkleistung"] = $rc["results"][0]["series"][0]["values"][0][1] + $aktuelleDaten["AC_Wirkleistung"];
$aktuelleDaten["Query"] = "db=" . $WR3 . "&q=" . urlencode("select last(Wirkleistung) from AC");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$aktuelleDaten["ACwirkleistung"] = $aktuelleDaten["ACwirkleistung"] + $rc["results"][0]["series"][0]["values"][0][1];
$aktuelleDaten["Query"] = "db=" . $WR4 . "&q=" . urlencode("select last(Wirkleistung) from AC");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$aktuelleDaten["ACwirkleistung"] = $aktuelleDaten["ACwirkleistung"] + $rc["results"][0]["series"][0]["values"][0][1];
$aktuelleDaten["Query"] = "db=" . $WR5 . "&q=" . urlencode("select last(Wirkleistung) from AC");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$aktuelleDaten["ACwirkleistung"] = $aktuelleDaten["ACwirkleistung"] + $rc["results"][0]["series"][0]["values"][0][1];
$aktuelleDaten["Query"] = "db=" . $WR1 . "&q=" . urlencode("select last(Wh_Heute) from Summen");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$aktuelleDaten["ACWhHeute"] = $rc["results"][0]["series"][0]["values"][0][1] + $aktuelleDaten["Summen_Wh_Heute"];
$aktuelleDaten["Query"] = "db=" . $WR2 . "&q=" . urlencode("select last(Wh_Heute) from Summen");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$aktuelleDaten["ACWhHeute"] = $aktuelleDaten["ACWhHeute"] + $rc["results"][0]["series"][0]["values"][0][1];
$aktuelleDaten["Query"] = "db=" . $WR3 . "&q=" . urlencode("select last(Wh_Heute) from Summen");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$aktuelleDaten["ACWhHeute"] = $aktuelleDaten["ACWhHeute"] + $rc["results"][0]["series"][0]["values"][0][1];
$aktuelleDaten["Query"] = "db=" . $WR4 . "&q=" . urlencode("select last(Wh_Heute) from Summen");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$aktuelleDaten["ACWhHeute"] = $aktuelleDaten["ACWhHeute"] + $rc["results"][0]["series"][0]["values"][0][1];
$aktuelleDaten["Query"] = "db=" . $WR5 . "&q=" . urlencode("select last(Wh_Heute) from Summen");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$aktuelleDaten["ACWhHeute"] = $aktuelleDaten["ACWhHeute"] + $rc["results"][0]["series"][0]["values"][0][1];
$funktionen->log_schreiben("Gesamtberechnungen der Summen wurden durchgeführt", " ", 7);
// -----------------------------------------------------------------------
//****************************************************************************/
// Aufbereiten Query zum Speichern der Daten
// ***************************************************************************
if ($InfluxDBName == $WR5) {
$aktuelleDaten["ZusatzQuery"] = "Gesamt ";
$aktuelleDaten["ZusatzQuery"] .= "Batterie_ladestrom=".$aktuelleDaten["ladestrom"];
$aktuelleDaten["ZusatzQuery"] .= ",Batterie_entladestrom=".$aktuelleDaten["entladestrom"];
$aktuelleDaten["ZusatzQuery"] .= ",PV_Leistung=".$aktuelleDaten["solarleistung"];
$aktuelleDaten["ZusatzQuery"] .= ",AC_Scheinleistung=".$aktuelleDaten["ACscheinleistung"];
$aktuelleDaten["ZusatzQuery"] .= ",AC_Wirkleistung=".$aktuelleDaten["ACwirkleistung"];
$aktuelleDaten["ZusatzQuery"] .= ",Summen_Wh_Heute=".$aktuelleDaten["ACWhHeute"];
$aktuelleDaten["ZusatzQuery"] .= " ".$aktuelleDaten["zentralerTimestamp"];
}
Ausgang:;
$Tracelevel = $TLevelSave;
return;
?>
Code: Alles auswählen
07.08. 19:16:02 -Multi Regler Auslesen [Start].
07.08. 19:16:02 -Verarbeitung von: '1.user.config.php' Regler: 7
07.08. 19:16:02 |-------------- Start ax_wechselrichter.php -----------------
07.08. 19:16:03 -226.8 50.0 226.8 50.0 0997 0988 019 402 49.80 006 056 0034 0005 102.3 49.69 00000 00110110 00 00 00293 010 i: 52
07.08. 19:16:03 -MQTT Daten zum [ 192.168.178.194 ] senden.
07.08. 19:16:03 |---------------- Start ax_wechselrichter_math.php ---------------
07.08. 19:16:03 -WR1 und WR2 ohne Berechnung der Summen...
07.08. 19:16:03 * -Daten zur lokalen InfluxDB [ solaranzeige ] gesendet.
07.08. 19:16:03 -Multi-Regler-Ausgang. 6
07.08. 19:16:04 MQT-MQTT Daten zum Broker gesendet bzw. vom Broker empfangen. Adresse: localhost Port: 1883
07.08. 19:16:09 -OK. Datenübertragung erfolgreich.
07.08. 19:16:09 -Solarleistung: 293 Watt - WattstundenGesamtHeute: 20734.35
07.08. 19:16:09 |------------ Stop ax_wechselrichter.php ------------------
07.08. 19:16:10 -Verarbeitung von: '2.user.config.php' Regler: 7
07.08. 19:16:10 |-------------- Start ax_wechselrichter.php -----------------
07.08. 19:16:11 -227.4 50.0 227.4 50.0 1035 1035 020 405 49.90 004 057 0034 0004 082.8 49.84 00000 00110110 00 00 00214 010 i: 53
07.08. 19:16:11 |---------------- Start ax_wechselrichter_math.php ---------------
07.08. 19:16:11 -Gesamtberechnungen der Summen wurden durchgeführt
07.08. 19:16:11 * -Daten zur lokalen InfluxDB [ solaranzeige2 ] gesendet.
07.08. 19:16:12 -Multi-Regler-Ausgang. 5
07.08. 19:16:17 -OK. Datenübertragung erfolgreich.
07.08. 19:16:17 -Solarleistung: 214 Watt - WattstundenGesamtHeute: 14021.07
07.08. 19:16:17 |------------ Stop ax_wechselrichter.php ------------------
07.08. 19:16:17 -Verarbeitung von: '3.user.config.php' Regler: 7
07.08. 19:16:17 |-------------- Start ax_wechselrichter.php -----------------
07.08. 19:16:17 -Datenübertragung vom Wechselrichter war erfolglos! Continue..
07.08. 19:16:19 -225.5 50.0 225.5 50.0 1736 1711 034 407 50.00 005 058 0038 0005 075.5 49.99 00000 00110110 00 00 00254 010 i: 53
07.08. 19:16:19 |---------------- Start ax_wechselrichter_math.php ---------------
07.08. 19:16:19 -Gesamtberechnungen der Summen wurden durchgeführt
07.08. 19:16:19 * -Daten zur lokalen InfluxDB [ solaranzeige3 ] gesendet.
07.08. 19:16:19 -Multi-Regler-Ausgang. 5
07.08. 19:16:24 -OK. Datenübertragung erfolgreich.
07.08. 19:16:24 -Solarleistung: 254 Watt - WattstundenGesamtHeute: 12179.48
07.08. 19:16:24 |------------ Stop ax_wechselrichter.php ------------------
07.08. 19:16:25 -Verarbeitung von: '4.user.config.php' Regler: 7
07.08. 19:16:25 |-------------- Start ax_wechselrichter.php -----------------
07.08. 19:16:26 -226.4 50.0 226.4 50.0 1472 1472 029 407 50.00 023 058 0038 0023 088.3 49.99 00000 00110110 00 00 01174 010 i: 51
07.08. 19:16:26 -MQTT Daten zum [ 192.168.178.194 ] senden.
07.08. 19:16:26 |---------------- Start ax_wechselrichter_math.php ---------------
07.08. 19:16:26 -Gesamtberechnungen der Summen wurden durchgeführt
07.08. 19:16:27 * -Daten zur lokalen InfluxDB [ solaranzeige4 ] gesendet.
07.08. 19:16:27 -Multi-Regler-Ausgang. 5
07.08. 19:16:27 MQT-MQTT Daten zum Broker gesendet bzw. vom Broker empfangen. Adresse: localhost Port: 1883
07.08. 19:16:32 -OK. Datenübertragung erfolgreich.
07.08. 19:16:32 -Solarleistung: 1174 Watt - WattstundenGesamtHeute: 12465.92
07.08. 19:16:32 |------------ Stop ax_wechselrichter.php ------------------
07.08. 19:16:32 -Verarbeitung von: '5.user.config.php' Regler: 50
07.08. 19:16:32 |------------ Start SDM230_meter.php -------------------------
07.08. 19:16:33 -AC Leistung: 5617.83 Watt
07.08. 19:16:33 * -Daten zur lokalen InfluxDB [ Zaehler ] gesendet.
07.08. 19:16:33 -Multi-Regler-Ausgang. 8
07.08. 19:16:41 -OK. Datenübertragung erfolgreich.
07.08. 19:16:41 |------------ Stop SDM230_meter.php -----------------------
07.08. 19:16:42 -Multi Regler Auslesen [Stop].
HipHopSanta