Aktion ausführen wenn Sensor über längere Zeit Schwellwert überschritten hat

Begonnen von JMC, 11 Juli 2017, 15:58:13

Vorheriges Thema - Nächstes Thema

JMC

Hi,

Ich wage momentan meine ersten Schritte mit FHEM (ich habe bisher - und werde auch weitere parallel - ein Rademacher DuoFern System über den Homepiloten im Einsatz) und habe da eine Frage die ich nicht wirklich klären konnte:

Ich habe mir u.A. die Seiten zum If durchgelesen und auch auf der wiki seite vom notifiy steht ein Beispiel mit sleep für das zeitverzögerte schalten.

Ich möchte aber, dass wenn ein bestimmtes Reading (in dem Fall der Feuchtigkeitssensor) für mehr als 5 Minuten überschritten ist einen Aktor schalten. Das wäre mit dem sleep soweit mit einem Notify auch machbar. Was ich aber nicht rausfinden konnte (und da mein Jeelink auch noch nicht da ist noch nicht testen konnte) ist, was passiert wenn in den 5 Minuten der Wert wieder unterschritten wird? Für mein Verständniss wird dann doch trotzdem geschaltet, oder?

Das wird im Umkehrschluss nämlich interessanter - ausschalten wenn der Wert für 10 Minuten dauerhaft unter dem Schwellwert bleibt, aber falls der Wert doch wieder überschritten wird doch nicht ausschalten.

Bei der bisherigen Lösung habe ich starre Zeiten die aber teilweise sinnlos sind (daher die Temp/Feuchte Sensoren und FHEM) und gerade in dem "dynamischen" Schalten sehe ich den Vorteil.

Das ganze auf bestimmte Uhrzeiten zu beschränken ist ja kein Problem mit dem if. Aber da stehe ich etwas auf dem Schlauch. Vielleicht kann mir jemand auf die Sprünge helfen?

Viele Grüße
Viele Grüße
JMC

kadettilac89

Ich weiß nicht genau was du wann schalten willst ... schau dir mal watchdog + treshold Module an.

https://wiki.fhem.de/wiki/Watchdog

JMC

Vielen Dank! Das sieht genau nach dem aus was ich suche - auf Watchdog wäre ich da nicht gekommen.

Edit:
Was mir beim rumprobieren mit dem Homepiloten aufgefallen ist: der Watchdog funktioniert nur, wenn der Status über FHEM gesetzt worden ist scheinbar. Ich konnte wie folgt ein "nicht funktionieren" des Watchdogs erzeugen:
FHEM stop
Steckdose anschalten (was es ist sollte ja letztendlich egal sein)
FHEM starten
Deive Status ändert sich korrekt auf on (war vorher off)
ein Watchdog funktioniert jetzt nicht - setze ich off von hand, warte kurz, und dann wieder on von hand dann funktioniert der Watchdog
Viele Grüße
JMC

Damian

nimm einfach if und watchdog in einem:

my_threshold DOIF ([mein_sensor]>[mein_schwellenwert])(set bla on)

attr my_threshold wait 600
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

tomspatz

SORRY wenn ich das hier kaper aber das ist genau mein Unverständnis  :(

@Damian
in deinem Beispiel wird der Timer gestartet wenn der schwellenwert drüber ist, ist der drunter wird der Timer wieder gelöscht ?
Das funktioniert doch aber nur wenn nur EINE Bedingung im DOIF existiert ?
Sobald ich das um Bedingung- en erweitere wird der Timer NICHT gelöscht oder ?
In solchem Falle mit DOELSE abfangen ?

my_threshold DOIF ([mein_sensor]>[mein_schwellenwert])(set bla on)
DOELSEIF ([mein_zweiter_sensor]>[mein_schwellenwert])(set blup on)
DOELSE

attr my_threshold wait 600:600


LG
Tom

JMC

So ganz bin ich auch noch nicht dahinter gestiegen, teste das gerade mit Rollo/Licht


define di_TEST_Rollo1 DOIF ([Rollo1] < 21 and ![?00:00-08:45])(set Licht1:FILTER=STATE!=off off)
attr di_TEST_Rollo1 wait 10


bewirkt aber nicht, dass das Licht ausgeschaltet wird, falls es an ist. Ich habe auch schon die einfachere Variante probiert:


define di_TEST_Rollo1 DOIF ([Rollo1] < 21)(set Licht1 off)
attr di_TEST_Rollo1 wait 10


Ich hab auch schon mit den diversen Wiki Einträgen zum DOIF rumgespielt, aber ich finde einfach keinen Grund warum nix passiert?! Gestern hatte ich es einmal, allerdings ist das DOIF nur einmal ausgeführt worden und dann verschwunden...

Edit:
Ich habe es zumindest teilweise hinbekommen - ich habe gedacht, dass das DOIF mit dem Uhrzeit-Teil and ![?00:00-08:45] ausgeführt wird wenn es NACH 08:45 ist und Rollo1 dann kleiner 21 ist (ohne, dass sich nach 08:45 etwas am state ändert) - das ist aber nicht der Fall. Das DOIF funktioniert auch nur wenn eine Änderung da ist...

Hintergrund:
Ich hatte bisher ein selbstgeschriebenes Script laufen, dass die Werte regelmäßig geprüft hat und dann wenn es nach 08:45 war und der Schwellwert unterschritten war die Aktion ausgelöst hat. Das habe ich bisher mit dem DOIF nicht abgeblidet bekommen weil es nur bei einem state-change aktiv wird bei mir
Viele Grüße
JMC

pc1246

Moin JMC
Na verschwunden wird es nicht sein, ausser Du hast nicht save gedrueckt und neu gestartet. Wenn Du allerdings keinen Raum angegeben hast, dann wuerde ich mal bei everything oder unsorted nachsehen, da findest du dann so alles! Und eventuell auch den Grund warum es nicht geht, da mehrmals etwas Aehnliches angelegt wurde!?
Gruss Christoph
HP T610
Onkyo_AVR;Enigma2; SB_Server; SB_Player; HM-USB; PhilipsTV; harmony hub; Jeelink mit PCA301; Somfy; S7-300; LGW; HUE; HM-IP auf Charly; div

JMC

Hi Christoph,

Danke für deinen Hinweis - ich hatte eigentlich nicht neugestartet, bekomme es aber auch nicht reproduziert. Siehe mein edit gerade eben - ich bin da auch etwas einem "Denkfehler" aufgesessen bzgl. DOIF und werde mir jetzt mal at anschauen das ich wohl parallel benutzen muss um das was mein altes Bash script bisher gemacht hat komplett abbilden zu können.

Viele Grüße
Viele Grüße
JMC

pc1246

Hallo JMC
Ich denke, dass DOIF alles kann!Momentan wuerde ich sagen, hast du das Problem, dass Du eventuell falsch denkst. Das DOIF von Dir kommt ja nur in den anderen State, wenn Rollo1 >=21 ist. Die Uhrzeit muss nur erfuellt sein, triggert aber nicht. (BTW: ![?00:00-08:45] ist doch gleich [?08:46-23:59] oder?) Und dementsprechend wird Dein set auch nur bei einem Wechsel von Rollo1 ausgefuehrt. Wenn Du Licht1 auch noch brauchst, dann musst du das mit abfragen!
Gruss Christoph
HP T610
Onkyo_AVR;Enigma2; SB_Server; SB_Player; HM-USB; PhilipsTV; harmony hub; Jeelink mit PCA301; Somfy; S7-300; LGW; HUE; HM-IP auf Charly; div

JMC

Hi Christoph,

klingt interessant - da habe ich dann wohl tatsächlich einen Denkfehler drin. Vielleicht probiere ich es mal weiter aufzudröseln:

Licht1 soll abhängig von Rollo1 geschaltet werden. Wenn Rollo1 unter 20% ist und es nach 08:45 ist dann soll Licht1 ausgeschaltet werden, ansonsten soll Licht1 eingeschaltet werden.

Passiert das ganze NACH 08:45 ist das auch kein problem, der state change von Rollo1 triggert das DOIF.

Jetzt gibt es aber den Fall, dass Rollo1 vor 08:45 auf 0 gefahren wird (Licht1 ist seit dem Vortag an da es beim runterfahren des Rollo1 eingeschaltet worden ist), dann passiert um 08:45 nichts weil das DOIF nicht getriggert wird. Ergo bleibt Licht1 eingeschaltet obwohl Rollo1 bei 0% ist und es z.B. 08:50 ist.

An welcher Stelle müsste ich denn da Licht1 mit abfragen? Mein (bis auf die oben geschriebene Problematik) funktionierende Variante sieht so aus:

define di_TEST_Rollo1 DOIF ([Rollo1] <= 20 and ![?00:00-08:45])(set Licht1:FILTER=STATE!=off off) DOELSEIF ([Rollo1] > 20)(set Licht1:FILTER=STATE!=on on)
attr di_TEST_Rollo1 wait 65:65


Viele Grüße
Peter
Viele Grüße
JMC

pc1246

Hallo Peter
Momentan sehe ich das so, dass Du eigentlich die Unterdrueckung des Uhrzeittriggers wegnehmen koenntest. Dann wuerde eine Aenderung der Uhrzeit das Schalten bewirken, sofern Rollo1 kleiner 20 ist. Interessant finde ich , dass du das Licht immer an machst, sobald das Rollo groesser 20 ist!
Gruss Christoph
HP T610
Onkyo_AVR;Enigma2; SB_Server; SB_Player; HM-USB; PhilipsTV; harmony hub; Jeelink mit PCA301; Somfy; S7-300; LGW; HUE; HM-IP auf Charly; div

JMC

Hallo Christoph,

Das liegt daran, dass es kein Licht im eigentlichen Sinne ist. An dem Aktor ist ein Licht angeschlossen das auf Helligkeit reagiert - das soll es aber erst ausserhalb der Zeiten machen.

Wenn ich die Unterdrückung der Uhrzeit rausnehme dann würde ja auch eine Änderung z.B. um 07:30 ja bewirken, dass sofort das Licht ausgeschaltet wird. Das soll ja nicht passieren, sondern frühstens um 08:45?

Viele Grüße
Peter
Viele Grüße
JMC

pc1246

Hallo Peter
Nein, durch das Fragezeichen schaltest du den Trigger aus. Die Bedingung bleibt, so oder so!
Gruss Christoph

DOIF ([Rollo1] <= 20 and ![00:00-08:45])(set Licht1:FILTER=STATE!=off off)
DOELSEIF ([Rollo1] > 20)(set Licht1:FILTER=STATE!=on on)
HP T610
Onkyo_AVR;Enigma2; SB_Server; SB_Player; HM-USB; PhilipsTV; harmony hub; Jeelink mit PCA301; Somfy; S7-300; LGW; HUE; HM-IP auf Charly; div

JMC

Hi Christoph,

Schande über mein Haupt...
[?<Auslöserangabe>] Auslöser, die mit Fragezeichen beginnen lösen nicht aus, sie werden nur abgefragt

Ich habe das ? rausgenommen - aber geschaltet wird trotzdem nicht anhand der Uhrzeit ohne dass das Rollo bewegt wird.

Viele Grüße
Peter
Viele Grüße
JMC

pc1246

Hallo Peter
Wie lange hast du denn gewartet? Und wo war dein DOIF gerade? Mach doch mal ein LIST!
Gruss Christoph
HP T610
Onkyo_AVR;Enigma2; SB_Server; SB_Player; HM-USB; PhilipsTV; harmony hub; Jeelink mit PCA301; Somfy; S7-300; LGW; HUE; HM-IP auf Charly; div