Huawei Wechselrichter (Modbus Fragen)

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.

Ich nutze IPSview in den Diagrammen stimmen die verdichteten Werte nicht.