FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: andies am 12 September 2017, 08:38:15

Titel: DOIF-Syntax Nachfrage
Beitrag von: andies am 12 September 2017, 08:38:15
Darf ich die Profis hier im Forum etwas fragen? Ich verstehe nicht, warum die nachfolgende Syntax nicht funktioniert:
defmod <devicename> DOIF ([07:00|AT] or [{sunset("HORIZON=-0.8",0,"07:10","10:00")}]) (set <device> on)

Werden bei sunset nicht Zeiten ausgegeben, die man direkt in DOIF nutzen kann?

PS Fehlermeldung
timer_01_c01 error: Wrong timespec 0.833")}: either HH:MM:SS or {perlcode}
Titel: Antw:DOIF-Syntax Nachfrage
Beitrag von: CoolTux am 12 September 2017, 08:43:25
Meine Antwort war nach genauem hinschauen in den Treffern falsch. So sollte es eigentlich gehen wie Du geschrieben hast. Aber!


defmod <devicename> DOIF ([07:00|AT] or [{sunset("HORIZON=-0.8",0,"07:10","10:00")}]) (set <device> on)


Eventuell kommt er mit den 0.8 nicht klar und es geht nur ganze Werte
Titel: Antw:DOIF-Syntax Nachfrage
Beitrag von: kumue am 12 September 2017, 08:47:35
wenn ich mir aber ein Beispiel aus dem Wiki anschaue, ist die sunset-Syntax von andies aber korrekt...oder der wiki-Eintrag ist falsch

# Gleiches Beispiel mit Eingabe der Höhe über Horizont als 1. Parameter:
{sunset("HORIZON=-6.0",0,"17:00","22:00")}
Ergebnis (als Beispiel):   19:59:22

Titel: Antw:DOIF-Syntax Nachfrage
Beitrag von: CoolTux am 12 September 2017, 08:49:31
Habe mich da mal korrigiert.
Titel: Antw:DOIF-Syntax Nachfrage
Beitrag von: andies am 12 September 2017, 09:02:30
Also, ich bin mal ganz ausführlich. Das habe ich als Code
defmod Anwesenheitsgeraet DOIF (Value("Anwesenheit") eq "0") () DOELSEIF ([{sunset("HORIZON=-0.8",0,"15:33","21:00")}] or [07:10|AT] or [08:45|WE]) (set Sonoff on) DOELSEIF ([07:45|AT] or [09:05|WE] or [21:43]) (set Sonoff off)
und ein List gibt mir
Internals:
   CFGFN
   DEF        (Value("Anwesenheit") eq "0") () DOELSEIF ([{sunset("HORIZON=-0.8",0,"15:33","21:00")}] or [07:10|AT] or [08:45|WE]) (set Sonoff on) DOELSEIF ([07:45|AT] or [09:05|WE] or [21:43]) (set Sonoff off)
   NAME       Anwesenheit
   NR         249
   NTFY_ORDER 50-Anwesenheit
   STATE      initialized
   TYPE       DOIF
   READINGS:
     2017-09-12 08:59:37   cmd             0
     2017-09-11 21:43:00   cmd_event       timer_7
     2017-09-11 21:43:00   cmd_nr          2
     2017-09-12 08:59:37   state           initialized
     2017-09-12 08:41:45   timer_01_c01    13.09.2017 07:10:00|AT
     2017-09-12 08:59:37   timer_01_c02    12.09.2017 19:29:37
     2017-09-12 08:45:00   timer_02_c01    13.09.2017 08:45:00|WE
     2017-09-12 08:59:37   timer_02_c02    13.09.2017 07:10:00|AT
     2017-09-12 08:41:45   timer_03_c01    12.09.2017 19:29:37
     2017-09-12 08:59:37   timer_03_c02    13.09.2017 08:45:00|WE
     2017-09-12 06:50:43   timer_04_c01    error: Wrong timespec 0.833")}: either HH:MM:SS or {perlcode}
     2017-09-12 08:41:45   timer_04_c02    13.09.2017 07:45:00|AT
     2017-09-12 08:59:37   timer_04_c03    13.09.2017 07:45:00|AT
     2017-09-12 08:41:45   timer_05_c02    12.09.2017 09:05:00|WE
     2017-09-12 08:59:37   timer_05_c03    12.09.2017 09:05:00|WE
     2017-09-12 08:41:45   timer_06_c02    12.09.2017 21:43:00
     2017-09-12 08:59:37   timer_06_c03    12.09.2017 21:43:00
     2017-09-12 06:50:43   timer_07_c02    12.09.2017 21:43:00
   condition:
     0          Value("Anwesenheit") eq "0"
     1          DOIF_time_once($hash,0,$wday) or DOIF_time_once($hash,1,$wday,"AT") or DOIF_time_once($hash,2,$wday,"WE")
     2          DOIF_time_once($hash,3,$wday,"AT") or DOIF_time_once($hash,4,$wday,"WE") or DOIF_time_once($hash,5,$wday)
   days:
     1          AT
     2          WE
     3          AT
     4          WE
   devices:
   do:
     0:
       0
     1:
       0          set Sonoff on
     2:
       0          set Sonoff off
     3:
   helper:
     globalinit 1
     last_timer 6
     sleeptimer -1
   itimer:
   localtime:
     0          1505237377
     1          1505279400
     2          1505285100
     3          1505281500
     4          1505199900
     5          1505245380
   realtime:
     0          19:29:37
     1          07:10:00
     2          08:45:00
     3          07:45:00
     4          09:05:00
     5          21:43:00
   regexp:
     all:
   state:
     STATE:
   time:
     0          {sunset("HORIZON=-0.8",0,"15:33","21:00")}
     1          07:10:00
     2          08:45:00
     3          07:45:00
     4          09:05:00
     5          21:43:00
   timeCond:
     0          1
     1          1
     2          1
     3          2
     4          2
     5          2
   timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
   timers:
     1           0  1  2
     2           3  4  5
   triggertime:
     1505199900:
       localtime  1505199900
       hash:
     1505237377:
       localtime  1505237377
       hash:
     1505245380:
       localtime  1505245380
       hash:
     1505279400:
       localtime  1505279400
       hash:
     1505281500:
       localtime  1505281500
       hash:
     1505285100:
       localtime  1505285100
       hash:

Da ist doch was falsch, oder irre ich mich?
Titel: Antw:DOIF-Syntax Nachfrage
Beitrag von: kumue am 12 September 2017, 09:25:03
hab mal deine syntax bei mir eingegeben und keine Fehlermeldung und auch weniger Timer..
Internals:
   CFGFN
   DEF        (Value("Anwesenheit") eq "0") () DOELSEIF ([{sunset("HORIZON=-0.8",0,"15:33","21:00")}] or [07:10|AT] or [08:45|WE]) (set Sonoff on) DOELSEIF ([07:45|AT] or [09:05|WE] or [21:43]) (set Sonoff off)
   NAME       Anwesenheitsgeraet
   NR         10840
   NTFY_ORDER 50-Anwesenheitsgeraet
   STATE      initialized
   TYPE       DOIF
   Helper:
     DBLOG:
       cmd:
         myDbLog:
           TIME       1505200321.33015
           VALUE      0
       state:
         myDbLog:
           TIME       1505200321.33015
           VALUE      initialized
   READINGS:
     2017-09-12 09:12:01   cmd             0
     2017-09-12 09:12:01   state           initialized
     2017-09-12 09:12:01   timer_01_c02    12.09.2017 19:37:30
     2017-09-12 09:12:01   timer_02_c02    13.09.2017 07:10:00|AT
     2017-09-12 09:12:01   timer_03_c02    13.09.2017 08:45:00|WE
     2017-09-12 09:12:01   timer_04_c03    13.09.2017 07:45:00|AT
     2017-09-12 09:12:01   timer_05_c03    13.09.2017 09:05:00|WE
     2017-09-12 09:12:01   timer_06_c03    12.09.2017 21:43:00
   condition:
     0          Value("Anwesenheit") eq "0"
     1          DOIF_time_once($hash,0,$wday) or DOIF_time_once($hash,1,$wday,"AT") or DOIF_time_once($hash,2,$wday,"WE")
     2          DOIF_time_once($hash,3,$wday,"AT") or DOIF_time_once($hash,4,$wday,"WE") or DOIF_time_once($hash,5,$wday)
   days:
     1          AT
     2          WE
     3          AT
     4          WE
   devices:
   do:
     0:
       0
     1:
       0          set Sonoff on
     2:
       0          set Sonoff off
     3:
   helper:
     globalinit 1
     last_timer 6
     sleeptimer -1
   itimer:
   localtime:
     0          1505237850
     1          1505279400
     2          1505285100
     3          1505281500
     4          1505286300
     5          1505245380
   realtime:
     0          19:37:30
     1          07:10:00
     2          08:45:00
     3          07:45:00
     4          09:05:00
     5          21:43:00
   regexp:
     all:
   state:
     STATE:
   time:
     0          {sunset("HORIZON=-0.8",0,"15:33","21:00")}
     1          07:10:00
     2          08:45:00
     3          07:45:00
     4          09:05:00
     5          21:43:00
   timeCond:
     0          1
     1          1
     2          1
     3          2
     4          2
     5          2
   timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
   timers:
     1           0  1  2
     2           3  4  5
   triggertime:
     1505237850:
       localtime  1505237850
       hash:
     1505245380:
       localtime  1505245380
       hash:
     1505279400:
       localtime  1505279400
       hash:
     1505281500:
       localtime  1505281500
       hash:
     1505285100:
       localtime  1505285100
       hash:
     1505286300:
       localtime  1505286300
       hash:
Attributes:
   DbLogExclude .*
Titel: Antw:DOIF-Syntax Nachfrage
Beitrag von: andies am 12 September 2017, 09:27:11
Ich vermute jetzt, dass das ein Fehler aus einer früheren (falschen) Eingabe ist. Ich werde das mal am "lebenden" Objekt testen...


Gesendet von iPhone mit Tapatalk Pro
Titel: Antw:DOIF-Syntax Nachfrage
Beitrag von: andies am 12 September 2017, 09:27:43
Ich vermute jetzt, dass das ein Fehler aus einer früheren (falschen) Eingabe ist. Ich werde das mal am "lebenden" Objekt testen...


Gesendet von iPhone mit Tapatalk Pro
Titel: Antw:DOIF-Syntax Nachfrage
Beitrag von: Damian am 12 September 2017, 10:22:20
(Value("Anwesenheit") eq "0") allein in der Bedingung ist nicht sinnvoll, weil kein Trigger da ist. Dieser Zweig wird also nie getriggert und damit nie ausgewertet werden.
Titel: Antw:DOIF-Syntax Nachfrage
Beitrag von: andies am 12 September 2017, 10:58:15
Zitat von: Damian am 12 September 2017, 10:22:20
(Value("Anwesenheit") eq "0") allein in der Bedingung ist nicht sinnvoll, weil kein Trigger da ist.
Ah, danke. Ich verstehe. Ich wollte das "übersichtlich" programmieren, aber so geht das wohl nicht. D.h. ich muss die Zeiten in die Bedingung hineintun, richtig? Dann ist das eine etwas verzweigte Bedingung mit and und or, aber geht wohl nicht anders.
Titel: Antw:DOIF-Syntax Nachfrage
Beitrag von: Otto123 am 12 September 2017, 12:24:02
Hi,

aber ([Anwesenheit] eq "0") wäre vom Sinn her das Gleiche und wird getriggert wenn Anwesenheit von irgendetwas nach "0" wechselt. Ist es nicht sogar genau das was Du willst?

Die FHEM Funktion Value("Anwesenheit") entspricht doch im "set magic" -> [Anwesenheit:state] und im DOIF -> [Anwesenheit]

-> https://fhem.de/commandref_DE.html#perl
-> https://fhem.de/commandref_DE.html#set
-> https://fhem.de/commandref_DE.html#DOIF_Lesbarkeit_der_Definitionen

Gruß Otto
Titel: Antw:DOIF-Syntax Nachfrage
Beitrag von: andies am 12 September 2017, 15:07:25
Nein,  das war leider wirklich anders gemeint. Ich will einmal einen Schalter umlegen (einmal im Monat zB) und dann sollen an jedem Tag diese Lichtorgelspiele laufen. Das würde, glaube ich, nicht laufen, weil die Bedingung von mir täglich geprüft werden müsste.


Gesendet von iPhone mit Tapatalk Pro
Titel: Antw:DOIF-Syntax Nachfrage
Beitrag von: Otto123 am 12 September 2017, 15:17:30
Dann hätte ich diese "übersichtliche" Idee für Dich:
defmod Anwesenheitsgeraet DOIF (([{sunset("HORIZON=-0.8",0,"15:33","21:00")}-21:43] or [07:10-07:45|AT] or [08:45-09:05|WE]) and [Anwesenheit] eq "0") (set Sonoff on) DOELSE (set Sonoff off)
Titel: Antw:DOIF-Syntax Nachfrage
Beitrag von: andies am 12 September 2017, 15:19:17
Vielen Dank für die Hilfe! Ich will so etwas wie einen Anwesenheitssimulator haben. Der soll dann (fortwährend) auslösen, wenn ich nicht da bin und das vorab entsprechend eingeschaltet habe. Geht das damit?


Gesendet von iPhone mit Tapatalk Pro
Titel: Antw:DOIF-Syntax Nachfrage
Beitrag von: andies am 12 September 2017, 15:20:21
Ja, das geht. Super - nochmals danke!!


Gesendet von iPhone mit Tapatalk Pro