Hallo zusammen,
ich habe mir ein Dummy test
gebastelt welche eine Reading für die Zeit uhrzeit
und ein Reading für den Wochentag wochentag
hat.
Diese Werte wollte ich nun wie folgt an ein DOIF übergeben.
define ZeitSteuerung DOIF ([[test:uhrzeit]|[[test:wochentag]]) (set Jalousie on)
Habe auch schon folgende und weitere Schreibweisen probiert.
define ZeitSteuerung DOIF ([[test:uhrzeit]|{ReadingsVal("test","wochentag","")}]) (set Jalousie on)
define ZeitSteuerung DOIF ([{ReadingsVal("test","uhrzeit","")}|{ReadingsVal("test","wochentag","")}]) (set Jalousie on)
Dies geht leider nicht, nun stellt sich die Frage, mache ich was falsch oder kann das der DOIF-Parser nicht?
Gruß,
Stefan
ich stell mal mein funzendes rein
[ ([$SELF:zeit_tag_vollreinigung]-[00:10]) | [$SELF:tag_vollreinigung] ]
[ [test:uhrzeit] | [[test:wochentag ] ]
klammern?
ZitatDies geht leider nicht
Wie äußert sich das? Fehlermeldung?
Deine Code-Abschnitte sind ein wenig sinnlos. Wie wäre es mit einem List des Dummy?
Was steht in den Readings?
([[test:uhrzeit]|[[test:wochentag]])
Was möchtest du da prüfen?
Wenn Uhrzeit und Wochentag eintritt, dann führe aus...?
Zitat von: the ratman am 24 Juli 2019, 10:01:13
ich stell mal mein funzendes rein
[ ([$SELF:zeit_tag_vollreinigung]-[00:10]) | [$SELF:tag_vollreinigung] ]
[ [test:uhrzeit] | [[test:wochentag ] ]
klammern?
Ist mir ein Tippfehler unterlaufen.
Habe aber schon sämtliche Varianten mit Klammern durch getestet.
Tatsächlich sollte es so heißen
([[test:uhrzeit]|[test:wochentag]])
Zitat von: rabehd am 24 Juli 2019, 10:02:36
Wie äußert sich das? Fehlermeldung?
Es gibt keine Fehlermeldung im DOIF Reading timer_01_c01 steht dann z.B.
25.07.2019 07:30|[test:wochentag]
Deine Code-Abschnitte sind ein wenig sinnlos. Wie wäre es mit einem List des Dummy?
Was steht in den Readings?
uhrzeit 07:30
wochentag 12345
([[test:uhrzeit]|[[test:wochentag]])
Was möchtest du da prüfen?
Wenn Uhrzeit und Wochentag eintritt, dann führe aus...? Ja genau
Siehe
fette Schrift oben.
Danke!
https://forum.fhem.de/index.php/topic,40913.msg331954.html#msg331954 (https://forum.fhem.de/index.php/topic,40913.msg331954.html#msg331954)
Sorry muss hier MASSIV zurückrudern.
Meine erste Definition vom DOIF
define ZeitSteuerung DOIF ([[test:uhrzeit]|[test:wochentag]]) (set Jalousie on)
funktioniert.
Mich hat das timer-Reading welches vom DOIF geliefert wird irritiert.
timer_01_c01 25.07.2019 07:30|[test:wochentag]
hätte
timer_01_c01 25.07.2019 07:30|12345
erwartet.
Gruß,
Stefan
Hallo,
muss jetzt leider dieses Thema nochmals kurz aufgreifen.
Ich versuche gerade ein DOIF für die Zeitsteuerung meiner Heizung zu erstellen.
Das Ziel ist es, dass für jeden Tag ein DOIF die Heizung zu 2 Zeiten Ein-/ und Ausschalten z.B. 07:00 - 09:00 An / 17:00 - 19:00 An zu den anderen Zeiten aus.
Dies funktioniert auch schon mit folgendem DOIF, wobei die Heizzeiten als Reading im DOIF selbst zur Verfügung gestellt werden.
define Heizung_Zeitsteuerung_Mo DOIF ([[$SELF:Zeit_1]-[$SELF:Zeit_2]|[$SELF:Tag]] or [[$SELF:Zeit_3]-[$SELF:Zeit_4]|[$SELF:Tag]]) (set HeizungVar1 An)
DOELSE (set HeizungVar1 Aus)
Leider wird das DOIF beim ändern der Zeit nicht getriggert, auch nicht mit den
attr checkall all
und selftrigger all
.
Mit einem externen notify welches ein
set $NAME checkall
ausführt geht es, nur würde ich darauf gerne verzichten, wäre schöner.
Hat jemand eine Idee?
Lg
Bitte list vom DOIF posten.
Zitat von: Damian am 25 September 2019, 11:57:27
Bitte list vom DOIF posten.
Hier das LIST
Internals:
CFGFN
DEF ([[$SELF:Zeit_1]-[$SELF:Zeit_2]|[$SELF:Tag]] or [[$SELF:Zeit_3]-[$SELF:Zeit_4]|[$SELF:Tag]]) (set HeizungVar1 An)
DOELSE (set HeizungVar1 Aus)
FUUID 5d8a413a-f33f-f57e-6e72-3397ee69d8e05fd4
MODEL FHEM
NAME Heizung_Zeitsteuerung_Mo
NOTIFYDEV global,Heizung_Zeitsteuerung_Mo
NR 738
NTFY_ORDER 50-Heizung_Zeitsteuerung_Mo
STATE cmd_2
TYPE DOIF
VERSION 20229 2019-09-22 18:55:46
OLDREADINGS:
READINGS:
2019-09-24 18:18:32 Layout semitransparent
2019-09-24 18:20:54 Tag Di
2019-09-25 07:58:23 Zeit_1 07:00
2019-09-24 18:34:09 Zeit_2 12:01
2019-09-24 20:31:33 Zeit_3 18:37
2019-09-24 21:58:51 Zeit_4 21:55
2019-09-25 07:55:27 cmd 2
2019-09-25 07:55:27 cmd_event Heizung_Zeitsteuerung_Mo
2019-09-25 07:55:27 cmd_nr 2
2019-09-24 20:23:43 mode enabled
2019-09-25 07:55:27 state cmd_2
2019-09-25 07:58:23 timer_01_c01 26.09.2019 07:00:00|[Heizung_Zeitsteuerung_Mo:Tag]
2019-09-24 20:23:43 timer_02_c01 25.09.2019 12:01:00|[Heizung_Zeitsteuerung_Mo:Tag]
2019-09-24 20:32:00 timer_03_c01 25.09.2019 18:37:00|[Heizung_Zeitsteuerung_Mo:Tag]
2019-09-24 21:58:51 timer_04_c01 25.09.2019 21:55:00|[Heizung_Zeitsteuerung_Mo:Tag]
Regex:
accu:
itimer:
Heizung_Zeitsteuerung_Mo:
itimer:
Zeit_1 ^Heizung_Zeitsteuerung_Mo$:^Zeit_1:
Zeit_2 ^Heizung_Zeitsteuerung_Mo$:^Zeit_2:
Zeit_3 ^Heizung_Zeitsteuerung_Mo$:^Zeit_3:
Zeit_4 ^Heizung_Zeitsteuerung_Mo$:^Zeit_4:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::DOIF_time($hash,0,1,$wday,$hms,"[Heizung_Zeitsteuerung_Mo:Tag]") or ::DOIF_time($hash,2,3,$wday,$hms,"[Heizung_Zeitsteuerung_Mo:Tag]")
days:
0 [Heizung_Zeitsteuerung_Mo:Tag]
1 [Heizung_Zeitsteuerung_Mo:Tag]
2 [Heizung_Zeitsteuerung_Mo:Tag]
3 [Heizung_Zeitsteuerung_Mo:Tag]
do:
0:
0 set HeizungVar1 An
1:
0 set HeizungVar1 Aus
helper:
event timer_4
globalinit 1
last_timer 4
sleeptimer -1
timerdev
timerevent timer_4
timerevents
timereventsState
triggerDev
interval:
0 -1
1 0
2 -1
3 2
intervalfunc:
intervaltimer:
localtime:
0 1569474000
1 1569405660
2 1569429420
3 1569441300
realtime:
0 07:00:00
1 12:01:00
2 18:37:00
3 21:55:00
time:
0 [Heizung_Zeitsteuerung_Mo:Zeit_1]
1 [Heizung_Zeitsteuerung_Mo:Zeit_2]
2 [Heizung_Zeitsteuerung_Mo:Zeit_3]
3 [Heizung_Zeitsteuerung_Mo:Zeit_4]
timeCond:
0 0
1 0
2 0
3 0
timer:
0 0
1 0
2 0
3 0
timers:
0 0 1 2 3
triggertime:
1569405660:
localtime 1569405660
hash:
1569429420:
localtime 1569429420
hash:
1569441300:
localtime 1569441300
hash:
1569474000:
localtime 1569474000
hash:
uiState:
uiTable:
Attributes:
checkall all
devStateIcon cmd_1:icoHEIZUNG cmd_2:general_aus@red
event-on-change-reading Zeit_1,Zeit_2,Zeit_3,Zeit_4
room Heizung
selftrigger all
Ich würde dir statt das Attribut checkall, das Attribut do always empfehlen.
Zitat von: Damian am 25 September 2019, 14:10:43
Ich würde dir statt das Attribut checkall, das Attribut do always empfehlen.
Auch schon getestet macht kein Unterschied, ohne das externe Notify geht nichts.
Aber egal, wenn du auf Anhieb keinen groben Fehler findest, lasse ich es mit dem externen notify laufen...funktioniert ja gut.
Die Beispiele unter https://fhem.de/commandref_DE.html#DOIF_Zeitsteuerung_mit_Zeitintervallen (https://fhem.de/commandref_DE.html#DOIF_Zeitsteuerung_mit_Zeitintervallen)
arbeiten nicht mit "Di" sondern mit "2".
So auf die Schnelle habe ich keine Beispiele mit Text gefunden.
Zitat von: Haecksler am 25 September 2019, 11:20:52
Leider wird das DOIF beim ändern der Zeit nicht getriggert, auch nicht mit den
Das DOIF wird durch Timer getriggert und nicht durch eine Änderung der Timer, wenn du den Timer vor 7 Uhr auf 7 Uhr änderst, dann wird auch um 7 Uhr getriggert, wann denn sonst.
Zitat von: Damian am 25 September 2019, 14:57:32
Das DOIF wird durch Timer getriggert und nicht durch eine Änderung der Timer, wenn du den Timer vor 7 Uhr auf 7 Uhr änderst, dann wird auch um 7 Uhr getriggert, wann denn sonst.
Das Problem ist, dass ich den Zeitraum z.B. [07:00-10:00] um 6:30 Uhr ändere "setreading Heizung_Zeitsteuerung_Mo Zeit_1 06:29" auf [06:29-10:00], dann würde ich erwarten, dass das DOIF sofort auf cmd_1 schaltet, macht es aber nicht.
Es wird zwar das Reading Timer_01_c01 geändert, aber sonst passiert nichts, erst wenn ich manuell "set Heizung_Zeitsteuerung_Mo checkall" ausführe, schaltet das DOIF.
Zitat von: Haecksler am 25 September 2019, 15:22:31
Das Problem ist, dass ich den Zeitraum z.B. [07:00-10:00] um 6:30 Uhr ändere "setreading Heizung_Zeitsteuerung_Mo Zeit_1 06:29" auf [06:29-10:00], dann würde ich erwarten, dass das DOIF sofort auf cmd_1 schaltet, macht es aber nicht.
Es wird zwar das Reading Timer_01_c01 geändert, aber sonst passiert nichts, erst wenn ich manuell "set Heizung_Zeitsteuerung_Mo checkall" ausführe, schaltet das DOIF.
Du siehst ja in dem Reading den nächsten Triggerzeitpunkt, der ist immer in der Zukunft - Vergangenheit wäre ja nicht sinnvoll. Zeitangaben werden eben nur durch Zeit getriggert und sonst nicht. Wenn du unbedingt etwas durch ein Event nachholen willst, dann kannst du das Event mit and in deiner Definition aufnehmen.
Edit: z. B. (([[$SELF:Zeit_1]-[$SELF:Zeit_2]|[$SELF:Tag]] or [[$SELF:Zeit_3]-[$SELF:Zeit_4]|[$SELF:Tag]]) and [$SELF])
Wären dann nicht sogar eine Handvoll Fragezeichen sinnvoll? Weil jeder $SELF:xxx Event ist doch gleichzeitig ein $SELF Event. Oder nicht?
Zitat von: Per am 26 September 2019, 12:44:30
Wären dann nicht sogar eine Handvoll Fragezeichen sinnvoll? Weil jeder $SELF:xxx Event ist doch gleichzeitig ein $SELF Event. Oder nicht?
Jeder Event ist gerade die Zeitänderung über eigene Readings, Selbsttriggerung ist ja trotzdem nicht aktiv. Das funktioniert schon.