Hallo Zusammen,
ich würde gerne die Sunset Funktion nutzen, um abends meine Rollladen und Jalousien runter zu lassen.
Das funktioniert auch einwandfrei.
Leider kommt es häufig vor, das schon Sonnenuntergang gemeldet wird, obwohl es draussen noch einigermaßen hell ist.
Deshalb würde ich gerne die Sunset Funktion mit einer Lichtmessung der Wetterstation koppeln. Leider funktioniert das nicht richtig. Kann mir hier einer auf die Sprünge helfen.
Hier mein bisheriger Code:
*{sunset("REAL",0,"17:30","22:30")} and (Aussenbereich.DachWest.Lux < 15) {
fhem("set UG.Abstell.Rollladen Ab");
fhem("define SunsetAction1 at +00:00:30 set UG.Hobby.RollladenLinks Ab");
fhem("define SunsetAction2 at +00:01:00 set UG.Hobby.RollladenRechts Ab");
fhem("define SunsetAction3 at +00:01:30 set EG.Buero.Rollladen Ab");
...
Vielen Dank schon mal.
Grüße superverbleit
ja. Wir wissen allerdings nicht was nicht funktioniert und Deine Infos (code) sind dürftig, aber:
ich vermute mal ein "at". Und so wie das geschrieben ist passiert folgendes. Wenn zum Zeitpunkt des Sunsets die Helligkeit unter 15Lux ist dann fahren die Rollläden runter ("and" Verknüpfung). Wohl eher selten, oder ? ;)
Warum triggerst Du nicht _nur_ auf die Helligkeit ?
Das? Ein "at"?? Neeee... So sieht ein "at" aus:
Zitatdefine <name> at [<timespec>|<datespec>] <command>
https://forum.fhem.de/index.php/topic,102522.msg960957.html#msg960957
naja. man weiß es ja nicht. ... Aber so beim genaueren hinschauen - hast Recht. :) Unabhängig davon wird das "and" wohl im Sommer trotzdem eher selten wahr, Frage an te bleibt also
Ahja... und
{
fhem("set UG.Abstell.Rollladen Ab");
fhem("define SunsetAction1 at +00:00:30 set UG.Hobby.RollladenLinks Ab");
fhem("define SunsetAction2 at +00:01:00 set UG.Hobby.RollladenRechts Ab");
fhem("define SunsetAction3 at +00:01:30 set EG.Buero.Rollladen Ab");}
kann man auch so schreiben:
set UG.Abstell.Rollladen Ab;; sleep 30;;set UG.Hobby.RollladenLinks Ab;; sleep 30;;set UG.Hobby.RollladenRechts Ab;;sleep 30;;set EG.Buero.Rollladen Ab
Hallo,
das Problem habt ihr genau richtig erkannt.
Zum Zeitpunkt des Sonnenuntergangs ist die Lichtmessung normalerweise nie unter 15 lux.
Deshalb passiert in meinem Konstrukt nichts.
Natürlich könnte ich nur die Lichtmessung nehmen, ich würde aber gerne zur Sicherheit den Sonnenuntergang dazu nehmen.
Gibt es eine Anweisung, die aktiv wartet, bis beide Bedingungen (Sonnenuntergang und Lichtmessung) wahr sind und dann erst meine Rollladen runterfährt?
Hier noch der Rest des Codes, es ist ein at, sorry.
define RollladenAb at *{sunset(0,"17:30","22:00")} and (Lichtmessung < 15) {
https://forum.fhem.de/index.php/topic,102522.msg960957.html#msg960957 (https://forum.fhem.de/index.php/topic,102522.msg960957.html#msg960957)
Da wird eins der Probleme schon behandelt....
Das musst Du anders lösen, z.B. mit einem DOIF
define RollladenAb DOIF ([{sunset(0,"17:30","22:00")}-03:00] and Lichtmessung < 15)
(set UG.Abstell.Rollladen Ab)
(set UG.Hobby.RollladenLinks Ab)
(set UG.Hobby.RollladenRechts Ab)
(set EG.Buero.Rollladen Ab)
attr RollladenAb wait 0:30:30:30
zuerst steht ja mal die Frage des gewünschten Verhaltens:
der Rolladen geht runter wenn:
die Sonne untergeht (Zeitpunkt) _und_ die Helligkeit unter 15 Lux ist (doof)
die Sonne bereits untergegangen ist (Zustand) _und_ die Helligkeit unter 15 Lux ist. (hmm...)
die Sonne untergangen ist _oder_ die Helligkeit unter 15 Lux ist (whatever comes first)
...
Warum soll den sunset überhaupt mit den LUX gekoppelt werden ? Soll es vielleicht sowas werden:
wenn die Helligkeit unter 15 Lux ist, spätestens jedoch um 22:00?
wenn die Helligkeit unter 15 Lux ist, spätestens jedoch wenn die Sonne -6° unter dem Horizont ist? (ähnlich und adaptiv zur Jahreszeit)
Also... die Frage hatte ich auch.
Ich habe
Zitatbis beide Bedingungen (Sonnenuntergang und Lichtmessung) wahr sind und dann erst meine Rollladen runterfährt?
so interpretiert:
Zitatdie Sonne bereits untergegangen ist (Zustand) _und_ die Helligkeit unter 15 Lux ist. (hmm...)
Anforderungsinterpretation:
Wenn die Helligkeit unter 15 und die Sonne heute schon untergegangen ist
Könnte es sein.
Für mich ein nortify/DOIF mit Trigger Helligkeit und Prüfung auf Zeitpunkt.
möglich. Aber er schreibt "zur Sicherheit". Das könnte also auch dies sein:
Zitatwenn die Helligkeit unter 15 Lux ist, spätestens jedoch um 22:00?
wenn die Helligkeit unter 15 Lux ist, spätestens jedoch wenn die Sonne -6° unter dem Horizont ist? (ähnlich und adaptiv zur Jahreszeit)
Sonne bereits untergegangen _und_ Helligkeit unter 15Lux führt im Zweifel ja höchstens dazu dass die Fenster im Winter bei echt miesem Wetter (tm)* auch _vor_ sunset offen bleiben. (hmmm... )
*Sonne noch 'oben' _und_ weniger als 15Lux.. da ist schon was 'sehr seltenes' los ..
Zitatdie Fenster im Winter bei echt miesem Wetter (tm)* auch _vor_ sunset offen bleiben
Wir wissen nicht ob er das so will. ;)
Manche Leute wollen kein schlechtes Wetter sehen, andere finden es schön aus der !warmen Stube" rauszuschauen.
es steht mir auch fern das zu beurteilen. Es ist mir wichtig zu hinterfragen ob dies so das Ziel ist damit der code auch macht was er soll ..
geht mir auch so.
Woran scheitern die meisten IT-Projekte? An ungenügenden, unklar formulierten Anforderungen. :(
Naja, die IT-Abteilung sagt auch: "Erläutere Deine Bedürfnisse, wir werden erklären, wie Du darauf verzichten kannst"
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.
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.
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?
:d ist schon richtig. Poste bitte ein vollständiges "list" vom DOIF, wenn es deiner Meinung nach "nicht funktioniert" hat.
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:
Ein "list" von Aussenbereich.DachWest.Lux bitte. Er sagt
Zitat"" is not numeric
d.h. er findet keinen Wert
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)
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.
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)"
([{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"
Super. Es funktioniert endlich.
Das mit state:d war die Lösung.
Danke an alle. :)