Meine (KNX)-Wetterstation hängt an der Südseite und hat einen „Sonne scheint“ Sensor für Osten, Süden, Westen. Im Sommer meldet der Sensor erst zu spät die Sonne. Jetzt versuche ich, eine Variable für „Sonne scheint Nordost oder Nordwest“ zu setzen, wenn die PV Leistung meines Norddachs für mehr als 10 Minuten 2000W übersteigt. Dies soll nur zwischen 7:00 und 9:00 und 19:00 und 21:00 Uhr passieren.
Ist der Wert unter 2000W oder ausserhalb der Zeitfensters soll der Wert auf False gesetzt werden (Zeitfenster, da tagsüber die 3 Hauptseiten der Wetterstation Sonne melden.
Wie mache ich das am besten?
Über ein Script, das die Variable setzt und durch einen 10 Minuten Timer ausgelöst wird. Und ein zweites Script, das den Timer aktiviert, wenn die 2000W überschritten werden und den Timer auf 0 Sekunden zurück auf 10 Min setzt, falls zwischendurch mal die 2000W unterschritten werden (Wolke).
Funktioniert das so? Auch wenn es etwas umständlich ist? Oder gibt es inzwischen eine einfachere Lösung über Ablauf- oder Logikpläne
ich würde mir eher die Zeit in einer Variablen merken wenn Wert > 2000 ist und einen Timer von X Sekunden setzen. Wenn < 2000 Timer auf 0. Wenn > 2000 aktuelle Zeit mit gespeicherten vergleichen bei > X Minuten flag setzen.
Hi Ralf, damit ich das richtig verstehe, Du würdest also das Skript zyklisch zb alle 15 Sekunden laufen lassen. Und darin dann die Zeitdauer der Überschreitung meiner Schwelle immer selbst berechnen und prüfen. Wenn Dauer überschritten, dann wird Sonne gesetzt, sonst wird Sonne auf False gesetzt. Liegt der Wert unter 2000, setzt du die bisher verstrichene Zeit wieder auf 0 zurück.
Klingt zwar nicht unbedingt elegant, aber einfach. Und ich könnte darüber auch in der selben Logik noch eine Ausschaltverzögerung bauen, damit am Abend das Flag erst dann weggenommen wird, wenn der PV Ertrag kontinuierlich über 5 Minuten unter den 2000W liegt.
Hatte immer Respekt vor zyklischen Skripten wegen Systemlast. Aber wenn ich bei meiner Idee das Skript immer aufrufe, wenn sich der PV Ertragswert ändert, dann wird das Skript vermutlich alle 5 Sekunden ausgeführt, da sich der PV Ertrag doch ständig ändert und ich die Werte per Modbus alle 5 Sekunden bekomme
Was ist denn genau das Ziel, soll wirklich bei der ersten Wolke zurückgesetzt werden, ohne Hysterese und Verzögerung? Wird das in nachgelagerter Logik erledigt?
Ich denke eher an ein Script, das alle xx Minuten die aggregierten Archivdaten ausliest und Mittelwert oder Minimum prüft.
Sowohl bei Ein- als auch bei Ausschalten soll es eine 5 oder 10 minütige Ein- bzw Ausschalthysterese geben.
Die Idee, über das Archiv zu gehen, ist interessant. Hatte ich noch nicht auf dem Schirm.
Lasst mich bitte mal verstehen, welche Ausführhäufigkeit mein System überlasten würde? Wenn ich statt alle 15 Sekunden nur jede Minute das Script ausführe, und dann manuell wie oben vorgeschlagen die Zeitdauer der Überschreitung meiner 2000W berechne, dann sollte das doch kaum Lastbaufs Gesamtsystem bringen?
Auf welchem System läuft dein IPS. Meines läuft auf einer 6 Jahre alten Synology im Docker und es laufen sehr viele Scripte/Instanzen mit Timer und bisher habe ich es nur durch einen Programmfehler meinerseits in die Knie zu zwingen.
Ich würde mir darüber nicht unbedingt jetzt schon gedanken machen solange Du in einem Script bleibst wenn es geht.
Bei mir läuft IPS in einer virtuellen Maschine unter Proxmox auf einem MiniPC. Da laufen noch ein paar andere VMs (HomeAssistant, Windows für die KNX ETS). Bisher alles sehr performant.
Dann probiere ich das mit dem Skript, das ich zwischen 7 und 9 und nochmal 2 Stunden am Abend jede Minute laufen lasse.
Ich habe diese Logik diesen Sommer auf HomeAssistant laufen gehabt. War nicht ganz einfach, den richtigen YAML Code (mit Hilfe von ChatGPT) zu finden. Hat dann aber gut funktioniert. Ich denke, wie viele andere hier ja auch, immer wieder über Komplettumstieg auf HA nach. Aber noch habe ich nach Updates zu viele Probleme mit Integrationen - das letzte Update hat meine SolarEdge Integration zerschossen.
Ich löse das meistens über Ereignisse in Verbindung mit “weiteren Bedingungen”, da ich mit PHP nicht so bewandert bin. Also erst eine boolsche Variable anlegen und dann mit den Ereignissen arbeiten.