Huawei Wechselrichter (Modbus Fragen)

Hallo M70,

kein Problem, habe jetzt alle Werte berechnet und die stimmen auch (der Zeitversatz spielt eine nicht unerhebliche Rolle du hattest Recht).

Nur den Fehler bekomme ich nicht weg, bisher hatte auch noch kein anderes Forumsmitglied eine Idee.

Hallo,

durch die tolle Unterstützung des Supports von IP-Symcon konnte das Problem umgehend gelöst werden.

Unter dem Wechselrichter musste nur der Eintrag Coils gelöscht werden, dadurch tritt der Fehler nicht mehr auf.

Super, das freut mich, dass du es lösen konntest. :+1:
Ich hoffe, alles läuft nun so wie gewünscht.

Ja, einige Berechnungen muss ich noch anlegen aber ansonsten alles perfekt :grinning::wink:

Zu früh gefreut seit heute kommt jetzt der Fehler

Der Fehler müsste dann in dem Datenblock 2 grau markiert liegen?

Den Datenblock 8 haben wir gelöscht, somit war das Problem behoben, hier handelt es sich aber um einen sehr großen Block den ich nicht einfach löschen möchte.

Hast du den Timeout eingestellt? Der Dongle ist da ziemlich empfindlich…
Siehe hier Modbus abfragen und über weiteres Gerät verteilen - #57 von M70

Bei mir hat das Script wie folgt ausgesehen, welches man einmalig ausführen musste (zumindest in der 7.2. Vermutlich dann in der 8.0 nicht mehr nötig per Script…):

<?php
// muss nur einmal ausgeführt werden; in 8.0 sollte diese Einstellung auch via Eigenschaften-Seite einstellbar sein

IPS_SetProperty(23736, "TimeoutTime", 30); 
IPS_ApplyChanges(23736);

IPS_SetProperty(48263, "TimeoutTime", 30);
IPS_ApplyChanges(48263);

IPS_SetProperty(13255, "TimeoutTime", 30);
IPS_ApplyChanges(13255);

Es sind die Einstellungen bei den Modbus-Gateways von Dongle und Master (resp. auch der Slave WR bei mir). Ganz weg bekommt man die Fehler nicht… zumindest habe ich es nicht geschafft. Erhalte nur noch so 6 Stk pro Tag; immer um die gleiche Zeit.

Die Fehlermeldung „ILLEGAL_RESPONSE_LENGTH“ erhalte ich aber nie.

Ich habe das Skript jetzt integriert und einmal laufen lassen. Der Fehler tritt so wie ich das aktuell sehe immer mit dem Abruf in der Nacht auf. Könnte vielleicht mit dem Tageswechsel zu tun haben?

Das Skript muss also nicht zyklisch laufen?

Vielen Dank für deine Unterstützung.

Nein, das Script braucht nur einmal zu laufen. Dieser nimmt die nötige Einstellung vor.

Und ja, es scheint immer um die gleiche Zeit zu erfolgen, alle 24 Stunden. Ich vermute, dass es wohl in der Zeit tusammenfällt, wenn der Dongle von extern allenfalls beansprucht wird (Wartung, oder sowas)

Interessant bei mir zumindest: die Uhrzeit hängt dabei auch damit zusammen, wann allenfalls ein Verbindungsunterbruch zur PV Anlage stattfand. Dann, sobald wieder die Verbindung hergestellt wurde, gilt offensichtlich diese Uhrzeit als Trigger für die 24 Stunden…

Alles muss man nicht verstehen, es funktioniert ja generell und somit ist erst einmal alles Gut. Wenn der Fehler nur so „selten“ (1x pro Tag) auftritt, kann ich vorerst mit leben :slight_smile:

ja auf jeden Fall :wink:
und ich bin immer noch der Meinung, dass der Dongle hier eher das Problem ist, da der viel zu anfällig ist bzgl. der ModBus-Anfragen und die Lösung hätte deutlich besser seitens Huawei umgesetzt werden müssen.

Sehe ich genauso… Der Dongle ist sowas von empfindlich

Frage, wie kann ich die Wallbox (leider Heidelberger :frowning: → gabs kostenlos zur PV) Daten abfragen

  • aktueller Ladestrom
  • gesamt Ladestrom der Wallbox

etc…

Die Schaltung der Wallbox werde ich mittels Shelly einrichten, dann kann ich mir auch Logiken aufbauen.

Schau mal hier:

Für weitere Fragen dann aber bitte einen eigenen Thread aufmachen. :slight_smile:

Danke schön, schau ich mir an :slight_smile:

Noch eine Frage wie ist der Fehler zu deuten - 11331 ist die Schnittstelle Modbus Splitter Instanz Wechselrichter

Schwierig zu sagen. Passiert dies im Zuge der anderen Fehlermeldungen? Dann hat es vermutlich mit dem Timing zu tun… Hatte ich glaube ich auch früher; jetzt nicht mehr.

ja kommt meinst zusammen mit der anderen Meldung.

Kannst du mir einen Tipp geben, wie ich die Verbrauchswerte „summiert“ pro Tag / Woche / Jahr mit ermitteln kann. Im Archiv habe ich diese der Test mittels Ablaufplan

bringt leider keine Ergebnisse :frowning:

Habe versucht die Ergebnisse in einer Variablen String Tabelle mittels Script abzulegen, leider ohne Erfolg. Hier mein Script, das sorgt dafür das Symcon einfriert und die Verbindung verliert :frowning:

<?php

Script zum Monitoring der PV-Leistung

// IDs der Variablen
$verbrauchID = 12345; // Stromverbrauch
$einspeisungID = 12346; // Einspeisung
$pvdachleistungID = 12347; // PV-Dachleistung
$eigenverbrauchID = 12348; // Eigenverbrauch
$strombezugID = 12349; // Strombezug
$batterieladungID = 12350; // Batterieladung
$batterieentladungID = 12351; // Batterieentladung
$auswertungpvID = 12352; // Auswertung PV

// Funktion zur Initialisierung der Tabelle mit Werten seit dem 01.01.2025
function initializeTable() {
    global $verbrauchID, $einspeisungID, $pvdachleistungID, $eigenverbrauchID, $strombezugID, $batterieladungID, $batterieentladungID, $auswertungpvID;

    $startDatum = strtotime("2025-01-01");
    $jetzt = time();

    $tagesSumme = $wochenSumme = $monatsSumme = $jahresSumme = [
        'Stromverbrauch' => 0,
        'Einspeisung' => 0,
        'PV-Dachleistung' => 0,
        'Eigenverbrauch' => 0,
        'Strombezug' => 0,
        'Batterieladung' => 0,
        'Batterieentladung' => 0
    ];

    for ($zeit = $startDatum; $zeit <= $jetzt; $zeit += 60) {
        // Werte auslesen (hier als Beispiel zufällige Werte verwenden)
        $verbrauch = rand(0, 100);
        $einspeisung = rand(0, 100);
        $pvdachleistung = rand(0, 100);
        $eigenverbrauch = rand(0, 100);
        $strombezug = rand(0, 100);
        $batterieladung = rand(0, 100);
        $batterieentladung = rand(-100, 0);

        // Nur positive Werte für Batterieladung und negative Werte für Batterieentladung berücksichtigen
        $batterieladung = $batterieladung > 0 ? $batterieladung : 0;
        $batterieentladung = $batterieentladung < 0 ? $batterieentladung : 0;

        // Summen berechnen
        $tagesSumme['Stromverbrauch'] += $verbrauch;
        $tagesSumme['Einspeisung'] += $einspeisung;
        $tagesSumme['PV-Dachleistung'] += $pvdachleistung;
        $tagesSumme['Eigenverbrauch'] += $eigenverbrauch;
        $tagesSumme['Strombezug'] += $strombezug;
        $tagesSumme['Batterieladung'] += $batterieladung;
        $tagesSumme['Batterieentladung'] += $batterieentladung;

        // Hier können Sie auch Wochen-, Monats- und Jahres-Summen berechnen

        // Tabelle aktualisieren (hier als Beispiel in einer Symcon-Variable speichern)
        $daten = [
            'Zeit' => date("Y-m-d H:i:s", $zeit),
            'TagesSumme' => $tagesSumme,
            'WochenSumme' => $wochenSumme,
            'MonatsSumme' => $monatsSumme,
            'JahresSumme' => $jahresSumme
        ];

        // Daten in der Auswertung PV Variable speichern
        SetValue($auswertungpvID, json_encode($daten));
    }
}

// Funktion zur Aktualisierung der Tabelle
function updateTable() {
    global $verbrauchID, $einspeisungID, $pvdachleistungID, $eigenverbrauchID, $strombezugID, $batterieladungID, $batterieentladungID, $auswertungpvID;

    // Werte auslesen
    $verbrauch = GetValue($verbrauchID);
    $einspeisung = GetValue($einspeisungID);
    $pvdachleistung = GetValue($pvdachleistungID);
    $eigenverbrauch = GetValue($eigenverbrauchID);
    $strombezug = GetValue($strombezugID);
    $batterieladung = GetValue($batterieladungID);
    $batterieentladung = GetValue($batterieentladungID);

    // Nur positive Werte für Batterieladung und negative Werte für Batterieentladung berücksichtigen
    $batterieladung = $batterieladung > 0 ? $batterieladung : 0;
    $batterieentladung = $batterieentladung < 0 ? $batterieentladung : 0;

    // Summen berechnen
    $tagesSumme['Stromverbrauch'] += $verbrauch;
    $tagesSumme['Einspeisung'] += $einspeisung;
    $tagesSumme['PV-Dachleistung'] += $pvdachleistung;
    $tagesSumme['Eigenverbrauch'] += $eigenverbrauch;
    $tagesSumme['Strombezug'] += $strombezug;
    $tagesSumme['Batterieladung'] += $batterieladung;
    $tagesSumme['Batterieentladung'] += $batterieentladung;

    // Hier können Sie auch Wochen-, Monats- und Jahres-Summen berechnen

    // Tabelle aktualisieren (hier als Beispiel in einer Symcon-Variable speichern)
    $zeit = date("Y-m-d H:i:s");
    $daten = [
        'Zeit' => $zeit,
        'TagesSumme' => $tagesSumme,
        'WochenSumme' => $wochenSumme,
        'MonatsSumme' => $monatsSumme,
        'JahresSumme' => $jahresSumme
    ];

    // Daten in der Auswertung PV Variable speichern
    SetValue($auswertungpvID, json_encode($daten));
}

// Initialisierung der Tabelle
initializeTable();

// Timer-Event erstellen, um die Tabelle jede Minute zu aktualisieren
if (!IPS_EventExists($eventID)) {
    $eventID = IPS_CreateEvent(1); // Zyklisches Ereignis
    IPS_SetEventCyclic($eventID, 0, 0, 0, 0, 1, 1); // Jede Minute
    IPS_SetEventScript($eventID, "updateTable();");
    IPS_SetEventActive($eventID, true);
}
?>
1 „Gefällt mir“

Hmm, ich glaube nicht, dass es so funktionieren kann in IPS.
Bin mir nicht sicher, ob du aus einem Ereignis heraus eine Funktion innerhalb eines Scriptes aufrufen kannst. Ich hatte solche Dinge nur innerhalb von Modulen realisiert… aber das wäre hier vermutlich schon ziemlich Overkill.

Und mit Archiv-Daten habe ich bisher nicht gearbeitet. Ev. hat jemand etwas ähnliches schon gebaut? Vielleicht hilft dir aber auch einzelne Berechnungen/Scripte von drapple. Er hat hier mal, bevor wir es mit der neuen Modbus-Implementierung umgesetzt hatten (und damals noch ohne Templates) ein Installationsscript erstellt. Daraus habe ich dann einzelne Berechnungen „übernommen“. (Wichtig: dieses damalige Script bitte nicht ausführen, sonst wird eine neue Struktur erstellt, welches mit deiner aktuellen Huawei-Implementierung Probleme bereiten kann → aber einzelne Funktionen/Berechnungen helfen allenfalls)

Mein Problem ist, dass ich schon einige Werte habe und auch archiviere. Ich hätte jedoch gerne z.B. Ertrag pro Tag, Monat und Jahr. Genauso einige andere Werte dann am besten dargestellt in einer Art Tabelle.

Ich hatte hier im Forum etwas mal gefunden, mir aber nicht gemerkt wo. Hier hatte ein User genau so etwas umgesetzt wenn ich mich noch recht entsinne. Leider bin ich auch mit der Suche nicht mehr darauf gestoßen :-(.

Aber das kannst du doch ganz normal im Standard über das Webfront visualisieren? Jedenfalls bis auf die Tabelle.