2 kleinere Probleme waren noch vorhanden:
Die PV-Gesamtleistung zeigte sehr oft tagsüber den Wert „0“ an, obwohl die Substrings Werte anzeigten.
Beim prüfen stellte ich fest, dass die Einzelwerte einen anderen Zeitstempel aufwiesen als der Gesamtwert.
Ich habe mit den huawei_LAN.php angesehen und keine Erklärung gefunden.
Ich habe verschiedene Ansätze ausprobiert und schließlich eine Lösung gefunden:
if (hexdec( $aktuelleDaten["Anz_PV_Strings"] ) > 8) {
$funktionen->log_schreiben( "Fehler! Keine gültigen Daten empfangen. ", " ", 5 );
continue;
}
$aktuelleDaten["PV_Leistung"] = 0;
for ($j = 1; $j <= hexdec( $aktuelleDaten["Anz_PV_Strings"] ); $j++) {
$aktuelleDaten["PV".$j."_Spannung"] = 0;
$aktuelleDaten["PV".$j."_Strom"] = 0;
$aktuelleDaten["PV".$j."_Spannung"] = $funktionen->hexdecs( substr( $rc["Wert"], 56 + ($j * 8), 4 )) / 10;
$aktuelleDaten["PV".$j."_Strom"] = $funktionen->hexdecs( substr( $rc["Wert"], 60 + ($j * 8), 4 )) / 100;
$aktuelleDaten["PV".$j."_Leistung"] = round( ($aktuelleDaten["PV".$j."_Strom"] * $aktuelleDaten["PV".$j."_Spannung"]), 2 );
}
$aktuelleDaten["PV_Leistung"] = round(($funktionen->hexdecs( substr( $rc["Wert"], 68, 4 )) / 100 * $funktionen->hexdecs( substr( $rc["Wert"], 64, 4 )) / 10)+($funktionen->hexdecs( substr( $rc["Wert"], 76, 4 )) / 100 * $funktionen->hexdecs( substr( $rc["Wert"], 64, 4 )) / 10), 2 ); //2 Strings
// $aktuelleDaten["PV_Leistung"] = $aktuelleDaten["PV_Leistung"] + round(($funktionen->hexdecs( substr( $rc["Wert"], 76, 4 )) / 100 * $funktionen->hexdecs( substr( $rc["Wert"], 72, 4 )) / 10)+($funktionen->hexdecs( substr( $rc["Wert"], 84, 4 )) / 100 * $funktionen->hexdecs( substr( $rc["Wert"], 72, 4 )) / 10), 2 ); //4 Strings
// $aktuelleDaten["PV_Leistung"] = $aktuelleDaten["PV_Leistung"] + round(($funktionen->hexdecs( substr( $rc["Wert"], 84, 4 )) / 100 * $funktionen->hexdecs( substr( $rc["Wert"], 80, 4 )) / 10)+($funktionen->hexdecs( substr( $rc["Wert"], 92, 4 )) / 100 * $funktionen->hexdecs( substr( $rc["Wert"], 80, 4 )) / 10), 2 ); //6 Strings
// $aktuelleDaten["PV_Leistung"] = $aktuelleDaten["PV_Leistung"] + round(($funktionen->hexdecs( substr( $rc["Wert"], 92, 4 )) / 100 * $funktionen->hexdecs( substr( $rc["Wert"], 88, 4 )) / 10)+($funktionen->hexdecs( substr( $rc["Wert"], 100, 4 )) / 100 * $funktionen->hexdecs( substr( $rc["Wert"], 88, 4 )) / 10), 2 ); //8 Strings
PV_Leistung wird nicht mehr innerhalb der Ausleseschleife ausgerechnet, sondern nach deren Abschluss. Damit sind die Zeitstempel gleich und es kommt keine „0“ mehr vor.
Man sieht deutlich, ab wo der geänderte Code wirksam wurde. Der Ausreißer kurz vor 18 Uhr liegt an einem kleinen Fehler, den ich beim aufräumen eingebaut habe.
Die M1-Wechselrichter können höchstens 8 Strings bedienen … die meisten dürften 2 Strings haben.
Die Ausleseschleife besteht weiterhin. Je nach Anzahl der Strings muss man die bis zu auskommentierten Zeilen danach wieder aktivieren.
Ich habe versucht das in einer Schleife zu machen, es hat aber nicht funktioniert, wie gesagt ich verstehe nicht warum, vor allem auch deswegen, weil ich von php fast keine Ahnung habe.
Ich habe bereits früher die Frager gestellt, warum im Measurement PV machmal 10000e Einträge sind. Ich weiß jetzt warum. Wenn die Anzahl der Strings falsch ausgelesen wird, wird die maximale Anzahl an Measurement angelegt.
Das kann man ganz leicht vermeiden:
if (hexdec( $aktuelleDaten["Anz_PV_Strings"] ) > 8) {
$funktionen->log_schreiben( "Fehler! Keine gültigen Daten empfangen. ", " ", 5
continue;
}
Allerdings tritt dieses Probleme in der hier geänderten php-Datei nicht mehr auf.
Fehler in huawei_LAN.php
Moderator: Ulrich
Re: Fehler in huawei_LAN.php
Extreme Ausreißer nach oben
Bei mir treten von Zeit zu Zeit (in letzter Zeit immer häufiger) immer wieder extreme hohe Werte für Leistungen (PV, Einspeisung) auf, die damit die Kurven nutzlos machen:
Anlage: Huawei SUN2000-10KTL-M FW:SPC168; Solaranzeige V 6.1.3a
Verbindung über WLAN (ca. 1m von Router entfernt)
Ich lösche händisch die fehlerhaften Werte aus der Datenbank, schöner wäre ein eliminieren der unrealistischen Werte schon beim Einlesen.
Hat jemand schon eine Lösung dafür entwickelt. Ich kann mir vorstellen, dass eine Interpolation über mehrere Werte sinnvoll sind könnte, bei der ein absoluter Anstieg über x zu einem Filtern führt und statt dessen ein interpolierter Wert in die Datenbank geschrieben wird.
Bei mir treten von Zeit zu Zeit (in letzter Zeit immer häufiger) immer wieder extreme hohe Werte für Leistungen (PV, Einspeisung) auf, die damit die Kurven nutzlos machen:
Anlage: Huawei SUN2000-10KTL-M FW:SPC168; Solaranzeige V 6.1.3a
Verbindung über WLAN (ca. 1m von Router entfernt)
Ich lösche händisch die fehlerhaften Werte aus der Datenbank, schöner wäre ein eliminieren der unrealistischen Werte schon beim Einlesen.
Hat jemand schon eine Lösung dafür entwickelt. Ich kann mir vorstellen, dass eine Interpolation über mehrere Werte sinnvoll sind könnte, bei der ein absoluter Anstieg über x zu einem Filtern führt und statt dessen ein interpolierter Wert in die Datenbank geschrieben wird.
-
- Beiträge: 1769
- Registriert: Do 25. Jun 2020, 13:40
- Hat sich bedankt: 17 Mal
- Danksagung erhalten: 90 Mal
Re: Fehler in huawei_LAN.php
viewtopic.php?t=4355
oder
search.php?keywords=extreme+werte
man kann auch die spikes in der zugehörigen .php killen, gibts auch schon paar Fäden dazu..glaub "Werte zu null schreiben" oder so..
aber eigentlich haben die Spikes auch ne Ursache....
oder
search.php?keywords=extreme+werte
man kann auch die spikes in der zugehörigen .php killen, gibts auch schon paar Fäden dazu..glaub "Werte zu null schreiben" oder so..
aber eigentlich haben die Spikes auch ne Ursache....
SMA Tripower 8/Growatt MIN 3000 TL-XE/1500S/SPH 4600,4 ARK LV,10kWh
ELWA DC WW Puffer m. 300L/Gesamt PV Leistung 20,5kWp gesteuert mit Pi4 und Pi5
hier stehen alle Geräte>> viewtopic.php?f=13&t=1069
ELWA DC WW Puffer m. 300L/Gesamt PV Leistung 20,5kWp gesteuert mit Pi4 und Pi5
hier stehen alle Geräte>> viewtopic.php?f=13&t=1069
Re: Fehler in huawei_LAN.php
Ich habe meine huawei_lan.php so angepasst, dass er bei zu hohen Werten eine 0 schreibt. Dann bleibt der Graph übersichtlich.
Auch wiederhole ich die Abragen bis zu 2x wenn beim Auslesen ein Fehler aufgetreten ist.
Auch wiederhole ich die Abragen bis zu 2x wenn beim Auslesen ein Fehler aufgetreten ist.
- Hybrid-Wechselrichter Huawei Sun2000-10KTL-M1
- Speicher Huawei Luna2000-10-S0 10 KWh
- Huawei Smart Meter DTSU-666 H 250A
- SDongleA-05 per LAN verbunden
- Wallbox 2x Daheimladen Touch 11KW
- Hoymiles-Wechselrichter HMT-2250-6T
- Raspberry PI 4b
- Speicher Huawei Luna2000-10-S0 10 KWh
- Huawei Smart Meter DTSU-666 H 250A
- SDongleA-05 per LAN verbunden
- Wallbox 2x Daheimladen Touch 11KW
- Hoymiles-Wechselrichter HMT-2250-6T
- Raspberry PI 4b
Re: Fehler in huawei_LAN.php
Für die Spikes habe ich noch keine Ursache gefunden.
Was in meiner Auflistung fehlt, ist der modbus-proxy um auch die Daten im Homeassistant zu haben. Jedoch hatte ich die Spikes schon ein ganzes Jahr bevor der modbus-proxy integriert wurde.
Vielleicht hat jemand zu der Netzwerk-Anbindung eine Idee:
Ich war der naiven Meinung, dass wenn ein LAN Kabel am Smart-Dongle angeschlossen ist, der Verkehr über diesen läuft. Leider hatte ich das Problem, dass die Verbindung einmal am LAN einmal am WLAN vom Wechselrichter/Smart-Dongle aufgebaut wurde, was dazu führte, dass die IP Adresse eine andere ist und damit die Modbus Verbindung nicht mehr läuft.
In der SUN2000 App ist es mir jedoch nicht gelungen das WLAN zu deaktivieren, damit die Kabelverbindung immer genutzt wird.
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste