Zeitsteuerung mit variabler Zeit und variablem Wochentag

Begonnen von Haecksler, 24 Juli 2019, 09:53:02

Vorheriges Thema - Nächstes Thema

Haecksler

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

the ratman

#1
ich stell mal mein funzendes rein


[      ([$SELF:zeit_tag_vollreinigung]-[00:10])    |    [$SELF:tag_vollreinigung]         ]

[      [test:uhrzeit]                                              |     [[test:wochentag ]                   ]


klammern?
→do↑p!dnʇs↓shit←

rabehd

#2
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...?
Auch funktionierende Lösungen kann man hinterfragen.

Haecksler

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]])


Haecksler

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!


Haecksler

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





Haecksler

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





Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Haecksler

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


Damian

Ich würde dir statt das Attribut checkall, das Attribut do always empfehlen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Haecksler

#11
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.

rabehd

Die Beispiele unter 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.
Auch funktionierende Lösungen kann man hinterfragen.

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Haecksler

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.