Hallo,
ich schalte um 10 Uhr meinen Luftreiniger aus, soweit so gut.
Um 22 Uhr soll er an gehen, wenn jemand zu Hause ist. Wenn bis morgen 10 jemand heim kommt, soll der Luftreiniger ebenfalls angehen. Mit diesem Code wird er eingeschalten, wenn jemand heim kommt, jedoch nicht um 22 Uhr. Wie muss das DOIF dazu aussehen?
([10:00]) (set Xiaomi_AirPurifier3 off)
DOELSEIF ([22:00-09:59] and [Bewohner:residentsHome] > 0) (set Xiaomi_AirPurifier3 on)
Wie wäre es mit einem List?
attr irgendwas do always
gesetzt?
Zitat von: TWART016 am 18 Juni 2020, 01:06:41
Hallo,
ich schalte um 10 Uhr meinen Luftreiniger aus, soweit so gut.
Um 22 Uhr soll er an gehen, wenn jemand zu Hause ist. Wenn bis morgen 10 jemand heim kommt, soll der Luftreiniger ebenfalls angehen. Mit diesem Code wird er eingeschalten, wenn jemand heim kommt, jedoch nicht um 22 Uhr. Wie muss das DOIF dazu aussehen?
([10:00]) (set Xiaomi_AirPurifier3 off)
DOELSEIF ([22:00-09:59] and [Bewohner:residentsHome] > 0) (set Xiaomi_AirPurifier3 on)
Setze mal
[
?Bewohner:residentsHome]
sonst triggert das als Event unabhängig von der Zeit.
Gruß
cRossi
Zitat von: cRossi am 24 Juni 2020, 20:45:44
Setze mal
[?Bewohner:residentsHome]
sonst triggert das als Event unabhängig von der Zeit.
Gruß
cRossi
Somit wird das:
ZitatWenn bis morgen 10 jemand heim kommt, soll der Luftreiniger ebenfalls angehen
nicht mehr möglich.
Für das was beschrieben ist, ist mMn das DOIF richtig.
Was man für weitere Analyse braucht, ist ein "list" vom DOIF wenn es nicht wie gewünscht funtkioniert hat, also kurz nach 22:00 Uhr mit jemandem schon zu Hause (Anzahl > 0)
Hier das list, residentsHome ist 2 und es wird um 22 Uhr getriggert, also richtig:
Internals:
DEF ([10:00]) (set Telegram msg set Xiaomi_AirPurifier3 off)
DOELSEIF ([22:00-09:59] and [testStatus1:residentsHome] > 0) (set Telegram msg set Xiaomi_AirPurifier3 on)
FUUID 5c7197ee-f33f-50ef-a9c2-b6f688bea4da6733
FVERSION 98_DOIF.pm:0.218420/2020-05-02
MODEL FHEM
NAME test_DOIF
NOTIFYDEV global,testStatus1
NR 877
NTFY_ORDER 50-test_DOIF
STATE cmd_2
TYPE DOIF
VERSION 21842 2020-05-02 16:00:20
READINGS:
2020-06-24 22:00:00 cmd 2
2020-06-24 22:00:00 cmd_event timer_2
2020-06-24 22:00:00 cmd_nr 2
2020-06-21 00:08:40 mode enabled
2020-06-24 22:00:00 state cmd_2
2020-06-24 10:00:00 timer_01_c01 25.06.2020 10:00:00
2020-06-24 09:59:00 timer_02_c02 24.06.2020 22:00:00
2020-06-24 09:59:00 timer_03_c02 25.06.2020 09:59:00
Regex:
accu:
cond:
testStatus1:
1:
residentsHome ^testStatus1$:^residentsHome:
attr:
cmdState:
waitdel:
condition:
0 ::DOIF_time_once($hash,0,$wday)
1 ::DOIF_time($hash,1,2,$wday,$hms) and ::ReadingValDoIf($hash,'testStatus1','residentsHome') > 0
days:
do:
0:
0 set Telegram msg set Xiaomi_AirPurifier3 off
1:
0 set Telegram msg set Xiaomi_AirPurifier3 on
2:
helper:
DEVFILTER ^global$|^testStatus1$
NOTIFYDEV global|testStatus1
event timer_2
globalinit 1
last_timer 3
sleeptimer -1
timerdev
timerevent timer_2
triggerDev
DOIF_eventa:
cmd_nr: 2
cmd: 2
cmd_event: timer_2
cmd_2
DOIF_eventas:
cmd_nr: 2
cmd: 2
cmd_event: timer_2
state: cmd_2
timerevents:
timer_2
timereventsState:
timer_2
triggerEvents:
timer_2
triggerEventsState:
timer_2
interval:
1 -1
2 1
intervalfunc:
intervaltimer:
localtime:
0 1593072000
1 1593028800
2 1593071940
readings:
all testStatus1:residentsHome
realtime:
0 10:00:00
1 22:00:00
2 09:59:00
time:
0 10:00:00
1 22:00:00
2 09:59:00
timeCond:
0 0
1 1
2 1
timer:
0 0
1 0
2 0
timers:
0 0
1 1 2
triggertime:
1593071940:
localtime 1593071940
hash:
1593072000:
localtime 1593072000
hash:
uiState:
uiTable:
Attributes:
room test
zum testen habe ich die residentsHome auf 0 gestellt:
Internals:
DEF ([10:00]) (set Telegram msg set Xiaomi_AirPurifier3 off)
DOELSEIF ([22:00-09:59] and [testStatus1:residentsHome] > 0) (set Telegram msg set Xiaomi_AirPurifier3 on)
FUUID 5c7197ee-f33f-50ef-a9c2-b6f688bea4da6733
FVERSION 98_DOIF.pm:0.218420/2020-05-02
MODEL FHEM
NAME test_DOIF
NOTIFYDEV global,testStatus1
NR 877
NTFY_ORDER 50-test_DOIF
STATE cmd_2
TYPE DOIF
VERSION 21842 2020-05-02 16:00:20
READINGS:
2020-06-25 02:25:00 Device testStatus1
2020-06-24 22:00:00 cmd 2
2020-06-24 22:00:00 cmd_event timer_2
2020-06-24 22:00:00 cmd_nr 2
2020-06-25 02:25:00 e_testStatus1_residentsHome 0
2020-06-21 00:08:40 mode enabled
2020-06-24 22:00:00 state cmd_2
2020-06-24 10:00:00 timer_01_c01 25.06.2020 10:00:00
2020-06-24 09:59:00 timer_02_c02 24.06.2020 22:00:00
2020-06-24 09:59:00 timer_03_c02 25.06.2020 09:59:00
Regex:
accu:
cond:
testStatus1:
0:
1:
residentsHome ^testStatus1$:^residentsHome:
attr:
cmdState:
waitdel:
condition:
0 ::DOIF_time_once($hash,0,$wday)
1 ::DOIF_time($hash,1,2,$wday,$hms) and ::ReadingValDoIf($hash,'testStatus1','residentsHome') > 0
days:
do:
0:
0 set Telegram msg set Xiaomi_AirPurifier3 off
1:
0 set Telegram msg set Xiaomi_AirPurifier3 on
2:
helper:
DEVFILTER ^global$|^testStatus1$
NOTIFYDEV global|testStatus1
event residentsHome: 0
globalinit 1
last_timer 3
sleeptimer -1
timerdev
timerevent timer_2
triggerDev testStatus1
timerevents:
timer_2
timereventsState:
timer_2
triggerEvents:
residentsHome: 0
triggerEventsState:
residentsHome: 0
internals:
interval:
1 -1
2 1
intervalfunc:
intervaltimer:
localtime:
0 1593072000
1 1593028800
2 1593071940
readings:
all testStatus1:residentsHome
realtime:
0 10:00:00
1 22:00:00
2 09:59:00
time:
0 10:00:00
1 22:00:00
2 09:59:00
timeCond:
0 0
1 1
2 1
timer:
0 0
1 0
2 0
timers:
0 0
1 1 2
trigger:
triggertime:
1593071940:
localtime 1593071940
hash:
1593072000:
localtime 1593072000
hash:
uiState:
uiTable:
Attributes:
room test
Und wieder auf 2. Es kam keine Nachricht
Internals:
DEF ([10:00]) (set Telegram msg set Xiaomi_AirPurifier3 off)
DOELSEIF ([22:00-09:59] and [testStatus1:residentsHome] > 0) (set Telegram msg set Xiaomi_AirPurifier3 on)
FUUID 5c7197ee-f33f-50ef-a9c2-b6f688bea4da6733
FVERSION 98_DOIF.pm:0.218420/2020-05-02
MODEL FHEM
NAME test_DOIF
NOTIFYDEV global,testStatus1
NR 877
NTFY_ORDER 50-test_DOIF
STATE cmd_2
TYPE DOIF
VERSION 21842 2020-05-02 16:00:20
READINGS:
2020-06-25 02:31:02 Device testStatus1
2020-06-24 22:00:00 cmd 2
2020-06-24 22:00:00 cmd_event timer_2
2020-06-24 22:00:00 cmd_nr 2
2020-06-25 02:31:02 e_testStatus1_residentsHome 2
2020-06-21 00:08:40 mode enabled
2020-06-24 22:00:00 state cmd_2
2020-06-24 10:00:00 timer_01_c01 25.06.2020 10:00:00
2020-06-24 09:59:00 timer_02_c02 24.06.2020 22:00:00
2020-06-24 09:59:00 timer_03_c02 25.06.2020 09:59:00
Regex:
accu:
cond:
testStatus1:
0:
1:
residentsHome ^testStatus1$:^residentsHome:
attr:
cmdState:
waitdel:
condition:
0 ::DOIF_time_once($hash,0,$wday)
1 ::DOIF_time($hash,1,2,$wday,$hms) and ::ReadingValDoIf($hash,'testStatus1','residentsHome') > 0
days:
do:
0:
0 set Telegram msg set Xiaomi_AirPurifier3 off
1:
0 set Telegram msg set Xiaomi_AirPurifier3 on
2:
helper:
DEVFILTER ^global$|^testStatus1$
NOTIFYDEV global|testStatus1
event residentsHome: 2
globalinit 1
last_timer 3
sleeptimer -1
timerdev testStatus1
timerevent residentsHome: 2
triggerDev testStatus1
timerevents:
residentsHome: 2
timereventsState:
residentsHome: 2
triggerEvents:
residentsHome: 2
triggerEventsState:
residentsHome: 2
internals:
interval:
1 -1
2 1
intervalfunc:
intervaltimer:
localtime:
0 1593072000
1 1593028800
2 1593071940
readings:
all testStatus1:residentsHome
realtime:
0 10:00:00
1 22:00:00
2 09:59:00
time:
0 10:00:00
1 22:00:00
2 09:59:00
timeCond:
0 0
1 1
2 1
timer:
0 0
1 0
2 0
timers:
0 0
1 1 2
trigger:
triggertime:
1593071940:
localtime 1593071940
hash:
1593072000:
localtime 1593072000
hash:
uiState:
uiTable:
Attributes:
room test
(set Telegram msg set Xiaomi_AirPurifier3 on)
Fehlt da nicht ein Komma, oder?
Hallo,
das sieht komisch aus, und nach meiner Meinung fehlt die Nachricht.
Ich würde es mal so versuchen:
(set Telegram msg @xxxxxx Titel meine Nachricht) (set Xiaomi_AirPurifier3 on)
Die Voraussetzung ist natürlich, dass Telegramnachrichten funktionieren, mit anderen Worten, dass ein Fhem-Device Telegram existiert und per Eingabe in die Fhem-Kommandozeile erfolgreich getestet wurde.
Viele Grüße Gisbert
Ich vermute mal, so wie die Definition geschrieben ist, dass kein Telegram-Device angelegt wurde, zumindest wurden die Vorgaben zum Versenden von Nachrichten nicht umgesetzt.
Es ist schon eine kleine Ewigkeit her, dass ich Telegram eingerichtet hatte, deshalb gibt es Infos zu Telegram hier im Wiki (https://wiki.fhem.de/wiki/TelegramBot).
Telegram funktioniert seit Jahren, auch die Nachricht um 10 und 22 Uhr (wenn jemand daheim ist). Ich habe derzeit noch eine andere Automation aktiv, welche das schaltet, jedoch möchte ich diese mit dem DOIF ersetzen.
Aktuell möchte ich nur die Nachrichten erhalten, wenn dies eintreffen würde. Danach entferne ich nur noch "set Telegram msg" und der Luftreiniger wird geschalten.
Zitat von: TWART016 am 25 Juni 2020, 02:32:03
Hier das list, residentsHome ist 2 und es wird um 22 Uhr getriggert, also richtig:
zum testen habe ich die residentsHome auf 0 gestellt:
Und wieder auf 2. Es kam keine Nachricht
Pack mach noch ein leeres DOELSE in deinem DOIF und mach den gleichen Test
Also mit dem DOELSE passt es. Wenn ich nun zwischen 22 und 9:59 den dummy Wohnzimmer_Modi schalte, tritt DOELSE in Kraft, allerdings soll es bei dem DOELSEIF bleiben. Wie kann ich das unabhängig von dem Reading machen?
([10:00] or [Wohnzimmer_Modi] eq "aufstehen") (set Xiaomi_AirPurifier3 off)
DOELSEIF ([22:00-09:59] and [Bewohner:residentsTotalPresent] > 0 and [Shelly_Fenster_Schlafzimmer] eq "close") (set Xiaomi_AirPurifier3 led off;set Xiaomi_AirPurifier3 on)
DOELSE (set Xiaomi_AirPurifier3 off)
Moin,
DOIF
([22:00-09:59] and [Bewohner:residentsTotalPresent] > 0 and [Shelly_Fenster_Schlafzimmer] eq "close")
(set Xiaomi_AirPurifier3 led off;set Xiaomi_AirPurifier3 on)
DOELSEIF
([10:00] or [Wohnzimmer_Modi] eq "aufstehen")
(set Xiaomi_AirPurifier3 off)
schaltet um 22:00 den Purifier ein, wenn Residents größer 0 und das Schlafzimmerfenster zu ist.
Zwischen 22:00 und 9:59 wird eingeschaltet, wenn Residents <= 0 war und das Schlafzimmerfenster auf war und sich die beiden Zustände so ändern, dass auch beide wahr werden. Sollen beide triggern? Falls nicht, dann mit [?...].
Um 10:00 wird auf jeden Fall abgeschaltet, ebenso wenn sich der Wohnzimmer_Modi auf aufstehen ändert. Wohnzimmer_Modi triggert allerdings immer!
Das müsste auch ohne do always funtionieren (ausprobieren)
Viel Erfolg!