Aussenlicht verhält sich nicht so wie gewünscht

Begonnen von andi11, 01 November 2017, 06:35:47

Vorheriges Thema - Nächstes Thema

andi11


Hallo,
ich hab ein Problem mit unserer neuen Aussenbeleuchtung. Eigentlich sollte sie angehen wenn es weniger als 200lux hat, und ausgehen wenn 23:50+etwas Zufall ist. Dann sollte sie um 4:50+etwas Zufall wieder angehen bis es >20lux hat.
Mein Verständnis war das der erste IF Zweig nur wieder angefahren wird, wenn zwischendrin ein anderer dran war. (Denn doalways ist ja nicht an)
Mein Senoser Umwelt_Licht_Aussen liefert alle paar Minuten einen aktuellen Helligkeitswert.

Allerdings sieht es so aus dass der Befehlsteil "Licht aus weil es nach 23:50 ist" nicht angesprungen wird, da immerwieder ein Wert von Umwelt_Licht_Aussen kommt.



DOIF:


Internals:
   DEF        ([Umwelt_Helligkeit_Aussen:state:d]<200)
  (set Licht_Aussen_Haustuer value on)
DOELSEIF ([([23:50]+int(rand(600)))])
  (set Licht_Aussen_Haustuer value off)
DOELSEIF ([([4:50]+int(rand(600)))])
  (set Licht_Aussen_Haustuer value on)
DOELSEIF ([Umwelt_Helligkeit_Aussen:state:d]>20)
  (set Licht_Aussen_Haustuer value off)

   NAME       DOIF_Licht_Eingang
   NR         44
   NTFY_ORDER 50-DOIF_Licht_Eingang
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2017-11-01 06:30:39   Device          Umwelt_Helligkeit_Aussen
     2017-11-01 05:00:40   cmd             1
     2017-11-01 05:00:40   cmd_event       Umwelt_Helligkeit_Aussen
     2017-11-01 05:00:40   cmd_nr          1
     2017-11-01 06:30:39   e_Umwelt_Helligkeit_Aussen_state 0.00 lux
     2017-11-01 05:00:40   state           cmd_1
     2017-10-31 23:58:51   timer_01_c02    01.11.2017 23:51:58
     2017-11-01 04:57:18   timer_02_c03    02.11.2017 04:54:59
   Condition:
     0          ReadingValDoIf($hash,'Umwelt_Helligkeit_Aussen','state','','(-?\d+(\.\d+)?)')<200
     1          DOIF_time_once($hash,0,$wday)
     2          DOIF_time_once($hash,1,$wday)
     3          ReadingValDoIf($hash,'Umwelt_Helligkeit_Aussen','state','','(-?\d+(\.\d+)?)')>20
   Days:
   Devices:
     0           Umwelt_Helligkeit_Aussen
     3           Umwelt_Helligkeit_Aussen
     all         Umwelt_Helligkeit_Aussen
   Do:
     0:
       0          set Licht_Aussen_Haustuer value on
     1:
       0          set Licht_Aussen_Haustuer value off
     2:
       0          set Licht_Aussen_Haustuer value on
     3:
       0          set Licht_Aussen_Haustuer value off
     4:
   Helper:
     event      getG1: 0.00 lux,last-sender: 1/1/3,0.00 lux
     globalinit 1
     last_timer 2
     sleeptimer -1
     timerdev   Umwelt_Helligkeit_Aussen
     timerevent getG1: 0.00 lux,last-sender: 1/1/3,0.00 lux
     triggerDev Umwelt_Helligkeit_Aussen
     timerevents:
       getG1: 0.00 lux
       last-sender: 1/1/3
       0.00 lux
     timereventsState:
       getG1: 0.00 lux
       last-sender: 1/1/3
       state: 0.00 lux
     triggerEvents:
       getG1: 0.00 lux
       last-sender: 1/1/3
       0.00 lux
     triggerEventsState:
       getG1: 0.00 lux
       last-sender: 1/1/3
       state: 0.00 lux
   Internals:
   Interval:
   Itimer:
   Localtime:
     0          1509576718
     1          1509594899
   Readings:
     0           Umwelt_Helligkeit_Aussen:state
     3           Umwelt_Helligkeit_Aussen:state
     all         Umwelt_Helligkeit_Aussen:state
   Realtime:
     0          23:51:58
     1          04:54:59
   Regexp:
     0:
     1:
     2:
     3:
     All:
   State:
   Time:
     0          ([23:50]+int(rand(600)))
     1          ([4:50]+int(rand(600)))
   Timecond:
     0          1
     1          2
   Timer:
     0          0
     1          0
   Timers:
     1           0
     2           1
   Trigger:
   Triggertime:
     1509576718:
       localtime  1509576718
       Hash:
     1509594899:
       localtime  1509594899
       Hash:
Attributes:
   DbLogExclude .*
   room       Aussen
   verbose    5


Sensor Umwelt_Helligkeit_Aussen:

Internals:
   DEF        6/5/1:dpt9.004
   DEVNAME    Umwelt_Helligkeit_Aussen
   IODev      tul
   LASTInputDev tul
   MSGCNT     2801
   NAME       Umwelt_Helligkeit_Aussen
   NR         41
   NTFY_ORDER 50-Umwelt_Helligkeit_Aussen
   STATE      0.00 lux
   TYPE       KNX
   tul_MSGCNT 2801
   tul_RAWMSG C1103w65010000
   tul_TIME   2017-11-01 06:30:39
   Gaddr:
     1          6/5/1
   Gcode:
     1          6501
   Helper:
     Dblog:
       State:
         Logdb:
           TIME       1509514239.93468
           VALUE      0.00
   Model:
     1          dpt9.004
   Readings:
     2017-11-01 06:30:39   getG1           0.00 lux
     2017-11-01 06:30:39   last-sender     1/1/3
     2017-11-01 06:30:39   state           0.00 lux
   Readingsname:
Attributes:
   DbLogExclude .*
   DbLogInclude .*(state).*
   IODev      tul
   room       Aussen
   
   

CoolTux

Bedingungen werden von links nach rechts abgearbeitet. So lange deine erste Bedingung Lux < 200 immer wahr wird wird auch immer der erste Zweig genommen. Mach Mal erst die zeitenabfrage und dann die Lux Abfrage.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Frank_Huber

Der ersten Bedingung fehlt auch die schließende klammer

Gesendet von meinem S3_32 mit Tapatalk


CoolTux


( [Umwelt_Helligkeit_Aussen:state:d]<200 )


Meinst Du die? Ist doch alles da? Oder übersehe ich was am frühen morgen
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Frank_Huber

#4
Zitat von: CoolTux am 01 November 2017, 07:39:56

( [Umwelt_Helligkeit_Aussen:state:d]<200 )


Meinst Du die? Ist doch alles da? Oder übersehe ich was am frühen morgen
DEF        ([Umwelt_Helligkeit_Aussen:state:d]  (set Licht_Aussen_Haustuer value on)


SOLL:
( Bedingung ) ( Befehl)

IST:
Er hat ( Bedingung ( Befehl)

Mit dem Handy online, daher kurz gefasst...

Frank_Huber

OK, Fehler gefunden.
Tapatalk schneidet Code ab...

Im Browser seh ich alles.

Als Lösunsansatz:
Setz mal das Attribut do always

Mit dem Handy online, daher kurz gefasst...


CoolTux

Ah das hatten wir ja schon mal mit Tapatalk.

Aber die Lösung ist nicht do always sondern die korrekte Reihenfolge bei der Auswertung zu beachten. Siehe meinen ersten Post
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Frank_Huber

Ja, deswegen kam mir das in den Sinn und habs geprüft.
Werd Screenshots machen und denen melden.

Richtige Reihenfolge oder / und do  always geht beides.

Ich habs bei mir über do always gelöst da die Reihenfolge übers Jahr variieren kann je nach sr und ss.

Mit dem Handy online, daher kurz gefasst...


andi11

Danke für die vielen Antworten zu so früher stunde.
Ich habe jetzt die Reihenfolge geädert, und werde testen.
Das ihr mir stattdessen aber auch "do always" empfehlt, verwirrt mich. Ich dachte es sorgt dafür das der Befehl unabhängig vom Zustand des doif ausgeführt wird.

Frank_Huber



Zitat von: andi11 am 01 November 2017, 09:00:19
Das ihr mir stattdessen aber auch "do always" empfehlt, verwirrt mich. Ich dachte es sorgt dafür das der Befehl unabhängig vom Zustand des doif ausgeführt wird.

Ohne do always = Reihenfolge MUSS stimmen, sonst klemmts.
Mit do always = bei jedem trigger wird jeder Zweig geprüft, Reihenfolge egal.

Mit dem Handy online, daher kurz gefasst...


automatisierer

Zitat von: Frank_Huber am 01 November 2017, 09:04:30

Ohne do always = Reihenfolge MUSS stimmen, sonst klemmts.
Mit do always = bei jedem trigger wird jeder Zweig geprüft, Reihenfolge egal.

Mit dem Handy online, daher kurz gefasst...

Das ist richtig, bewirkt aber auch, dass
[Umwelt_Helligkeit_Aussen:state:d]<200
immer wieder wahr wird, egal wo es steht.
Davon ab, wird dir das alleinige umstellen des DOIF mMn auch nichts bringen, da
[Umwelt_Helligkeit_Aussen:state:d]<200
halt immer wahr ist wenn dunkel und alle paar Minuten getriggert wird.

Mein DOIF sieht so aus:
defmod Flur_eg_LichtAussen_doif DOIF (([06:30-21:00]) and [Sens_Lichtsensor_tr:brightness] <= 12) (set Flur_eg_ak_LichtTA on) \
DOELSE \
(set Flur_eg_ak_LichtTA off)

Die Rand-Zeiten solltest du da auch noch mit rein packen können, einzig die verschiedenen Helligkeitswerte stelle ich mir grad schwierig vor.


Frank_Huber

#11
Ja, in seinem Fall ist das tatsächlich etwas tricky da er Zeit und Helligkeit nutzen will.
2 von 4 Pfaden haben jeweils den gleichen Befehl.
Ich würde versuchen das in Zwei Pfade zu reduzieren.

ungetestet, in diesem Fall ohne "DO always", sonst könnte sich Helligkeit und Uhrzeit beissen.
([Umwelt_Helligkeit_Aussen:state:d]<190 or [([4:50]+int(rand(600)))])
  (set Licht_Aussen_Haustuer value on)
DOELSEIF ([Umwelt_Helligkeit_Aussen:state:d]>210 or [([23:50]+int(rand(600)))])
  (set Licht_Aussen_Haustuer value off)

automatisierer

([Umwelt_Helligkeit_Aussen:state:d]>200 and [Umwelt_Helligkeit_Aussen:state:d]<20)???


Frank_Huber

#13
Zitat von: automatisierer am 01 November 2017, 09:32:18
([Umwelt_Helligkeit_Aussen:state:d]>200 and [Umwelt_Helligkeit_Aussen:state:d]<20)???

LOL, beim Zusammenkopieren passiert. Hast ja Recht. muss ich nochmal editieren.

Zuden denke ich dass er in beiden Fällen auf 200 Helligkeit prüfen wollte.
Hier sollten sich die Werte aber etwas auseinander bewegen. sonst kommt es zu unerwünschten an/aus Effekten in der Dämmerung

automatisierer

([Umwelt_Helligkeit_Aussen:state:d]<190 or [([4:50]+int(rand(600)))])
  (set Licht_Aussen_Haustuer value on)
DOELSEIF ([Umwelt_Helligkeit_Aussen:state:d]>210 or [([23:50]+int(rand(600)))])
  (set Licht_Aussen_Haustuer value off)


Das wird auch nicht funktionieren, wenn
[([23:50]+int(rand(600)))]
das Licht aus schaltet, ist
[Umwelt_Helligkeit_Aussen:state:d]<190
mit sicherheit wahr und wird bei der nächsten triggerung das Licht wieder einschalten.

Das kannst du nur hin bekommen, indem du den Helligkeitswert mit <and> an die Zeit knüpfst. Solange die Helligkeit alleine steht (und das tut es bei <or>), wird das DOIF nicht wie gewünscht schalten.