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

Bartimaus

#15
??

Im Log steht doch
2017-10-07_09:00:11 Ti_RolloHintenDoelse wait_timer: 07.10.2017 09:00:41 cmd_1 timer_5

und Timer5 gehört zur Bedingung "78"

Im Sommer wenn die Zeit die ausführende Bedingung ist, hat es eben nicht korrekt funktioniert...
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, 12:29:47
??

Im Log steht doch
2017-10-07_09:00:11 Ti_RolloHintenDoelse wait_timer: 07.10.2017 09:00:41 cmd_1 timer_5

und Timer5 gehört zur Bedingung "78"

Nochmal zur Erklärung gestern morgen um 9 Uhr sollte das DOIF schalten und hat es getan - also kein Problem damit, oder?

Hast Du eine Dokumentation gefunden, dass die Zählweise von timer in den events gleich der in den Readings sein muss, vielleicht ist durch die interne Logik die Zählweise anders? Ich versuche immer noch rauszufinden ob Du ein Fehlverhalten hast (und welches) oder ob es um einen Logeintrag geht?




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

Bartimaus

Zitat von: viegener am 08 Oktober 2017, 12:45:33
Nochmal zur Erklärung gestern morgen um 9 Uhr sollte das DOIF schalten und hat es getan - also kein Problem damit, oder?

Ja, es hat geschaltet.
Aber ich finde aus den "falschen Gründen", auch wenn es augenscheinlich korrekt erscheint

Zitat von: viegener am 08 Oktober 2017, 12:45:33

Hast Du eine Dokumentation gefunden, dass die Zählweise von timer in den events gleich der in den Readings sein muss, vielleicht ist durch die interne Logik die Zählweise anders? Ich versuche immer noch rauszufinden ob Du ein Fehlverhalten hast (und welches) oder ob es um einen Logeintrag geht?

Wie gesagt, Im Sommer, wenn die Bedingung gem. Timer endet, hat er in der Tat falsch geschaltet, nämlich so wie es im Log gem. Timer steht, d.h. es wurde der falsche Timer ausgeführt, zu dem die Bedingung = false ist.

Eine Doku habe ich nicht gefunden, in der das mit den Timern/Events/Log definiert wird, es erschien mir nur logisch.
LG
B.


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

viegener

ich habe eine andere logische Erklärung für Dich, die ich aber nicht wirklich im Code von DOIF beweisen konnte. Die Bedingung timer_5 war um 9 Uhr als geschaltet wurde offensichtlich (ebenfalls) wahr. Mein Gefühl ist, dass DOIF prüft ob eine Timerbedingung wahr ist und dann die Bendingungen für einen cmd-Zweig abprüft (diese stehen ja als Gesamtbedingung im internal condition). Dann wird die Nummer eines gültigen Timers ausgegeben wenn die Bedingung wahr ist in diesem Fall ist timer_5 der erste Timer der wirklich wahr ist.

Also mein Vorschlag: Wenn Du einen Fehler beobachtest, versuche in dem Moment das zu dokumentieren, aber nicht wenn es einen möglicherweise missverständlichen logeintrag gibt, den ich als eher intern sehen würde.

Ich vermute heute morgen stand bei der Schaltung ebenfalls timer5 im log???

Du kannst auch einfach mal die beiden bedingungen mit timer5 und timer7 tauschen und am nächsten Samstag vermute ich wirst du im log wieder timer5 sehen. In diesem Fall ist es nach Deinem Verstädnis auch korrekt. Allerdings wirst Du dann am Sonntag auch timer5 sehen und das wäre dann nach Deiner Interpretation falsch...
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

amenomade

#19
ZitatIm Log steht doch
Code: [Auswählen]

2017-10-07_09:00:11 Ti_RolloHintenDoelse wait_timer: 07.10.2017 09:00:41 cmd_1 timer_5

Die Frage, die ich gestellt habe, hat einen Grund:
([RolloWEHinten]+[00:00:01])-22:16]
Sowas triggert um 09:00:01.  Triggern heisst nicht "Befehl ausführen". Dann läuft der Timer bis 09:00:11. Das ist normal.

[([RolloWEHinten]+[00:00:02])-23:02]
Sowas sollte um 09:00:02 triggern. Dann läuft der Timer bis 09:00:12. Aber nicht, wenn der andere Timer noch läuft. Wenn Du willst, dass die Bedingung wieder geprüft wird, musst Du das Attribute do resetwait setzen.

Deswegen meine Frage: was ist dann zwischen 09:00:00 und 09:00:11 passiert? Gibt es nix in der Log? Ein DOIF funktioniert mit Zustandwechseln. Deswegen ist es wichtig zu wissen, was passiert ist, um zu sehen, was nach und nach kommt.

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

Bartimaus

Das ist eine gute Idee mit dem tauschen.
Heute morgen hat wieder Timer5 gefeuert, was ja wahr ist/war.

Parallel habe ich das Loggng mittels DOIFTools eingeschaltet, sowie ein ähnliches DOIF erstellt, jedoch ohne OR, dafür mit DOELSEIF. (Jedoch gab es da auch mal einen Bug mit gleichen Timern und Wochentagsabfrage, deswegen hatte ich auf OR-Bedingung) umgebaut.
LG
B.


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

amenomade

Ich muss sagen, ich versteh nicht, was Du genau möchtest.
Wenn 78 dann um 09:00:11 schalten, und wenn 77 dann um 09:00:12? Welchen Sinn hat diese Sekunde Verzögerung???
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Damian

Also man kann sagen:

1) die Reihenfolge der Timer stimmt mit der tatsächlichen überein
2) der Timer_5 gehört zu der Zeile ([([RolloWEHinten]+[00:00:01])-22:16] and [RolloSteuerungHinten] eq "78")
3) auch wenn der Timer_5 getriggert hat, muss nicht die obige Bedingung wahr sein
4) wenn cmd 1 durch Timer_5 ausgelöst worden ist, wird entweder ([06:25-22:15] and [RolloSteuerungHinten] eq "88") oder ([06:25:30-23:01] and [RolloSteuerungHinten] eq "87") wahr gewesen sein
5) ([([RolloWEHinten]+[00:00:02])-23:02] and [RolloSteuerungHinten] eq "77") kann um [RolloWEHinten]+[00:00:01] (Auslösezeitpunkt von timer_5) nicht wahr gewesen sein, weil das Zeitintervall eine Sekunde später erst wahr ist

jetzt brauchen wir den Nachweis über den Zustand von [RolloSteuerungHinten] um [RolloWEHinten]+[00:00:01] (Triggerzeitpunkt von Timer 5)



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

viegener

Es sieht aber laut log so aus, als ob das DOIF-Modul erst um 9:00:11 wieder zur Überprüfung gekommen ist:
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

und zu der Zeit war:
([([RolloWEHinten]+[00:00:02])-23:02] and [RolloSteuerungHinten] eq "77")
inzwischen wahr, oder sehe ich das falsch?

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

Damian

Zitat von: viegener am 08 Oktober 2017, 13:55:37
Es sieht aber laut log so aus, als ob das DOIF-Modul erst um 9:00:11 wieder zur Überprüfung gekommen ist:
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

und zu der Zeit war:
([([RolloWEHinten]+[00:00:02])-23:02] and [RolloSteuerungHinten] eq "77")
inzwischen wahr, oder sehe ich das falsch?

Wenn [RolloWEHinten] auf 09:00:00 stand, dann hat das System zwischen 09:00:01 und 09:00:11 sich mit anderen Sachen beschäftigt und dann wäre tatsächlich

([([RolloWEHinten]+[00:00:02])-23:02] and [RolloSteuerungHinten] eq "77")  wahr.

In solchen Fällen solltes du nach den Ursachen der Blockade im System schauen bzw. die Zeiten die aufeinander folgen nicht zu knapp wählen. Eine Sekunde kann dann schon zu wenig sein.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Bartimaus

Zitat von: amenomade am 08 Oktober 2017, 13:35:12
Ich muss sagen, ich versteh nicht, was Du genau möchtest.
Wenn 78 dann um 09:00:11 schalten, und wenn 77 dann um 09:00:12? Welchen Sinn hat diese Sekunde Verzögerung???

Das habe ich nur gemacht, damit die Timer sich nicht ins Gehege kommen. Weiter unten hat Damian ja aufgeführt, das eine Sekunde schon zu wenig sein kann.

Darüberhinaus arbeiten meine ganzen HourCounter immer zur vollen Stunde, die sorgen scheinbar auch für Systemunterbrechungen, denn zur vollen Stunde steigt dann meistens mein HM-LAN mit kurzzeitigem Disconnect aus.

Einen Nachweis zu [RolloSteuerungHinten] kann ich leider nicht liefern, nachdem dieses eigene DOIF nach monatigem Testlauf fehlerfrei lief, und ich das Logging hierzu abgeschaltet habe.

Aber generell habe ich angenommen, das eigene geklammerte Bedingungen wie in meinem Fall, gekapselt betrachtet werden, d.h. auch wenn der Zeitrahmen=true ist, die zugehörige AND-Bedingung=false, somit der "String" als erledigt/false abgehakt ist, und dann die nächste geklammerte Bedingung geprüft wird....
LG
B.


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

Damian

Zitat von: Bartimaus am 08 Oktober 2017, 15:13:28
Aber generell habe ich angenommen, das eigene geklammerte Bedingungen wie in meinem Fall, gekapselt betrachtet werden, d.h. auch wenn der Zeitrahmen=true ist, die zugehörige AND-Bedingung=false, somit der "String" als erledigt/false abgehakt ist, und dann die nächste geklammerte Bedingung geprüft wird....

bei "and" ja bei "or" nein. Du hast hier or-Verknüpfungen definiert. Eine DOIF-Bedingung wird wie auch bei einem if komplett ausgewertet, egal welcher Trigger dieser Bedingung gerade getriggert hat.



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

Bartimaus

Zitat von: Damian am 08 Oktober 2017, 15:20:28
bei "and" ja bei "or" nein. Du hast hier or-Verknüpfungen definiert. Eine DOIF-Bedingung wird wie auch bei einem if komplett ausgewertet, egal welcher Trigger dieser Bedingung gerade getriggert hat.

ÖHA !!!
LG
B.


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

viegener

Zitat von: Damian am 08 Oktober 2017, 15:20:28
bei "and" ja bei "or" nein. Du hast hier or-Verknüpfungen definiert. Eine DOIF-Bedingung wird wie auch bei einem if komplett ausgewertet, egal welcher Trigger dieser Bedingung gerade getriggert hat.

Das bestätigt meine Vermutung:

Zitat von: viegener am 08 Oktober 2017, 13:00:08
Mein Gefühl ist, dass DOIF prüft ob eine Timerbedingung wahr ist und dann die Bendingungen für einen cmd-Zweig abprüft (diese stehen ja als Gesamtbedingung im internal condition). Dann wird die Nummer eines gültigen Timers ausgegeben wenn die Bedingung wahr ist in diesem Fall ist timer_5 der erste Timer der wirklich wahr ist.

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

Bartimaus

Ich habe jetzt mal ein von 3 RolladenDOIF von OR-Bedingung auf DOELSEIF-Bedingung umgestellt.
Beim verbleibendem mit OR habe ich das Attribut DO-Resetwait gesetzt. Ich bin gespannt.

Danke erstmal für die klärende Unterstützung
LG
B.


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

Bartimaus

#30
Moin,

ich muss das Thema aus akutem Anlass nochmal hochholen.
Ich habe die Definition wie folgt geändert:


defmod Ti_RolloVorneDoelse DOIF
([Schulferien] eq "none" ##Heute Schule\
and [Schulferien:tomorrow] eq "none" ##morgen Schule\
and [1wire_Lux:Helligkeit] > [1wireLuxRollo] ## wenn heller als Schwellenwert\
and [[Rollo8Morgens]-22:00])\
(set Rollo.Vorne on, set Rollo.Seite on, set Do_RolloSeiteSchatten initialize, set Do_RolloVorneSchatten initialize) \
DOELSEIF\
([Schulferien] eq "none" ##Heute Schule\
and [Schulferien:tomorrow] ne "none"  ## morgen Schulfrei\
and [1wire_Lux:Helligkeit] > [1wireLuxRollo] ## wenn heller als Schwellenwert\
and [[Rollo8Morgens]-23:31])\
(set Rollo.Vorne on, set Rollo.Seite on, set Do_RolloSeiteSchatten initialize, set Do_RolloVorneSchatten initialize)\
DOELSEIF\
([Schulferien] ne "none" ##Heute Schulfrei\
and [Schulferien:tomorrow] eq "none" ## morgen Schule \
and [1wire_Lux:Helligkeit] > [1wireLuxRollo]  ## wenn heller als Schwellenwert\
and [[RolloWEVorne]-22:00])\
(set Rollo.Vorne on, set Rollo.Seite on, set Do_RolloSeiteSchatten initialize, set Do_RolloVorneSchatten initialize)\
DOELSEIF\
([Schulferien] ne "none" ##Heute Schulfrei\
and [Schulferien:tomorrow] ne "none" ## morgen Schulfrei\
and [1wire_Lux:Helligkeit] > [1wireLuxRollo] ## wenn heller als Schwellenwert\
and [[RolloWEVorne]-23:32])\
(set Rollo.Vorne on, set Rollo.Seite on, set Do_RolloSeiteSchatten initialize, set Do_RolloVorneSchatten initialize)\
DOELSE\
(set Rollo.Vorne pct 15, set Rollo.Seite pct 25, set Do_RolloSeiteSchatten disable, set Do_RolloVorneSchatten disable)
attr Ti_RolloVorneDoelse cmdState fts_shutter_10|fts_shutter_10|fts_shutter_10|fts_shutter_10|fts_shutter_100
attr Ti_RolloVorneDoelse disable 0
attr Ti_RolloVorneDoelse group 01 Timer
attr Ti_RolloVorneDoelse repeatsame 1:1:1:1:1
attr Ti_RolloVorneDoelse room DOIF,Jalousien
attr Ti_RolloVorneDoelse timerWithWait 1
attr Ti_RolloVorneDoelse wait 0:0:900:900:900



Heute morgen gingen die Rollos planmäßig um 06:35 hoch, da der Helligkeitsschwellenwert zu Timer 1 überschritten war. Soweit so gut.

2018-03-21_06:20:43 Ti_RolloVorneDoelse wait_timer: 21.03.2018 06:35:43 cmd_5 1wire_Lux
2018-03-21_06:35:00 Ti_RolloVorneDoelse wait_timer: no timer
2018-03-21_06:35:00 Ti_RolloVorneDoelse cmd_count: 1
2018-03-21_06:35:01 Ti_RolloVorneDoelse cmd_nr: 1
2018-03-21_06:35:01 Ti_RolloVorneDoelse cmd: 1
2018-03-21_06:35:01 Ti_RolloVorneDoelse cmd_event: timer_1
2018-03-21_06:35:01 Ti_RolloVorneDoelse fts_shutter_10


Um 08:45 wollten die Rollos wieder runter. Auslöser war Timer 5.

2018-03-21_08:30:00 Ti_RolloVorneDoelse wait_timer: 21.03.2018 08:45:00 cmd_5 timer_7


Kurze Zeit später triggerte der Helligkeitssensor und hat den aktiven WAIT-Timer wieder gelöscht. (Auslöser Timer 1 weil da alle Bedingungen heute WAHR sind)

Ich verstehe immer noch nicht, wieso "cmd_5 Timer 7" ausgelöst hat, obwohl die nachstehenden Bedingungen NICHT WAHR waren. (Schulferien:state = none)

Könnt Ihr Euch das erklären ?

Zu guter Letzt noch das List des Devices.

Internals:
   DEF        ([Schulferien] eq "none" ##Heute Schule
and [Schulferien:tomorrow] eq "none" ##morgen Schule
and [1wire_Lux:Helligkeit] > [1wireLuxRollo] ## wenn heller als Schwellenwert
and [[Rollo8Morgens]-22:00])
(set Rollo.Vorne on, set Rollo.Seite on, set Do_RolloSeiteSchatten initialize, set Do_RolloVorneSchatten initialize)
DOELSEIF
([Schulferien] eq "none" ##Heute Schule
and [Schulferien:tomorrow] ne "none"  ## morgen Schulfrei
and [1wire_Lux:Helligkeit] > [1wireLuxRollo] ## wenn heller als Schwellenwert
and [[Rollo8Morgens]-23:31])
(set Rollo.Vorne on, set Rollo.Seite on, set Do_RolloSeiteSchatten initialize, set Do_RolloVorneSchatten initialize)
DOELSEIF
([Schulferien] ne "none" ##Heute Schulfrei
and [Schulferien:tomorrow] eq "none" ## morgen Schule
and [1wire_Lux:Helligkeit] > [1wireLuxRollo]  ## wenn heller als Schwellenwert
and [[RolloWEVorne]-22:00])
(set Rollo.Vorne on, set Rollo.Seite on, set Do_RolloSeiteSchatten initialize, set Do_RolloVorneSchatten initialize)
DOELSEIF
([Schulferien] ne "none" ##Heute Schulfrei
and [Schulferien:tomorrow] ne "none" ## morgen Schulfrei
and [1wire_Lux:Helligkeit] > [1wireLuxRollo] ## wenn heller als Schwellenwert
and [[RolloWEVorne]-23:32])
(set Rollo.Vorne on, set Rollo.Seite on, set Do_RolloSeiteSchatten initialize, set Do_RolloVorneSchatten initialize)
DOELSE
(set Rollo.Vorne pct 15, set Rollo.Seite pct 25, set Do_RolloSeiteSchatten disable, set Do_RolloVorneSchatten disable)
   NAME       Ti_RolloVorneDoelse
   NR         957
   NTFY_ORDER 50-Ti_RolloVorneDoelse
   STATE      fts_shutter_10
   TYPE       DOIF
   READINGS:
     2018-03-21 09:00:54   Device          1wire_Lux
     2018-03-21 06:44:57   cmd             1
     2018-03-21 06:44:56   cmd_count       1
     2018-03-21 06:44:57   cmd_event       Ti_RolloVorneDoelse
     2018-03-21 06:44:57   cmd_nr          1
     2018-03-21 09:00:54   e_1wire_Lux_Helligkeit 235.829
     2018-03-21 06:43:41   mode            enabled
     2018-03-21 06:44:57   state           fts_shutter_10
     2018-03-21 06:43:42   timer_01_c01    22.03.2018 06:35:00
     2018-03-21 06:43:42   timer_02_c01    21.03.2018 22:00:00
     2018-03-21 06:43:42   timer_03_c02    22.03.2018 06:35:00
     2018-03-21 06:43:42   timer_04_c02    21.03.2018 23:31:00
     2018-03-21 06:43:42   timer_05_c03    21.03.2018 08:30:00
     2018-03-21 06:43:42   timer_06_c03    21.03.2018 22:00:00
     2018-03-21 06:43:42   timer_07_c04    21.03.2018 08:30:00
     2018-03-21 06:43:42   timer_08_c04    21.03.2018 23:32:00
     2018-03-21 08:40:57   wait_timer      no timer
   Regex:
   condition:
     0          InternalDoIf($hash,'Schulferien','STATE') eq "none"  and ReadingValDoIf($hash,'Schulferien','tomorrow') eq "none"  and ReadingValDoIf($hash,'1wire_Lux','Helligkeit') > InternalDoIf($hash,'1wireLuxRollo','STATE')  and DOIF_time($hash,0,1,$wday,$hms)
     1          InternalDoIf($hash,'Schulferien','STATE') eq "none"  and ReadingValDoIf($hash,'Schulferien','tomorrow') ne "none"   and ReadingValDoIf($hash,'1wire_Lux','Helligkeit') > InternalDoIf($hash,'1wireLuxRollo','STATE')  and DOIF_time($hash,2,3,$wday,$hms)
     2          InternalDoIf($hash,'Schulferien','STATE') ne "none"  and ReadingValDoIf($hash,'Schulferien','tomorrow') eq "none"  and ReadingValDoIf($hash,'1wire_Lux','Helligkeit') > InternalDoIf($hash,'1wireLuxRollo','STATE')   and DOIF_time($hash,4,5,$wday,$hms)
     3          InternalDoIf($hash,'Schulferien','STATE') ne "none"  and ReadingValDoIf($hash,'Schulferien','tomorrow') ne "none"  and ReadingValDoIf($hash,'1wire_Lux','Helligkeit') > InternalDoIf($hash,'1wireLuxRollo','STATE')  and DOIF_time($hash,6,7,$wday,$hms)
   days:
   devices:
     0           Schulferien 1wire_Lux 1wireLuxRollo
     1           Schulferien 1wire_Lux 1wireLuxRollo
     2           Schulferien 1wire_Lux 1wireLuxRollo
     3           Schulferien 1wire_Lux 1wireLuxRollo
     all         Schulferien 1wire_Lux 1wireLuxRollo
   do:
     0:
       0          set Rollo.Vorne on, set Rollo.Seite on, set Do_RolloSeiteSchatten initialize, set Do_RolloVorneSchatten initialize
     1:
       0          set Rollo.Vorne on, set Rollo.Seite on, set Do_RolloSeiteSchatten initialize, set Do_RolloVorneSchatten initialize
     2:
       0          set Rollo.Vorne on, set Rollo.Seite on, set Do_RolloSeiteSchatten initialize, set Do_RolloVorneSchatten initialize
     3:
       0          set Rollo.Vorne on, set Rollo.Seite on, set Do_RolloSeiteSchatten initialize, set Do_RolloVorneSchatten initialize
     4:
       0          set Rollo.Vorne pct 15, set Rollo.Seite pct 25, set Do_RolloSeiteSchatten disable, set Do_RolloVorneSchatten disable
   helper:
     DOIF_Readings_events
     DOIF_eventas
     event      SolareEinstrahlung: 147.720
     globalinit 1
     last_timer 8
     sleepdevice timer_7
     sleepsubtimer 0
     sleeptimer -1
     timerdev   1wire_Lux
     timerevent SolareEinstrahlung: 147.720
     triggerDev 1wire_Lux
     timerevents:
       SolareEinstrahlung: 147.720
     timereventsState:
       SolareEinstrahlung: 147.720
     triggerEvents:
       SolareEinstrahlung: 147.720
     triggerEventsState:
       SolareEinstrahlung: 147.720
   internals:
     0           Schulferien:STATE 1wireLuxRollo:STATE
     1           Schulferien:STATE 1wireLuxRollo:STATE
     2           Schulferien:STATE 1wireLuxRollo:STATE
     3           Schulferien:STATE 1wireLuxRollo:STATE
     all         Schulferien:STATE 1wireLuxRollo:STATE
   interval:
     0          -1
     1          0
     2          -1
     3          2
     4          -1
     5          4
     6          -1
     7          6
   itimer:
     all         Rollo8Morgens RolloWEVorne
   localtime:
     0          1521696900
     1          1521666000
     2          1521696900
     3          1521671460
     4          1521617400
     5          1521666000
     6          1521617400
     7          1521671520
   readings:
     0           Schulferien:tomorrow 1wire_Lux:Helligkeit
     1           Schulferien:tomorrow 1wire_Lux:Helligkeit
     2           Schulferien:tomorrow 1wire_Lux:Helligkeit
     3           Schulferien:tomorrow 1wire_Lux:Helligkeit
     all         Schulferien:tomorrow 1wire_Lux:Helligkeit
   realtime:
     0          06:35:00
     1          22:00:00
     2          06:35:00
     3          23:31:00
     4          08:30:00
     5          22:00:00
     6          08:30:00
     7          23:32:00
   time:
     0          [Rollo8Morgens]
     1          22:00:00
     2          [Rollo8Morgens]
     3          23:31:00
     4          [RolloWEVorne]
     5          22:00:00
     6          [RolloWEVorne]
     7          23:32:00
   timeCond:
     0          0
     1          0
     2          1
     3          1
     4          2
     5          2
     6          3
     7          3
   timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
   timers:
     0           0  1
     1           2  3
     2           4  5
     3           6  7
   trigger:
   triggertime:
     1521666000:
       localtime  1521666000
       hash:
     1521671460:
       localtime  1521671460
       hash:
     1521671520:
       localtime  1521671520
       hash:
     1521696900:
       localtime  1521696900
       hash:
   uiState:
   uiTable:
Attributes:
   cmdState   fts_shutter_10|fts_shutter_10|fts_shutter_10|fts_shutter_10|fts_shutter_100
   disable    0
   group      01 Timer
   repeatsame 1:1:1:1:1
   room       DOIF,Jalousien
   timerWithWait 1
   wait       0:0:900:900:900

LG
B.


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

amenomade

Für mich ist die Helligkeit für kurze Zeit unter Schwellenwert gegangen (dann DOELSE = cmd_5), und dann wieder rüber (dann cmd_1)

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

Bartimaus

Gute Idee, hatte ich auch dran gedacht, aber kann ich widerlegen....


2018-03-20_19:39:04 1wire_Lux Helligkeit: 4.071
2018-03-21_06:20:41 1wire_Lux Helligkeit: 8.642
2018-03-21_06:25:42 1wire_Lux Helligkeit: 13.342
2018-03-21_06:30:50 1wire_Lux Helligkeit: 18.198
2018-03-21_06:35:49 1wire_Lux Helligkeit: 20.460
2018-03-21_06:40:35 1wire_Lux Helligkeit: 26.185
2018-03-21_06:45:51 1wire_Lux Helligkeit: 39.627
2018-03-21_06:50:52 1wire_Lux Helligkeit: 53.324
2018-03-21_06:55:55 1wire_Lux Helligkeit: 78.674
2018-03-21_07:00:48 1wire_Lux Helligkeit: 75.128
2018-03-21_07:05:45 1wire_Lux Helligkeit: 97.736
2018-03-21_07:10:51 1wire_Lux Helligkeit: 120.150
2018-03-21_07:15:47 1wire_Lux Helligkeit: 106.213
2018-03-21_07:20:48 1wire_Lux Helligkeit: 159.512
2018-03-21_07:25:48 1wire_Lux Helligkeit: 175.641
2018-03-21_07:30:42 1wire_Lux Helligkeit: 235.164
2018-03-21_07:56:01 1wire_Lux Helligkeit: 217.291
2018-03-21_08:01:03 1wire_Lux Helligkeit: 235.174
2018-03-21_10:46:19 1wire_Lux Helligkeit: 236.233
LG
B.


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

amenomade

Dein 1wire_Lux Helligkeit meldet fleißig jede 5. Minute etwas, und dann ab 7:30 nicht mehr?

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

Bartimaus

Korrekt, nur noch bei event-on-change-reading. Sonst habe ich zu Logs zu voll.
Schwellenwert ist 5.5
LG
B.


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

amenomade

Ich hatte ein bisschen zu schnell gelesen.

Dein DOIF sagt aber :
2018-03-21 06:44:57   cmd             1
     2018-03-21 06:44:56   cmd_count       1
     2018-03-21 06:44:57   cmd_event       Ti_RolloVorneDoelse
     2018-03-21 06:44:57   cmd_nr          1
     2018-03-21 06:43:41   mode            enabled


Das heisst, er befindet sich seit 6:45 Uhr auf State "cmd_1" und hat sich seitdem nicht bewegt. Warum sagst Du jetzt:
ZitatUm 08:45 wollten die Rollos wieder runter. Auslöser war Timer 5.
?

Er hat zwar den Timer gemerckt (ich vermute RolloWEVorne = 8:45?), hat aber den Status nicht geändert. Sind die Rollos wirklich runter gegangen???


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

Bartimaus

Hi,

erstmal danke für Deine Zeit&Analyse.

Vorweg: Ja, gestern sind sie runtergegangen.

2018-03-20_06:31:51 Ti_RolloVorneDoelse wait_timer: 20.03.2018 06:46:51 cmd_5 1wire_Lux
2018-03-20_06:35:00 Ti_RolloVorneDoelse wait_timer: no timer
2018-03-20_06:35:00 Ti_RolloVorneDoelse cmd_count: 1
2018-03-20_06:35:01 Ti_RolloVorneDoelse cmd_nr: 1
2018-03-20_06:35:01 Ti_RolloVorneDoelse cmd: 1
2018-03-20_06:35:01 Ti_RolloVorneDoelse cmd_event: timer_1
2018-03-20_06:35:01 Ti_RolloVorneDoelse fts_shutter_10
2018-03-20_08:45:01 Ti_RolloVorneDoelse cmd_count: 1
2018-03-20_08:45:02 Ti_RolloVorneDoelse cmd_nr: 5
2018-03-20_08:45:02 Ti_RolloVorneDoelse cmd: 5
2018-03-20_08:45:02 Ti_RolloVorneDoelse cmd_event: timer_7
2018-03-20_08:45:02 Ti_RolloVorneDoelse fts_shutter_100
2018-03-20_08:47:24 Ti_RolloVorneDoelse cmd_count: 1
2018-03-20_08:47:25 Ti_RolloVorneDoelse cmd_nr: 1
2018-03-20_08:47:25 Ti_RolloVorneDoelse cmd: 1
2018-03-20_08:47:25 Ti_RolloVorneDoelse cmd_event: 1wire_Lux
2018-03-20_08:47:25 Ti_RolloVorneDoelse fts_shutter_10


Anbei der gestriger LogEintrag aus dem DOIF-Log

und hier vom Rollo-Log:

2018-03-20_06:35:00 Rollo.Vorne set_on
2018-03-20_06:35:01 Rollo.Vorne 15
2018-03-20_06:35:19 Rollo.Vorne on
2018-03-20_07:06:30 Rollo.Vorne set_on
2018-03-20_07:06:32 Rollo.Vorne on
2018-03-20_08:45:01 Rollo.Vorne set_15
2018-03-20_08:45:02 Rollo.Vorne on
2018-03-20_08:45:17 Rollo.Vorne 15
2018-03-20_08:47:24 Rollo.Vorne set_on
2018-03-20_08:47:26 Rollo.Vorne 15
2018-03-20_08:47:43 Rollo.Vorne on


Danach habe ich das 15minütige WAIT-Attribut eingebaut. Wie ich heute gesehen habe, hat es geholfen. Der Befehl zum runterfahren, wurde kurz danach vom Helligkeitstrigger wieder aufgehoben.

LG
B.


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

Bartimaus

Auch heute wieder das gleiche Spiel.

Was habe ich denn falsch definiert ?

Aus dem https://wiki.fhem.de/wiki/DOIF/Einsteigerleitfaden,_Grundfunktionen_und_Erl%C3%A4uterungen#Beispiel_B.29:_Zeitsteuerung

Beispiel C): Kombinierte Ereignis- und Zeitsteuerung

Wenn die aktuelle Uhrzeit in der angegebenen Zeitspanne liegt, ist die Zeitspanne wahr. Wenn dann auch die Helligkeit unter 40 sinkt, wird die gesamte
Bedingung wahr, weil Zeitspanne und Hellikeitsvergleich and(und) verknupft sind. Der zu diesem Bedingungszweig gehörende Befehl wird dann ausgeführt.
Das DOIF di_lamp alias Lampenlogik setzt dann einen Befehl zum Schalten der Lampe lamp ab. Der DOELSE-Zweig wird ausgeführt, wenn die Bedingung im ersten Zweig unwahr wird.

define di_lamp DOIF ([06:00-19:00] and [sensor:brightness] < 40) (set lamp on) DOELSE (set lamp off)



Ich mache hier nichts anderes, nur mit weiteren DOELSEIF.
Es wird ausgeführt, obwohl die gesamte Bedingung UNWAHR ist....

Ich bitte um Gegenbeweise....
LG
B.


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

amenomade

Ich würde erstmal timerWithWait, wait und repeatsame Attribute löschen, und dann gucken, wie / wann er schaltet.

Zeig mal auch bitte ein "list 1wireLuxRollo" und ein "list Rollo8Morgens", da die in deinem DOIF auch triggern
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Bartimaus

#39
Büdde:
Internals:
   NAME       Rollo8Morgens
   NR         1049
   STATE      06:35
   TYPE       dummy
   READINGS:
     2018-03-19 07:29:00   state           06:35
Attributes:
   fm_type    state
   group      DOIF
   room       Jalousien,Schwellenwerte
   setList    state:06:35,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:30,10:00,10:30
   webCmd     state:time


Internals:
   NAME       1wireLuxRollo
   NR         826
   STATE      5.5
   TYPE       dummy
   READINGS:
     2017-06-08 19:59:01   state           5.5
Attributes:
   fm_type    state
   group      DOIF
   room       Jalousien,Schwellenwerte
   setList    state:0,5.5,6,7,8,9,10,11,12,13,14,15,15,17,18,19,20,21,25,50,60,70
   webCmd     state


Internals:
   NAME       RolloWEVorne
   NR         822
   STATE      08:45
   TYPE       dummy
   READINGS:
     2018-03-22 11:06:22   state           08:45
Attributes:
   fm_type    state
   group      DOIF
   room       Jalousien,Schwellenwerte
   setList    state:06:01,06:15,06:30,06:35,06:40,06:45,06:50,06:55,07:01,07:05,07:10,07:15,07:20,07:25,07:30,07:45,08:01,08:15,08:30,08:45,09:01,09:15,09:30,09:45,10:01,10:15,10:30,10:45,11:01,11:15,11:30,11:45,12:01
   webCmd     state:time


Ohne die Attribute läuft der Timer den ganzen Tag weil der Helligkeitssensor den ganzen Tag triggert, und Timerwithwait brauche ich, damit das wait-Attribut auch immer funktioniert.
Ohne wait, schaltet er die Rollos ohne Verzögerung, hab ich eine Woche lang mich geärgert

Habe ich alles schon durchprobiert.

Und die Dummys nutze ich als Variablen zum schnellen ändern ohne die Def ändern zu müssen. Triggern tun die nicht.
LG
B.


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

amenomade

Zitatdie Dummys nutze ich als Variablen zum schnellen ändern ohne die Def ändern zu müssen. Triggern tun die nicht.
Die Triggern doch... sobald Du die änderst. Deswegen wollte ich ein list davon haben, um zu gucken, wann die sich letztes Mal geändert haben.
Wenn Du möchtest, dass die nicht triggern, musst Du [?dummy] statt [dummy] in der entspr. Bedingung schreiben.

Zitatläuft der Timer den ganzen Tag weil der Helligkeitssensor den ganzen Tag triggert
Ja, und? Das etwas triggert, bedeutet nicht, dass eine Bedingung wahr bzw. nicht mehr wahr wird. Ohne doalways bleibt dann der DOIF im vorherigen Zustand, wenn die Bedingungen sich nicht geändert haben, und kein Befehl wird ausgeführt. Wenn die Bedingungen von den verschiedenen Zweige sich gegenseitig ausschliessen, solltest Du kein Problem haben. Das war nicht der Fall mit deinem "OR" DOIF, aber mit diesem "DOELSEIF" Version ist es doch so.

ZitatOhne wait, schaltet er die Rollos ohne Verzögerung, hab ich eine Woche lang mich geärgert
Das war nur für ein Test. Das wait kannst Du danach wieder einbauen. Die andere aber m.A. nicht.

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

Bartimaus

Das triggern müllt mir aber die Logs voll  :)

Die Stati in den Dummys muss ich nur selten ändern, dann gehts aber so schneller.

Eine Erklärung für das schalten haben wir aber immer noch nicht.
Ich kann Dir mal mein Test-DOIF schicken, da will "er" auch schalten obwohl Bedingung=False.
LG
B.


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

Damian

Zitat von: Bartimaus am 23 März 2018, 15:11:31
Das triggern müllt mir aber die Logs voll  :)

Die Stati in den Dummys muss ich nur selten ändern, dann gehts aber so schneller.

Eine Erklärung für das schalten haben wir aber immer noch nicht.
Ich kann Dir mal mein Test-DOIF schicken, da will "er" auch schalten obwohl Bedingung=False.

Ich bin mir sicher, dass die Bedingung nicht falsch ist, sonst wäre Perl falsch ;)

Dein Test-DOIF:

define di_test DOIF ([Schulferien] ne "none" ##Heute Schulfrei\
and [Schulferien:tomorrow] ne "none" ## morgen Schulfrei\
and [1wire_Lux:Helligkeit] > [1wireLuxRollo] ## wenn heller als Schwellenwert\
and [[RolloWEVorne]-23:32]) {Log 3,"[Schulferien] [Schulferien:tomorrow] [1wire_Lux:Helligkeit] [1wireLuxRollo"}


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

Bartimaus

#43
Zitat von: Damian am 23 März 2018, 15:40:41
Ich bin mir sicher, dass die Bedingung nicht falsch ist, sonst wäre Perl falsch ;)


Danke für die Bestätigung.... hab schon echt an mir gezweifelt.... ::)

Test-DOIF ist angelegt..... unnu ?
LG
B.


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

Bartimaus

Neuer Ansatz:

Ich habe gesehen, das durch ein initialisieren eines DOIFs nicht alle Readings von Devices gelistet werden, die in der Bedingung aufgeführt sind.
Erst wenn das Device neu getriggert wird, erscheint es auch als Reading im DOIF.

Kann es sein, das dadurch die Bedingung ignoriert wird ? Weil im Moment rennen bei mir wieder DOIFs zu denen die Bedingung eines Devices = false ist
LG
B.


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

amenomade

Zitat von: Bartimaus am 16 Mai 2018, 15:28:12
Ich habe gesehen, das durch ein initialisieren eines DOIFs nicht alle Readings von Devices gelistet werden, die in der Bedingung aufgeführt sind.
Erst wenn das Device neu getriggert wird, erscheint es auch als Reading im DOIF.
Das ist unwichtig, da ein DOIF (wie im allgemein FHEM) Ereignis-gesteuert ist. Das heisst: er reagiert auf Trigger. Erst wenn etwas triggert, werden die entspr. Bedingungen bewertet.
Zitat
Kann es sein, das dadurch die Bedingung ignoriert wird ? Weil im Moment rennen bei mir wieder DOIFs zu denen die Bedingung eines Devices = false ist
Zeig ein "list" des DOIFs, wenn es sich im ungewünschtem Zustand befindet.

Und ein DOIF "rennt" nicht, es reagiert auf Ereignisse, bewertet dann die Bedingungen und abhängig davon führt Befehle aus. Dann "schläft" es bis zum nächsten Trigger. In deinem oberen DOIF sind die Triggers:
Schulferien:STATE 1wireLuxRollo:STATE und dazu die Zeitperioden. Solange Schulferien:STATE oder 1wireLuxRollo:STATE sich nicht ändern, und du nicht eine Anfangszeit oder eine Endezeit erreichst, passiert NICHTS.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus