Leistungsregelung PV-Leistung

Hallo zusammen

Brauche Hilfe zu einem PHP-Code. Ich möchte einen Heizstab in Bezug auf eine PV-Leistung regeln.

Ab gewisse Werte von bis soll der Heizstab geregelt werden. Dies funktioniert soweit, bis auf das der Heizstab taket. Ich komm nicht darauf, wieso.

Evtl. kann mir jemand helfen. Hier der Code:

<?php

// Hier die IDs anpassen

$id_pv_leistung = 50597; // ID der Variable für die aktuelle PV-Leistung in Watt

$id_heizstab =13094; // ID der Schaltvariable (Boolean) für den Heizstab

// Aktuellen Wert der PV-Leistung auslesen

$pv_leistung = GetValue($id_pv_leistung);

// Aktuellen Zustand des Heizstabs auslesen

$heizstab_an = GetValue($id_heizstab);

// Schaltung logisch auswerten

if ($pv_leistung >= 3200 && $pv_leistung <= 6200) {

// Einschalten, wenn noch nicht an

if (!$heizstab_an) {

    RequestAction($id_heizstab, 1);

    IPS_LogMessage("Heizstab", "Eingeschaltet. PV-Leistung: " . $pv_leistung . " W");

}

}

if ($pv_leistung >= 6201 && $pv_leistung <= 9000) {

// Einschalten, wenn noch nicht an

if (!$heizstab_an) {

    RequestAction($id_heizstab, 3);

    IPS_LogMessage("Heizstab", "Eingeschaltet. PV-Leistung: " . $pv_leistung . " W");

}

}

if ($pv_leistung >= 9201) {

// Einschalten, wenn noch nicht an

if (!$heizstab_an) {

    RequestAction($id_heizstab, 7);

    IPS_LogMessage("Heizstab", "Eingeschaltet. PV-Leistung: " . $pv_leistung . " W");

}

}

elseif ($pv_leistung < 200) {

// Ausschalten, wenn noch an

if ($heizstab_an) {

    RequestAction($id_heizstab, 0);

    IPS_LogMessage("Heizstab", "Ausgeschaltet. PV-Leistung zu gering: " . $pv_leistung . " W");

        }

}

Der gesamte relevante Code wäre interessant.

Wobei wenn ich mir die aktuellen Codeschnippsel ansehe dann hängt ja das „elseif“ irgendwie in der Luft.

Ich sehe z.b. ein Leistungsloch zwischen 9001 und 9200.

Außerdem veränderst du die Leistung nicht (sagt vermutlich der 2. Parameter bei RequestAction() wenn der Heizstab schon eingeschaltet ist und sich die PV_Leistung ändert.

Was das Takten betrifft:
In welchen Abständen taktet das?
Was taktet? Ein/Aus?
Und wie wird das Script aufgerufen ?
Könnte ja auch eine Verschattung sein ?

Servus habre

Danke für Deine schnelle Rückmeldung. Die Taktung ist unterschiedlich. Bei Änderung der aktuellen PV-Leistung wird das Script ausgelöst. Die Werte 0, 1, 3 und 7 werden bei Erreichen der einzelenen von bis Stufen gesendet. Bei Unterschreiten von 200W soll der Wert 0 gesendet werden

Gerne.

  • Mich würde noch immer ein zusammenhängendes Script interesseren
  • Takten bedeutet - ein / aus ?
  • Schreib mal die Zustände ins Log - nicht nur ein/aus sondern auch 1,2,3,4,5,6,7. (Evtl. mit einem GetValueInteger nachsehen was dein Heizstab wirklich für einen Wert hat). Frag das evtl. nach den ganzen IF´s ab und schreibe einen getrennten Status.
  • Und wie gesagt - du schaltest die Leistungsstufen nicht um (nur ein, und evtl. aus)
  • kann es sein dass es einen weiteren Auslöser gibt welcher den Heizstab ebenfalls schaltet?

Ich schreibe in meine Logs auch die ID des Auslösers rein.

Ich habe jetzt keine Lösung direkt zu dem Skript. Aber vor einigen Jahren, nämlich vor dem Energie Optimierer oder dann Energie Manager, hatte ich auch ein eigenes Skript. Aber das habe ich eben durch den Energie Manager ersetzt, der kann das richtig gut.

Egal ob der Heizstab stufenlos geschaltet werden kann oder in mehreren Stufen bzw. elektrischen Phasen, das ist beides machbar.

Nur als Tipp außer der Reihe, falls du mit dem Skript nicht weiter kommst.

Servus Ubari

Den Energieoptimierer habe ich schon, allerdings kommt bei der Auswahl “aktueller verbrauch” folgende Fehlermeldung:

Deshalb wollte ich mir ein eigenes Skript zusammenstellen

Hi

Ich gebe dem Heizstab die Werte, 1 = 3000W, 3 = 6000W und 7 = 9000W vor. Je nachdem wie groß die aktuelle PV-Leistung ist.

Das funktioniert auch über die Log-Datei. Je nach Leistung vom Heizstab sinkt die PV_Einspeiseleistung. Auch wenn die PV_Leistung größer 200W ist, wird der Wert 0 an den Heizstab gesendet und dieser schaltet somit ab. Dann erhöht sich die PV_Einspeiseleistung wieder und das ganze geht von vorne los.

Das Grundprinzip stimmt ja soweit, aber warum wird der Wert 0 gesendet, auch wenn die PV-Einspeiseleistung größer 200W ist.

Die Variable für den aktuellen Verbrauch setzt du nicht bei den Verbrauchern sondern auf der Hauptseite des Energie Managers unter „Überschuss (W)“.

Mache dich vielleicht einfach etwas besser mit dem Energiemanager vertraut, z.B. in der Doku. Wie gesagt, damit geht das perfekt.

Ich bin verwirrt.
Willst du anhand der PV-Leistung die Leistung des Heizstabs ändern oder hast du noch ein externes Script welches die Leistung des Heizstabs ändert ?

Weil dein Script macht das aktuell nicht. (zumindest nicht die Codeschnipsel) - bzw. nur wenn der Heizstab noch nicht eingeschaltet ist.

Könnten wir mal ein komplettes Script mit der kompletten If - then - else Struktur bekommen ?
Ohne kanns keine Hilfe geben und wird Rätselraten bleiben.

Lt. Deiner aktuellen Beschreibung wird ja der Wert 0 immer gesendet, auch wenn die PV-Leistung größer 200W ist. Somit müsste der Heizstab SOFORT wieder abschalten.

Oder stelle uns eine Art Debuglog zur Verfügung.

Hallo habre

Ich dachte, der komplette Code ist oben sichtbar. Hier nochmals ein Versuch:

<?php

// Hier die IDs anpassen

$id_pv_leistung = 50597; // ID der Variable für die aktuelle PV-Leistung (Einspeisung)

$id_heizstab = 13094; // ID der Schaltvariable (Integer für Stufen: 0, 1, 3, 7)

// Aktuelle Werte auslesen

$pv_ueberschuss = GetValue($id_pv_leistung);

$aktueller_wert = GetValue($id_heizstab);

// 1. SCHUTZ VOR ZU SCHNELLER WIEDERHOLUNG (Script-Sperre via IP-Symcon Kontext)

// Verhindert, dass das Skript sich selbst blockiert oder überholt

if (IPS_SemaphoreEnter(„HeizstabRegelung“, 1000)) {

// 2. LEISTUNGS-BERECHNUNG

// Wir rechnen den Verbrauch der aktuellen Stufe temporär dazu

$heizstab_verbrauch = 0;

if ($aktueller_wert == 1) $heizstab_verbrauch = 3000;

if ($aktueller_wert == 3) $heizstab_verbrauch = 6000;

if ($aktueller_wert == 7) $heizstab_verbrauch = 9000;



$reiner_pv_ueberschuss = $pv_ueberschuss + $heizstab_verbrauch;



// 3. STUFEN-LOGIK

$ziel_stufe = 0;



// Hysterese-Schwellen (Verbrauch + 200W Puffer)

if ($reiner_pv_ueberschuss >= 9200) {

    $ziel_stufe = 7;

} elseif ($reiner_pv_ueberschuss >= 6200) {

    $ziel_stufe = 3;

} elseif ($reiner_pv_ueberschuss >= 3200) {

    $ziel_stufe = 1;

} else {

    $ziel_stufe = 0; // Erst wenn der Überschuss ECHTE 3200W unterschreitet, wird abgeschaltet

}

 // 4. SCHALTBEMENT AUSFÜHREN (Nur bei echter Veränderung)

if ($aktueller_wert !== $ziel_stufe) {

    

    // Protokollierung im IP-Symcon Meldungsfenster zur Fehleranalyse

    if ($ziel_stufe > 0) {

        IPS_LogMessage("Heizstab", "Schalte von Stufe " . $aktueller_wert . " auf Stufe " . $ziel_stufe . ". PV-Zähler: " . $pv_ueberschuss . "W / Verfügbar: " . $reiner_pv_ueberschuss . "W");

    } else {

        IPS_LogMessage("Heizstab", "Schalte AUS. PV-Zähler: " . $pv_ueberschuss . "W / Verfügbar: " . $reiner_pv_ueberschuss . "W");

    }



    // Schaltbefehl an die Hardware senden

    RequestAction($id_heizstab, $ziel_stufe);

}



// Semaphore wieder freigeben

IPS_SemaphoreLeave("HeizstabRegelung");

}

danke vorab fürs durchschauen

VG

Wolfgang

Hallo,
bitte den Code normalerweise komplett markieren und dann mit der Funktion „vorformatierter Text“ behandeln.
Dann sollten wir ein Codestück erhalten.
Evtl. könntest du deinen Text drüber nochmals editieren ?
Ansonsten hast du ein „Klammer“-thema. Das geht sich nicht aus.

Es ist ja jetzt ein gänzlich anderes Programm als zuvor - es kommt aber der Funktionalität viel näher → meine Meinung.

Und kann es sein dass sich auch ein Denkfehler eingeschlichen hat ?
Du holst dir den PV_Ueberschuss - das ist das was die PV gerade produziert. (z.b. 4KW)
Dann holst du dir den Aktueller_Wert - sagen wir 1, daraus ergibt sich ein Heizstab_Verbrauch von sagen wir 3kw.
Diese 3kw addierst du zu den 4kw was wiederum den „Reiner_Pv_Ueberschuss“ von 7 kw ergibt.
Und jetzt würdest du daraus resultierend auf Ziel_Stufe 3 stellen (>6200W) -=> das produziert deine PV gar nicht.

Ansonsten schaue bitte dass wir den kompletten Code inkl. aller Klammern bekommen.

Viel Erfolg beim Denken :slight_smile:
Hans
PS: Und wie oben schon erwähnt - diese Sache sollte tatsächlich der Energieoptimierer können.