FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Fredi69 am 04 August 2018, 15:33:10

Titel: DOIF Logik Problem
Beitrag von: Fredi69 am 04 August 2018, 15:33:10
Ich habe versucht meine langjährig funktionierende Rolladensteuerung um eine automatische Beschattung zu erweitern.
Leider habe ich jetzt irgendein logisches Problem, wie kann ich das testen wo der Fehler liegt?

([[Rollo_runter]-[Rollo_hoch]]
and [RolloAutomatikDY:state] eq "Ein")
(set EG.Bu.Ra.RolladenLinks down)
DOELSEIF (![[Rollo_runter]-[Rollo_hoch]]
and [?RolloAutomatikDY:state] eq "Ein"
and [?WetterProplanta:fc0_tempMax:d] > [MaxTempRollo]
and [?myTw:azimuth:d] > 60
and [?myTw:azimuth:d] < 180)
(set EG.Bu.Ra.RolladenLinks 40)
DOELSEIF
((![[Rollo_runter]-[Rollo_hoch]]
and [?RolloAutomatikDY:state] eq "Ein")
or ([?RolloAutomatikDY:state] eq "Ein"
and [EG.Bu.Ra.RolladenLinks:state] eq "40"
and ([?myTw:azimuth:d] < 60 or [?myTw:azimuth:d] > 180)))
(set EG.Bu.Ra.RolladenLinks up)
Titel: Antw:DOIF Logik Problem
Beitrag von: Ellert am 04 August 2018, 16:38:47
Hier gibt es Hinweise https://wiki.fhem.de/wiki/DOIF/Tools_und_Fehlersuche
Titel: Antw:DOIF Logik Problem
Beitrag von: Fredi69 am 04 August 2018, 16:43:13
Zitat von: Ellert am 04 August 2018, 16:38:47
Hier gibt es Hinweise https://wiki.fhem.de/wiki/DOIF/Tools_und_Fehlersuche
Das kenne ich
Titel: Antw:DOIF Logik Problem
Beitrag von: Ellert am 04 August 2018, 19:01:38
Und angewendet?
Titel: Antw:DOIF Logik Problem
Beitrag von: Fredi69 am 05 August 2018, 15:37:28
Zitat von: Ellert am 04 August 2018, 19:01:38
Und angewendet?
Ja sicher, hat mit aber im konkreten Fall nicht weitergeholfen.
Titel: Antw:DOIF Logik Problem
Beitrag von: amenomade am 05 August 2018, 18:46:39
Schon mal deine Klammern in der 3. Bedingung kontrolliert?
Titel: Antw:DOIF Logik Problem
Beitrag von: Fredi69 am 05 August 2018, 20:37:56
Zitat von: amenomade am 05 August 2018, 18:46:39
Schon mal deine Klammern in der 3. Bedingung kontrolliert?
ja, mehrfach
Titel: Antw:DOIF Logik Problem
Beitrag von: amenomade am 05 August 2018, 22:18:35
Zitat von: Fredi69 am 05 August 2018, 20:37:56
ja, mehrfach
Etwas stimmt aber nicht:
Bedingung 2
(![[Rollo_runter]-[Rollo_hoch]] and [?RolloAutomatikDY:state] eq "Ein" and ... and .... and ... and
Bedingung 3
(![[Rollo_runter]-[Rollo_hoch]]  and [?RolloAutomatikDY:state] eq "Ein")
or ( etwas anderes )


Was passiert genau? Was ist das Problem? Kannst Du ein "list" vom DOIF posten, wenn er sich in einem nicht gewünschtem Zustand befindet?
Titel: Antw:DOIF Logik Problem
Beitrag von: Fredi69 am 06 August 2018, 12:52:06
Hier das List:
Internals:
   DEF        ([[Rollo_runter]-[Rollo_hoch]]
and [RolloAutomatikDY:state] eq "Ein")
(set EG.Bu.Ra.RolladenLinks down)
DOELSEIF (![[Rollo_runter]-[Rollo_hoch]]
and [?RolloAutomatikDY:state] eq "Ein"
and [?WetterProplanta:fc0_tempMax:d] > [MaxTempRollo]
and [?myTw:azimuth:d] > 60
and [?myTw:azimuth:d] < 180)
(set EG.Bu.Ra.RolladenLinks 40)
DOELSEIF
((![[Rollo_runter]-[Rollo_hoch]]
and [?RolloAutomatikDY:state] eq "Ein")
or ([?RolloAutomatikDY:state] eq "Ein"
and [EG.Bu.Ra.RolladenLinks:state] eq "40"
and ([?myTw:azimuth:d] < 60 or [?myTw:azimuth:d] > 180)))
(set EG.Bu.Ra.RolladenLinks up)
   MODEL      FHEM
   NAME       Rollo_Buero_Links_DI
   NR         285
   NTFY_ORDER 50-Rollo_Buero_Links_DI
   STATE      cmd_3
   TYPE       DOIF
   READINGS:
     2018-08-06 12:41:27   Device          EG.Bu.Ra.RolladenLinks
     2018-08-06 12:41:07   cmd             3
     2018-08-06 12:41:07   cmd_event       EG.Bu.Ra.RolladenLinks
     2018-08-06 12:41:07   cmd_nr          3
     2018-08-06 12:41:27   e_EG.Bu.Ra.RolladenLinks_state on
     2018-08-06 12:40:48   mode            enabled
     2018-08-06 12:41:07   state           cmd_3
     2018-08-06 12:40:48   timer_01_c01    06.08.2018 21:42:01
     2018-08-06 12:40:48   timer_02_c01    07.08.2018 06:39:55
     2018-08-06 12:40:48   timer_03_c02    06.08.2018 21:42:01
     2018-08-06 12:40:48   timer_04_c02    07.08.2018 06:39:55
     2018-08-06 12:40:48   timer_05_c03    06.08.2018 21:42:01
     2018-08-06 12:40:48   timer_06_c03    07.08.2018 06:39:55
   Regex:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          DOIF_time($hash,0,1,$wday,$hms) and ReadingValDoIf($hash,'RolloAutomatikDY','state') eq "Ein"
     1          !DOIF_time($hash,2,3,$wday,$hms) and ReadingValDoIf($hash,'RolloAutomatikDY','state') eq "Ein" and ReadingValDoIf($hash,'WetterProplanta','fc0_tempMax','','d') > InternalDoIf($hash,'MaxTempRollo','STATE') and ReadingValDoIf($hash,'myTw','azimuth','','d') > 60 and ReadingValDoIf($hash,'myTw','azimuth','','d') < 180
     2          (!DOIF_time($hash,4,5,$wday,$hms) and ReadingValDoIf($hash,'RolloAutomatikDY','state') eq "Ein") or (ReadingValDoIf($hash,'RolloAutomatikDY','state') eq "Ein" and ReadingValDoIf($hash,'EG.Bu.Ra.RolladenLinks','state') eq "40" and (ReadingValDoIf($hash,'myTw','azimuth','','d') < 60 or ReadingValDoIf($hash,'myTw','azimuth','','d') > 180))
   days:
   devices:
     0           RolloAutomatikDY
     1           MaxTempRollo
     2           EG.Bu.Ra.RolladenLinks
     all         RolloAutomatikDY MaxTempRollo EG.Bu.Ra.RolladenLinks
   do:
     0:
       0          set EG.Bu.Ra.RolladenLinks down
     1:
       0          set EG.Bu.Ra.RolladenLinks 40
     2:
       0          set EG.Bu.Ra.RolladenLinks up
     3:
   helper:
     event      deviceMsg: up (to VCCU),level: 100,motor: stop:up,pct: 100,up,timedOn: down,RSSI: -57,RAWMSG: E504362,0000,ADBDAD0F,FF,FFC7,C6A4105043622CD9940601C800
     globalinit 1
     last_timer 6
     sleeptimer -1
     timerdev   EG.Bu.Ra.RolladenLinks
     timerevent deviceMsg: up (to VCCU),level: 100,motor: stop:up,pct: 100,up,timedOn: down,RSSI: -57,RAWMSG: E504362,0000,ADBDAD0F,FF,FFC7,C6A4105043622CD9940601C800
     triggerDev EG.Bu.Ra.RolladenLinks
     DOIF_eventas:
       cmd_nr: 3
       cmd: 3
       cmd_event: EG.Bu.Ra.RolladenLinks
       state: cmd_3
     timerevents:
       deviceMsg: up (to VCCU)
       level: 100
       motor: stop:up
       pct: 100
       up
       timedOn: down
       RSSI: -57
       RAWMSG: E504362,0000,ADBDAD0F,FF,FFC7,C6A4105043622CD9940601C800
     timereventsState:
       deviceMsg: up (to VCCU)
       level: 100
       motor: stop:up
       pct: 100
       state: on
       timedOn: down
       RSSI: -57
       RAWMSG: E504362,0000,ADBDAD0F,FF,FFC7,C6A4105043622CD9940601C800
     triggerEvents:
       deviceMsg: up (to VCCU)
       level: 100
       motor: stop:up
       pct: 100
       up
       timedOn: down
       RSSI: -57
       RAWMSG: E504362,0000,ADBDAD0F,FF,FFC7,C6A4105043622CD9940601C800
     triggerEventsState:
       deviceMsg: up (to VCCU)
       level: 100
       motor: stop:up
       pct: 100
       state: on
       timedOn: down
       RSSI: -57
       RAWMSG: E504362,0000,ADBDAD0F,FF,FFC7,C6A4105043622CD9940601C800
   internals:
     1           MaxTempRollo:STATE
     all         MaxTempRollo:STATE
   interval:
     0          -1
     1          0
     2          -1
     3          2
     4          -1
     5          4
   intervalfunc:
   itimer:
     all         Rollo_runter Rollo_hoch
   localtime:
     0          1533584521
     1          1533616795
     2          1533584521
     3          1533616795
     4          1533584521
     5          1533616795
   readings:
     0           RolloAutomatikDY:state
     2           EG.Bu.Ra.RolladenLinks:state
     all         RolloAutomatikDY:state EG.Bu.Ra.RolladenLinks:state
   realtime:
     0          21:42:01
     1          06:39:55
     2          21:42:01
     3          06:39:55
     4          21:42:01
     5          06:39:55
   time:
     0          [Rollo_runter]
     1          [Rollo_hoch]
     2          [Rollo_runter]
     3          [Rollo_hoch]
     4          [Rollo_runter]
     5          [Rollo_hoch]
   timeCond:
     0          0
     1          0
     2          1
     3          1
     4          2
     5          2
   timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
   timers:
     0           0  1
     1           2  3
     2           4  5
   trigger:
   triggertime:
     1533584521:
       localtime  1533584521
       hash:
     1533616795:
       localtime  1533616795
       hash:
   uiState:
   uiTable:
Attributes:
   DbLogExclude .*
   room       Steuerung


Obwohl die Werte von TempMax und Azimuth passen ist der Rolladen oben.
Titel: Antw:DOIF Logik Problem
Beitrag von: amenomade am 06 August 2018, 22:22:25
Und warum wäre das falsch? Bedingung 3 ist wahr. Dann ist cmd_3 keine schlechte Auswahl.
Titel: Antw:DOIF Logik Problem
Beitrag von: Fredi69 am 06 August 2018, 22:29:19
Zitat von: amenomade am 06 August 2018, 22:22:25
Und warum wäre das falsch? Bedingung 3 ist wahr. Dann ist cmd_3 keine schlechte Auswahl.
Ich hätte erwartet , das bei einem Azimuth von beispielhaft 160 Bedingung 2 wahr ist!
Titel: Antw:DOIF Logik Problem
Beitrag von: amenomade am 06 August 2018, 22:33:14
Aber EG.Bu.Ra.RolladenLinks:state hat getriggert.

Zitat2018-08-06 12:41:27   e_EG.Bu.Ra.RolladenLinks_state on

Zitat von: CommandRefZu beachten ist, dass nur die Bedingungen überprüft werden, die zum ausgelösten Event das dazughörige Device bzw. die dazugehörige Triggerzeit beinhalten.
Titel: Antw:DOIF Logik Problem
Beitrag von: amenomade am 06 August 2018, 22:35:15
Um 12:42 hat EG.Bu.Ra.RolladenLinks:state getriggert. Dann wurde die einzige Bedingung bewertet, die EG.Bu.Ra.RolladenLinks:state beinhaltet, sprich die 3. Da die Bedingung 3 (auch) wahr ist, wird cmd_3 durchgeführt.
Titel: Antw:DOIF Logik Problem
Beitrag von: Fredi69 am 06 August 2018, 22:37:23
Zitat von: amenomade am 06 August 2018, 22:33:14
Aber EG.Bu.Ra.RolladenLinks:state hat getriggert.

Sorry, das verstehe ich leider nicht.
Ohne die Azimuth Abfrage läuft alles wie gewünscht, mit der Azimuth Abfrage nicht mehr.
Titel: Antw:DOIF Logik Problem
Beitrag von: amenomade am 06 August 2018, 22:47:07
Um 12:41 Uhr ist EG.Bu.Ra.RolladenLinks:state auf "on" gesprungen.
2018-08-06 12:41:27   e_EG.Bu.Ra.RolladenLinks_state on

EDIT: dann weiss man nicht mehr was er früher für einen Wert hatte, aber um 12:41:07 hat sich der Wert auch geändert:
2018-08-06 12:41:07   cmd_event       EG.Bu.Ra.RolladenLinks und dieses Event ist der Trigger des DOIFs gewesen.

Dann wurde das DOIF getriggert, und die Bedingung 3 bewertet. Da Bedingung 3 wahr war, wurde cmd_3 durchgeführt. Was genau verstehst Du nicht?
Titel: Antw:DOIF Logik Problem
Beitrag von: Fredi69 am 07 August 2018, 21:55:29
Herzlichen Dank.
Wenn ich alles richtig verstanden habe muss ich das Ende der Bedingung 3 wie folgt ändern:

...and [?EG.Bu.Ra.RolladenLinks:state] eq "40"
and ([myTw:azimuth:d] < 60 or [myTw:azimuth:d] > 180)


Damit wird nur über den Wert von Azimuth getriggert aber nicht über den Stand des Rollos, der wird nur abgefragt, richtig?
Titel: Antw:DOIF Logik Problem
Beitrag von: amenomade am 07 August 2018, 22:49:00
Ja, so wird es anders getriggert. Somit wird es bei jeder Änderung von myTw:azimuth (und nicht mehr von EG.Bu.Ra.RolladenLinks) getriggert.

Aber m.m.N. ist immer noch deine Klammerkombination in Bedingung 3 falsch, so dass in manchen Fälle cmd_3 immer noch durchgeführt wird, egal welchen Wert myTw:azimuth hat.
Titel: Antw:DOIF Logik Problem
Beitrag von: Fredi69 am 07 August 2018, 23:06:28
Zitat von: amenomade am 07 August 2018, 22:49:00
...Aber m.m.N. ist immer noch deine Klammerkombination in Bedingung 3 falsch, so dass in manchen Fälle cmd_3 immer noch durchgeführt wird, egal welchen Wert myTw:azimuth hat.

Dann verrate mir doch bitte einfach welche Klammerkombination deiner Meinung nach falsch ist.
Titel: Antw:DOIF Logik Problem
Beitrag von: amenomade am 07 August 2018, 23:15:43
Beispiel: sagen wir mal, dass
- "Rollo_runter" = 22:00
- "Rollo_hoch" = 07:00
- "RolloAutomatikDY" = Ein
- "WetterProplanta:fc0_tempMax" = 30
- "MaxTempRollo" = 25

Um 22:00 triggert die Zeit, Bedingung 1 wird wahr => Rollos runter.
Um 7:00 triggert die Zeit wieder. Abhängig von azimuth
   => wenn an die Uhrzeit azimuth > 60 =>  Rollos 40 (1)
   => wenn an die Uhrzeit azimuth < 60 => Rollos hoch (2)

Egal ob (1) oder (2) : dann wird azimuth sich ändern. Nur Bedingung 3 wird jedes mal bewertet, und Bedingung 3 wird immer bis 22:00 wahr sein => die Rollos werden sofort hoch gehen, und bis 22:00 hoch bleiben.

Zitatverrate mir doch bitte einfach welche Klammerkombination deiner Meinung nach falsch ist.

1. ((![[Rollo_runter]-[Rollo_hoch]]
2. and [?RolloAutomatikDY:state] eq "Ein")
3. or ([?RolloAutomatikDY:state] eq "Ein"
4. and [?EG.Bu.Ra.RolladenLinks:state] eq "40"
5. and ([myTw:azimuth:d] < 60 or [myTw:azimuth:d] > 180)))


((1 and 2 ) or (3 and 4 and 5)) bleibt wahr solange 1 and 2 wahr sind (den ganzen Tag, wenn Automatik an), EGAL was 3 4 und 5 machen.



Titel: Antw:DOIF Logik Problem
Beitrag von: Fredi69 am 08 August 2018, 14:51:23
Da hast Du absolut recht, ich habe dann aber absolut keine Idee mein Vorhaben umzusetzen mit einem DOIF.
Kannst Du mir evtl. auf die Sprünge helfen?
Titel: Antw:DOIF Logik Problem
Beitrag von: amenomade am 08 August 2018, 19:55:17
Dann muss ich aber wissen, was Du genau machen möchtest: am Nacht zu, ist schon klar. Aber dann? Soll azimuth oder Zeit Vorrang haben? Was muss die Bewegung anstossen, was soll nur als Kontrolle dienen, usw.?
Titel: Antw:DOIF Logik Problem
Beitrag von: Fredi69 am 08 August 2018, 20:48:17
Ok, vielen Dank für Deine Hilfe.