Huawei Wechselrichter (Modbus Fragen)

Hm, da bin ich gerade überfragt. Das einzige was ich mir vorstellen kann, ist, dass du Adressen aufrufst, die deine Anlage nicht verarbeiten kann oder diese nicht bekannt sind (auf Grund anderem Huawei-Setup, Firmware oder so). Schau mal, welche Variable sich nicht updatet… dann kommt man ev. der Sache auf den Grund.

Ja ich glaube auch, dass es das ist.

Es kommt nur noch die Meldung mit DataBlocks8 worauf zielt dieser Block ab?



Es werden alle Daten bis auf die Grunddaten abgeholt

Jetzt habe ich die Werte mal unter

deaktiviert und der Fehler kommt jetzt nicht mehr so häufig. Wobei das nicht logisch ist, da er die Wert schon einmal abgerufen hatte zumindest teilweise.

Hier noch die Seite auf welcher man die Adressen für den Modbus beim Huawei erhält

Sun2000 Modbus Register – Debacher-Wiki

Hallo M70,

konnte jetzt fast alles zuordnen, was mir jedoch fehlt sind:

  1. Einspeisung?
  2. Netzbezug → hier habe ich Grid Power genommen?
  3. PV Eigenverbrauch?
  4. Verbrauch total?
  5. Wechselrichter total?

Kannst du mir hier die Variablen nennen.

Vielen Dank.

Ich muss noch schauen, wie ich das Mapping gemacht resp. welche Werte ich hierzu verwendet habe. Vermutlich hatte ich auch mit Variabeln und Berechnungen gearbeitet.
Ich weiss gerade nur, dass ich einer der Werte über die virtualen Modbus-Variabeln berechnen wollte, dies aber offensichtlich immer noch nicht geht (ein Fehlverhalten des neuen Modbus-Konzeptes von IP-Symcon) —> Weiterer Modbus Fehler? - #22 von paresy

Hallo, berechne die Werte jetzt. Mal sehen ob die Ergebnisse stimmen

Die View ist schon ganz gut geworden, habe aber noch Abweichungen bei der Einspeisung / Netzbezug zwischen Fusion App und meinen errechneten werten. Nur den Fehler finde ich noch nicht :frowning:

Sieht sehr gut aus, Hut ab! Betreffend Differenzen: Beachte dass es einen grösseren Unterschied zeitlich gibt zwischen App und den Daten, welche du von der Anlage erhälst… bis zu 10-15 Minuten! Vielleicht liegt es daran? Also, deine Modbus-Anfragen und Werte sind genauer :slight_smile:

Ja das könnte sein :-).

Der Fehler mit Zeitüberschreitung und Block 8

Bezieht sich Block 8 auf das Jons Script? 8ter Abschnitt?

Ich verstehe dich nicht, von welchem Script sprichst du? Mir sagt das gerade gar nichts.

Die Werte sind dennoch nicht ganz stimmig

Differenz 703 Watt zu 0,705 kW okay, die 0,705 kW gehen 0,686 kW ins Haus und 0,017 kW in Netz passt auch noch. Aber die 0,686 kW + 0,025 kW passen nicht zu den 0,728 kW.

Sorry nicht Script sondern in der Modbus Vorlage Wechselrichter.json, die meinte ich.

Das in meinem Post ist der Auszug aus der Datei, hier der Block8 wenn ich von Oben nach Unten durchzähle.

Hm, bei mir funktioniert es; und ich glaube ein paar andere nutzen die gleichen Variabeln und Adressblöcke ohne Fehler… Zumindest ist mir nichts bekannt.
Komisch… Und es gibt keine Aktualisierung der Werte?
Ich habe gerade keinen Lösungsansatz; ich kann mir nur vorstellen, dass bei deinem Gerät/Firmware ev. die Werte nicht zur Verfügung stehen oder an anderer Stelle stehen??

Die Differenz wäre dann 0.017kW, richtig? Könnte das nicht einfach die Differenz auf Grund des Intervalls der Abfrage sein? Sprich, es wird ja meines Wissens nicht alles „gleichzeitig“ gelesen… Vielleicht kommt die Differenz daher…?
Welche Variabeln nutzt du bei diesen Berechnungen?

Hast du das mit IPSView gemacht?

Genau das hätte ich jetzt auch gesagt. Nicht alle Phasen / Strings bzw. Spannung/Strom werden gleichzeitig gelesen. Daher müssten die Fehler kommen.

Aber die View sieht sehr gut aus!

View ist mit IPSView erstellt, das ist richtig

Hier sind meine Scripte

<?php

//Script zur Ermittlung des Eigenverbrauch

// IDs der Variablen definieren
$string1_id = 40532; // ID der Variable String1
$string2_id = 48977; // ID der Variable String2
$speicher_ladung_id = 54486; // ID der Variable Batterieladung
$Netzeinspeisung_id = 57868; // ID der Variable Netzeinspeisung

// Werte der Variablen abrufen
$string1 = GetValue($string1_id);
$string2 = GetValue($string2_id);
$speicher_ladung = GetValue($speicher_ladung_id);
$Netzeinspeisung = GetValue($Netzeinspeisung_id);

// EV berechnen
$Eigenverbrauch = ($string1 + $string2) - ($speicher_ladung/1000 + $Netzeinspeisung);

// Ergebnis in eine Variable schreiben
$EigenverbrauchID = 44234; // ID der Zielvariable für Eigenverbrauch
SetValue($EigenverbrauchID, $Eigenverbrauch);

// Ausgabe zur Kontrolle
//echo "Die berechnete EV ist: " . $ev;
?>

<?php
// Script zur Trennung von Netzeinspeisung und Netzbezug

$Netzleistung = GetValue(55407); // Ersetze xxxxx durch die ID der Leistung vom Dach
$Netzeinspeisung = 0;
$Netzbezug = 0;

// Prüfen, ob der Wert kleiner als 0 ist
if ($Netzleistung < 0) {
    $Netzeinspeisung = $Netzleistung * -1;
    SetValue(57868, $Netzeinspeisung); // Ersetze xxxxx durch die ID der Variablen für die Netzeinspeisung
} else {
    $Netzbezug = $Netzleistung;
    SetValue(17203, $Netzbezug); // Ersetze xxxxx durch die ID der Variable für den Netzbezug
}
?>
<?php
// Script zur Ermittlung des Ertrags je Dachfläche

// ID der Variablen
$totalPowerID = 18305;   // Ersetzen Sie dies durch die echte ID der TotalPower-Variablen
$pv1VoltID = 15891;       // Ersetzen Sie dies durch die echte ID der PV1 Volt-Variablen
$pv2VoltID = 25311;       // Ersetzen Sie dies durch die echte ID der PV2 Volt-Variablen

// Werte der Variablen abrufen
$totalPower = GetValue($totalPowerID);
$pv1Volt = GetValue($pv1VoltID);
$pv2Volt = GetValue($pv2VoltID);

// Berechnung durchführen
$sumPvVolt = $pv1Volt + $pv2Volt;

if ($sumPvVolt != 0) {
    $string1 = ($totalPower / $sumPvVolt) * $pv1Volt;
    $string2 = ($totalPower / $sumPvVolt) * $pv2Volt;
} else {
    $string1 = 0; // Vermeidung der Division durch Null
    $string2 = 0; // Vermeidung der Division durch Null
}

// Ergebnisse in String1 und String2 speichern (hier Beispiel-IDs 33445 und 55667 verwenden)
$string1ID = 40532; // Ersetzen Sie dies durch die echte ID der String1-Variablen
$string2ID = 48977; // Ersetzen Sie dies durch die echte ID der String2-Variablen

SetValue($string1ID, $string1);
SetValue($string2ID, $string2);
?>
1 „Gefällt mir“

Danke schön für die positive Rückmeldung :wink:

Hi kannst du dir das Script mal ansehen, nehme die Grid Power vom Dongle. Wenn diese negativ ist, soll er den Wert mit -1 Multiplizieren und diesen Wert der Variablen Netzbezug zuweisen.

Wenn der Wert >0 ist, soll er diesen Wert der Variablen Netzeinspeisung zuweisen.

Komischerweise bekomme ich aber immer sowohl beim Netzbezug als auch der Einspeisung Werte dargestellt.

Müsste ich das Script ändern, da die jeweilige andere Variable immer genullt wird und wenn ja wie macht man dies?

<?php
// Script zur Trennung von Netzeinspeisung und Netzbezug

$Netzleistung = GetValue(55407); // Ersetze xxxxx durch die ID der Leistung vom Dach
$Netzeinspeisung = 0;
$Netzbezug = 0;

// Prüfen, ob der Wert kleiner als 0 ist
if ($Netzleistung < 0) {
    $Netzbezug = $Netzleistung * -1;
    SetValue(17203, $Netzbezug); // Ersetze xxxxx durch die ID der Variablen für die Netzbezug
} else {
    $Netzeinspeisung = $Netzleistung;
    SetValue(57868, $Netzeinspeisung); // Ersetze xxxxx durch die ID der Variable für den Netzeinspeisung
}
?>

Sorry, ich bin diese Woche einwenig beschäftigt… muss es vermutlich mal am Wochenende anschauen.