Hallo zusammen,
ich möchte mir eine kleine Erinnerung für eine offene Tür bauen. Ich glaube so etwas ähnliches im Wiki / commandref / Forum gelesen zu haben, finde es aber nicht mehr.
Ich möchte das eine Erinnerung erfolgt, wenn die Tür länger als fünf Minuten offen ist und die Aussentemperatur kleiner als die Innentemperatur ist. Es soll nach fünf Minuten ein Dummy auf on gesetzt werden, eine Akustische Ausgabe erfolgen und die Heizung auf absent gesetzt werden. Die Akkustische Ausgabe soll alle fünf Minuten max. aber dreimal wiederholt werden. Wenn die Tür geschlossen wird, soll der Warnung wieder abgeschaltet werden.
Folgendes DOIF habe ich dafür schon geschrieben:
define Warnung_Gartentuer_doif DOIF ([TFA07:temperature] > [TFA08:temperature] and [Kontakt_Garten] eq "opened") (set Warnung_Gartentuer on, set gong_MP3 playTone010, {EG_Heizung_absent}) DOELSE (set Warnung_Gartentuer off)
attr Warnung_Gartentuer_doif cmdpause 300
attr Warnung_Gartentuer_doif repeatsame 3
attr Warnung_Gartentuer_doif room Wohnzimmer
Warnung_Gartentuer wird korrekt gesetzt.
Der passende Dummy dazu ist:
define Warnung_Gartentuer dummy
attr Warnung_Gartentuer devStateIcon off:Wecker.Aus on:Wecker.Immer:FS20.off
attr Warnung_Gartentuer room Wohnzimmer
Die Tonausgabe erfolgt jedoch nicht und das setzen von EG_Heizung_absent jedoch nicht.
Was mich auch wundert ist, das in den Logs folgendes auftaucht:
2015-10-18 16:57:15 dummy Gartentuer offen
2015-10-18 16:57:15 dummy Gartentuer offen
2015-10-18 16:57:15 dummy Gartentuer offen
2015-10-18 16:57:15 dummy Gartentuer offen
Falls dein Problem noch besteht, würde ich folgendes machen:
Setz mal die Befehle beim DOIF in eigene Klammern, weil du sonst jedes Mal alle Befehle ausführst. So kannst du zB festlegen, dass du nur den GONG immer wieder aktivierst, aber nicht jedes Mal neu den Dummy veränderst und EG_Heizung_absent startest.
Da der Dummy wohl gesetzt wird, vermute ich, dass es eher am Gong und der Funktion liegt, dass diese nicht gehen. Du könntest zum testen mal den Dummy immer wieder zwischen drin auf off setzten und schauen, ob das DOIF ihn 3x mal auf on setzt. Dann kannste sicher sein, dass das DOIF richtig schaltet und es eher an der Funktion und dem Gong liegt. Hilfreich wäre auch mal die Funktion zu posten um zu schauen, ob diese vielleicht einen Fehler besitzt.
Hallo Amenophis86,
danke für den Tipp, was genau soll ich in Klammern setzen ?
Gruß
Micha
Wie Hier:http://fhem.de/commandref_DE.html#DOIF (http://fhem.de/commandref_DE.html#DOIF) unter Verzögerung erklärt, kannst du jeden Befehl in eine eigene Klammer setzen. Hat den Vorteil, dass du bei wait, repeatsame etc bestimmte Befehle ansprechen kannst. Bei dir also:
Zitat von: mfeske am 18 Oktober 2015, 17:13:11
define Warnung_Gartentuer_doif DOIF ([TFA07:temperature] > [TFA08:temperature] and [Kontakt_Garten] eq "opened")
(set Warnung_Gartentuer on)
(set gong_MP3 playTone010)
({EG_Heizung_absent})
DOELSE
(set Warnung_Gartentuer off)
jetzt musst du nur noch die Attribute auf den Befehl anpassen ;)
Hallo Amenophis86,
ich scheine da noch was falsch zu machen :-( Ich habe das setzen der Heizung erstmal rausgenommen um es mir einfacher zu machen, aber die Gon Ansage wird partou nicht dreinmal nach fünf Sekunden obwohl ich cmdpause und repeatsame einsetze.
Internals:
DEF ([TFA07:temperature] > [TFA08:temperature] and [Kontakt_Garten] eq "opened") (set Warnung_Gartentuer on) (set gong_MP3 playTone 010) DOELSE (set Warnung_Gartentuer off, set gong_MP3 playTone 011)
NAME Warnung_Gartentuer_doif
NR 384
NTFY_ORDER 50-Warnung_Gartentuer_doif
STATE cmd_1
TYPE DOIF
Readings:
2015-10-25 17:57:09 Device TFA08
2015-10-25 17:55:24 cmd_count 1
2015-10-25 17:55:24 cmd_event Kontakt_Garten
2015-10-25 17:55:24 cmd_nr 1
2015-10-25 17:55:24 cmd_seqnr 2
2015-10-25 17:55:24 e_Kontakt_Garten_STATE opened
2015-10-25 17:57:06 e_TFA07_temperature 22.5
2015-10-25 17:57:09 e_TFA08_temperature 9.7
2015-10-25 17:55:24 state cmd_1
Condition:
0 ReadingValDoIf('TFA07','temperature','') > ReadingValDoIf('TFA08','temperature','') and InternalDoIf('Kontakt_Garten','STATE','') eq "opened"
Devices:
0 TFA07 TFA08 Kontakt_Garten
all TFA07 TFA08 Kontakt_Garten
Do:
0:
0 set Warnung_Gartentuer on
1 set gong_MP3 playTone 010
1:
0 set Warnung_Gartentuer off, set gong_MP3 playTone 011
Helper:
globalinit 1
last_timer 0
sleeptimer -1
Internals:
0 Kontakt_Garten:STATE
all Kontakt_Garten:STATE
Itimer:
Readings:
0 TFA07:temperature TFA08:temperature
all TFA07:temperature TFA08:temperature
State:
Timerfunc:
Trigger:
Attributes:
cmdpause 0:5:0
repeatsame 1:3:1
room Wohnzimmer
Gruß
Micha
Da ich mit cmdpause noch nicht wirklich gearbeitet habe, sehe ich im Moment keinen Fehler und hätte nur einen Vorschlag, was du ändern könntest als test. Versuch mal anstelle des cmdpause mit wait zu arbeiten. Somit also attr Warnung_Gartentuer_doif wait 0:5:0 und das attr cmdpause mal löschen. Mal sehen, was dann passiert.
Übrigens, damit du nicht immer raus rennen musst, hoffe ich, dass du das "trigger" Kommando kennst ;)
Zitat
trigger
trigger <devspec> <event>
Generiert das Ereignis <event>, was z.Bsp. ein notify anstoßen kann, oder den FileLog zum protokollieren dieser Zeile bewegen kann.
Siehe den Abschnitt über Geräte-Spezifikation für Details der <devspec>.
Beispiel:
trigger btn3 on
Zitat von: Amenophis86 am 26 Oktober 2015, 10:23:26
Da ich mit cmdpause noch nicht wirklich gearbeitet habe, sehe ich im Moment keinen Fehler und hätte nur einen Vorschlag, was du ändern könntest als test. Versuch mal anstelle des cmdpause mit wait zu arbeiten. Somit also attr Warnung_Gartentuer_doif wait 0:5:0 und das attr cmdpause mal löschen. Mal sehen, was dann passiert.
Übrigens, damit du nicht immer raus rennen musst, hoffe ich, dass du das "trigger" Kommando kennst ;)
Welches meines Wissens bei DOIF nicht funktioniert. Oder ist mein Kenntnisstand diesbezüglich veraltet?
Zitat von: Amenophis86 am 20 Oktober 2015, 17:25:58
Wie Hier:http://fhem.de/commandref_DE.html#DOIF (http://fhem.de/commandref_DE.html#DOIF) unter Verzögerung erklärt, kannst du jeden Befehl in eine eigene Klammer setzen. Hat den Vorteil, dass du bei wait, repeatsame etc bestimmte Befehle ansprechen kannst. Bei dir also:
jetzt musst du nur noch die Attribute auf den Befehl anpassen ;)
Funktioniert das wirklich bei Dir?? In der Commandref steht folgendes
Syntax:
define <name> DOIF (<Bedingung>) (<Befehle>) DOELSEIF (<Bedingung>) (<Befehle>) DOELSEIF ... DOELSE (<Befehle>)
Zitat von: CoolTux am 26 Oktober 2015, 11:59:38
Welches meines Wissens bei DOIF nicht funktioniert. Oder ist mein Kenntnisstand diesbezüglich veraltet?
Er soll ja nicht das DOIF triggern, sondern die Gartentür.
Zitat von: CoolTux am 26 Oktober 2015, 12:01:54
Funktioniert das wirklich bei Dir?? In der Commandref steht folgendes
Syntax:
define <name> DOIF (<Bedingung>) (<Befehle>) DOELSEIF (<Bedingung>) (<Befehle>) DOELSEIF ... DOELSE (<Befehle>)
Ja, schau mal weiter unten in der Commandref bei unter verzögern ;)
Zitat von: Amenophis86 am 26 Oktober 2015, 12:12:36
Er soll ja nicht das DOIF triggern, sondern die Gartentür.
Nicht ganz. Das DOIF soll schon triggern. Es soll nämlich die Statusveränderung der Gartentür triggern
Zitat
Ja, schau mal weiter unten in der Commandref bei unter verzögern
Gefunden
Beispieldefinition bei mehreren DO-Blöcken mit mehreren Sequenzen:
DOIF (Bedingung1)
(set ...) ## erster Befehl der ersten Sequenz soll um eine Sekunde verzögert werden
(set ...) ## zweiter Befehl der ersten Sequenz soll um 2 Sekunden verzögert werden
DOELSE (Bedingung2)
(set ...) ## erster Befehl der zweiten Sequenz soll um 3 Sekunden verzögert werden
(set ...) ## zweiter Befehl der zweiten Sequenz soll um 0,5 Sekunden verzögert werden
attr <DOIF-modul> wait 1,2:3,0.5
Kannte ich noch nicht. Danke Dir.
Zitat von: CoolTux am 26 Oktober 2015, 12:48:11
Nicht ganz. Das DOIF soll schon triggern. Es soll nämlich die Statusveränderung der Gartentür triggern
Jetzt werden wir aber kleinlich :D natürlich soll es die Gartentür triggern, dass die das Doif triggert, dass wir sehen, ob es geht ;)
Wie auch immer man das Kind beim Namen nennt. Jedenfalls scheint es nicht zu gehen. Habe es mal bei mir getestet. Das triggert gar nichts.
Beim Notify geht es hingegen ohne Probleme. Wie genau machst Du das?
trigger gartentuer open
und Dein DOIF springt dann an?
Habe es nicht nachgebaut, aber von meinem Verständnis müsste er folgendes eingeben:
trigger Kontakt_Garten opened
da er es mit [Kontakt_Garten] eq "opened" im DOIF hat.
Ob er wirklich so funktioniert kann ich nicht sagen, da ich nicht weiß, was sich hinter Kontakt_Garten befindet. Und bevor er jedes Mal in den Garten rennt und die Tür auf macht, kann er es ja erst so versuchen. Wenn er es nicht mit trigger triggern kann, dann muss er halt doch in den Garten rennen :D
Naja nachgebaut habe ich es auch nicht. Aber ich habe ein paar DOIF's und habe einfach mal ein "trigger" auf eines der uberwachten Devices gemacht. NICHTS. Absolute Stille.
Daher dachte ich Du schaust malbei Deinen DOIF's und machst ein "trigger" auf eines der Geräte welche bei Dir im DOIF drin stehen.
Wäre interessant zu wissen ob es so, wie Du erst ganz sicher sagtest und nun eventuell denkst, reagiert.
Faszinierend. Du hast vollkommen recht. Das DOIF erkennt zwar den Trigger, schaltet aber nicht. Ist mir wahrscheinlich nicht aufgefallen, weil ich seit dem Umbau von notify und at auf DOIF den Triggerbefehl nicht mehr genutzt habe. Dachte, dass dieser auch da funktioniert zum testen.
sorry @mfeske, dann musst du wohl doch rausgehen und die Tür öffnen. Oder du machst es dir einfacher und ersetzt zum Testen in deinem DOIF die Gartentür mit einem dummy und schaltest diesen. Dann kannste wieder drin bleiben :)
Gut. Halten wir also für die Nachwelt fest, es ist immer noch so das der Befehl "trigger" nur bei Notifys geht aber leider nicht bei DOIF. Schade!
Grüße
Zitat von: CoolTux am 26 Oktober 2015, 16:12:13
Gut. Halten wir also für die Nachwelt fest, es ist immer noch so das der Befehl "trigger" nur bei Notifys geht aber leider nicht bei DOIF. Schade!
Grüße
Das stimmt so nicht.
DOIF reagiert auf Trigger genau so wie Notify, allerdings wird der Status oder das Reading des Devices ausgewertet.
Bei Event-Abfragen der Art [<DEVICE>:?<regexp>] wird wie auch beim Notify das Event des Triggers ausgewertet.
Gruß
Damian
Hallo zusammen,
ich glaube der Sache etwas näher gekommen zu sein. So ganz funktioniert es aber noch nicht. Ich habe die Zeit testweise auf 5 Sekunden gestellt, später sollen es 300 werden und es soll noch eine pushmeldung dazu kommen. In der Logs ist aber erkennbar das die Widerholung nicht alle 5 Sekunden stattfindet, wobei ich schon froh bin, das das richtige (die Ansage) dreimal wiederholt wird. Ich hoffe nicht, das durch einen Fehler von mir auch noch der Warnstatus dreimal gesetzt wird.
log:
2015.10.31 16:22:49 3: CUL_HM set gong statusRequest
2015.10.31 16:23:35 3: CUL_HM set Heizung_Bad_Clima controlManu off
2015.10.31 16:23:35 3: CUL_HM set Heizung_Bad_klein_Clima controlManu off
2015.10.31 16:23:35 3: CUL_HM set Heizung_Arbeitszimmer_Clima controlManu off
2015.10.31 16:23:35 3: CUL_HM set Heizung_Schlafzimmer_Clima controlManu off
2015.10.31 16:23:36 3: CUL_HM set Heizung_Kueche_Clima controlManu off
2015.10.31 16:23:36 3: CUL_HM set Heizung_Flur_Clima controlManu off
2015.10.31 16:23:36 0: data is {"deviceName": "Kontakt_Garten","changes":"onoff:1<|>state:opened<|>RSSI:-64.5","type":"notify","source":"gcmsend_fhem","vibrate":"true","playSound":"true"}
2015.10.31 16:23:41 3: CUL_HM set gong_MP3 playTone 010
2015.10.31 16:23:49 3: CUL_HM set gong_MP3 playTone 010
2015.10.31 16:24:45 3: CUL_HM set gong_MP3 playTone 010
2015.10.31 16:25:45 3: CUL_HM set Heizung_Bad_Clima controlMode auto
2015.10.31 16:25:45 3: CUL_HM set Heizung_Bad_klein_Clima controlMode auto
2015.10.31 16:25:45 3: CUL_HM set Heizung_Arbeitszimmer_Clima controlMode auto
2015.10.31 16:25:45 3: CUL_HM set Heizung_Schlafzimmer_Clima controlMode auto
2015.10.31 16:25:46 3: CUL_HM set Heizung_Kueche_Clima controlMode auto
2015.10.31 16:25:46 3: CUL_HM set Heizung_Flur_Clima controlMode auto
2015.10.31 16:25:46 3: CUL_HM set gong_MP3 playTone 011
2015.10.31 16:25:46 0: data is {"deviceName": "Kontakt_Garten","changes":"onoff:0<|>state:closed<|>RSSI:-82.5","type":"notify","source":"gcmsend_fhem","vibrate":"true","playSound":"true"}
list doif
Internals:
DEF ([TFA07:temperature] > [TFA08:temperature] and [Kontakt_Garten] eq "opened") (set Warnung_Gartentuer on) (set gong_MP3 playTone 010) DOELSE (set Warnung_Gartentuer off, set gong_MP3 playTone 011)
NAME Warnung_Gartentuer_doif
NR 385
NTFY_ORDER 50-Warnung_Gartentuer_doif
STATE cmd_2
TYPE DOIF
Readings:
2015-10-31 16:16:21 Device Kontakt_Garten
2015-10-31 16:16:21 cmd_event Kontakt_Garten
2015-10-31 16:16:21 cmd_nr 2
2015-10-31 16:16:21 e_Kontakt_Garten_STATE closed
2015-10-31 16:16:09 e_TFA07_temperature 21.5
2015-10-31 16:15:36 e_TFA08_temperature 12.9
2015-10-31 16:16:21 state cmd_2
2015-10-31 16:16:14 wait_timer no timer
Condition:
0 ReadingValDoIf('TFA07','temperature','') > ReadingValDoIf('TFA08','temperature','') and InternalDoIf('Kontakt_Garten','STATE','') eq "opened"
Devices:
0 TFA07 TFA08 Kontakt_Garten
all TFA07 TFA08 Kontakt_Garten
Do:
0:
0 set Warnung_Gartentuer on
1 set gong_MP3 playTone 010
1:
0 set Warnung_Gartentuer off, set gong_MP3 playTone 011
Helper:
globalinit 1
last_timer 0
sleepdevice TFA07
sleepsubtimer -1
sleeptimer -1
Internals:
0 Kontakt_Garten:STATE
all Kontakt_Garten:STATE
Itimer:
Readings:
0 TFA07:temperature TFA08:temperature
all TFA07:temperature TFA08:temperature
State:
Trigger:
Attributes:
repeatsame 3:0
room Wohnzimmer
wait 0,5:0
Gruß
Micha