Hallo,
ich versuche gerade ein bestehendes DOIF (bzw. mehrere ) mit der Berücksichtigung eines Ferienkalenders nachzurüsten.
Ist es möglich, wenn ja wie? Ist eine Anfängerfrage - ich war mir nicht sicher, wo ich es posten soll.
DOIF:
Internals:
DEF ([07:00|8] or [09:00|7]) (set Sonoff_Aquarium on) DOELSEIF ([20:00|8] or [20:30|7]) (set Sonoff_Aquarium off)
MODEL FHEM
NAME dAquarium
NR 534
NTFY_ORDER 50-dAquarium
STATE cmd_2
TYPE DOIF
READINGS:
2018-12-15 20:30:00 cmd 2
2018-12-15 20:30:00 cmd_event timer_4
2018-12-15 20:30:00 cmd_nr 2
2018-10-12 21:57:48 mode enabled
2018-12-15 20:30:00 state cmd_2
2018-12-15 07:00:00 timer_01_c01 16.12.2018 07:00:00|8
2018-12-15 09:00:00 timer_02_c01 16.12.2018 09:00:00|7
2018-12-15 20:00:01 timer_03_c02 16.12.2018 20:00:00|8
2018-12-15 20:30:00 timer_04_c02 16.12.2018 20:30:00|7
Regex:
attr:
cmdState:
waitdel:
condition:
0 ::DOIF_time_once($hash,0,$wday,"8") or ::DOIF_time_once($hash,1,$wday,"7")
1 ::DOIF_time_once($hash,2,$wday,"8") or ::DOIF_time_once($hash,3,$wday,"7")
days:
0 8
1 7
2 8
3 7
devices:
do:
0:
0 set Sonoff_Aquarium on
1:
0 set Sonoff_Aquarium off
2:
helper:
event timer_4
globalinit 1
last_timer 4
sleeptimer -1
timerdev
timerevent timer_4
timereventsState
triggerDev
DOIF_eventas:
cmd_nr: 2
cmd: 2
cmd_event: timer_4
state: cmd_2
timerevents:
timer_4
triggerEvents:
timer_4
internals:
interval:
intervalfunc:
itimer:
localtime:
0 1544940000
1 1544947200
2 1544986800
3 1544988600
perlblock:
readings:
realtime:
0 07:00:00
1 09:00:00
2 20:00:00
3 20:30:00
time:
0 07:00:00
1 09:00:00
2 20:00:00
3 20:30:00
timeCond:
0 0
1 0
2 1
3 1
timer:
0 0
1 0
2 0
3 0
timers:
0 0 1
1 2 3
triggertime:
1544940000:
localtime 1544940000
hash:
1544947200:
localtime 1544947200
hash:
1544986800:
localtime 1544986800
hash:
1544988600:
localtime 1544988600
hash:
uiState:
uiTable:
Attributes:
do always
room Timer
Kalender, dummy,notify:
define NI_Ferien Calendar ical url http://i.cal.to/ical/68/niedersachsen/ferien/xxxxxxxxxxxxxxxxxxxx.ics 86400
define NI_Ferientag dummy
define NI_Ferien.notify notify NI_Ferien { \
fhem "set NI_Ferientag " . (ReadingsVal("NI_Ferien", "modeStart", "") =~ "ferien" ? 1: 0) }
Ergänze Dein DOIF um die Auslöserangabe
[NI_Ferien:modeStart] =~ "ferien"
Weitere Infos in der deutschsprachigen Befehlsreferenz zu DOIF https://commandref.fhem.de/commandref_DE.html#DOIF_Ereignissteuerung
Also so?
In der Woche wenn nicht Ferien sind 07:00 und wochenende or in den Ferien 9 Uhr.
Die hintere würde ich danach entsprechend anpassen :)
define dAquarium DOIF (([07:00|8] and ([NI_Ferien:modeStart] !~ "ferien") or ([09:00|7] and ([NI_Ferien:modeStart] =~ "ferien"))) (set Sonoff_Aquarium on) DOELSEIF ([20:00|8] or [20:30|7]) (set Sonoff_Aquarium off)
Zitat von: Ellert am 16 Dezember 2018, 00:07:46
Ergänze Dein DOIF um die Auslöserangabe
[NI_Ferien:modeStart] =~ "ferien"
Weitere Infos in der deutschsprachigen Befehlsreferenz zu DOIF https://commandref.fhem.de/commandref_DE.html#DOIF_Ereignissteuerung
Ja, sollte gehen
Müssten nicht jeweils noch eine Klammer zu.
Also falsch:
richtig:
define dAquarium DOIF (([07:00|8] and ([NI_Ferien:modeStart] !~ "ferien") or ([09:00|7] and ([NI_Ferien:modeStart] =~ "ferien"))) (set Sonoff_Aquarium on) DOELSEIF (([20:00|8] and ([NI_Ferien:modeStart] !~ "ferien") (or [20:30|7]and ([NI_Ferien:modeStart] =~ "ferien"))) (set Sonoff_Aquarium off)
Oder?
define dAquarium DOIF (([07:00|8] and ([NI_Ferien:modeStart] !~ "ferien") or ([09:00|7] and ([NI_Ferien:modeStart] =~ "ferien")))) (set Sonoff_Aquarium on) DOELSEIF (([20:00|8] and ([NI_Ferien:modeStart] !~ "ferien") (or [20:30|7]and ([NI_Ferien:modeStart] =~ "ferien")))) (set Sonoff_Aquarium off)
define dAquarium DOIF ([07:00|8] and [NI_Ferien:modeStart] !~ "ferien" or [09:00|7] and [NI_Ferien:modeStart] =~ "ferien")...
sollte genau so gut funktionieren.
ich glaube ich habe einen Denkfehler oder?
Es soll Wochentags wenn keine Ferien um 7 Uhr angeschaltet werden und wenn Ferien sind ODER es Wochenende ist um 9 Uhr.
Was wäre da richtig?
Zitat von: masterpete23 am 20 Dezember 2018, 16:58:48
ich glaube ich habe einen Denkfehler oder?
Es soll Wochentags wenn keine Ferien um 7 Uhr angeschaltet werden und wenn Ferien sind ODER es Wochenende ist um 9 Uhr.
Was wäre da richtig?
So, wie von mir vorgeschlagen.
Zitat von: masterpete23 am 20 Dezember 2018, 16:58:48
ich glaube ich habe einen Denkfehler oder?
Es soll Wochentags wenn keine Ferien um 7 Uhr angeschaltet werden und wenn Ferien sind ODER es Wochenende ist um 9 Uhr.
Was wäre da richtig?
Ich verwende Calendar nicht zum Steuern, daher weiss ich nicht was Calendar liefert, von der Verknüpfung her müsste es so klappen
Zitatdefine dAquarium DOIF ([07:00|8] and [NI_Ferien:modeStart] !~ "ferien" or [09:00|7] or [09:00] and [NI_Ferien:modeStart] =~ "ferien")...
Danke, ich werde es testen :)