Grüß' Euch,
ich habe mir aus einigen Wiki-Beispielen ein DOIF gebastelt. Ziel soll sein, dass ein LED Licht angeht, wenn es dunkel ist und keiner zu Hause ist. Dabei soll natürlich grundsätzlich egal sein, welches Event zuerst eintritt und es kann auch öfter im Dunkelheitszeitraum vorkommen, dass jemand kommt und geht (daher do always). Eigentlich sollte das analog der Rolladenbeispiele klappen, aber irgendwas mache ich wohl falsch, wobei ich gestehen muss, dass ich trotz der Wiki noch nicht 100%ig bei DOIF durchsteige :-\
Hier mal ein List meines DOIF:
Internals:
DEF ([myTwilight:ss_weather]-[myTwilight:sr_weather] and [Anwesenheit:Nein]) (set SimTV_Strom_Sw on) DOELSE (set SimTV_Strom_Sw off)
NAME diTVSim
NR 1186
NTFY_ORDER 50-diTVSim
STATE cmd_2
TYPE DOIF
READINGS:
2017-12-22 18:51:03 Device myTwilight
2017-12-22 18:51:03 cmd 2
2017-12-22 18:51:03 cmd_event myTwilight
2017-12-22 18:51:03 cmd_nr 2
2017-12-22 18:51:03 e_myTwilight_sr_weather 07:42:28
2017-12-22 18:51:03 e_myTwilight_ss_weather 16:40:42
2017-12-22 18:51:03 state cmd_2
2017-12-22 18:51:03 warning condition c01: Argument "16:40:42" isn't numeric in subtraction (-)
Regex:
condition:
0 ReadingValDoIf($hash,'myTwilight','ss_weather')-ReadingValDoIf($hash,'myTwilight','sr_weather') and ReadingValDoIf($hash,'Anwesenheit','Nein')
devices:
0 myTwilight Anwesenheit
all myTwilight Anwesenheit
do:
0:
0 set SimTV_Strom_Sw on
1:
0 set SimTV_Strom_Sw off
helper:
DOIF_Readings_events
DOIF_eventas
event azimuth: 260.53,elevation: -23.39,twilight: 0,twilight_weather: 0,compasspoint: west-southwest
globalinit 1
last_timer 0
sleeptimer -1
timerdev myTwilight
timerevent azimuth: 260.53,elevation: -23.39,twilight: 0,twilight_weather: 0,compasspoint: west-southwest
triggerDev myTwilight
timerevents:
azimuth: 260.53
elevation: -23.39
twilight: 0
twilight_weather: 0
compasspoint: west-southwest
timereventsState:
azimuth: 260.53
elevation: -23.39
twilight: 0
twilight_weather: 0
compasspoint: west-southwest
triggerEvents:
azimuth: 260.53
elevation: -23.39
twilight: 0
twilight_weather: 0
compasspoint: west-southwest
triggerEventsState:
azimuth: 260.53
elevation: -23.39
twilight: 0
twilight_weather: 0
compasspoint: west-southwest
internals:
itimer:
readings:
0 myTwilight:ss_weather myTwilight:sr_weather Anwesenheit:Nein
all myTwilight:ss_weather myTwilight:sr_weather Anwesenheit:Nein
trigger:
uiState:
uiTable:
Attributes:
do always
icon hue_filled_storylight
room Notify/DOIF
Frohe Weihnachten!
doc
[myTwilight:ss_weather]-[myTwilight:sr_weather] ist keine gültige Zeitspanne mit indirekten Zeitpunkten, siehe Commandref zu DOIF, hier: indirekte Zeitangaben
Moin,
ok, die Version hatte ich allerdings auch schon - du meinst so, oder? Also mit nochmal eckigen Klammern drum? Das will nämlich auch nicht.
([[myTwilight:ss_weather]-[myTwilight:sr_weather]] and [Anwesenheit:Nein]) (set SimTV_Strom_Sw on) DOELSE (set SimTV_Strom_Sw off)
Er bleibt im cmd_2, selbst wenn beides (wie jetzt, auch im List zu sehen) zutrifft. Ich tippe irgendwie auf das Reading aus twilight, das zeigt nämlich komischerweise nicht nur die Uhrzeit sondern auch ein Datum an und das ist nicht das heutige, sondern das morgige Datum.
Internals:
DEF ([[myTwilight:ss]-[myTwilight:sr_weather]] and [Anwesenheit:Nein]) (set SimTV_Strom_Sw on) DOELSE (set SimTV_Strom_Sw off)
NAME diTVSim
NR 1186
NTFY_ORDER 50-diTVSim
STATE cmd_2
TYPE DOIF
READINGS:
2017-12-23 16:28:46 Device Anwesenheit
2017-12-23 16:28:46 cmd 2
2017-12-23 16:28:46 cmd_event Anwesenheit
2017-12-23 16:28:46 cmd_nr 2
2017-12-23 16:28:46 state cmd_2
2017-12-23 16:24:39 timer_01_c01 24.12.2017 16:16:34
2017-12-23 16:24:39 timer_02_c01 24.12.2017 07:42:55
Regex:
condition:
0 DOIF_time($hash,0,1,$wday,$hms) and ReadingValDoIf($hash,'Anwesenheit','Nein')
days:
devices:
0 Anwesenheit
all Anwesenheit
do:
0:
0 set SimTV_Strom_Sw on
1:
0 set SimTV_Strom_Sw off
helper:
DOIF_Readings_events
DOIF_eventas
event Nein
globalinit 1
last_timer 2
sleeptimer -1
timerdev Anwesenheit
timerevent Nein
triggerDev Anwesenheit
timerevents:
Nein
timereventsState:
state: Nein
triggerEvents:
Nein
triggerEventsState:
state: Nein
internals:
interval:
0 -1
1 0
itimer:
all myTwilight
localtime:
0 1514128594
1 1514097775
readings:
0 Anwesenheit:Nein
all Anwesenheit:Nein
realtime:
0 16:16:34
1 07:42:55
time:
0 [myTwilight:ss]
1 [myTwilight:sr_weather]
timeCond:
0 0
1 0
timer:
0 0
1 0
timers:
0 0 1
trigger:
triggertime:
1514097775:
localtime 1514097775
hash:
1514128594:
localtime 1514128594
hash:
uiState:
uiTable:
Attributes:
do always
icon hue_filled_storylight
room Notify/DOIF
Viele Grüße
doc
Das Datum wird von DOIF ignoriert.
Was Steht in dem Reading Nein? Poste mal ein List von Anwesenheit.
Was meinst du mit Reading Nein. Es gibt doch nur ein Reading Anwesenheit mit Wert Nein?
([DEVICE:READING] eq "READINGVALUE")
Hier ein Beispiel :
Dunkel und anwesend = Licht Terrasse an nach 5min.
Niemand da oder 23:00 = aus
defmod DOIF_LICHT_Terrasse_EG DOIF ([Anwesenheit] eq "ja" and [[Sonnenstand:ss]-22:30]) (set Licht_Terrasse_1 on)\
DOELSEIF ([Anwesenheit] eq "nein" or [23:00]) (set Licht_Terrasse_1 off)
attr DOIF_LICHT_Terrasse_EG do always
attr DOIF_LICHT_Terrasse_EG wait 300:0
Mit dem Handy online, daher kurz gefasst...
Zitat von: docb am 23 Dezember 2017, 18:35:42
Was meinst du mit Reading Nein. Es gibt doch nur ein Reading Anwesenheit mit Wert Nein?
Dann poste mal ein Listing von dem Gerät, in dem es das Reading Anwesendheit gibt.
Mein Gott, ich .... ::)
ich schaue die ganze Zeit auf die doofen Zeiten, dabei ist es ja das dummy-device, dass ich falsch abfrage...
([[myTwilight:ss]-[myTwilight:sr_weather]] and [Anwesenheit] eq "Nein") (set SimTV_Strom_Sw on) DOELSE (set SimTV_Strom_Sw off)
Danke CoolTux und Frank_Huber für Eure Hilfestellung.
Der Fehler sitzt halt wie immer vor der Scheibe ;-)
Viele Grüße, Danke und schöne Feiertage!