FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Xcoder am 20 August 2016, 09:27:18

Titel: sleep im IF Ausführungsteil
Beitrag von: Xcoder am 20 August 2016, 09:27:18
Hallo

Ich habe ein sleep im Ausführungsteil eines IF:

define EIB_0010_N1 notify EIB_0010:on IF ($hms gt "15:30") (\
  set EIB_0100 value 1,\
  sleep 10, IF ([EIB_0012] eq "off") (\
    IF ($hms lt "20:00") ((set EIB_100a,EIB_1028,EIB_1096,EIB_4028 on))\
    ELSE ((set EIB_100a,EIB_4028 on))\
  ) ELSE ((set EIB_102b,EIB_400a on-till 23:00))\
)


fhem ist damit aber nicht glücklich und bringt die Warnung: "WARNING: sleep without additional commands is deprecated and blocks FHEM"

Wie mache ich fhem glücklich? Gemäss FHEM Referenz sollte das doch OK sein wenn nach dem sleep ein Befehl folgt.

Gruss, Xcoder
Titel: Antw:sleep im IF Ausführungsteil
Beitrag von: Damian am 20 August 2016, 11:29:08
Zitat von: Xcoder am 20 August 2016, 09:27:18
Hallo

Ich habe ein sleep im Ausführungsteil eines IF:

define EIB_0010_N1 notify EIB_0010:on IF ($hms gt "15:30") (\
  set EIB_0100 value 1,\
  sleep 10, IF ([EIB_0012] eq "off") (\
    IF ($hms lt "20:00") ((set EIB_100a,EIB_1028,EIB_1096,EIB_4028 on))\
    ELSE ((set EIB_100a,EIB_4028 on))\
  ) ELSE ((set EIB_102b,EIB_400a on-till 23:00))\
)


fhem ist damit aber nicht glücklich und bringt die Warnung: "WARNING: sleep without additional commands is deprecated and blocks FHEM"

Wie mache ich fhem glücklich? Gemäss FHEM Referenz sollte das doch OK sein wenn nach dem sleep ein Befehl folgt.

Gruss, Xcoder

Entweder perl-if mit fhem-Befehl nehmen, oder DOIF mit wait benutzen.

Gruß

Damian
Titel: Antw:sleep im IF Ausführungsteil
Beitrag von: Xcoder am 20 August 2016, 13:18:44
OK. Dann doch DOIF, hatte da bisher immer Mühe bis alle Klammern richtig gesetzt waren. Nun sieht das mal so aus:
define EIB_0010_D1 DOIF ([EIB_0010:?on] and $hms gt "15:30")\
  (set EIB_0100 value 1)\
  (IF ([EIB_0012] eq "off") (\
    IF ($hms lt "20:00") ((set EIB_100a,EIB_1028,EIB_1096,EIB_4028 on))\
    ELSE ((set EIB_100a,EIB_4028 on)) )\
  ELSE ((set EIB_102b,EIB_400a on-till 23:00)) )

attr EIB_0010_D1 alias EIB_0010_Dämmerung ein mit DOIF
attr EIB_0010_D1 wait 0,10


Mal sehen ob das nun für alle möglichen Fälle so tut wie erwarte.

Danke und Gruss, Xcoder
Titel: Antw:sleep im IF Ausführungsteil
Beitrag von: Damian am 20 August 2016, 17:57:00
Zitat von: Xcoder am 20 August 2016, 13:18:44
OK. Dann doch DOIF, hatte da bisher immer Mühe bis alle Klammern richtig gesetzt waren. Nun sieht das mal so aus:
define EIB_0010_D1 DOIF ([EIB_0010:?on] and $hms gt "15:30")\
  (set EIB_0100 value 1)\
  (IF ([EIB_0012] eq "off") (\
    IF ($hms lt "20:00") ((set EIB_100a,EIB_1028,EIB_1096,EIB_4028 on))\
    ELSE ((set EIB_100a,EIB_4028 on)) )\
  ELSE ((set EIB_102b,EIB_400a on-till 23:00)) )

attr EIB_0010_D1 alias EIB_0010_Dämmerung ein mit DOIF
attr EIB_0010_D1 wait 0,10


Mal sehen ob das nun für alle möglichen Fälle so tut wie erwarte.

Danke und Gruss, Xcoder

Beim DOIF gibt es Zeitintervalle um Aktionen zeitlich einzuschränken:

z. B.

DOIF ([EIB_0010:"on"] and [15:30-00:00])...


Gruß

Damian