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
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste