Hauptmenü

DOIF Logik Problem

Begonnen von Fredi69, 04 August 2018, 15:33:10

Vorheriges Thema - Nächstes Thema

Fredi69

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)
fhem auf Raspberry Pi 3
FRITZ!Box7490, Fritz!Box 3270 AP, 3xHMLAN, CUL868, nanoCUL 433 für IT, JeeLink für LaCrosse, HUE Bridge 2.0, Samsung UE46C8790 (STV), mehrere Homematic, Intertechno, Shelly und LaCrosse Komponenten

Ellert


Fredi69

fhem auf Raspberry Pi 3
FRITZ!Box7490, Fritz!Box 3270 AP, 3xHMLAN, CUL868, nanoCUL 433 für IT, JeeLink für LaCrosse, HUE Bridge 2.0, Samsung UE46C8790 (STV), mehrere Homematic, Intertechno, Shelly und LaCrosse Komponenten

Ellert


Fredi69

Zitat von: Ellert am 04 August 2018, 19:01:38
Und angewendet?
Ja sicher, hat mit aber im konkreten Fall nicht weitergeholfen.
fhem auf Raspberry Pi 3
FRITZ!Box7490, Fritz!Box 3270 AP, 3xHMLAN, CUL868, nanoCUL 433 für IT, JeeLink für LaCrosse, HUE Bridge 2.0, Samsung UE46C8790 (STV), mehrere Homematic, Intertechno, Shelly und LaCrosse Komponenten

amenomade

Schon mal deine Klammern in der 3. Bedingung kontrolliert?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Fredi69

Zitat von: amenomade am 05 August 2018, 18:46:39
Schon mal deine Klammern in der 3. Bedingung kontrolliert?
ja, mehrfach
fhem auf Raspberry Pi 3
FRITZ!Box7490, Fritz!Box 3270 AP, 3xHMLAN, CUL868, nanoCUL 433 für IT, JeeLink für LaCrosse, HUE Bridge 2.0, Samsung UE46C8790 (STV), mehrere Homematic, Intertechno, Shelly und LaCrosse Komponenten

amenomade

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?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Fredi69

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.
fhem auf Raspberry Pi 3
FRITZ!Box7490, Fritz!Box 3270 AP, 3xHMLAN, CUL868, nanoCUL 433 für IT, JeeLink für LaCrosse, HUE Bridge 2.0, Samsung UE46C8790 (STV), mehrere Homematic, Intertechno, Shelly und LaCrosse Komponenten

amenomade

Und warum wäre das falsch? Bedingung 3 ist wahr. Dann ist cmd_3 keine schlechte Auswahl.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Fredi69

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!
fhem auf Raspberry Pi 3
FRITZ!Box7490, Fritz!Box 3270 AP, 3xHMLAN, CUL868, nanoCUL 433 für IT, JeeLink für LaCrosse, HUE Bridge 2.0, Samsung UE46C8790 (STV), mehrere Homematic, Intertechno, Shelly und LaCrosse Komponenten

amenomade

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.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

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.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Fredi69

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.
fhem auf Raspberry Pi 3
FRITZ!Box7490, Fritz!Box 3270 AP, 3xHMLAN, CUL868, nanoCUL 433 für IT, JeeLink für LaCrosse, HUE Bridge 2.0, Samsung UE46C8790 (STV), mehrere Homematic, Intertechno, Shelly und LaCrosse Komponenten

amenomade

#14
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?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Fredi69

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?
fhem auf Raspberry Pi 3
FRITZ!Box7490, Fritz!Box 3270 AP, 3xHMLAN, CUL868, nanoCUL 433 für IT, JeeLink für LaCrosse, HUE Bridge 2.0, Samsung UE46C8790 (STV), mehrere Homematic, Intertechno, Shelly und LaCrosse Komponenten

amenomade

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.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Fredi69

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.
fhem auf Raspberry Pi 3
FRITZ!Box7490, Fritz!Box 3270 AP, 3xHMLAN, CUL868, nanoCUL 433 für IT, JeeLink für LaCrosse, HUE Bridge 2.0, Samsung UE46C8790 (STV), mehrere Homematic, Intertechno, Shelly und LaCrosse Komponenten

amenomade

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.



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

Fredi69

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?
fhem auf Raspberry Pi 3
FRITZ!Box7490, Fritz!Box 3270 AP, 3xHMLAN, CUL868, nanoCUL 433 für IT, JeeLink für LaCrosse, HUE Bridge 2.0, Samsung UE46C8790 (STV), mehrere Homematic, Intertechno, Shelly und LaCrosse Komponenten

amenomade

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.?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Fredi69

Ok, vielen Dank für Deine Hilfe.


  • Vorrang hat immer die Zeit Rollo_hoch und Rollo_runter.
  • Innerhalb der Rollo_hoch Zeit soll auf Azimuth und Temp_Max geprüft werden, ist der Wert zwischen des Azimuth zwischen a und b und [WetterProplanta:fc0_tempMax:d] > [MaxTempRollo] , dann Rollo auf 40.
  • Bei Rollo_runter Zeit -> Rollo runter.

fhem auf Raspberry Pi 3
FRITZ!Box7490, Fritz!Box 3270 AP, 3xHMLAN, CUL868, nanoCUL 433 für IT, JeeLink für LaCrosse, HUE Bridge 2.0, Samsung UE46C8790 (STV), mehrere Homematic, Intertechno, Shelly und LaCrosse Komponenten