[Gelöst] DOIF keine Auswertung der Tage bei Zeitraum

Begonnen von RalfR, 29 Juni 2016, 11:23:26

Vorheriges Thema - Nächstes Thema

RalfR

Hallo,
habe da ein kleines Problem mit meinem DoIf für meine Umwälzpumpe, das ganze läuft auf einem Raspberry. Leider schaltet jeder Timer ohne Abhängigkeit der Tage, kann mir eventuell jemand sagen weshalb die Tage nicht ausgewertet werden ?



DOIF ([05:30-07:00|124]) (set Keller_WarmwasserPumpe on)
DOELSEIF ([05:30-12:00|3]) (set Keller_WarmwasserPumpe on)
DOELSEIF ([05:30-23:59|5]) (set Keller_WarmwasserPumpe on)
DOELSEIF ([14:00-23:59|1234]) (set Keller_WarmwasserPumpe on)
DOELSEIF ([08:00-23:59|06]) (set Keller_WarmwasserPumpe on)
DOELSE (set Keller_WarmwasserPumpe off)



Hatte das ganze auch schon mit "or" in weniger DOELSEIF verschachtelt , ändert aber am Problem nichts.



Sirel

Hallo Ralf,
der code sieht soweit ok aus, gleichwenn ich die Zeiten mit einem "or" verknüpfen würde.

Sonst mal ein List auf das DOIF machen, dann kann man mehr sagen.

Gruß,
Max

Ellert

Welche Version des DOIF ist geladen?
version DOIF

Mit dem nachstehenden DOIF kannst Du das Schaltverhalten des DOIF Loggen, poste mal das Ergebnis und markiere die Fehler.
define logDOIF DOIF (["^<DOIF-Name>$"]) ({Log 1, "Gerät: $DEVICE Events: $EVENTS"})
und das Attribut
do always

RalfR

@Max, mit dem "or" gebe ich dir recht, habe das ganze zur besseren Fehlersuche aufgesplittet
@Ellert werde heute Abend mal die Version abfragen  und den logDOIF einbauen

Danke für eure Mühe

Gruss
Ralf

RalfR

#4
wie setze ich das Attribute

do always

sorry bin da noch recht neu dabei

der LOG läuft erstmals und die Version ist die

98_DOIF.pm 11314 2016-04-26 18:29:24Z damian-s


Und wo kann ich das Log dann finden ?
Gruss und Danke

automatisierer

#5
ein 'list' vom dem Device ist bei der Fehlersuche immer hilfreich und das geht so:
im fhemweb in der Befehlszeile das eingeben
list <Device>

die Ausgabe davon dann bitte per copy/paste in code-Tags posten. Code Tags bekommst du wenn du auf die Raute (#) über dem Textfeld klickst.

################

das
attr <device> do always

kannst du ebenfalls in fhemweb einstellen. Du rufst einfach das DOIF auf, auf der Seite - ziemlich unten - stehen dann die 'Attributes' und in dem Feld darüber kannst du alle verfügbaren Attribute auswählen und einstellen. Das Attribut heißt in diesem Fall nur 'do' und der Wert den du dann als nächstes auswählen kannst heißt 'always'.




RalfR

Vielen Dank für die ausführliche Antwort, habe das attr do allways gefunden

nun das List meiner nicht richtig funktionierenden DOIF

Internals:
   DEF        ([Urlaub] eq "ja")
   (set Keller_WarmwasserPumpe off)
DOELSEIF ([05:30-07:00|124])
(set Keller_WarmwasserPumpe on)
DOELSEIF ([05:30-12:00|3])
(set Keller_WarmwasserPumpe on)
DOELSEIF ([05:30-23:59|5])
(set Keller_WarmwasserPumpe on)
DOELSEIF ([14:00-23:59|1234])
(set Keller_WarmwasserPumpe on)
DOELSEIF ([08:00-23:59|06])
(set Keller_WarmwasserPumpe on)
DOELSE (set Keller_WarmwasserPumpe off)
   NAME       di_WarmwasserPumpe
   NR         122
   NTFY_ORDER 50-di_WarmwasserPumpe
   STATE      cmd_5
   TYPE       DOIF
   Readings:
     2016-06-27 21:13:36   Device          Urlaub
     2016-06-29 14:00:00   cmd             5
     2016-06-29 14:00:00   cmd_event       timer_7
     2016-06-29 14:00:00   cmd_nr          5
     2016-06-27 21:13:36   e_Urlaub_STATE  nein
     2016-06-29 14:00:00   state           cmd_5
     2016-06-28 23:59:00   timer_10_c6     29.06.2016 23:59:00|06
     2016-06-29 07:00:00   timer_1_c2      30.06.2016 05:30:00|124
     2016-06-29 07:00:00   timer_2_c2      30.06.2016 07:00:00|124
     2016-06-29 12:00:00   timer_3_c3      30.06.2016 05:30:00|3
     2016-06-29 12:00:00   timer_4_c3      30.06.2016 12:00:00|3
     2016-06-28 23:59:00   timer_5_c4      29.06.2016 05:30:00|5
     2016-06-28 23:59:00   timer_6_c4      29.06.2016 23:59:00|5
     2016-06-28 23:59:00   timer_7_c5      29.06.2016 14:00:00|1234
     2016-06-28 23:59:00   timer_8_c5      29.06.2016 23:59:00|1234
     2016-06-28 23:59:00   timer_9_c6      29.06.2016 08:00:00|06
   Condition:
     0          InternalDoIf($hash,'Urlaub','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "ja"
     1          DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"124")
     2          DOIF_time($hash,$hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,"3")
     3          DOIF_time($hash,$hash->{realtime}{4},$hash->{realtime}{5},$wday,$hms,"5")
     4          DOIF_time($hash,$hash->{realtime}{6},$hash->{realtime}{7},$wday,$hms,"1234")
     5          DOIF_time($hash,$hash->{realtime}{8},$hash->{realtime}{9},$wday,$hms,"06")
   Days:
     0          124
     1          124
     2          3
     3          3
     4          5
     5          5
     6          1234
     7          1234
     8          06
     9          06
   Devices:
     0           Urlaub
     all         Urlaub
   Do:
     0:
       0          set Keller_WarmwasserPumpe off
     1:
       0          set Keller_WarmwasserPumpe on
     2:
       0          set Keller_WarmwasserPumpe on
     3:
       0          set Keller_WarmwasserPumpe on
     4:
       0          set Keller_WarmwasserPumpe on
     5:
       0          set Keller_WarmwasserPumpe on
     6:
       0          set Keller_WarmwasserPumpe off
   Helper:
     event      timer_7
     globalinit 1
     last_timer 10
     sleeptimer -1
     timerdev
     timerevent timer_7
     triggerDev
     timerevents:
       timer_7
     timereventsState:
       state: nein
     triggerEvents:
       timer_7
     triggerEventsState:
       state: nein
   Internals:
     0           Urlaub:STATE
     all         Urlaub:STATE
   Interval:
     0          -1
     1          0
     2          -1
     3          2
     4          -1
     5          4
     6          -1
     7          6
     8          -1
     9          8
   Itimer:
   Localtime:
     0          1467257400
     1          1467262800
     2          1467257400
     3          1467280800
     4          1467171000
     5          1467237540
     6          1467201600
     7          1467237540
     8          1467180000
     9          1467237540
   Readings:
   Realtime:
     0          05:30:00
     1          07:00:00
     2          05:30:00
     3          12:00:00
     4          05:30:00
     5          23:59:00
     6          14:00:00
     7          23:59:00
     8          08:00:00
     9          23:59:00
   Regexp:
     0:
     1:
     2:
     3:
     4:
     5:
     All:
   State:
   Time:
     0          05:30:00
     1          07:00:00
     2          05:30:00
     3          12:00:00
     4          05:30:00
     5          23:59:00
     6          14:00:00
     7          23:59:00
     8          08:00:00
     9          23:59:00
   Timecond:
     0          1
     1          1
     2          2
     3          2
     4          3
     5          3
     6          4
     7          4
     8          5
     9          5
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
     8          0
     9          0
   Timers:
     1           0  1
     2           2  3
     3           4  5
     4           6  7
     5           8  9
   Trigger:
   Triggertime:
     1467237540:
       localtime  1467237540
       Hash:
     1467257400:
       localtime  1467257400
       Hash:
     1467262800:
       localtime  1467262800
       Hash:
     1467280800:
       localtime  1467280800
       Hash:
Attributes:

Ellert

#7
Zitat von: RalfR am 29 Juni 2016, 20:13:10
wie setze ich das Attribute

do always

sorry bin da noch recht neu dabei

der LOG läuft erstmals und die Version ist die

98_DOIF.pm 11314 2016-04-26 18:29:24Z damian-s


Und wo kann ich das Log dann finden ?
Gruss und Danke
Zur Klärung dieser essentiellen Fragen solltes Du Dich mit den Grundfunktionen des Frontends vertraut machen und Dir mal die Menüpunkte ansehen, siehe auch http://www.fhemwiki.de/wiki/Erste_Schritte_in_fhem

Zitat von: RalfR am 29 Juni 2016, 20:33:18
Vielen Dank für die ausführliche Antwort, habe das attr do allways gefunden

nun das List meiner nicht richtig funktionierenden DOIF

Internals:
   DEF        ([Urlaub] eq "ja")
   (set Keller_WarmwasserPumpe off)
DOELSEIF ([05:30-07:00|124])
(set Keller_WarmwasserPumpe on)
DOELSEIF ([05:30-12:00|3])
(set Keller_WarmwasserPumpe on)
DOELSEIF ([05:30-23:59|5])
(set Keller_WarmwasserPumpe on)
DOELSEIF ([14:00-23:59|1234])
(set Keller_WarmwasserPumpe on)
DOELSEIF ([08:00-23:59|06])
(set Keller_WarmwasserPumpe on)
DOELSE (set Keller_WarmwasserPumpe off)
   NAME       di_WarmwasserPumpe
   NR         122
   NTFY_ORDER 50-di_WarmwasserPumpe
   STATE      cmd_5
   TYPE       DOIF
   Readings:
     2016-06-27 21:13:36   Device          Urlaub
     2016-06-29 14:00:00   cmd             5
     2016-06-29 14:00:00   cmd_event       timer_7
     2016-06-29 14:00:00   cmd_nr          5
     2016-06-27 21:13:36   e_Urlaub_STATE  nein
     2016-06-29 14:00:00   state           cmd_5
     2016-06-28 23:59:00   timer_10_c6     29.06.2016 23:59:00|06
     2016-06-29 07:00:00   timer_1_c2      30.06.2016 05:30:00|124
     2016-06-29 07:00:00   timer_2_c2      30.06.2016 07:00:00|124
     2016-06-29 12:00:00   timer_3_c3      30.06.2016 05:30:00|3
     2016-06-29 12:00:00   timer_4_c3      30.06.2016 12:00:00|3
     2016-06-28 23:59:00   timer_5_c4      29.06.2016 05:30:00|5
     2016-06-28 23:59:00   timer_6_c4      29.06.2016 23:59:00|5
     2016-06-28 23:59:00   timer_7_c5      29.06.2016 14:00:00|1234
     2016-06-28 23:59:00   timer_8_c5      29.06.2016 23:59:00|1234
     2016-06-28 23:59:00   timer_9_c6      29.06.2016 08:00:00|06
   Condition:
     0          InternalDoIf($hash,'Urlaub','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "ja"
     1          DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"124")
     2          DOIF_time($hash,$hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,"3")
     3          DOIF_time($hash,$hash->{realtime}{4},$hash->{realtime}{5},$wday,$hms,"5")
     4          DOIF_time($hash,$hash->{realtime}{6},$hash->{realtime}{7},$wday,$hms,"1234")
     5          DOIF_time($hash,$hash->{realtime}{8},$hash->{realtime}{9},$wday,$hms,"06")
   Days:
     0          124
     1          124
     2          3
     3          3
     4          5
     5          5
     6          1234
     7          1234
     8          06
     9          06
   Devices:
     0           Urlaub
     all         Urlaub
   Do:
     0:
       0          set Keller_WarmwasserPumpe off
     1:
       0          set Keller_WarmwasserPumpe on
     2:
       0          set Keller_WarmwasserPumpe on
     3:
       0          set Keller_WarmwasserPumpe on
     4:
       0          set Keller_WarmwasserPumpe on
     5:
       0          set Keller_WarmwasserPumpe on
     6:
       0          set Keller_WarmwasserPumpe off
   Helper:
     event      timer_7
     globalinit 1
     last_timer 10
     sleeptimer -1
     timerdev
     timerevent timer_7
     triggerDev
     timerevents:
       timer_7
     timereventsState:
       state: nein
     triggerEvents:
       timer_7
     triggerEventsState:
       state: nein
   Internals:
     0           Urlaub:STATE
     all         Urlaub:STATE
   Interval:
     0          -1
     1          0
     2          -1
     3          2
     4          -1
     5          4
     6          -1
     7          6
     8          -1
     9          8
   Itimer:
   Localtime:
     0          1467257400
     1          1467262800
     2          1467257400
     3          1467280800
     4          1467171000
     5          1467237540
     6          1467201600
     7          1467237540
     8          1467180000
     9          1467237540
   Readings:
   Realtime:
     0          05:30:00
     1          07:00:00
     2          05:30:00
     3          12:00:00
     4          05:30:00
     5          23:59:00
     6          14:00:00
     7          23:59:00
     8          08:00:00
     9          23:59:00
   Regexp:
     0:
     1:
     2:
     3:
     4:
     5:
     All:
   State:
   Time:
     0          05:30:00
     1          07:00:00
     2          05:30:00
     3          12:00:00
     4          05:30:00
     5          23:59:00
     6          14:00:00
     7          23:59:00
     8          08:00:00
     9          23:59:00
   Timecond:
     0          1
     1          1
     2          2
     3          2
     4          3
     5          3
     6          4
     7          4
     8          5
     9          5
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
     8          0
     9          0
   Timers:
     1           0  1
     2           2  3
     3           4  5
     4           6  7
     5           8  9
   Trigger:
   Triggertime:
     1467237540:
       localtime  1467237540
       Hash:
     1467257400:
       localtime  1467257400
       Hash:
     1467262800:
       localtime  1467262800
       Hash:
     1467280800:
       localtime  1467280800
       Hash:
Attributes:


Das DOIF hat doch richtig geschaltet
Zitat2016-06-29 14:00:00   cmd_event       timer_7
und
Zitat2016-06-29 14:00:00   state           cmd_5
, heute ist 4.

RalfR

#8
Leider nein, heute morgen um 7.00 Uhr hat es abgeschalten obwohl dieses am Mittwoch nicht sein soll. Und weshalb ist heute 4, dachte Mittwoch ist 3 ??

Gruss
Ralf

automatisierer

#9
was für ne Server-Hardware hast du denn? stimmt bei der das Datum und die Zeit??



EDIT:
Auszug aus der Comandreff:

Wochentagsteuerung   back

Hinter der Zeitangabe kann ein oder mehrere Wochentage als Ziffer getrennt mit einem Pipezeichen | angegeben werden. Die Syntax lautet:

[<time>|012345678] 0-8 entspricht: 0-Sonntag, 1-Montag, ... bis 6-Samstag sowie 7 für Wochenende und Feiertage (entspricht $we) und 8 für Arbeitstage (entspricht !$we)

Anwendungsbeispiel: Radio soll am Wochenende und an Feiertagen um 08:30 Uhr eingeschaltet und um 09:30 Uhr ausgeschaltet werden. An Arbeitstagen soll das Radio um 06:30 Uhr eingeschaltet und um 07:30 Uhr ausgeschaltet werden.

define di_radio DOIF ([06:30|8] or [08:30|7]) (set radio on) DOELSEIF ([07:30|8] or [09:30|7]) (set radio off)

Anstatt einer Zifferkombination kann ein Status oder Reading in eckigen Klammern angegeben werden. Dieser muss zum Triggerzeitpunkt mit der gewünschten Ziffernkombination für Wochentage, wie oben definiert, belegt sein.

Anwendungsbeispiel: Der Wochentag soll über einen Dummy bestimmt werden.

define dummy Wochentag
set Wochentag 135

define di_radio DOIF ([06:30|[Wochentag]]) (set radio on) DOELSEIF ([07:30|[Wochentag]]) (set radio off)


wenn mein Kalender nich kaputt is, is Heute Mittwoch - also '4'

Ellert

Zitat von: RalfR am 29 Juni 2016, 20:43:07
Leider nein, heute morgen um 7.00 Uhr hat es abgeschalten obwohl dieses am Mittwoch nicht sein soll. Und weshalb ist heute 4, dachte Mittwoch ist 3 ??

Gruss
Ralf

Heute hat es um 7 Uhr abgeschaltet, weil die angegebene Zeitspanne DOELSEIF ([05:30-07:00|124]) dann endet, weil keine andere Bedingung zutrifft, tritt DOELSE in Kraft.

RalfR

#11
Hmmmmm ????? auch am Mittwoch  dachte
Sonntag 0,
Montag 1,
Dienstag 2,
Mittwoch 3,
Donnerstag 4,
Freitag 5,
Sonntag 6,
WE 7,
nicht WE 8

Ellert

Mein Fehler, ich war gedanklich schon bei Donnerstag  ::)

automatisierer

 8)mein Kalender ist nicht kaputt, aber mein Kopf offensichtlich. Heute ist natürlich nicht '4', sondern '3'

damit kämen wir wieder zu dem aktuellen Datum deines Servers.

RalfR

Da wir jetzt bei Mittwoch "3" sind sollte eigentlich alles von 5.30 bis 12.00 laufen und nicht um 7.00 abschalten

Raspberry meint :
Mi 29. Jun 20:57:10 CEST 2016