[erledigt] Benötige euer Wissen bei einem einfachen DOIF - Danke

Begonnen von Helmi55, 07 September 2016, 18:14:36

Vorheriges Thema - Nächstes Thema

Helmi55

Hallo und guten Abend aus Niederösterreich,
mein Ziel ist es in der Zeit von SS bis SR beim Öffnen der Einfahrt das Gartenlicht einzuschalten (mit einem Filter ob das Licht auch aus ist)
und andererseits im gleichen Zeitraum beim Öffnen das Licht auszuschalten (Filter Licht on)
Ich habe mir dafür 2 einzelne DOIFs gebastelt - jedoch ohne SS und SR - da funktioniert es
([Einfahrt] eq "Offen") (set GartenLicht:FILTER=STATE=off on-for-timer 60) DOELSE
und
([Einfahrt] eq "Offen") (set GartenLicht:FILTER=STATE=on off) DOELSE


Wenn ich daraus (mit SS und SR) ein DOELSEIF mache
(([Einfahrt] eq "Offen") and [[Daemmerung:ss]-[Daemmerung:sr]]) (set GartenLicht:FILTER=STATE=off on-for-timer 60) DOELSEIF (([Einfahrt] eq "Offen") and [[Daemmerung:ss]-[Daemmerung:sr]]) (set GartenLicht:FILTER=STATE=on off)


wird zwar das Licht für 1 Minute ausgeschaltet, aber wenn das Tor zu ist und das Licht händisch eingeschaltet wurde und danach
das Tor geöffnet wird, schaltet sich das Licht nicht aus.

Hintergedanke - man kommt heim - soll sich das GartenLicht für eine definierte Zeit einschalten.
Verlässt man das haus und hat die Gartenbeleuchtung vom Haus aktiviert, soll durch das Öffnen der Einfahrt das Licht ausgeschaltet werden.

Wo mache ich hier den Denkfehler

Many thanks for Help

Liebe Grüße Helmut
System1 fhem 6.1 auf RPi 4B mit 4GB, HMUSBConfig, DS9490R-1Wire, Busware USB 868, Pool-Solarsteuerung mit FHEM. System2 fhem 6.1 auf RPi 4B mit 4GB (Bullseye) mit Busware USB 868 und 433 und HMUARTLGW für Haussteuerung

https://www.flickr.com/photos/canonhelmi/

KernSani

RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Helmi55

Servus
Ich hab doch den Filter?  Wie sollte das bitte richtig sein?
Danke für deine Hilfe
System1 fhem 6.1 auf RPi 4B mit 4GB, HMUSBConfig, DS9490R-1Wire, Busware USB 868, Pool-Solarsteuerung mit FHEM. System2 fhem 6.1 auf RPi 4B mit 4GB (Bullseye) mit Busware USB 868 und 433 und HMUARTLGW für Haussteuerung

https://www.flickr.com/photos/canonhelmi/

KernSani

Der Filter greift erst wenn du schon im DOIF-Zweig bist. Pack doch einfach noch ein and [Gartenlicht]="on" bzw. "off" mit in die Bedingung.

Grüße

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Helmi55

Servus
ok. Ich dachte das wird durch den Filter geregelt - ABER so

(([Einfahrt] eq "Offen") and ([GartenLicht] eq "off") and [[Daemmerung:sr]-[Daemmerung:ss]]) (set GartenLicht:FILTER=STATE=off on-for-timer 60) DOELSEIF (([Einfahrt] eq "Offen") and ([GartenLicht] eq "on") and [[Daemmerung:sr]-[Daemmerung:ss]]) (set GartenLicht:FILTER=STATE=on off)

funktioniert es leider auch nicht?
(Habe jetzt nur SS und SR vertauscht damit ich es am Tag testen kann)
Der erste Teil funktioniert. Beim zweiten geht das Licht kurz aus aber sofort wieder an???

Attr ist do allways

Hab zur Sicherheit noch ein List vom DOIF angehängt
Internals:
   DEF        (([Einfahrt] eq "Offen") and ([GartenLicht] eq "off") and [[Daemmerung:sr]-[Daemmerung:ss]]) (set GartenLicht:FILTER=STATE=off on-for-timer 60) DOELSEIF (([Einfahrt] eq "Offen") and ([GartenLicht] eq "on") and [[Daemmerung:sr]-[Daemmerung:ss]]) (set GartenLicht:FILTER=STATE=on off)
   NAME       di_Test_3
   NR         378
   NTFY_ORDER 50-di_Test_3
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2016-09-08 10:01:40   Device          GartenLicht
     2016-09-08 10:01:12   cmd             1
     2016-09-08 10:01:12   cmd_event       Einfahrt
     2016-09-08 10:01:12   cmd_nr          1
     2016-09-08 10:01:33   e_Einfahrt_STATE Zu
     2016-09-08 10:01:40   e_GartenLicht_STATE off
     2016-09-08 10:01:12   state           cmd_1
     2016-09-08 10:02:40   timer_1_c1      09.09.2016 06:29:55
     2016-09-08 10:02:40   timer_2_c1      08.09.2016 19:15:51
     2016-09-08 10:02:40   timer_3_c2      09.09.2016 06:29:55
     2016-09-08 10:02:40   timer_4_c2      08.09.2016 19:15:51
   Condition:
     0          (InternalDoIf($hash,'Einfahrt','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "Offen") and (InternalDoIf($hash,'GartenLicht','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "off") and DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"")
     1          (InternalDoIf($hash,'Einfahrt','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "Offen") and (InternalDoIf($hash,'GartenLicht','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "on") and DOIF_time($hash,$hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,"")
   Days:
   Devices:
     0           Einfahrt GartenLicht
     1           Einfahrt GartenLicht
     all         Einfahrt GartenLicht
   Do:
     0:
       0          set GartenLicht:FILTER=STATE=off on-for-timer 60
     1:
       0          set GartenLicht:FILTER=STATE=on off
     2:
   Helper:
     event      power-hourly: 1.223325
     globalinit 1
     last_timer 4
     sleeptimer -1
     timerdev   Einfahrt
     timerevent power-hourly: 0
     triggerDev GartenLicht
     timerevents:
       power-hourly: 0
     timereventsState:
       power-hourly: 0
     triggerEvents:
       power-hourly: 1.223325
     triggerEventsState:
       power-hourly: 1.223325
   Internals:
     0           Einfahrt:STATE GartenLicht:STATE
     1           Einfahrt:STATE GartenLicht:STATE
     all         Einfahrt:STATE GartenLicht:STATE
   Interval:
     0          -1
     1          0
     2          -1
     3          2
   Itimer:
     all         Daemmerung
   Localtime:
     0          1473395395
     1          1473354951
     2          1473395395
     3          1473354951
   Readings:
   Realtime:
     0          06:29:55
     1          19:15:51
     2          06:29:55
     3          19:15:51
   Regexp:
     0:
     1:
     All:
   State:
   Time:
     0          [Daemmerung:sr]
     1          [Daemmerung:ss]
     2          [Daemmerung:sr]
     3          [Daemmerung:ss]
   Timecond:
     0          0
     1          0
     2          1
     3          1
   Timer:
     0          0
     1          0
     2          0
     3          0
   Timers:
     0           0  1
     1           2  3
   Trigger:
   Triggertime:
     1473354951:
       localtime  1473354951
       Hash:
     1473395395:
       localtime  1473395395
       Hash:
Attributes:
   do         always


Danke für Deine/Eure Unterstützung
Gruß
Helmut
System1 fhem 6.1 auf RPi 4B mit 4GB, HMUSBConfig, DS9490R-1Wire, Busware USB 868, Pool-Solarsteuerung mit FHEM. System2 fhem 6.1 auf RPi 4B mit 4GB (Bullseye) mit Busware USB 868 und 433 und HMUARTLGW für Haussteuerung

https://www.flickr.com/photos/canonhelmi/

Ellert

Du könntest die Ursache selbst ermitteln indem Du Dir ein DOIF erstellst, mit dem Du alle Events des zu untersuchenden DOIF aufzeichnest. Damit kannst Du feststellen, was zum zurückschalten führt.

Muster zum erstellen des LogDOIF
define LogDOIF DOIF ([<Name des zu analysierenden DOIF>:""] or [<Gerät 1>:"<Reading>:"] or [<Gerät 2>:"<Reading>:"] ...)
   ({Log 1, "$SELF --> Device: $DEVICE, Events: $EVENTS"})
attr LogDOIF do always


konkrete Bedingung
([di_Test_3:""] or [GartenLicht:""] or [Daemmerung:"(ss|sr): "] or [Einfahrt:""])
ungetestet

Helmi55

Servus und Danke
mMn führt der erste Teil des DOIFs wieder zum einschalten!
Habe es zerlegt in ein DOIF für einschalten und eines für aus.
Wenn ich nur das für aus verwende dann funktioniert es
(([Einfahrt] eq "Offen") and ([GartenLicht] eq "on") and [[Daemmerung:sr]-[Daemmerung:ss]]) (set GartenLicht:FILTER=STATE=on off) DOELSE

Was muss ich an dem DOELSEIF verändern damit im Fall2 nicht wieder 1 aktiv wird?

Sehe da im Moment nicht wirklich durch?

Hier das LogDoif
Device
Einfahrt
2016-09-08 12:24:10
cmd
1
2016-09-08 12:24:10
cmd_event
Einfahrt
2016-09-08 12:24:10
cmd_nr
1
2016-09-08 12:24:10
e_Daemmerung_events
azimuth: 168.68,elevation: 45.67,twilight: 100,twilight_weather: 100,compasspoint: south-southeast
2016-09-08 12:20:22
e_Einfahrt_events
battery: ok,contact: Zu (to HMUSB),Zu,trigDst_220355: noConfig,trigger_cnt: 223
2016-09-08 12:24:10
e_di_Test_3_events
cmd_nr: 1,cmd: 1,cmd_event: Einfahrt,cmd_1
2016-09-08 12:23:53
state
cmd_1


LG
Helmut
System1 fhem 6.1 auf RPi 4B mit 4GB, HMUSBConfig, DS9490R-1Wire, Busware USB 868, Pool-Solarsteuerung mit FHEM. System2 fhem 6.1 auf RPi 4B mit 4GB (Bullseye) mit Busware USB 868 und 433 und HMUARTLGW für Haussteuerung

https://www.flickr.com/photos/canonhelmi/

Ellert

Du müsstest schon mal ein komplettes Bewegungsmuster loggen, dann siehst Du welcher trigger zum zurückschalten geführt hat. Den müsstest Du dann unterdrücken.

Irgendwie ist Dein Logfile schlecht lesbar, Zeilenumbrüche nach dem Zeitstempel und den Einträgen und umgekehrter Reihenfolge. Wie hat Du das hinbekommen?

KernSani

Ohne das jetzt getestet zu haben... Was passiert im zweiten Fall? Das Licht ist an, Du machst das Gartentor auf, das Licht wird ausgeschaltet. Dies führt zu einem Statuswechsel von [Gartenlicht] --> Die erste Bedingung wird getriggert und schaltet das Licht wieder an. Was wir erreichen wollen: Wenn das Gartenlicht an ist (nicht - wenn es angeschaltet wird) soll es beim Öffnen des Gartentors ausgeschaltet werden. Der Trigger darf also nur [Einfahrt] sein. Bei DOIF führen Angaben in eckigen Klammern, die mit einem Fragezeichen beginnen, zu keiner Triggerung des Moduls, sie dienen lediglich der Abfrage. Folgender Code sollte also funktionieren:
(..) DOELSEIF (([Einfahrt] eq "Offen") and ([?GartenLicht] eq "on") and [[Daemmerung:sr]-[Daemmerung:ss]]) (set GartenLicht:FILTER=STATE=on off)
es würde auch reichen:
(..) DOELSEIF (([Einfahrt] eq "Offen") and ([?GartenLicht] eq "on") and [[Daemmerung:sr]-[Daemmerung:ss]]) (set GartenLicht off) (wir wissen ja schon, dass [Gartenlicht] "on" ist...

Grüße,

Oli

RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Helmi55

Hollo Oli,
herzlichen Dank für deine ausführliche Erklärung. Habe es jetzt so probiert:

(([Einfahrt] eq "Offen") and ([GartenLicht] eq "off") and [[Daemmerung:sr]-[Daemmerung:ss]]) (set GartenLicht:FILTER=STATE=off on-for-timer 60) DOELSEIF (([Einfahrt] eq "Offen") and ([?GartenLicht] eq "on") and [[Daemmerung:sr]-[Daemmerung:ss]]) (set GartenLicht:FILTER=STATE=on off)

Leider ohne Erfolg. Es greift wieder der erste Teil da sich das Licht nach 60 Sekunden abdreht.
Beim Öffnen der Tür geht das Licht aus und nach wenigen Sekunden wieder an und brennt für 60 Sekunden.

Gruß
Helmut
System1 fhem 6.1 auf RPi 4B mit 4GB, HMUSBConfig, DS9490R-1Wire, Busware USB 868, Pool-Solarsteuerung mit FHEM. System2 fhem 6.1 auf RPi 4B mit 4GB (Bullseye) mit Busware USB 868 und 433 und HMUARTLGW für Haussteuerung

https://www.flickr.com/photos/canonhelmi/

Helmi55

Hallo Ellert,
das LogDoif habe ich so angelegt
([di_Test_3:""] or [Daemmerung:"sr|ss"] or [Einfahrt:""])    ({Log 1, "$SELF --> Device: $DEVICE, Events: $EVENTS"})

System1 fhem 6.1 auf RPi 4B mit 4GB, HMUSBConfig, DS9490R-1Wire, Busware USB 868, Pool-Solarsteuerung mit FHEM. System2 fhem 6.1 auf RPi 4B mit 4GB (Bullseye) mit Busware USB 868 und 433 und HMUARTLGW für Haussteuerung

https://www.flickr.com/photos/canonhelmi/

KernSani

Zitat von: Helmi55 am 09 September 2016, 15:25:53
Leider ohne Erfolg. Es greift wieder der erste Teil da sich das Licht nach 60 Sekunden abdreht.
Beim Öffnen der Tür geht das Licht aus und nach wenigen Sekunden wieder an und brennt für 60 Sekunden.

Mein Fehler  :-[ Das Problem ist ja, dass das Licht die erste Bedingung triggert, da muss also das Fragezeichen rein... (bei der zweiten Bedingung schadet's aber auch nicht)

Übrigen kannst do im DEF Editor auch Zeilenumbrüche verwenden, das macht das Ganze lesbarer ;-)

Grüße,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Ellert

Zitat von: Helmi55 am 09 September 2016, 15:39:18
Hallo Ellert,
das LogDoif habe ich so angelegt
([di_Test_3:""] or [Daemmerung:"sr|ss"] or [Einfahrt:""])    ({Log 1, "$SELF --> Device: $DEVICE, Events: $EVENTS"})

Wie geschrieben, Du müsstest ein komplettes Bewegungsmuster loggen und den Fehler kommentieren, dann müsste leicht zu sehen sein, was zurück schaltet.

Helmi55

Hallo Oli
so siehts jetzt aus und funkt leider auch nicht richtig

(([Einfahrt] eq "Offen") and ([?GartenLicht] eq "off") and [[Daemmerung:sr]-[Daemmerung:ss]]) (set GartenLicht:FILTER=STATE=off on-for-timer 60) DOELSEIF (([Einfahrt] eq "Offen") and ([?GartenLicht] eq "on") and [[Daemmerung:sr]-[Daemmerung:ss]]) (set GartenLicht:FILTER=STATE=on off)

So siehts im Def Editor aus - nur durch das Copy Past am mac scheint sich das so zu verziehen -sorry

@ Ellert
bitte nicht Teen und Federn - aber durch dein Log Doof sollte doch ein Log1 generiert werden oder?
Oder wo kann ich die Aufzeichnung sonst finden?

Danke nochmals
LG
Helmut
System1 fhem 6.1 auf RPi 4B mit 4GB, HMUSBConfig, DS9490R-1Wire, Busware USB 868, Pool-Solarsteuerung mit FHEM. System2 fhem 6.1 auf RPi 4B mit 4GB (Bullseye) mit Busware USB 868 und 433 und HMUARTLGW für Haussteuerung

https://www.flickr.com/photos/canonhelmi/

KernSani

Hmm... Dann kann nur noch das Gartentor triggern... Sendet das alle paar Sekunden den Status? Hast du event-on-change-reading beim Gartentor gesetzt?
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...