verzwickte _math.php

Alles was mit der Solaranzeige Image Installation und Betrieb zu tun hat. Einfache Konfiguration mit einem Gerät.

Moderator: Ulrich

MPunkt
Beiträge: 17
Registriert: Sa 29. Jun 2024, 13:07

verzwickte _math.php

Beitrag von MPunkt »

Hallo Gemeinde,

seit geraumer Zeit zweifle ich an meinen Fähigkeiten die *_math.php korrekt zu programmieren.
Vor lauter Verzweiflung suche ich schon workarounds in Grafana. Was ja nicht wirklich sinnvoll ist...
Jetzt hoffe ich auf die ”Schwarmintelligenz” mir die Augen zu öffnen und meinen (Denk)Fehler aufzuzeigen.

Folgendes Phänomen:
ich definiere in der _math.php die ”Standardparameter” von Uli und ein neues measurement namens ’Byte’ wie folgt

Code: Alles auswählen

<?php
   $aktuelleDaten["ZusatzQuery"] = "Service RaspiTemp=".round($RaspiTemp,1);
   $aktuelleDaten["ZusatzQuery"] .= ",RaspiFreierSpeicher=\"".$FreierSpeicher."\"";
   $aktuelleDaten["ZusatzQuery"] .= " ".$aktuelleDaten["zentralerTimestamp"];
   $aktuelleDaten["ZusatzQuery"] .= "\n";
//-------------------

   $aktuelleDaten["ZusatzQuery"] = "Byte bit00=".substr($aktuelleDaten["StatusBit"],-1,1);
   $aktuelleDaten["ZusatzQuery"] .= ",bit01=".substr($aktuelleDaten["StatusBit"],-2,1);
   $aktuelleDaten["ZusatzQuery"] .= ",bit02=".substr($aktuelleDaten["StatusBit"],-3,1);
   $aktuelleDaten["ZusatzQuery"] .= ",bit03=".substr($aktuelleDaten["StatusBit"],-4,1);
   $aktuelleDaten["ZusatzQuery"] .= ",bit04=".substr($aktuelleDaten["StatusBit"],-5,1);
   $aktuelleDaten["ZusatzQuery"] .= ",bit05=".substr($aktuelleDaten["StatusBit"],-6,1);
   $aktuelleDaten["ZusatzQuery"] .= ",bit06=".substr($aktuelleDaten["StatusBit"],-7,1);
   $aktuelleDaten["ZusatzQuery"] .= ",bit07=".substr($aktuelleDaten["StatusBit"],-8,1);
   $aktuelleDaten["ZusatzQuery"] .= ",bit0-7=".$aktuelleDaten["StatusBit"];
   $aktuelleDaten["ZusatzQuery"] .= " ".$aktuelleDaten["zentralerTimestamp"];
   $aktuelleDaten["ZusatzQuery"] .= "\n";
//-------------------

// Abfrage bit_02: Batterie wird entladen?
   if (substr($aktuelleDaten["StatusBit"],-3,1) == "1") {
     $aktuelleDaten["Batterie_Strom"] = ($aktuelleDaten["Batterie_Strom"]*-1);
     $aktuelleDaten["Batterie_Leistung"] = ($aktuelleDaten["Batterie_Leistung"]*-1);
   }

// Abfrage bit_04: Einspeisung?
   if (substr($aktuelleDaten["StatusBit"],-5,1) == "1") {
     $aktuelleDaten["Einspeisung"] = ($aktuelleDaten["Einspeisung"]);
     $aktuelleDaten["Bezug"] = "0";
   }

// Abfrage bit_05: Bezug?
   if (substr($aktuelleDaten["StatusBit"],-6,1) == "1") {
     $aktuelleDaten["Bezug"] = abs($aktuelleDaten["Einspeisung"]);
     $aktuelleDaten["Einspeisung"] = "0";
   }

// Gesammelte Daten in's Log schreiben
   $funktionen->log_schreiben("bit0-7: ".$aktuelleDaten["StatusBit"]);
   $funktionen->log_schreiben("Einspeisung: ".$aktuelleDaten["Einspeisung"]);
   $funktionen->log_schreiben("Bezug: ".$aktuelleDaten["Bezug"]);
   $funktionen->log_schreiben("Ras freier Speicher: ".$FreierSpeicher);
   $funktionen->log_schreiben("Rasperry Temperatur: ".round($RaspiTemp,1)." °C");//,"> ",5
?>
Schaue ich mir dann die log-Datei an dann sehe ich:

Code: Alles auswählen

04.09. 21:32:01    -Multi Regler Auslesen [Start].
04.09. 21:32:01    -Verarbeitung von: '1.user.config.php'   Regler: 70
04.09. 21:32:01 |----------------   Start  sungrow.php    --------------------------
04.09. 21:32:01    -Sungrow: 10.0.0.26 Port: 502 GeräteID: 1
04.09. 21:32:01 +  -Die Daten werden ausgelesen...
04.09. 21:32:01    -Firmware: ARM_SAPPHIRE-H_V11_V01_B
04.09. 21:32:02    -Seriennummer: A2341702505
04.09. 21:32:02    -ModellGruppe: SH
04.09. 21:32:11    -Modell: SH10.0RT
04.09. 21:32:19    -bit0-7: 0000000000001100
04.09. 21:32:19    -Einspeisung: 0
04.09. 21:32:19    -Bezug: 5
04.09. 21:32:19    -Ras freier Speicher:   48G

04.09. 21:32:19    -Rasperry Temperatur: 56.9 °C
04.09. 21:32:19 *  -Daten zur lokalen InfluxDB [ solaranzeige ] gesendet.
04.09. 21:32:19    -Multi-Regler-Ausgang. -11
04.09. 21:32:19    -OK. Datenübertragung erfolgreich.
04.09. 21:32:19 |----------------   Stop   sungrow.php    --------------------------
04.09. 21:32:21    -Multi Regler Auslesen [Stop].
In der Datenbank finde ich dann allerdings keine Raspi-Daten.
> select * from Service order by time desc limit 1
name: Service
time Anz_MPPT Effizienz Modell Modell_ID RaspiFreierSpeicher RaspiTemp Status Temperatur WR_Fehler
---- -------- --------- ------ --------- ------------------- --------- ------ ---------- ---------
1725476711000000000 2 0 ARM_SAPPHIRE-H_V11_V01_B 3599 40 42.7 0
> exit


Dem kann ich abhelfen, indem ich die ersten vier Zeilen der _math-php HINTER die Definition meiner Statusbits setze.
Prima ;)
Aber dann hab ich die Statusbits NICHT MEHR in der Datenbank :cry:

100% reproduzierbar — die Definition, die zuerst deklariert wird, wird zwar ausgelesen und in die log-Datei geschrieben
aber sie kommt nicht mehr in der Datenbank an.

Wer weiß hier Abhilfe und — wer kann mir erklären was ich falsch mache???

Und by the way, kann ich die deklarierten Variablen aus der _math.php auch gleich weiter in der Datei zu Abfragen verwenden?

Ich freu mich auf eine Erleuchtung,
schon jetzt besten Dank und Grüsse

Markus

andreas_n
Beiträge: 1618
Registriert: Do 25. Jun 2020, 13:40
Hat sich bedankt: 17 Mal
Danksagung erhalten: 84 Mal

Re: verzwickte _math.php

Beitrag von andreas_n »

mach mal aus

"Service RaspiTemp=".round($RaspiTemp,1);

das DA>>

"Service RaspiTemp=".round(($RaspiTemp),1);
SMA Tripower 8/Growatt MIN 3000 TL-XE/Growatt 1500S/Growatt SPH 4600,4 ARK LV,10kWh
ELWA DC WW Puffer m. 300L mittels Automation /Gesamt PV Leistung 20,5kWp gesteuert mit Pi4 und Pi5

Bogeyof
Beiträge: 1174
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 25 Mal
Danksagung erhalten: 141 Mal

Re: verzwickte _math.php

Beitrag von Bogeyof »

Nein, der Fehler ist der fehlende Punkt bei:

Code: Alles auswählen

$aktuelleDaten["ZusatzQuery"] = "Byte bit00=".substr($aktuelleDaten["StatusBit"],-1,1);
muss so aussehen:

Code: Alles auswählen

$aktuelleDaten["ZusatzQuery"] .= "Byte bit00=".substr($aktuelleDaten["StatusBit"],-1,1);

andreas_n
Beiträge: 1618
Registriert: Do 25. Jun 2020, 13:40
Hat sich bedankt: 17 Mal
Danksagung erhalten: 84 Mal

Re: verzwickte _math.php

Beitrag von andreas_n »

Wie im richtigen Leben, den Punkt hab ich neulich (bin seit 3 Wochen schwer am php Kampf gewesen mit der eigenen _math)
auch übersehen :lol:

moin Bogeyof, aber da schauste hundertmal drüber und es fällt nicht auf...weiter oben fehlt er dann ja auch.. :? Auch wenns da dann der Anfang ist, aber ich hab in meiner _math da einen rein setzen müssen.
SMA Tripower 8/Growatt MIN 3000 TL-XE/Growatt 1500S/Growatt SPH 4600,4 ARK LV,10kWh
ELWA DC WW Puffer m. 300L mittels Automation /Gesamt PV Leistung 20,5kWp gesteuert mit Pi4 und Pi5

MPunkt
Beiträge: 17
Registriert: Sa 29. Jun 2024, 13:07

Re: verzwickte _math.php

Beitrag von MPunkt »

Verdammte Axt! :x
Das war tatsächlich ein Interpretationsfehler meinerseits :oops:

Grüss euch Bogeyof, andreas_n!
Also die Berechnung der Raspi-Temp geht in beiden Variationen, egal ob die
Variable in einer separaten Klammer sitzt oder nicht.
Wirklich entscheidend ist der PUNKT

Code: Alles auswählen

$aktuelleDaten["ZusatzQuery"] .= "Byte bit00=".substr($aktuelleDaten["StatusBit"],-1,1);
Meine Denke war tatsächlich, dass der PUNKT nur in den nachfolgenden Zeilen einer Deklaration gesetzt werden muss.
Da ich die Raspi-Parameter mit ”\n” abgeschlossen hatte beginnt entsprechend meiner Logik eine neue Deklaration
→ kein PUNKT in der ersten Zeile.

Da muss ich wohl in meiner Denke noch ein bisschen nachjustieren :shock:

Vielen lieben Dank euch Zwei!

Grüssle aus dem Schwarzwald
Markus

andreas_n
Beiträge: 1618
Registriert: Do 25. Jun 2020, 13:40
Hat sich bedankt: 17 Mal
Danksagung erhalten: 84 Mal

Re: verzwickte _math.php

Beitrag von andreas_n »

Hauptsache geht jetzt..
aber der Punkt ist echt mystisch..in der allerersten Zeile kann er fehlen, ist er aber da, macht auch nix *kopfkratz*, bei mir ist er drin.
hatte ich erst neulich gesucht wie Irrer. Bin selber grad drüber, PHP wenigstens etwas besser zu verstehen, baue grad alles von Grafana Queries und Dashboard Variablen um auf Datenbank Werte..selbst auf PHP Erklär Seiten suchste dich manchmal bekloppt.
SMA Tripower 8/Growatt MIN 3000 TL-XE/Growatt 1500S/Growatt SPH 4600,4 ARK LV,10kWh
ELWA DC WW Puffer m. 300L mittels Automation /Gesamt PV Leistung 20,5kWp gesteuert mit Pi4 und Pi5

Benutzeravatar
Ulrich
Administrator
Beiträge: 6081
Registriert: Sa 7. Nov 2015, 10:33
Wohnort: Essen
Hat sich bedankt: 153 Mal
Danksagung erhalten: 824 Mal
Kontaktdaten:

Re: verzwickte _math.php

Beitrag von Ulrich »

Das will ich doch einmal aufklären:

Der Punkt bedeutet, dass eine Textzeile "angehängt" wird.

Zeile = "Das ist" . " ein Text";

oder

Zeile = "Das ist";
Zeile .= " ein Text";

oder

Zeile = "";

Zeile .= "Das ist";
Zeile .= " ein Text";

Alle 3 Möglichkeiten sind korrekt.

Das würde in der php.log eine Warnung ausgeben:

Zeile .= "Das ist";
Zeile .= " ein Text";

Da die Variable nicht initialisiert ist.
-----------------------------------------------------
Ulrich . . . . . . . . [ Admin ]

andreas_n
Beiträge: 1618
Registriert: Do 25. Jun 2020, 13:40
Hat sich bedankt: 17 Mal
Danksagung erhalten: 84 Mal

Re: verzwickte _math.php

Beitrag von andreas_n »

Hallo Ulrich,

danke, wieder was gelernt. Habs eben in der php.log nachgesehen, kam tatsächlich Fehlermeldung, aber ich hab auch seltenst da reingeschaut :oops:
(selbst wenn,ich hätt aber auch nicht gewusst, warum da Fehlermeldung kam :D )

Es geht mit oder ohne ERSTEN Punkt, aber ohne ersten Punkt verschwindet Fehlermeldung in Zeile xyz

:thumbup:

eine Frage hätt ich bei der Gelegenheit..

funktionen->log_schreiben("Einspeisung Wh Heute ".$aktuelleDaten["whEinspeisungHeute"]," Wh",8);

Was bewirkt die "8"??(rot hervorgehoben)

ich such mich im web regelrecht dämlich, ich kann mit der Zahl auch "spielen" , ich finds nicht raus, max Zeichen/Textlänge hätte ich vermutet, aber ist es irgendwie auch nicht.

Gruss
Andreas
SMA Tripower 8/Growatt MIN 3000 TL-XE/Growatt 1500S/Growatt SPH 4600,4 ARK LV,10kWh
ELWA DC WW Puffer m. 300L mittels Automation /Gesamt PV Leistung 20,5kWp gesteuert mit Pi4 und Pi5

Bogeyof
Beiträge: 1174
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 25 Mal
Danksagung erhalten: 141 Mal

Re: verzwickte _math.php

Beitrag von Bogeyof »

Das ist der Tracelevel, ab dem der Eintrag auch wirklich ins Log geschrieben wird...

andreas_n
Beiträge: 1618
Registriert: Do 25. Jun 2020, 13:40
Hat sich bedankt: 17 Mal
Danksagung erhalten: 84 Mal

Re: verzwickte _math.php

Beitrag von andreas_n »

Danke dir!
SMA Tripower 8/Growatt MIN 3000 TL-XE/Growatt 1500S/Growatt SPH 4600,4 ARK LV,10kWh
ELWA DC WW Puffer m. 300L mittels Automation /Gesamt PV Leistung 20,5kWp gesteuert mit Pi4 und Pi5

Antworten

Zurück zu „Image Installation [ Single-Regler Version ]“