Stati in Bedingungen werden ignoriert, ich verstehe es nicht...

Begonnen von Bartimaus, 07 Oktober 2017, 13:10:04

Vorheriges Thema - Nächstes Thema

Bartimaus

MoinMoin,

vielleicht kann mir einer mal auf die Sprünge helfen, denn ich stehe auf dem Schlauch.

Folgende Bedingung habe ich:
((([06:25-22:15] and [RolloSteuerungHinten] eq "88") ## Heute + morgen Arbeit
or
([06:25:30-23:01] and [RolloSteuerungHinten] eq "87") ## Heute Arbeit + morgen frei
or
([([RolloWEHinten]+[00:00:01])-22:16] and [RolloSteuerungHinten] eq "78") ## Heute Frei + morgen Arbeit
or
([([RolloWEHinten]+[00:00:02])-23:02] and [RolloSteuerungHinten] eq "77") ## Heute + morgen Frei
)
and [1wire_Lux:Helligkeit] > [1wireLuxRollo])  ## wenn hell
(set Rollo.Wohnzimmer on)
DOELSE
(set Rollo.Wohnzimmer pct 8)


"RolloSteuerungHinten" hat heute als Status "77".

Dennoch wurde Timer No. 5 heute morgen ausgeführt. TimerNo 5 hat aber als Bedingung "78"...
Erwartet habe ich Timer No.7
LG
B.


FHEM@Intel-J4105@Debian-LXC, CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

viegener

Bleibt mir rätselhaft, auch beim zweiten durchlesen. Was ist timer 5 und warum sollte es beim status 77 nicht ausgeführt werden?
Ganz zu schweigen davon, dass die Werte von RolloWEHinten und den lux werten im wahrsten sinne des Wortes im Dunkeln liegen
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Esjay

eq gilt doch nur für Zeichenketten. Sollte da nicht eher == hin?
Grüße

viegener

Auf der perl ebene sollte das keine Rolle spielen, denn auch der Vergleichswert ist ja als String angegeben. Ich denke dass gilt auch für DOIF. Normalerweise tritt ja nur umgekehrt ein Problem auf.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Bartimaus

Ok:

RolloWEHinten ist ein Dummy mit Zeitangaben. zZt = 09:00 Uhr
Lux ist um diese Uhrzeit > 1wireLuxRollo

Um 09:00 Uhr ist "and [1wire_Lux:Helligkeit] > [1wireLuxRollo]" = true

Timer 5 ist IMO lt. zählweise die 5. Uhrzeit, also die in der 3. OR-Verknüpfung zu der wiederum als Bedingung [RolloSteuerungHinten] eq "78" gehört.

Da das State von RolloSteuerungHinten heute "77" ist, ist diese Bedingung aus der 3.OR-Verknüpfung jedoch nicht wahr. Dennoch hat diese Bedingung ausgelöst und "Timer 5" "aktiviert...

Zu sehen hier im Log:

2017-10-07_09:00:22 Ti_RolloWzDOELSE fts_shutter_10
2017-10-07_09:00:22 Ti_RolloWzDOELSE cmd_event: timer_5
2017-10-07_09:00:22 Ti_RolloWzDOELSE cmd: 1
2017-10-07_09:00:22 Ti_RolloWzDOELSE cmd_nr: 1
2017-10-07_09:00:21 Ti_RolloWzDOELSE cmd_count: 1
2017-10-07_09:00:21 Ti_RolloWzDOELSE wait_timer: no timer
2017-10-07_09:00:11 Ti_RolloWzDOELSE wait_timer: 07.10.2017 09:00:21 cmd_1 timer_5
2017-10-07_09:00:11 Ti_RolloWzDOELSE wait_timer: no timer


LG
B.


FHEM@Intel-J4105@Debian-LXC, CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Ellert

Poste mal ein vollständiges "list" vom DOIF und die Version.

Bartimaus

#6
Bitte:

FHEM ist aktuell. Wo bekomme ich die DOIF-Versionsnummer heraus ? 98_DOIF.pm 14790 2017-07-26 10:27:41Z Damian $ ?


Internals:
   DEF        ((([06:25-22:15] and [RolloSteuerungHinten] eq "88") ## Heute + morgen Arbeit
or
([06:25:30-23:01] and [RolloSteuerungHinten] eq "87") ## Heute Arbeit + morgen frei
or
([([RolloWEHinten]+[00:00:01])-22:16] and [RolloSteuerungHinten] eq "78") ## Heute Frei + morgen Arbeit
or
([([RolloWEHinten]+[00:00:02])-23:02] and [RolloSteuerungHinten] eq "77") ## Heute + Frei
)
and [1wire_Lux:Helligkeit] > [1wireLuxRollo]  ## wenn hell
and [AufArbeit] eq "off")              ## wenn Anwesend
(set Rollo.Wohnzimmer on)
DOELSE
(set Rollo.Wohnzimmer pct 8)

   NAME       Ti_RolloWzDOELSE
   NR         964
   NTFY_ORDER 50-Ti_RolloWzDOELSE
   STATE      fts_shutter_10
   TYPE       DOIF
   READINGS:
     2017-10-07 20:10:09   Device          1wire_Lux
     2017-10-07 09:58:50   cmd             1
     2017-10-07 09:58:49   cmd_count       1
     2017-10-07 09:58:50   cmd_event       1wire_Lux
     2017-10-07 09:58:50   cmd_nr          1
     2017-10-07 20:10:09   e_1wire_Lux_Helligkeit 4.076
     2017-10-07 09:58:50   state           fts_shutter_10
     2017-10-07 09:53:36   timer_01_c01    08.10.2017 06:25:00
     2017-10-07 09:53:36   timer_02_c01    07.10.2017 22:15:00
     2017-10-07 09:53:36   timer_03_c01    08.10.2017 06:25:30
     2017-10-07 09:53:36   timer_04_c01    07.10.2017 23:01:00
     2017-10-07 09:53:36   timer_05_c01    08.10.2017 09:00:01
     2017-10-07 09:53:36   timer_06_c01    07.10.2017 22:16:00
     2017-10-07 09:53:36   timer_07_c01    08.10.2017 09:00:02
     2017-10-07 09:53:36   timer_08_c01    07.10.2017 23:02:00
     2017-10-07 19:10:06   wait_timer      07.10.2017 21:10:06 cmd_2 1wire_Lux
   condition:
     0          ((DOIF_time($hash,0,1,$wday,$hms) and InternalDoIf($hash,'RolloSteuerungHinten','STATE') eq "88")  or (DOIF_time($hash,2,3,$wday,$hms) and InternalDoIf($hash,'RolloSteuerungHinten','STATE') eq "87")  or (DOIF_time($hash,4,5,$wday,$hms) and InternalDoIf($hash,'RolloSteuerungHinten','STATE') eq "78")  or (DOIF_time($hash,6,7,$wday,$hms) and InternalDoIf($hash,'RolloSteuerungHinten','STATE') eq "77")  ) and ReadingValDoIf($hash,'1wire_Lux','Helligkeit') > InternalDoIf($hash,'1wireLuxRollo','STATE')   and InternalDoIf($hash,'AufArbeit','STATE') eq "off"
   days:
   devices:
     0           RolloSteuerungHinten 1wire_Lux 1wireLuxRollo AufArbeit
     all         RolloSteuerungHinten 1wire_Lux 1wireLuxRollo AufArbeit
   do:
     0:
       0          set Rollo.Wohnzimmer on
     1:
       0          set Rollo.Wohnzimmer pct 8
   helper:
     event      Helligkeit: 4.076
     globalinit 1
     last_timer 8
     sleepdevice 1wire_Lux
     sleepsubtimer 0
     sleeptimer 1
     timerdev   1wire_Lux
     timerevent Helligkeit: 4.076
     triggerDev 1wire_Lux
     timerevents:
       Helligkeit: 4.076
     timereventsState:
       Helligkeit: 4.076
     triggerEvents:
       Helligkeit: 4.076
     triggerEventsState:
       Helligkeit: 4.076
   internals:
     0           RolloSteuerungHinten:STATE 1wireLuxRollo:STATE AufArbeit:STATE
     all         RolloSteuerungHinten:STATE 1wireLuxRollo:STATE AufArbeit:STATE
   interval:
     0          -1
     1          0
     2          -1
     3          2
     4          -1
     5          4
     6          -1
     7          6
   itimer:
     all         RolloWEHinten
   localtime:
     0          1507436700
     1          1507407300
     2          1507436730
     3          1507410060
     4          1507446001
     5          1507407360
     6          1507446002
     7          1507410120
   readings:
     0           1wire_Lux:Helligkeit
     all         1wire_Lux:Helligkeit
   realtime:
     0          06:25:00
     1          22:15:00
     2          06:25:30
     3          23:01:00
     4          09:00:01
     5          22:16:00
     6          09:00:02
     7          23:02:00
   regexp:
     0:
     all:
   state:
     STATE:
   time:
     0          06:25:00
     1          22:15:00
     2          06:25:30
     3          23:01:00
     4          ([RolloWEHinten]+[00:00:01])
     5          22:16:00
     6          ([RolloWEHinten]+[00:00:02])
     7          23:02:00
   timeCond:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
   timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
   timers:
     0           0  1  2  3  4  5  6  7
   trigger:
   triggertime:
     1507407300:
       localtime  1507407300
       hash:
     1507407360:
       localtime  1507407360
       hash:
     1507410060:
       localtime  1507410060
       hash:
     1507410120:
       localtime  1507410120
       hash:
     1507436700:
       localtime  1507436700
       hash:
     1507436730:
       localtime  1507436730
       hash:
     1507446001:
       localtime  1507446001
       hash:
     1507446002:
       localtime  1507446002
       hash:
Attributes:
   cmdState   fts_shutter_10|fts_shutter_100
   disable    0
   group      01 Timer
   repeatsame 1:1
   room       DOIF,Jalousien
   setList    state:on,off
   timerWithWait 1
   wait       10:[WaitWz]
   webCmd     on:off
LG
B.


FHEM@Intel-J4105@Debian-LXC, CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Ellert

Bei einer älteren Version gab es mal einen verschobenen Timer, das ist damit ausgeschlossen.

Bartimaus

Aha, dennoch hierfür eine Idee wieso es nicht so funktioniert wie gewünscht?
LG
B.


FHEM@Intel-J4105@Debian-LXC, CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

viegener

Zitat von: amenomade am 08 Oktober 2017, 00:09:20
Was ist zwischen 09:00:00 und 09:00:11 passiert?

Ja das sieht komisch aus.

Ausserdem ich vermute die log-Einträge sind einfach in der Reihenfolge vertauscht worden (und die Zeit läuft nicht rückwärts)

Generell ist mir aber unklar wo das Problem liegt, denn das DOIF sollte doch heute morgen um 9 und eine Sekunde feuern, oder?

Also geht es nur darum, dass der cmd_event timer_5 nennt?
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Ellert

Zitat von: Bartimaus am 07 Oktober 2017, 23:35:13
Aha, dennoch hierfür eine Idee wieso es nicht so funktioniert wie gewünscht?

Setze mal DOIFtools darauf an und setze specialLog auf 1, s. https://wiki.fhem.de/wiki/DOIFtools#Erstellen_eines_Debug-Logfile

Wenn Du reverseLog nicht ausschaltest, musst Du Dir dass Logfile allein ansehen.

.sknil hcan sthcer nov nebierhcs eiw tsi goLesreveR

Bartimaus

Zitat von: viegener am 08 Oktober 2017, 02:42:26
Also geht es nur darum, dass der cmd_event timer_5 nennt?

Korrekt, und auch ausführt !

Ja, ich habe ReverseLog eingeschaltet, wegen meiner langen Jahreslog bei Tempsensoren

DOIFTools schaue ich mir jetzt mal an.

LG
B.


FHEM@Intel-J4105@Debian-LXC, CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Bartimaus

#13
Zitat von: amenomade am 08 Oktober 2017, 00:09:20
Was ist zwischen 09:00:00 und 09:00:11 passiert?

Jetzt ohne ReverseLog... ::)


2017-10-07_00:00:28 Ti_RolloHintenDoelse wait_timer: 07.10.2017 00:15:28 cmd_2 RolloSteuerungHinten
2017-10-07_00:15:28 Ti_RolloHintenDoelse wait_timer: no timer
2017-10-07_06:25:00 Ti_RolloHintenDoelse wait_timer: 07.10.2017 06:40:00 cmd_2 timer_1
2017-10-07_06:40:00 Ti_RolloHintenDoelse wait_timer: no timer
2017-10-07_07:33:17 Ti_RolloHintenDoelse wait_timer: 07.10.2017 07:48:17 cmd_2 1wire_Lux
2017-10-07_07:48:18 Ti_RolloHintenDoelse wait_timer: no timer
2017-10-07_07:53:17 Ti_RolloHintenDoelse wait_timer: 07.10.2017 08:08:17 cmd_2 1wire_Lux
2017-10-07_08:08:17 Ti_RolloHintenDoelse wait_timer: no timer
2017-10-07_08:13:16 Ti_RolloHintenDoelse wait_timer: 07.10.2017 08:28:16 cmd_2 1wire_Lux
2017-10-07_08:28:16 Ti_RolloHintenDoelse wait_timer: no timer
2017-10-07_08:33:06 Ti_RolloHintenDoelse wait_timer: 07.10.2017 08:48:06 cmd_2 1wire_Lux
2017-10-07_08:48:06 Ti_RolloHintenDoelse wait_timer: no timer
2017-10-07_08:48:12 Ti_RolloHintenDoelse wait_timer: 07.10.2017 09:03:12 cmd_2 1wire_Lux
2017-10-07_09:00:11 Ti_RolloHintenDoelse wait_timer: no timer
2017-10-07_09:00:11 Ti_RolloHintenDoelse wait_timer: 07.10.2017 09:00:41 cmd_1 timer_5
2017-10-07_09:00:42 Ti_RolloHintenDoelse wait_timer: no timer
2017-10-07_09:00:42 Ti_RolloHintenDoelse cmd_count: 1
2017-10-07_09:00:43 Ti_RolloHintenDoelse cmd_nr: 1
2017-10-07_09:00:43 Ti_RolloHintenDoelse cmd: 1
2017-10-07_09:00:43 Ti_RolloHintenDoelse cmd_event: timer_5
2017-10-07_09:00:43 Ti_RolloHintenDoelse fts_shutter_10


Nichts....

Um Mitternacht wird "RolloSteuerungHinten" neu gesetzt. deswegen der Eintrag.
Es gibt die Ausprägungen:

77 = Heute + morgen frei; entspricht [NRW_Feiertag:today] ne "none + [NRW_Feiertag:tomorrow] ne "none"
78 = Heute frei + morgen Arbeit/Schule
87 = Heute Arbeit/Schule, morgen frei
88 = Heute + morgen Arbeit/Schule

LG
B.


FHEM@Intel-J4105@Debian-LXC, CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

viegener

Zitat von: Bartimaus am 08 Oktober 2017, 11:08:44
Korrekt, und auch ausführt !


Ja, um 9 Uhr und 2 Sekunden wurde gestern die letzte Timerbedingung Deines DOIFs
([([RolloWEHinten]+[00:00:02])-23:02] and [RolloSteuerungHinten] eq "77") ## Heute + Frei
wahr und damit der Befehl ausgeführt, also ist die Ausführung doch völlig in Ordnung.

Ich habe jetzt nicht den ganzen DOIF-Code durchgelesen und ich verstehe, dass timer_5 hier inkonsistent ist, es gibt ja erstmal kein Fehlverhalten oder übersehe ich etwas?



Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können