Sunset in Zusammenspiel mit Lichtmessung Wetterstation

Begonnen von superverbleit, 24 Juli 2019, 22:12:05

Vorheriges Thema - Nächstes Thema

amenomade

Naja, die IT-Abteilung sagt auch: "Erläutere Deine Bedürfnisse, wir werden erklären, wie Du darauf verzichten kannst"
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

superverbleit

Hallo Leute,

hier nochmals meine Anforderung, hoffentlich klarer formuliert. ;)

Ich will das Ereignis sunset nützen, welches frühestens um 17:30 und spätestens 22:30 passieren muss, um meine Rollladen und Jalousien runter zu lassen.
Heute war das mit der real Option bei mir um 21:07.

Wird das Ereignis sunset getriggert, soll gleichzeitig geprüft werden, ob die Lichtmessung der Wetterstation < 15 Lux meldet.
Ist es noch heller als 15 Lux (Wert ist größer als 15 Lux), soll das System solange mit dem Befehl zum herunterlassen der Rollladen/Jalousien warten, bis die Wetterstation ein unterschreiten des Werts meldet.

Unter Sicherheit verstehe ich, das zum Herablassen der Rolll/Jal ein Sonnenuntergang passiert sein muss.
Evtl. geht ja mal die Welt kurzfristig um 3Uhr mittags unter, wir unterschreiten 15 Lux, dann sollen ja nicht die Rollladen runter gehen.


Ich probier mal den Vorschlag mit der DOIF Lösung.


Christoph Morrison

Zitat von: superverbleit am 25 Juli 2019, 22:23:12
Ich probier mal den Vorschlag mit der DOIF Lösung.

Oder du schaust dir mal AutoShuttersControl an. Das kann deine Anforderung iirc bereits built in.

superverbleit

Hallo,

jetzt stellt sich bei mir doch noch ein Problem raus.
Der DOIF mit meiner Lichtmessung und der Sunset Abfrage funktioniert nicht richtig.
Sunset funktioniert, jedoch die Bedingung der Lichtmessung nicht.
Und zwar meldet die Lichtmessung vermutlich keinen numerischen Wert zurück

Hier nochmals das DOIF:
define RollladenAb DOIF ([Aussenbereich.DachWest.Lux] < 15 and [{sunset("REAL",0,"17:30","22:30")}])
{...}


Sehe hier die warning:
condition c01: Argument "1.00 lux" isn't numeric in numeric lt (<)

Das Device hat z.B. folgende Readings:
Readings
Lux-get 1.00 lux 2019-08-01 22:38:00
last-Sender 1/1/27 2019-08-01 22:38:00
state 1.00 lux 2019-08-01 22:38:00


Habe auch schon unter anderem folgendes probiert:
[Aussenbereich.DachWest.Lux:d] < 15
Leider alles ohne Erfolg.

Was ich ja will ist, das die Bedingung true liefert, wenn der Wert 15 lux unterschreitet.

Wie müsste die Abfrage richtig lauten? Ist das ein String Vergleich oder wie muss das richtig umgewandelt/formatiert werden?


amenomade

:d ist schon richtig. Poste bitte ein vollständiges "list" vom DOIF, wenn es deiner Meinung nach "nicht funktioniert" 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

superverbleit

Hier der list vom doif

Internals:
   CFGFN     
   DEF        ([Aussenbereich.DachWest.Lux:d] < 15 and [{sunset("REAL",0,"17:30","22:30")}])
   (set UG.Abstell.Rollladen Ab)
   (define SunsetAction1 at +00:00:30 set UG.Hobby.RollladenLinks Ab)
   (define SunsetAction2 at +00:01:00 set UG.Hobby.RollladenRechts Ab)
   (define SunsetAction3 at +00:01:30 set EG.Buero.Rollladen Ab)
   (define SunsetAction4 at +00:02:00 set EG.Kueche.Rollladen Ab)
   (define SunsetAction5 at +00:02:30 set EG.Wohnz.Rollladen Ab)
   (define SunsetAction6 at +00:03:00 set EG.Essz.Jalousie.TerrasseLinks Ab)
   (define SunsetAction7 at +00:03:30 set EG.Essz.Jalousie.TerrasseRechts Ab)
   (define SunsetAction8 at +00:04:00 set EG.Essz.Jalousie.Sitzfenster Ab)
   (define SunsetAction9 at +00:04:30 set EG.Wohnz.Jalousie.Eck Ab)
   (define SunsetAction10 at +00:05:00 set EG.Wohnz.Jalousie.FrontLinks Ab)
   (define SunsetAction11 at +00:05:30 set EG.Wohnz.Jalousie.FrontRechts Ab)
   (define SunsetAction12 at +00:06:00 set DG.Treppenhaus.Jalousie Ab)
   (define SunsetAction13 at +00:06:30 set DG.Bad.Rollladen Ab)
   (define SunsetAction14 at +00:07:00 set DG.Kind2.RollladenLinks Ab)
   (define SunsetAction15 at +00:07:30 set DG.Kind2.RollladenRechts Ab)
   (define SunsetAction16 at +00:08:00 set DG.Schlafzimmer.Jalousie Ab)

   MODEL      FHEM
   NAME       RollladenAb
   NR         120108
   NTFY_ORDER 50-RollladenAb
   STATE      cmd_2
   TYPE       DOIF
   READINGS:
     2019-08-02 21:54:32   cmd             2
     2019-08-02 21:54:32   cmd_event       RollladenAb
     2019-08-02 21:54:32   cmd_nr          2
     2019-08-02 21:53:00   mode            enabled
     2019-08-02 21:54:32   state           cmd_2
     2019-08-02 21:53:00   timer_01_c01    03.08.2019 20:54:13
     2019-08-02 21:54:40   warning         condition c01: Argument "" isn't numeric in numeric lt (<)

   Regex:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ReadingValDoIf($hash,'Aussenbereich.DachWest.Lux','d') < 15 and DOIF_time_once($hash,0,$wday)
   days:
   devices:
     0           Aussenbereich.DachWest.Lux
     all         Aussenbereich.DachWest.Lux
   do:
     0:
       0          set UG.Abstell.Rollladen Ab
       1          define SunsetAction1 at +00:00:30 set UG.Hobby.RollladenLinks Ab
       10         define SunsetAction10 at +00:05:00 set EG.Wohnz.Jalousie.FrontLinks Ab
       11         define SunsetAction11 at +00:05:30 set EG.Wohnz.Jalousie.FrontRechts Ab
       12         define SunsetAction12 at +00:06:00 set DG.Treppenhaus.Jalousie Ab
       13         define SunsetAction13 at +00:06:30 set DG.Bad.Rollladen Ab
       14         define SunsetAction14 at +00:07:00 set DG.Kind2.RollladenLinks Ab
       15         define SunsetAction15 at +00:07:30 set DG.Kind2.RollladenRechts Ab
       16         define SunsetAction16 at +00:08:00 set DG.Schlafzimmer.Jalousie Ab
       2          define SunsetAction2 at +00:01:00 set UG.Hobby.RollladenRechts Ab
       3          define SunsetAction3 at +00:01:30 set EG.Buero.Rollladen Ab
       4          define SunsetAction4 at +00:02:00 set EG.Kueche.Rollladen Ab
       5          define SunsetAction5 at +00:02:30 set EG.Wohnz.Rollladen Ab
       6          define SunsetAction6 at +00:03:00 set EG.Essz.Jalousie.TerrasseLinks Ab
       7          define SunsetAction7 at +00:03:30 set EG.Essz.Jalousie.TerrasseRechts Ab
       8          define SunsetAction8 at +00:04:00 set EG.Essz.Jalousie.Sitzfenster Ab
       9          define SunsetAction9 at +00:04:30 set EG.Wohnz.Jalousie.Eck Ab
     1:
   helper:
     globalinit 1
     last_timer 1
     sleeptimer -1
     timerdev   
     timerevent
     timerevents
     timereventsState
     triggerDev
     DOIF_eventas:
       cmd_nr: 2
       cmd: 2
       cmd_event: RollladenAb
       state: cmd_2
   internals:
   intervalfunc:
   itimer:
   localtime:
     0          1564858453
   readings:
     0           Aussenbereich.DachWest.Lux:d
     all         Aussenbereich.DachWest.Lux:d
   realtime:
     0          20:54:13
   time:
     0          {sunset("REAL",0,"17:30","22:30")}
   timeCond:
     0          0
   timer:
     0          0
   timers:
     0           0
   triggertime:
     1564858453:
       localtime  1564858453
       hash:
   uiState:
   uiTable:
Attributes:

amenomade

Ein "list" von Aussenbereich.DachWest.Lux bitte. Er sagt
Zitat"" is not numeric
d.h. er findet keinen Wert
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

rabehd

#22
ZitatHier der list vom doif

Ein DOIF, welches bei erfüllen zwei Bedingung ein Reihe von at anlegt.  :'(

Ein at auf diesem Weg sollte man mit "defmod" anlegen.
Deine ganzen "SunsetAction" kannst Du Dir sparen, wenn Du das Attribut "wait" bein DOIF verwendest.

Nach meinem Dafürhalten sagt die Definiton "wenn das Licht bei Sonnenuntergang unter 15, dann..."
Sinnvoller erscheint mir "Wenn zwischen 17:30 und 22:30 das Licht unter 15 ist"
([17:30-22:30] and [Aussenbereich.DachWest.Lux:d] < 15)


Auch funktionierende Lösungen kann man hinterfragen.

superverbleit

Hier der List zu Aussenbereich.DachWest.Lux

Internals:
   DEF        4/2/3:dpt9.004:Lux
   DEVNAME    Aussenbereich.DachWest.Lux
   FIRSTGADNAME Lux
   GETSTRING  Lux:noArg
   IODev      KNX
   KNX_MSGCNT 26231
   KNX_RAWMSG C0111bw042030064
   KNX_TIME   2019-08-03 22:46:44
   LASTInputDev KNX
   MSGCNT     26231
   NAME       Aussenbereich.DachWest.Lux
   NR         28
   NTFY_ORDER 50-Aussenbereich.DachWest.Lux
   SETSTRING  Lux:slider,-670760,13415,670760
   STATE      1.00 lux
   TYPE       KNX
   GADDETAILS:
     Lux:
       CODE       04203
       GROUP      4/2/3
       MODEL      dpt9.004
       NO         1
       OPTION     
       RDNAMEGET  Lux-get
       RDNAMEPUT  Lux-put
       RDNAMESET  Lux-set
       SETLIST    :slider,-670760,13415,670760
   GADTABLE:
     04203      Lux
   READINGS:
     2019-08-03 22:46:44   Lux-get         1.00 lux
     2019-08-03 22:46:44   last-sender     1/1/27
     2019-08-03 22:46:44   state           1.00 lux
Attributes:
   IODev      KNX
   group      Lichtstaerke
   room       Aussenbereich
   webCmd     :


Den Sunset Aufruf will ich nur zur Sicherheit, das die Rollladen nur nach Sonnenuntergang runter gehen. Sollte die Lichtmessung zuvor kleiner 15 lux werden, soll nix passieren.

Das mit attr wait stimmt, ist ein bißchen eleganter. Das mit defmode guck ich mir mal an.

rabehd

Zitatdas die Rollladen nur nach Sonnenuntergang runter gehen
Da gäbe es in den verschiedenen Devices eine Reihe von Readings. Auf Anhieb fällt mir das Astromodul ein. Für andere habe ich den Namen nicht im Kopf.

"Wenn zwischen 17:30 und 22:30 (das Licht unter 15 ist und es Nacht ist)"
Auch funktionierende Lösungen kann man hinterfragen.

amenomade

([{sunset("REAL",0,"17:30","22:30")}-08:00] and [Aussenbereich.DachWest.Lux:state:d] < 15)

"Zwischen sunset und 8 Uhr Morgens, wenn Licht unter 15 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

superverbleit

Super. Es funktioniert endlich.
Das mit state:d war die Lösung.

Danke an alle. :)