DOIF mit Zeitberechnungen aus Readings

Begonnen von n4rrOx, 19 Februar 2018, 09:44:59

Vorheriges Thema - Nächstes Thema

n4rrOx

Hallo zusammen,

habe angefangen mir eine kleine Rolladensteuerung zu bauen, die ich ....
a) relativ zu Sonnenauf- und untergang steuern kann (jeweils Position und relative Zeitangabe an allen Tagen gleich, oder werktags/am WE unterschiedlich) oder
b) nach Zeit  (jeweils Position und Zeitangabe an allen Tagen gleich, oder werktags/am WE unterschiedlich) bzw.
c) einfach manuell.

Dabei habe ich zwei "allgemeine" Devices angelegt.
- dummy_astro beinhaltet Sonnenauf- und Untergangszeiten.
- doif_RolloadenSteuerung beinhaltet die Zustände, relativen Zeitangaben und Anfahrpositionen:

READINGS:
     2018-02-16 13:20:18   Automatik       Astro

     2018-02-16 15:54:45   Automatik_nach_sunrise 00:30
     2018-02-16 15:55:11   Automatik_nach_sunrise_we 01:00
     2018-02-16 15:55:34   Automatik_vor_sunset 00:30
     2018-02-16 15:55:44   Automatik_vor_sunset_we 01:00

     2018-01-19 15:45:52   Wochentage      alle

     2018-01-19 11:53:40   ku_position_oben 100
     2018-01-19 16:07:40   ku_position_oben_we 100
     2018-01-19 11:54:14   ku_position_unten 0
     2018-01-19 16:07:46   ku_position_unten_we 0
     2018-01-19 11:51:20   ku_zeit_hoch    08:00:00
     2018-01-19 16:07:51   ku_zeit_hoch_we 11:00:00
     2018-01-19 11:52:04   ku_zeit_runter  18:00:00
     2018-02-16 15:31:01   ku_zeit_runter_we 19:00:00
...


Für die Übersicht habe ich für jeden Rolladen einen DOIF angelegt, welcher die Logik enthalten soll (doif_RolloadenSteuerung_xx):
Internals:
   CFGFN     
   DEF        ([doif_RolloadenSteuerung:Automatik] eq "Astro" and [doif_RolloadenSteuerung:Wochentage] eq "alle" and ([dummy_astro:sunrise_abs_civil] + [doif_RolloadenSteuerung:Automatik_nach_sunrise]))
(set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_oben", "")}) ##Astro - alle Tage - hoch
DOELSEIF
([doif_RolloadenSteuerung:Automatik] eq "Astro" and [doif_RolloadenSteuerung:Wochentage] eq "alle" and ([dummy_astro:sunset_abs_civil] + [doif_RolloadenSteuerung:Automatik_vor_sunset]))
(set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_unten", "")}) ##Astro - alle Tage - runter
DOELSEIF
([doif_RolloadenSteuerung:Automatik] eq "Astro" and [doif_RolloadenSteuerung:Wochentage] eq "werktags" and ([[dummy_astro:sunrise_abs_civil]|AT] + [doif_RolloadenSteuerung:Automatik_nach_sunrise] ))
(set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_oben", "")}) ##Astro - werktags - hoch
DOELSEIF
([doif_RolloadenSteuerung:Automatik] eq "Astro" and [doif_RolloadenSteuerung:Wochentage] eq "werktags" and ([[dummy_astro:sunset_abs_civil]|AT] + [doif_RolloadenSteuerung:Automatik_vor_sunset] ))
(set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_unten", "")}) ##Astro - werktags - runter
DOELSEIF
([doif_RolloadenSteuerung:Automatik] eq "Astro" and [doif_RolloadenSteuerung:Wochentage] eq "werktags" and ([[dummy_astro:sunrise_abs_civil]|WE] + [doif_RolloadenSteuerung:Automatik_nach_sunrise_we]))
(set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_oben_we", "")}) ##Astro - WE - hoch
DOELSEIF
([doif_RolloadenSteuerung:Automatik] eq "Astro" and [doif_RolloadenSteuerung:Wochentage] eq "werktags" and ([[dummy_astro:sunset_abs_civil]|WE] + [doif_RolloadenSteuerung:Automatik_vor_sunset_we]))
(set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_unten_we", "")}) ##Astro - WE - runter
DOELSEIF
([doif_RolloadenSteuerung:Automatik] eq "Zeit" and [doif_RolloadenSteuerung:Wochentage] eq "alle" and [doif_RolloadenSteuerung:ku_zeit_hoch])
(set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_oben", "")}) ##Zeit - alle Tage - hoch
DOELSEIF
([doif_RolloadenSteuerung:Automatik] eq "Zeit" and [doif_RolloadenSteuerung:Wochentage] eq "alle" and [doif_RolloadenSteuerung:ku_zeit_runter])
(set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_unten", "")}) ##Zeit - alle Tage - runter
DOELSEIF
([doif_RolloadenSteuerung:Automatik] eq "Zeit" and [doif_RolloadenSteuerung:Wochentage] eq "werktags" and [[doif_RolloadenSteuerung:ku_zeit_hoch]|AT])
(set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_oben", "")}) ##Zeit - werktags - hoch
DOELSEIF
([doif_RolloadenSteuerung:Automatik] eq "Zeit" and [doif_RolloadenSteuerung:Wochentage] eq "werktags" and [[doif_RolloadenSteuerung:ku_zeit_runter]|AT])
(set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_unten", "")}) ##Zeit - werktags - runter
DOELSEIF
([doif_RolloadenSteuerung:Automatik] eq "Zeit" and [doif_RolloadenSteuerung:Wochentage] eq "werktags" and [[doif_RolloadenSteuerung:ku_zeit_hoch_we]|WE])
(set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_oben_we", "")}) ##Zeit - WE - hoch
DOELSEIF
([doif_RolloadenSteuerung:Automatik] eq "Zeit" and [doif_RolloadenSteuerung:Wochentage] eq "werktags" and [[doif_RolloadenSteuerung:ku_zeit_runter_we]|WE])
(set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_unten_we", "")}) ##Zeit - WE - runter
   NAME       doif_RolloadenSteuerung_ku
   NR         19371
   NTFY_ORDER 50-doif_RolloadenSteuerung_ku
   STATE      cmd_1
   TYPE       DOIF
   READINGS:
     2018-02-19 00:00:30   Device          dummy_astro
     2018-02-17 00:00:30   cmd             1
     2018-02-17 00:00:30   cmd_event       dummy_astro
     2018-02-17 00:00:30   cmd_nr          1
     2018-02-19 00:00:30   e_dummy_astro_sunrise_abs_civil 06:55
     2018-02-19 00:00:30   e_dummy_astro_sunset_abs_civil 18:23
     2018-02-16 16:39:02   mode            enabled
     2018-02-17 00:00:30   state           cmd_1
     2018-02-19 06:55:00   timer_01_c03    20.02.2018 06:55:00|AT
     2018-02-19 00:00:30   timer_02_c04    19.02.2018 18:23:00|AT
     2018-02-19 06:55:00   timer_03_c05    20.02.2018 06:55:00|WE
     2018-02-19 00:00:30   timer_04_c06    19.02.2018 18:23:00|WE
     2018-02-19 08:00:00   timer_05_c09    20.02.2018 08:00:00|AT
     2018-02-18 18:00:00   timer_06_c10    19.02.2018 18:00:00|AT
     2018-02-18 11:00:00   timer_07_c11    19.02.2018 11:00:00|WE
     2018-02-18 19:00:00   timer_08_c12    19.02.2018 19:00:00|WE
   Regex:
   condition:
     0          ReadingValDoIf($hash,'doif_RolloadenSteuerung','Automatik') eq "Astro" and ReadingValDoIf($hash,'doif_RolloadenSteuerung','Wochentage') eq "alle" and (ReadingValDoIf($hash,'dummy_astro','sunrise_abs_civil') + ReadingValDoIf($hash,'doif_RolloadenSteuerung','Automatik_nach_sunrise'))
     1          ReadingValDoIf($hash,'doif_RolloadenSteuerung','Automatik') eq "Astro" and ReadingValDoIf($hash,'doif_RolloadenSteuerung','Wochentage') eq "alle" and (ReadingValDoIf($hash,'dummy_astro','sunset_abs_civil') + ReadingValDoIf($hash,'doif_RolloadenSteuerung','Automatik_vor_sunset'))
     10         ReadingValDoIf($hash,'doif_RolloadenSteuerung','Automatik') eq "Zeit" and ReadingValDoIf($hash,'doif_RolloadenSteuerung','Wochentage') eq "werktags" and DOIF_time_once($hash,6,$wday,"WE")
     11         ReadingValDoIf($hash,'doif_RolloadenSteuerung','Automatik') eq "Zeit" and ReadingValDoIf($hash,'doif_RolloadenSteuerung','Wochentage') eq "werktags" and DOIF_time_once($hash,7,$wday,"WE")
     2          ReadingValDoIf($hash,'doif_RolloadenSteuerung','Automatik') eq "Astro" and ReadingValDoIf($hash,'doif_RolloadenSteuerung','Wochentage') eq "werktags" and (DOIF_time_once($hash,0,$wday,"AT") + ReadingValDoIf($hash,'doif_RolloadenSteuerung','Automatik_nach_sunrise') )
     3          ReadingValDoIf($hash,'doif_RolloadenSteuerung','Automatik') eq "Astro" and ReadingValDoIf($hash,'doif_RolloadenSteuerung','Wochentage') eq "werktags" and (DOIF_time_once($hash,1,$wday,"AT") + ReadingValDoIf($hash,'doif_RolloadenSteuerung','Automatik_vor_sunset') )
     4          ReadingValDoIf($hash,'doif_RolloadenSteuerung','Automatik') eq "Astro" and ReadingValDoIf($hash,'doif_RolloadenSteuerung','Wochentage') eq "werktags" and (DOIF_time_once($hash,2,$wday,"WE") + ReadingValDoIf($hash,'doif_RolloadenSteuerung','Automatik_nach_sunrise_we'))
     5          ReadingValDoIf($hash,'doif_RolloadenSteuerung','Automatik') eq "Astro" and ReadingValDoIf($hash,'doif_RolloadenSteuerung','Wochentage') eq "werktags" and (DOIF_time_once($hash,3,$wday,"WE") + ReadingValDoIf($hash,'doif_RolloadenSteuerung','Automatik_vor_sunset_we'))
     6          ReadingValDoIf($hash,'doif_RolloadenSteuerung','Automatik') eq "Zeit" and ReadingValDoIf($hash,'doif_RolloadenSteuerung','Wochentage') eq "alle" and ReadingValDoIf($hash,'doif_RolloadenSteuerung','ku_zeit_hoch')
     7          ReadingValDoIf($hash,'doif_RolloadenSteuerung','Automatik') eq "Zeit" and ReadingValDoIf($hash,'doif_RolloadenSteuerung','Wochentage') eq "alle" and ReadingValDoIf($hash,'doif_RolloadenSteuerung','ku_zeit_runter')
     8          ReadingValDoIf($hash,'doif_RolloadenSteuerung','Automatik') eq "Zeit" and ReadingValDoIf($hash,'doif_RolloadenSteuerung','Wochentage') eq "werktags" and DOIF_time_once($hash,4,$wday,"AT")
     9          ReadingValDoIf($hash,'doif_RolloadenSteuerung','Automatik') eq "Zeit" and ReadingValDoIf($hash,'doif_RolloadenSteuerung','Wochentage') eq "werktags" and DOIF_time_once($hash,5,$wday,"AT")
   days:
     0          AT
     1          AT
     2          WE
     3          WE
     4          AT
     5          AT
     6          WE
     7          WE
   devices:
     0           doif_RolloadenSteuerung dummy_astro
     1           doif_RolloadenSteuerung dummy_astro
     10          doif_RolloadenSteuerung
     11          doif_RolloadenSteuerung
     2           doif_RolloadenSteuerung
     3           doif_RolloadenSteuerung
     4           doif_RolloadenSteuerung
     5           doif_RolloadenSteuerung
     6           doif_RolloadenSteuerung
     7           doif_RolloadenSteuerung
     8           doif_RolloadenSteuerung
     9           doif_RolloadenSteuerung
     all         doif_RolloadenSteuerung dummy_astro
   do:
     0:
       0          set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_oben", "")}
     1:
       0          set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_unten", "")}
     10:
       0          set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_oben_we", "")}
     11:
       0          set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_unten_we", "")}
     12:
     2:
       0          set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_oben", "")}
     3:
       0          set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_unten", "")}
     4:
       0          set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_oben_we", "")}
     5:
       0          set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_unten_we", "")}
     6:
       0          set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_oben", "")}
     7:
       0          set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_unten", "")}
     8:
       0          set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_oben", "")}
     9:
       0          set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_unten", "")}
   helper:
     DOIF_Readings_events
     DOIF_eventas
     event      timer_5
     globalinit 1
     last_timer 8
     sleeptimer -1
     timerdev   dummy_astro
     timerevent sunrise_abs_civil: 06:55
     triggerDev
     timerevents:
       sunrise_abs_civil: 06:55
     timereventsState:
       sunrise_abs_civil: 06:55
     triggerEvents:
       timer_5
     triggerEventsState:
       sunrise_abs_civil: 06:55
   internals:
   interval:
   itimer:
     all         dummy_astro doif_RolloadenSteuerung
   localtime:
     0          1519106100
     1          1519060980
     2          1519106100
     3          1519060980
     4          1519110000
     5          1519059600
     6          1519034400
     7          1519063200
   readings:
     0           doif_RolloadenSteuerung:Automatik doif_RolloadenSteuerung:Wochentage dummy_astro:sunrise_abs_civil doif_RolloadenSteuerung:Automatik_nach_sunrise
     1           doif_RolloadenSteuerung:Automatik doif_RolloadenSteuerung:Wochentage dummy_astro:sunset_abs_civil doif_RolloadenSteuerung:Automatik_vor_sunset
     10          doif_RolloadenSteuerung:Automatik doif_RolloadenSteuerung:Wochentage
     11          doif_RolloadenSteuerung:Automatik doif_RolloadenSteuerung:Wochentage
     2           doif_RolloadenSteuerung:Automatik doif_RolloadenSteuerung:Wochentage doif_RolloadenSteuerung:Automatik_nach_sunrise
     3           doif_RolloadenSteuerung:Automatik doif_RolloadenSteuerung:Wochentage doif_RolloadenSteuerung:Automatik_vor_sunset
     4           doif_RolloadenSteuerung:Automatik doif_RolloadenSteuerung:Wochentage doif_RolloadenSteuerung:Automatik_nach_sunrise_we
     5           doif_RolloadenSteuerung:Automatik doif_RolloadenSteuerung:Wochentage doif_RolloadenSteuerung:Automatik_vor_sunset_we
     6           doif_RolloadenSteuerung:Automatik doif_RolloadenSteuerung:Wochentage doif_RolloadenSteuerung:ku_zeit_hoch
     7           doif_RolloadenSteuerung:Automatik doif_RolloadenSteuerung:Wochentage doif_RolloadenSteuerung:ku_zeit_runter
     8           doif_RolloadenSteuerung:Automatik doif_RolloadenSteuerung:Wochentage
     9           doif_RolloadenSteuerung:Automatik doif_RolloadenSteuerung:Wochentage
     all         doif_RolloadenSteuerung:Automatik doif_RolloadenSteuerung:Wochentage dummy_astro:sunrise_abs_civil doif_RolloadenSteuerung:Automatik_nach_sunrise dummy_astro:sunset_abs_civil doif_RolloadenSteuerung:Automatik_vor_sunset doif_RolloadenSteuerung:Automatik_nach_sunrise_we doif_RolloadenSteuerung:Automatik_vor_sunset_we doif_RolloadenSteuerung:ku_zeit_hoch doif_RolloadenSteuerung:ku_zeit_runter
   realtime:
     0          06:55:00
     1          18:23:00
     2          06:55:00
     3          18:23:00
     4          08:00:00
     5          18:00:00
     6          11:00:00
     7          19:00:00
   time:
     0          [dummy_astro:sunrise_abs_civil]
     1          [dummy_astro:sunset_abs_civil]
     2          [dummy_astro:sunrise_abs_civil]
     3          [dummy_astro:sunset_abs_civil]
     4          [doif_RolloadenSteuerung:ku_zeit_hoch]
     5          [doif_RolloadenSteuerung:ku_zeit_runter]
     6          [doif_RolloadenSteuerung:ku_zeit_hoch_we]
     7          [doif_RolloadenSteuerung:ku_zeit_runter_we]
   timeCond:
     0          2
     1          3
     2          4
     3          5
     4          8
     5          9
     6          10
     7          11
   timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
   timers:
     10          6
     11          7
     2           0
     3           1
     4           2
     5           3
     8           4
     9           5
   trigger:
   triggertime:
     1519034400:
       localtime  1519034400
       hash:
     1519059600:
       localtime  1519059600
       hash:
     1519060980:
       localtime  1519060980
       hash:
     1519063200:
       localtime  1519063200
       hash:
     1519106100:
       localtime  1519106100
       hash:
     1519110000:
       localtime  1519110000
       hash:
   uiState:
   uiTable:
Attributes:
   disable    0
   room       27_Heizung_Sensoren


Soweit sogut ..... leider bekomme ich im FHEM-Log folgende Fehlermeldungen angezeigt und die Rolladen wollen sich nicht bewegen ^^:
2018.02.19 00:00:30 1: PERL WARNING: Argument "00:30" isn't numeric in addition (+) at (eval 837687) line 1.
2018.02.19 00:00:30 3: eval: doif_RolloadenSteuerung_ku: warning in condition c01
2018.02.19 00:00:30 1: PERL WARNING: Argument "06:56" isn't numeric in addition (+) at (eval 837687) line 1.
2018.02.19 00:00:30 3: eval: doif_RolloadenSteuerung_ku: warning in condition c01
2018.02.19 00:00:30 1: PERL WARNING: Argument "00:30" isn't numeric in addition (+) at (eval 837690) line 1.
2018.02.19 00:00:30 3: eval: doif_RolloadenSteuerung_ku: warning in condition c01
2018.02.19 00:00:30 1: PERL WARNING: Argument "06:56" isn't numeric in addition (+) at (eval 837690) line 1.
2018.02.19 00:00:30 3: eval: doif_RolloadenSteuerung_ku: warning in condition c01
2018.02.19 00:00:30 1: PERL WARNING: Argument "00:30" isn't numeric in addition (+) at (eval 837691) line 1.
2018.02.19 00:00:30 3: eval: doif_RolloadenSteuerung_ku: warning in condition c01
2018.02.19 00:00:30 1: PERL WARNING: Argument "06:56" isn't numeric in addition (+) at (eval 837691) line 1.
2018.02.19 00:00:30 3: eval: doif_RolloadenSteuerung_ku: warning in condition c01
2018.02.19 00:00:30 1: PERL WARNING: Argument "00:30" isn't numeric in addition (+) at (eval 837694) line 1.
2018.02.19 00:00:30 3: eval: doif_RolloadenSteuerung_ku: warning in condition c01
2018.02.19 00:00:30 1: PERL WARNING: Argument "06:55" isn't numeric in addition (+) at (eval 837694) line 1.
2018.02.19 00:00:30 3: eval: doif_RolloadenSteuerung_ku: warning in condition c01


Ich komme nicht dahinter, wieso er mir die Berechnungen nicht durchführen will???
Habe bereits die Zeiten von 00:00:00 auf 00:00 umgeschrieben, aber dennoch wird nicht, wie in der Doku unter commandref_DE.html#DOIF_Zeitsteuerung_mit_Zeitintervallen (Beispiel "Fixtime") berechnet.

Fragen:
- Wo liegt mein Denkfehler?
- Ist mein Vorhaben auch leichter durchzuführen?

Gruß
Mathias

Ellert

Du versuchst eine Zeichenkette numerisch zu addieren, da liegt der Fehler, siehe https://wiki.fhem.de/wiki/Zeitangaben,_rechnen_mit
Wann Du in DOIF mit Zeitangaben rechnen kannst, findest Du ab hier: https://fhem.de/commandref_DE.html#DOIF_Zeitsteuerung_mit_Zeitberechnung

n4rrOx

Hallo Ellert,

danke für die Rückmeldung.
Das ist ja genau der Punkt. In der CommandRef steht:
ZitatZeitsteuerung mit Zeitberechnung
Zeitberechnungen werden innerhalb der eckigen Klammern zusätzlich in runde Klammern gesetzt. Die berechneten Triggerzeiten können absolut oder relativ mit einem Pluszeichen vor den runden Klammern angegeben werden. Es können beliebige Ausdrücke der Form HH:MM und Angaben in Sekunden als ganze Zahl in Perl-Rechenoperationen kombiniert werden. Perlfunktionen, wie z. B. sunset(), die eine Zeitangabe in HH:MM liefern, werden in geschweifte Klammern gesetzt. Zeiten im Format HH:MM bzw. Status oder Readings, die Zeitangaben in dieser Form beinhalten werden in eckige Klammern gesetzt.
=> Runde Klammern vorhanden
=> Format für beide Readings ist HH:MM
=> Die Verweise auf die Zeiten haben eckige Klammern.

Oder müsste es dann so aussehen:
([[dummy_astro:sunrise_abs_civil]] + [[doif_RolloadenSteuerung:Automatik_nach_sunrise]])
?

Ich befürchte ein zweites Problem könnte zudem auch die Einschränkung auf Werk- oder Wochenendtage sein:
([[dummy_astro:sunrise_abs_civil]|AT] + [doif_RolloadenSteuerung:Automatik_nach_sunrise])

Müsste das ggf. so geschrieben werden:
[([dummy_astro:sunrise_abs_civil] + [doif_RolloadenSteuerung:Automatik_nach_sunrise])|AT]
?

Fragen über Fragen ^^

Gruß
Mathias

Ellert

Runde Klammern sind vorhanden, aber nicht die richtigen, denn es heisst: "Zeitberechnungen werden innerhalb der eckigen Klammern zusätzlich in runde Klammern gesetzt."

Du bist auf dem richtigen Weg. Welches Beispiel funktioniert könntest Du an einem einfachen DOIF ausprobieren.


Per

Oder das Beispiel aus der Doku nehmen und eigene Werte reinschreiben.

n4rrOx

Hallo Ellert,

vielen Dank für den Wink mit dem Zaunpfahl.... ;D
Ist auch nicht ganz so einfach mit den vielen unterschiedlichen Klammern ^^
Aber ich denke, ich hab's raus.

Es sieht jetzt folgendermaßen aus (für die Nachwelt):
Internals:
   CFGFN     
   DEF        ([doif_RolloadenSteuerung:Automatik] eq "Astro" and [doif_RolloadenSteuerung:Wochentage] eq "alle" and [([dummy_astro:sunrise_abs_civil] + [doif_RolloadenSteuerung:Automatik_nach_sunrise])])
(set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_oben", "")}) ##Astro - alle Tage - hoch
DOELSEIF
([doif_RolloadenSteuerung:Automatik] eq "Astro" and [doif_RolloadenSteuerung:Wochentage] eq "alle" and [([dummy_astro:sunset_abs_civil] - [doif_RolloadenSteuerung:Automatik_vor_sunset])])
(set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_unten", "")}) ##Astro - alle Tage - runter
DOELSEIF
([doif_RolloadenSteuerung:Automatik] eq "Astro" and [doif_RolloadenSteuerung:Wochentage] eq "werktags" and [([dummy_astro:sunrise_abs_civil] + [doif_RolloadenSteuerung:Automatik_nach_sunrise])|AT])
(set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_oben", "")}) ##Astro - werktags - hoch
DOELSEIF
([doif_RolloadenSteuerung:Automatik] eq "Astro" and [doif_RolloadenSteuerung:Wochentage] eq "werktags" and [([dummy_astro:sunset_abs_civil] - [doif_RolloadenSteuerung:Automatik_vor_sunset])|AT])
(set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_unten", "")}) ##Astro - werktags - runter
DOELSEIF
([doif_RolloadenSteuerung:Automatik] eq "Astro" and [doif_RolloadenSteuerung:Wochentage] eq "werktags" and [([dummy_astro:sunrise_abs_civil] + [doif_RolloadenSteuerung:Automatik_nach_sunrise_we])|WE])
(set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_oben_we", "")}) ##Astro - WE - hoch
DOELSEIF
([doif_RolloadenSteuerung:Automatik] eq "Astro" and [doif_RolloadenSteuerung:Wochentage] eq "werktags" and [([dummy_astro:sunset_abs_civil] - [doif_RolloadenSteuerung:Automatik_vor_sunset_we])|WE])
(set ku_Rolladenaktor pct {ReadingsVal("doif_RolloadenSteuerung", "ku_position_unten_we", "")}) ##Astro - WE - runter
DOELSEIF
[...]
   NAME       doif_RolloadenSteuerung_ku
   NR         19371
   NTFY_ORDER 50-doif_RolloadenSteuerung_ku
   STATE      initialize
   TYPE       DOIF
   READINGS:
     2018-02-19 16:55:08   mode            enabled
     2018-02-19 16:55:08   state           initialize
     2018-02-19 16:55:02   timer_01_c01    20.02.2018 07:25:00
     2018-02-19 16:55:02   timer_02_c02    19.02.2018 17:53:00
     2018-02-19 16:55:02   timer_03_c03    20.02.2018 07:25:00|AT
     2018-02-19 16:55:02   timer_04_c04    19.02.2018 17:53:00|AT
     2018-02-19 16:55:02   timer_05_c05    20.02.2018 07:55:00|WE
     2018-02-19 16:55:02   timer_06_c06    19.02.2018 17:23:00|WE
[...]


Jetzt hab ich ja unter den Readings alle möglichen Timer aufgelistet, die sich ja richtig berechnet haben mit meinen relativen Angaben (unter der Woche 0,5h am WE 1h):
Internals:
   CFGFN     
   NAME       dummy_astro
   NR         18389
   STATE      <b>Sonnenaufgang:</b><br>
real: 07:32<br>
civil: 06:55<br>
<b>Sonnenuntergang:</b><br>
real: 17:45<br>
civil: 18:23
   TYPE       dummy
   READINGS:
     2018-02-19 00:00:30   sunrise_abs_civil 06:55
     [...]
     2018-02-19 00:00:30   sunset_abs_civil 18:23
[...]


Gehe ich richtig davon aus, dass nicht alle der Timer, die aufgeführt sind ausgeführt werden?
Es sind ja 6 Timer, aber nur zwei müssten auch ausgeführt werden.
Die ersten zwei, wenn alle Tage gleich behandelt werden ("Wochentage=alle"), die nächsten zwei nur unter der Woche bei "Wochentage=werktags" und die letzten zwei nur am WE, wenn ebenfalls "Wochentage=werktags" definiert ist.

Kann man irgendwo ablesen, welche Timer in der Zukunft ausgeführt werden und welche nicht?

Gruß
Mathias

Ellert

Die Timer lösen zu ihren Zeiten eine Bedingungsprüfung aus und die Befehle der ersten Bedingung, die wahr wird, werden ausgeführt.

ZitatKann man irgendwo ablesen, welche Timer in der Zukunft ausgeführt werden und welche nicht?
Siehe  https://wiki.fhem.de/wiki/DOIFtools#Erstellen_von_UserReadings_f.C3.BCr_Timer_mit_Wochentageinschr.C3.A4nkung

n4rrOx

Hallo Ellert,

danke für den Hinweis.
Habe es fast hinbekommen. Meine Steuerung an sich funktioniert jetzt.
Habe auch die DOIFTools angelegt und versucht zusätzlich die "wahren" Schaltzeiten anzuzeigen.

Die Attribute für die Erstellung der Userreadings wurden von den DOIFTools teils angelegt. Die fehlenden zwei habe ich manuell ergänzt.
Leider werden aber Userreadings nicht erzeugt.
Habe auch schon den DOIF selbst neu initialisiert, etc. ohne Erfolg.

So sieht momentan ein list des Devices aus, wie gesagt leider ohne Userreadings:

[...]
   NAME       doif_RolloadenSteuerung_ku
   NR         19371
   NTFY_ORDER 50-doif_RolloadenSteuerung_ku
   STATE      initialize
   TYPE       DOIF
   READINGS:
     2018-02-20 20:12:36   Device          doif_RolloadenSteuerung
     2018-02-20 20:12:36   e_doif_RolloadenSteuerung_Automatik Zeit
     2018-02-20 20:12:36   e_doif_RolloadenSteuerung_Wochentage werktags
     2018-02-20 20:12:36   e_doif_RolloadenSteuerung_ku_zeit_hoch 09:00
     2018-02-20 20:12:36   e_doif_RolloadenSteuerung_ku_zeit_runter 19:00
     2018-02-21 12:39:48   mode            enabled
     2018-02-21 12:39:48   state           initialize
     2018-02-21 10:51:00   timer_01_c01    22.02.2018 10:51:00
     2018-02-21 00:00:30   timer_02_c02    21.02.2018 17:56:00
     2018-02-21 10:51:00   timer_03_c03    22.02.2018 10:51:00|AT
     2018-02-21 00:00:30   timer_04_c04    21.02.2018 17:56:00|AT
     2018-02-21 08:51:00   timer_05_c05    22.02.2018 08:51:00|WE
     2018-02-21 00:00:30   timer_06_c06    21.02.2018 17:56:00|WE
     2018-02-21 09:00:00   timer_07_c09    22.02.2018 09:00:00|AT
     2018-02-20 19:00:00   timer_08_c10    21.02.2018 19:00:00|AT
     2018-02-21 11:00:00   timer_09_c11    22.02.2018 11:00:00|WE
     2018-02-20 19:10:00   timer_10_c12    21.02.2018 19:10:00|WE
[...]
Attributes:
[...]
     userReadings N_timer_10_c12:timer_10_c12.* {DOIFtoolsNextTimer(ReadingsVal("doif_RolloadenSteuerung_ku","timer_10_c12","none"),"doif_RolloadenSteuerung_ku")},N_timer_03_c03:timer_03_c03.*
{DOIFtoolsNextTimer(ReadingsVal("doif_RolloadenSteuerung_ku","timer_03_c03","none"),"doif_RolloadenSteuerung_ku")},N_timer_01_c01:timer_01_c01.*
{DOIFtoolsNextTimer(ReadingsVal("doif_RolloadenSteuerung_ku","timer_01_c01","none"),"doif_RolloadenSteuerung_ku")},N_timer_02_c02:timer_02_c02.*
{DOIFtoolsNextTimer(ReadingsVal("doif_RolloadenSteuerung_ku","timer_02_c02","none"),"doif_RolloadenSteuerung_ku")},N_timer_04_c04:timer_04_c04.*
{DOIFtoolsNextTimer(ReadingsVal("doif_RolloadenSteuerung_ku","timer_04_c04","none"),"doif_RolloadenSteuerung_ku")},N_timer_05_c05:timer_05_c05.*
{DOIFtoolsNextTimer(ReadingsVal("doif_RolloadenSteuerung_ku","timer_05_c05","none"),"doif_RolloadenSteuerung_ku")},N_timer_06_c06:timer_06_c06.*
{DOIFtoolsNextTimer(ReadingsVal("doif_RolloadenSteuerung_ku","timer_06_c06","none"),"doif_RolloadenSteuerung_ku")},N_timer_08_c10:timer_08_c10.*
{DOIFtoolsNextTimer(ReadingsVal("doif_RolloadenSteuerung_ku","timer_08_c10","none"),"doif_RolloadenSteuerung_ku")},N_timer_09_c11:timer_09_c11.*
{DOIFtoolsNextTimer(ReadingsVal("doif_RolloadenSteuerung_ku","timer_09_c11","none"),"doif_RolloadenSteuerung_ku")},N_timer_07_c09:timer_07_c09.*
{DOIFtoolsNextTimer(ReadingsVal("doif_RolloadenSteuerung_ku","timer_07_c09","none"),"doif_RolloadenSteuerung_ku")}
[...]


Woran könnte es liegen, dass diese nicht erstellt werden?

Ferner ist das trotzdem nur die halbe Lösung. Damit habe ich immer noch nicht den einen Timer der als nächstes hoch fährt und einen der als nächstes runter fährt (z. B. zum Anzeigen im FTUI).

Bitte um Unterstützung.
Besten Dank vorab!

Grüße
Mathias

Ellert

#8
ZitatDie fehlenden zwei habe ich manuell ergänzt.
Es werden nur N_timer für Zeitangaben mit Wochentageinschränkung angelegt.
Bei den anderen Zeitangaben stimmen die Timer ohnehin.
Daher solltest Du die manuell zugefügten Usereadings löschen.

Welchen Wert hat das Attribut holiday2we?

Userreadings werden berechnet, wenn ein entsprechendes Timerereignis es triggert. Ist das erfolgt?
Eventuell DEF aufrufen, modify und Reload der Seite durchführen.

ZitatFerner ist das trotzdem nur die halbe Lösung.
Du könntest ein weiteres Userreading erstellen, in dem der minimale Timer aus allen Timern berechnet wird, z.B. mit min(t1,t2,t3, usw.).

n4rrOx

#9
Hallo Ellert,

holiday2we steht auf BW .... Die Datei mit den Feiertagen ist gepflegt.

Aber du hattest erneut Recht:
Weder ein DEF Aufruf, Modify und Reload, noch neu Initialisieren oder das Ändern der Readings hat die N_timer hervorgebracht.
Es war wirklich ein Triggern eines Timers notwendig.

Die zwei zusätzlichen N_timer sind in der Tat nicht notwendig, da sie die Daten einfach übernehmen.
Es erhöht aber für mich die Übersichtlichkeit, da ich nur noch auf die N_timer schauen kann.

So sehen jetzt die Readings aus:

READINGS:
     2018-02-21 15:49:03   Device          doif_RolloadenSteuerung
     2018-02-22 00:00:30   N_timer_01_c01  22.02.2018 10:49:00
     2018-02-22 00:00:30   N_timer_02_c02  22.02.2018 17:58:00
     2018-02-22 00:00:30   N_timer_03_c03  22.02.2018 10:49:00
     2018-02-22 00:00:30   N_timer_04_c04  22.02.2018 17:58:00
     2018-02-22 08:49:00   N_timer_05_c05  24.02.2018 08:49:00
     2018-02-22 00:00:30   N_timer_06_c06  24.02.2018 17:58:00
     2018-02-22 08:30:00   N_timer_07_c09  23.02.2018 08:30:00
     2018-02-21 18:30:00   N_timer_08_c10  22.02.2018 18:30:00
     2018-02-22 11:00:00   N_timer_09_c11  24.02.2018 11:00:00
     2018-02-21 19:10:00   N_timer_10_c12  24.02.2018 19:10:00
     2018-02-22 08:30:00   cmd             9
     2018-02-22 08:30:00   cmd_event       timer_7
     2018-02-22 08:30:00   cmd_nr          9
     2018-02-21 15:49:03   e_doif_RolloadenSteuerung_Automatik Zeit
     2018-02-21 15:49:03   e_doif_RolloadenSteuerung_Wochentage werktags
     2018-02-21 15:49:03   e_doif_RolloadenSteuerung_ku_zeit_hoch 08:30
     2018-02-21 15:49:03   e_doif_RolloadenSteuerung_ku_zeit_runter 18:30
     2018-02-21 12:39:48   mode            enabled
     2018-02-22 08:30:00   state           cmd_9
     2018-02-22 00:00:30   timer_01_c01    22.02.2018 10:49:00
     2018-02-22 00:00:30   timer_02_c02    22.02.2018 17:58:00
     2018-02-22 00:00:30   timer_03_c03    22.02.2018 10:49:00|AT
     2018-02-22 00:00:30   timer_04_c04    22.02.2018 17:58:00|AT
     2018-02-22 08:49:00   timer_05_c05    23.02.2018 08:49:00|WE
     2018-02-22 00:00:30   timer_06_c06    22.02.2018 17:58:00|WE
     2018-02-22 08:30:00   timer_07_c09    23.02.2018 08:30:00|AT
     2018-02-21 18:30:00   timer_08_c10    22.02.2018 18:30:00|AT
     2018-02-21 11:00:00   timer_09_c11    22.02.2018 11:00:00|WE
     2018-02-21 19:10:00   timer_10_c12    22.02.2018 19:10:00|WE


=> Auffallend sind für mich 2 Dinge, die ich mir nicht erklären kann:
1) Ich habe nur 10 anstatt 12 timer (nur 2 von 4 Timer mit Wochentage=alle wurden angelegt)
2) Aus den N_timern kann ich immer noch nicht ableiten, welcher timer als nächstes / übernächstes angeht (ich will doch nur die nächste Zeit für "hoch" und "runter" ^^)

weitere Infos:
userReadings [...] N_timer_09_c11:timer_09_c11.* {DOIFtoolsNextTimer(ReadingsVal("doif_RolloadenSteuerung_ku","timer_09_c11","none"),"doif_RolloadenSteuerung_ku")} [...]


CMD 1: ##Astro - alle Tage - hoch: Automatik=Astro and Wochentage=alle sunrise + Zeit nach sunrise
CMD 2: ##Astro - alle Tage - runter: Automatik=Astro and Wochentage=alle sunset - Zeit vor sunset
CMD 3: ##Astro - werktags - hoch: Automatik=Astro and Wochentage=werktags sunrise + Zeit nach sunrise AT
CMD 4: ##Astro - werktags - runter: Automatik=Astro and Wochentage=werktags sunset - Zeit vor sunset AT
CMD 5: ##Astro - WE - hoch: Automatik=Astro and Wochentage=werktags sunrise + Zeit_we nach sunrise WE
CMD 6: ##Astro - WE - runter: Automatik=Astro and Wochentage=werktags sunset - Zeit_we vor sunset WE

CMD 7: ##Zeit - alle Tage - hoch: Automatik=Zeit and Wochentage=alle 08:30 => Timer fehlt???
CMD 8: ##Zeit - alle Tage - runter: Automatik=Zeit and Wochentage=alle 18:30 => Timer fehlt???
CMD 9: ##Zeit - werktags - hoch: Automatik=Zeit and Wochentage=werktags 08:30 AT => wird morgen früh ausgeführt
CMD 10: ##Zeit - werktags - runter: Automatik=Zeit and Wochentage=werktags 18:30 AT => wird heute abend ausgeführt
CMD 11: ##Zeit - WE - hoch: Automatik=Zeit and Wochentage=werktags 11:00 WE
CMD 12: ##Zeit - WE - runter: Automatik=Zeit and Wochentage=werktags 19:10 WE

Ellert

#10
ZitatCMD 11:   ##Zeit - WE - hoch:         Automatik=Zeit       and Wochentage=werktags      11:00               WE    => N_timer fehlt???
wird doch angelegt
Zitat2018-02-22 11:00:00   N_timer_09_c11  24.02.2018 11:00:00

ZitatCMD 7:   ##Zeit - alle Tage - hoch:      Automatik=Zeit       and Wochentage=alle       08:30                   => Timer fehlt???
CMD 8:   ##Zeit - alle Tage - runter:      Automatik=Zeit       and Wochentage=alle       18:30                   => Timer fehlt???
haben keine Wochentagbeschränkung.

Altenativ kannst Du versuchen "WE AT", "0123456" oder "78" als Beschränkung anzugeben, vermutlich werden dann N_timer angelegt.

Zitat2) Aus den N_timern kann ich immer noch nicht ableiten, welcher timer als nächstes / übernächstes angeht (ich will doch nur die nächste Zeit für "hoch" und "runter" ^^)
Da musst Du Dir selbst etwas überlegen und als DOIF_Readings, in uiTable oder userReadings berechnen.



n4rrOx

Zitat von: Ellert am 22 Februar 2018, 15:48:45
wird doch angelegt
Sry, hast natürlich recht.
Dieser wurde erst im Nachhinein angelegt ... hab den Vermerk nur in den Readings vergessen rauszunehmen.

Zitat von: Ellert am 22 Februar 2018, 15:48:45
haben keine Wochentagbeschränkung.
Eigentlich ja, aber warum werden dann für CMD 1 und CMD 2 N_timer angelegt?
Diese haben auch keine Wochentagsbeschränkung.

Zitat von: Ellert am 22 Februar 2018, 15:48:45
Altenativ kannst Du versuchen "WE AT", "0123456" oder "78" als Beschränkung anzugeben, vermutlich werden dann N_timer angelegt.
Werde ich mal versuchen!

Zitat von: Ellert am 22 Februar 2018, 15:48:45
Da musst Du Dir selbst etwas überlegen und als DOIF_Readings, in uiTable oder userReadings berechnen.
Das ist ja genau der Punkt.
So wie es aussieht muss ich mir das mit jeweils einem weiteren DOIF aus meinen Vorgaben (Variablen) selbst berechnen lassen und dann als Reading abspeichern.
Das ist ja dann nochmal soviel Aufwand nur für die nächste Fahrt nach oben/unten  :o.
Mir würde gerade nur einfallen jeden Tag um 00:01 die Zeiten anhand von Automatikart (Astro/Zeit), Wochentag (werktags/WE) und Sunrise/Sunset +/- Verzögerung bzw. Zeitangabe zu ermitteln und dann in ein Reading schreiben lassen. Das jeweils für hoch und runter sowie jeden Rolladen.

Geht das nicht einfacher?   ???

Ellert

ZitatEigentlich ja, aber warum werden dann für CMD 1 und CMD 2 N_timer angelegt?
Das frage ich mich auch, aber Du solltest den Fragen, der sie angelegt hat.

ZitatGeht das nicht einfacher?
Die Frage ist nur zu beantworten, wenn es objektive Bewertungskriterien für Einfachheit gibt und mindesten zwei funktionierende Lösungen zum Vergleich vorliegen, ich kenne keine.