Mehrfaches Triggern verhindern (WLAN Steckdose, PV Anlage)

Begonnen von FHEMGerd, 26 Juni 2020, 23:05:12

Vorheriges Thema - Nächstes Thema

FHEMGerd

Hallo,

ich fange mal mit der Beschreibung der beabsichtigten Funktion an:
Ich möchte eine Sonoff WLAN Steckdose (mit Tasmota geflasht und per MQTT in FHEM eingebunden) an 2 definierten Wochentagen, z. B. Mo. und Do. für 3 Stunden einschalten. Aber nur, wenn mein eHz Stromzähler anzeigt, dass die PV Anlage mit mehr als 400 Watt ins Stromnetz einspeist. Die Tageszeit ist mir dabei egal. An der Steckdose hängen Ladegeräte, die sollen z. B. meinen Akkuschrauber betriebsbereit halten. Wenn innerhalb der 3 Stunden die Einspeiseleistung unter 400 Watt sinkt, dann nehme ich in Kauf, dass die Steckose eingeschaltet bleibt. Die 3 Stunden sollen also nicht unterbrochen werden.

Ein DOIF (mein erstes) erscheint mir das geeignete Werkzeug, und so siehts aus:
defmod di_pvein DOIF (([eHZWirkleistung:wleistung:avg5] < -400) and [08:00-16:00|Mo Do]) (set S20_62 on-for-timer 10800)

Das hat auch geklappt, es hat gleich um 8 Uhr geschaltet, da hatte ich schon 700 Watt.
Aber dann kamen nachmittags ein paar Wolken, die Leistung fiel unter 400 Watt und stieg dann wieder an, und das Modul hat um 15:36 wieder geschaltet.
Hab ich im Filelog der Steckdose gesehen.

Das Attribut do always ist nicht gesetzt.
Ich bin der Meinung, ein "?" vor der Zeitspanne hilft auch nicht.

Als plumpe Lösung könnte ich, wenn das DOIF getriggert wird, es sich selbst disablen lassen.
Und dann mit einem at z. b. um 18 Uhr wieder scharf schalten.

Aber vielleicht geht es ja eleganter.
Könnte man z. B. den Zeitpunkt des Triggerns + 5min als Endzeitpunkt der Zeitspanne verwenden ?
Dafür reichen aber meine FHEM Kenntnisse noch nicht ...

Danke schon mal und Grüße
Gerd

amenomade

Quick and dirty Lösung:
attr di_pvein cmdpause 32400

(macht bei jeder Statusänderung eine Pause für die nächste 9 Stunden)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Damian

Oder

defmod di_pvein DOIF (([eHZWirkleistung:wleistung:avg5] < -400) and [08:00-16:00|Mo Do]) (set S20_62 on-for-timer 10800) DOELSEIF ([00:00])
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

amenomade

ZitatDOELSEIF ([00:00])
Interessante Art und Weise, ein zeitgesteuertes DOIF um Mitternacht zurückzusetzen. Das notiere ich mir mal ;)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

FHEMGerd

Ich wußte Ihr Cracks habt was auf Lager - ich probiere Eure Vorschläge aus, vielen Dank !  8)

FHEMGerd

Hallo,

also das mit der WLAN Steckdose hat einwandfrei funktioniert und tut es auch immer noch. Jetzt dachte ich, ich hätte was gelernt, und wollte diese Lösung auf ein ähnliches Problem anwenden.
Die Aufgabe: Eine Jalousiegruppe soll bei Sonnenaufgang hochfahren.
Über ein Dummydevice, welches in der Bedingung ausgewertet wird läßt sich dieses ein- bzw. ausschalten.
Außerdem kann zum Sonnenaufgang ein Zeitdelta zwischen -60 min und +120 min in 5 min Schritten über die Weboberfläche eingestellt werden.
Das funktioniert auch.
Auffälligkeit/Problem: Der Befehl zum Hochfahren der Jalousie löst im Abstand von ca. 2 Minuten zweimal aus.
Ich habe das zufällig bemerkt, weil ich eine Jalousie mal manuell angehalten habe, bevor sie ganz oben war.
Ansonsten fällt das gar nicht auf, weil die Jalousiemotoren über die interne Strombegrenzung am oberen Anschlag abschalten und den zweiten Hochfahrbefehl ignorieren.
Ich führe das jetzt mal darauf zurück, dass aktuell die Tage kürzer werden, d. h. der Sonnenaufgang am nächsten Tag ist ca. 2-3 min später, und auf diese Zeit wird erneut getriggert. Ich dachte aber, das DOELSEIF ([00:00]) verhindert genau das  :(

Hier die Raw Definition:

defmod di_tmrEGauf DOIF ( (([TimerJalEG] eq "auf") or ([TimerJalEG] eq "aufab"))  and [([{sunrise_abs("REAL")}]+[$SELF:Zeitdelta]*60 )]) (set Jal_Gruppe_Sun_Auf auf) DOELSEIF ([00:00])
attr di_tmrEGauf group JalousieTimer
attr di_tmrEGauf readingList Zeitdelta
attr di_tmrEGauf room Jalousie
attr di_tmrEGauf setList Zeitdelta:slider,-60,5,120
attr di_tmrEGauf stateFormat {(ReadingsVal("di_tmrEGauf","timer_01_c01",""))}
attr di_tmrEGauf webCmd Zeitdelta


Vielleicht ist Euch Profis das ja auf Anhieb klar, was schiefgeht oder was ich tun sollte.
Ich hab schon an das Attribut cmdpause gedacht.
Aber ich sträube mich irgendwie dagegen, weil ich der Meinung bin, das DOIF müßte nach erstmaliger Ausführung von cmd_1 doch eigentlich bis 0:00 im cmd_2 stehen ...

Grüße, Gerd