DOIF verzögert und repeat

Begonnen von mfeske, 18 Oktober 2015, 17:13:11

Vorheriges Thema - Nächstes Thema

mfeske

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
Hardware:
1 x Raspberry Pi Mod. B 512 MB
eq-3 2 x MAX! eTRV Heizungssteller, 1 x MAX! Fensterkontakt, 1 x MAX! Cube - LAN Gateway (ausser Betrieb)
Intertechno 1x ITZ-500, 3x ITT-1500, 9x ITR-1500, 3 x ITDL-1000, 2 x ITL-500
1 x CC1101-USB-Lite 433MHz (CUL433)  V3 1 x CC1101-USB-Lite 868MHz (CUL868)

Amenophis86

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.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

mfeske

Hallo Amenophis86,

danke für den Tipp, was genau soll ich in Klammern setzen ?

Gruß
Micha
Hardware:
1 x Raspberry Pi Mod. B 512 MB
eq-3 2 x MAX! eTRV Heizungssteller, 1 x MAX! Fensterkontakt, 1 x MAX! Cube - LAN Gateway (ausser Betrieb)
Intertechno 1x ITZ-500, 3x ITT-1500, 9x ITR-1500, 3 x ITDL-1000, 2 x ITL-500
1 x CC1101-USB-Lite 433MHz (CUL433)  V3 1 x CC1101-USB-Lite 868MHz (CUL868)

Amenophis86

Wie Hier: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 ;)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

mfeske

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
Hardware:
1 x Raspberry Pi Mod. B 512 MB
eq-3 2 x MAX! eTRV Heizungssteller, 1 x MAX! Fensterkontakt, 1 x MAX! Cube - LAN Gateway (ausser Betrieb)
Intertechno 1x ITZ-500, 3x ITT-1500, 9x ITR-1500, 3 x ITDL-1000, 2 x ITL-500
1 x CC1101-USB-Lite 433MHz (CUL433)  V3 1 x CC1101-USB-Lite 868MHz (CUL868)

Amenophis86

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
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

CoolTux

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?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Zitat von: Amenophis86 am 20 Oktober 2015, 17:25:58
Wie Hier: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>)
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Amenophis86

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 ;)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

CoolTux

#9
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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Amenophis86

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 ;)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

CoolTux

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?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Amenophis86

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
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Amenophis86

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 :)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

CoolTux

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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Damian

#16
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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

mfeske

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
Hardware:
1 x Raspberry Pi Mod. B 512 MB
eq-3 2 x MAX! eTRV Heizungssteller, 1 x MAX! Fensterkontakt, 1 x MAX! Cube - LAN Gateway (ausser Betrieb)
Intertechno 1x ITZ-500, 3x ITT-1500, 9x ITR-1500, 3 x ITDL-1000, 2 x ITL-500
1 x CC1101-USB-Lite 433MHz (CUL433)  V3 1 x CC1101-USB-Lite 868MHz (CUL868)