Moin Zusammen,
ich versuche grade meine Rollos (Siro) zu automatisieren.
Sie sollen zwischen Sonnenaufgang und Sonnenuntergang aufgehen, wenn die Sonnen nicht zwischen 80° und 200° steht und nicht in einer Höhe über 20°.
([{sunrise(0,"04:00","09:00")}]-[{sunset(0,"16:00","22:00")}]) -> funktioniert
([twilight:azimuth] < 80 and [twilight:azimuth] > 200) -> funktioniert auch
([twilight:elevation] > 20) -> funktioniert auch.
Aber wenn ich es dann kombiniere, funktioniert es nur teilweise oder gar nicht.
(([{sunrise(0,"04:00","09:00)}]-[{sunset(0,"16:00","22:00")}])
&& ([twilight:azimuth] < 80 or [twilight:azimuth] > 200)
&& ([twilight:elevation] < 20))
(set Rollos open)
DOELSE
(set Rollos close)
Funktionierte bisher am ehesten. Die Rollos gingen auf, bis die Sonne ihre Position erreicht hatte. Aber Nachmittags, wenn die Sonne über 200° steht, fuhren die Rollos nicht hoch, da ja [twilight:elevation] > 20 war.
Ich habe dann versucht, mit verschiedenen Klammersetzungen und Zusammenstellungen mehr Erfolg zu haben, aber das brachte mich alles nicht weiter.
Auch das Auslagern in die myUtils brachte mich nicht vorran, weil ich nicht weiss, wie man dort sunset/sunrise abfragt.
Vielleicht bin ich ja auch mit dem DOIF völlig Falsch unterwegs.
Wenn jemand da eine Idee hat, gerne her damit.
Gruss Dennis
Edit: Schreibfehler behoben
Zitat[twilight:azimuth] < 80 and [twilight:azimuth] > 200
Wie soll das selbe Reading gleichzeitig kleiner als 80 und auch grösser als 200 sein??
Das "nicht zwischen 80 und 200" heisst
Zitat[twilight:azimuth] < 80 or [twilight:azimuth] > 200
Zitat von: DonJuan am 18 Juni 2019, 22:52:10
Moin Zusammen,
ich versuche grade meine Rollos (Siro) zu automatisieren.
Sie sollen zwischen Sonnenaufgang und Sonnenuntergang aufgehen, wenn die Sonnen nicht zwischen 80° und 200° steht und nicht in einer Höhe über 20°.
([{sunrise(0,"04:00","09:00)}]-[{sunset(0,"16:00","22:00")}]) -> funktioniert
([twilight:azimuth] < 80 and [twilight:azimuth] > 200) -> funktioniert auch
([twilight:elevation] > 20) -> funktioniert auch.
Aber wenn ich es dann kombiniere, funktioniert es nur teilweise oder gar nicht.
(([{sunrise(0,"04:00","09:00)}]-[{sunset(0,"16:00","22:00")}])
&& ([twilight:azimuth] < 80 and [twilight:azimuth] > 200)
&& ([twilight:elevation] < 20))
(set Rollos open)
DOELSE
(set Rollos close)
Funktionierte bisher am ehesten. Die Rollos gingen auf, bis die Sonne ihre Position erreicht hatte. Aber Nachmittags, wenn die Sonne über 200° steht, fuhren die Rollos nicht hoch, da ja [twilight:elevation] > 200 war.
Ich habe dann versucht, mit verschiedenen Klammersetzungen und Zusammenstellungen mehr Erfolg zu haben, aber das brachte mich alles nicht weiter.
Auch das Auslagern in die myUtils brachte mich nicht vorran, weil ich nicht weiss, wie man dort sunset/sunrise abfragt.
Vielleicht bin ich ja auch mit dem DOIF völlig Falsch unterwegs.
Wenn jemand da eine Idee hat, gerne her damit.
Gruss Dennis
Du kannst das AutoShuttersControl Modul dafür verwenden. Habe auch Siros bei mir in Verwendung.
Grüße
Zitat von: amenomade am 18 Juni 2019, 23:03:22
Wie soll das selbe Reading gleichzeitig kleiner als 80 und auch grösser als 200 sein??
Das "nicht zwischen 80 und 200" heisst
Da hab ich vertippt. Das "or" ist im Original-Text drin.
Danke
Zitat von: CoolTux am 18 Juni 2019, 23:07:10
Du kannst das AutoShuttersControl Modul dafür verwenden. Habe auch Siros bei mir in Verwendung.
Grüße
Das AutoShuttersControl habe ich mir angeguckt und auch versucht zu nutzen. Aber das will mir einfach zu viele Dinge haben, die ich nicht nutze. So muss ich z. B. ein Device haben, welches mir einen Helligkeitswert liefert.
Jedenfalls habe ich es nicht zum Laufen bekommen.
Gruss Dennis
Hallo Dennis,
Wenn Du Beschattung haben willst benötigst Du in der Tat einen Helligkeitssensor.
Grüße
Zitat von: DonJuan am 19 Juni 2019, 06:36:22
Da hab ich vertippt. Das "or" ist im Original-Text drin.
Danke
Deswegen wäre es besser, ein vollständiges "list" vom DOIF zu posten. Am besten, wenn er im deiner Meinung nach falschen Zustand ist.
Zitatda ja [twilight:elevation] > 200 war.
Wie kann denn die Elevation grösser als 200 sein???
Zitat von: amenomade am 19 Juni 2019, 08:15:01
Deswegen wäre es besser, ein vollständiges "list" vom DOIF zu posten. Am besten, wenn er im deiner Meinung nach falschen Zustand ist.
Wie kann denn die Elevation grösser als 200 sein???
Das war wieder ein Schreibfehler. Sollte eine 20 sein. Manchmal sind die kleinen Fingerchen aber auch einfach zu schnell.
So, hier das List von meinem DOIF (ich hoffe, dass ist so richtig)
Das Rollo sollte jetzt aufgehen, da ja [twilight:azimuth] > 200 (wirklich 200) ist. Macht es aber nicht, weil [twilight:elevation] nicht kleiner 20 ist.
Elevation ist für mich halt wichtig, damit das Rollo morgens ein paar Stunden offen ist und nur zufährt, wenn die Sonne tatsächlich über die Bäume in mein Zimmer guckt.
Gruss Dennis
Internals:
CFGFN
DEF (([{sunrise(0,"04:00","09:00")}]-[{sunset(0,"16:00","22:00")}])
&& ([twilight:azimuth] < 80 or [twilight:azimuth] > 200)
&& ([twilight:elevation] < 20))
(set Rollo_2 open)
DOELSE
(set Rollo_2 close)
FUUID 5d0888e4-f33f-74de-5952-fb5272985599bb02
MODEL FHEM
NAME RolloSteuerung
NR 380
NTFY_ORDER 50-RolloSteuerung
STATE cmd_2
TYPE DOIF
VERSION 19303 2019-05-01 08:47:16
Helper:
DBLOG:
cmd:
logdb:
TIME 1560948213.58072
VALUE 2
cmd_event:
logdb:
TIME 1560948213.58072
VALUE RolloSteuerung
cmd_nr:
logdb:
TIME 1560948213.58072
VALUE 2
cmd_seqnr:
logdb:
TIME 1560909603.35533
VALUE 3
mode:
logdb:
TIME 1560948210.2295
VALUE enabled
state:
logdb:
TIME 1560948213.58072
VALUE cmd_2
READINGS:
2019-06-19 14:43:33 cmd 2
2019-06-19 14:43:33 cmd_event RolloSteuerung
2019-06-19 14:43:33 cmd_nr 2
2019-06-19 14:43:30 mode enabled
2019-06-19 14:43:33 state cmd_2
2019-06-19 14:43:30 timer_01_c01 20.06.2019 04:00:00
2019-06-19 14:43:30 timer_02_c01 19.06.2019 22:00:00
Regex:
accu:
attr:
cmdState:
wait:
waitdel:
condition:
0 (::DOIF_time_once($hash,0,$wday)-::DOIF_time_once($hash,1,$wday)) && (::ReadingValDoIf($hash,'twilight','azimuth') < 80 or ::ReadingValDoIf($hash,'twilight','azimuth') > 200) && (::ReadingValDoIf($hash,'twilight','elevation') < 20)
days:
devices:
0 twilight
all twilight
do:
0:
0 set Rollo_2 open
1:
0 set Rollo_2 close
helper:
globalinit 1
last_timer 2
sleeptimer -1
timerdev
timerevent
timerevents
timereventsState
triggerDev
DOIF_eventas:
cmd_nr: 2
cmd: 2
cmd_event: RolloSteuerung
state: cmd_2
internals:
intervalfunc:
itimer:
localtime:
0 1560996000
1 1560974400
readings:
0 twilight:azimuth twilight:elevation
all twilight:azimuth twilight:elevation
realtime:
0 04:00:00
1 22:00:00
time:
0 {sunrise(0,"04:00","09:00")}
1 {sunset(0,"16:00","22:00")}
timeCond:
0 0
1 0
timer:
0 0
1 0
timers:
0 0 1
triggertime:
1560974400:
localtime 1560974400
hash:
1560996000:
localtime 1560996000
hash:
uiState:
uiTable:
Attributes:
room Beschattung
Also.... Mir ist nicht ganz klar, was Du erreichen willst, und was nicht funktioniert, da Du dich von einem Satz zum anderen "vertippst"
So wie dein DOIF aussieht:
- wenn zwischen sunrise und sunset, und azimuth nicht zwischen 80 und 200, und elevation < 20 ist er auf
- in allen anderen Fälle ist er zu
Im Moment, elevation > 20, dann geht er nicht auf. Was ist denn das Problem?
Wenn ich versuche zu verstehen, was Du gesagt hast: Du möchtest, dass es morgens aufgeht, dann wenn die Elevation >20 wieder zugeht, dann wenn azimuth >200 wieder aufgeht, unabhängig von der Elevation? Ist das richtig ?
Wenn ja, dann musst Du es in mehrere DOIF/DOELSEIF Zweigen verteilen
(
[{sunrise(0,"04:00","09:00")}]-[{sunset(0,"16:00","22:00")}] #Beschattung wenn Sonne hoch und direkt im Fenster
and [twilight:elevation] > 20 #Da könnte man sich wahrscheinlich die Zeit Bedingung sparen
and [twilight:azimuth] > 80 and [twilight:azimuth] < 200
)
(set Rollo_2 60%)
DOELSEIF (
[{sunrise(0,"04:00","09:00")}]-[{sunset(0,"16:00","22:00")}] #Open wenn am Tag Sonne niedrig oder nicht im Fenster
and ([twilight:elevation] < 20 or [twilight:azimuth] < 80 or [twilight:azimuth] > 200
)
(set Rollo_2 open)
DOELSE # Nachts zu
(set Rollo_2 close)
Da deine Position für "Beschattung" eigentlich "zu" ist, kann man das kürzen:
([{sunrise(0,"04:00","09:00")}]-[{sunset(0,"16:00","22:00")}] and
(
[twilight:elevation] < 20
or [twilight:azimuth] < 80
or [twilight:azimuth] > 200
)
)
(set Rollo_2 open)
DOELSE
(set Rollo_2 close)
Zitat von: amenomade am 19 Juni 2019, 18:42:08
Also.... Mir ist nicht ganz klar, was Du erreichen willst, und was nicht funktioniert, da Du dich von einem Satz zum anderen "vertippst"
So wie dein DOIF aussieht:
- wenn zwischen sunrise und sunset, und azimuth nicht zwischen 80 und 200, und elevation < 20 ist er auf
- in allen anderen Fälle ist er zu
Im Moment, elevation > 20, dann geht er nicht auf. Was ist denn das Problem?
Wenn ich versuche zu verstehen, was Du gesagt hast: Du möchtest, dass es morgens aufgeht, dann wenn die Elevation >20 wieder zugeht, dann wenn azimuth >200 wieder aufgeht, unabhängig von der Elevation? Ist das richtig ?
Wenn ja, dann musst Du es in mehrere DOIF/DOELSEIF Zweigen verteilen
(
[{sunrise(0,"04:00","09:00")}]-[{sunset(0,"16:00","22:00")}] #Beschattung wenn Sonne hoch und direkt im Fenster
and [twilight:elevation] > 20 #Da könnte man sich wahrscheinlich die Zeit Bedingung sparen
and [twilight:azimuth] > 80 and [twilight:azimuth] < 200
)
(set Rollo_2 60%)
DOELSEIF (
[{sunrise(0,"04:00","09:00")}]-[{sunset(0,"16:00","22:00")}] #Open wenn am Tag Sonne niedrig oder nicht im Fenster
and ([twilight:elevation] < 20 or [twilight:azimuth] < 80 or [twilight:azimuth] > 200
)
(set Rollo_2 open)
DOELSE # Nachts zu
(set Rollo_2 close)
Da deine Position für "Beschattung" eigentlich "zu" ist, kann man das kürzen:
([{sunrise(0,"04:00","09:00")}]-[{sunset(0,"16:00","22:00")}] and
(
[twilight:elevation] < 20
or [twilight:azimuth] < 80
or [twilight:azimuth] > 200
)
)
(set Rollo_2 open)
DOELSE
(set Rollo_2 close)
Ja, bitte entschuldige, dass ich mich gelegentlich vertippe.
Aber im großen und ganzen hast du es richtig verstanden. Danke dafür.
Ich versuche es nochmal verständlich zu Formulieren. Aber dein Ansatz gefällt mir soweit.
Zwischen Sonnenaufgang und Sonnenuntergang und Azimuth zwischen 80 und 200 und Elevation > 20 soll das Rollo geschlossen sein.
Wenn nun Azimuth > 200 ist, soll egal welchen wert Elevation hat, das Rollo auffahren.
Zum Sonnenuntergang soll es wieder zu fahren.
Und ich entdecke meinen nächsten Fehler: Mit beschatten meinte ich halt, dass das Rollo auf oder zu ist. Nicht Prozentweise schliesst und öffnet.
Ich werden deinen Zweiten Vorschlag mal testen. So hatte ich das noch nicht versucht.
Gruss Dennis
Guten Morgen,
einmal hat der Code von amenomade richtig funktioniert. Danach irgendwie nicht mehr. Heute morgen z. B. müsste das Rollo eigentlich offen sein. Es ist aber geschlossen geblieben. Leider sehe ich nicht warum.
Gruss Dennis
Internals:
CFGFN
DEF ([{sunrise(0,"04:00","09:00")}]-[{sunset(0,"16:00","22:00")}]
and ([twilight:elevation] < 20
or [twilight:azimuth] < 80
or [twilight:azimuth] > 200))
(set Rollo_2 open) (set Rollo_3 open) (set Rollo_4 open)
DOELSE
(set Rollo_2 close) (set Rollo_3 close) (set Rollo_4 close)
FUUID 5d0a7b11-f33f-74de-98dc-967c966d7bdc5f08
MODEL FHEM
NAME RolloTest
NR 1184
NTFY_ORDER 50-RolloTest
STATE cmd_2
TYPE DOIF
VERSION 19303 2019-05-01 08:47:16
Helper:
DBLOG:
cmd:
logdb:
TIME 1561088367.67067
VALUE 2.3
cmd_event:
logdb:
TIME 1561088367.67067
VALUE twilight
cmd_nr:
logdb:
TIME 1561088367.67067
VALUE 2
cmd_seqnr:
logdb:
TIME 1561088367.67067
VALUE 3
error:
logdb:
TIME 1561025109.78502
VALUE condition c01
last_cmd:
logdb:
TIME 1561029447.84528
VALUE cmd_2
mode:
logdb:
TIME 1561088140.23801
VALUE enabled
state:
logdb:
TIME 1561088367.67067
VALUE cmd_2
READINGS:
2019-06-21 05:49:27 Device twilight
2019-06-21 05:39:27 cmd 2.3
2019-06-21 05:39:27 cmd_event twilight
2019-06-21 05:39:27 cmd_nr 2
2019-06-21 05:39:27 cmd_seqnr 3
2019-06-21 05:49:27 e_twilight_azimuth 57.62
2019-06-21 05:49:27 e_twilight_elevation 5.67
2019-06-21 05:35:40 mode enabled
2019-06-21 05:39:27 state cmd_2
2019-06-21 05:35:40 timer_01_c01 22.06.2019 04:00:00
2019-06-21 05:35:40 timer_02_c01 21.06.2019 22:00:00
Regex:
accu:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::DOIF_time_once($hash,0,$wday)-::DOIF_time_once($hash,1,$wday) and (::ReadingValDoIf($hash,'twilight','elevation') < 20 or ::ReadingValDoIf($hash,'twilight','azimuth') < 80 or ::ReadingValDoIf($hash,'twilight','azimuth') > 200)
days:
devices:
0 twilight
all twilight
do:
0:
0 set Rollo_2 open
1 set Rollo_3 open
2 set Rollo_4 open
1:
0 set Rollo_2 close
1 set Rollo_3 close
2 set Rollo_4 close
helper:
event azimuth: 57.62,elevation: 5.67,twilight: 98.1,twilight_weather: 79.1,compasspoint: northeast
globalinit 1
last_timer 2
sleeptimer -1
timerdev twilight
timerevent azimuth: 57.62,elevation: 5.67,twilight: 98.1,twilight_weather: 79.1,compasspoint: northeast
triggerDev twilight
DOIF_eventas:
cmd_nr: 2
cmd_seqnr: 3
cmd_event: twilight
state: cmd_2
timerevents:
azimuth: 57.62
elevation: 5.67
twilight: 98.1
twilight_weather: 79.1
compasspoint: northeast
timereventsState:
azimuth: 57.62
elevation: 5.67
twilight: 98.1
twilight_weather: 79.1
compasspoint: northeast
triggerEvents:
azimuth: 57.62
elevation: 5.67
twilight: 98.1
twilight_weather: 79.1
compasspoint: northeast
triggerEventsState:
azimuth: 57.62
elevation: 5.67
twilight: 98.1
twilight_weather: 79.1
compasspoint: northeast
internals:
intervalfunc:
itimer:
localtime:
0 1561168800
1 1561147200
readings:
0 twilight:elevation twilight:azimuth
all twilight:elevation twilight:azimuth
realtime:
0 04:00:00
1 22:00:00
time:
0 {sunrise(0,"04:00","09:00")}
1 {sunset(0,"16:00","22:00")}
timeCond:
0 0
1 0
timer:
0 0
1 0
timers:
0 0 1
trigger:
triggertime:
1561147200:
localtime 1561147200
hash:
1561168800:
localtime 1561168800
hash:
uiState:
uiTable:
Attributes:
room Beschattung
Dein DOIF ist ok. Man sieht nicht mehr, was um 05:39:27 geschaltet hat. Hast Du eine Log ?
Ausserdem hast Du den irgendwann disabled / enabled ?
Das Zeitintervall ist falsch angegeben:
([{sunrise(0,"04:00","09:00")}]-[{sunset(0,"16:00","22:00")}]
hier wurden zwei einzelne Zeittrigger definiert,die voneinander abgezogen werden ;)
Yes!
Das hatte ich mitten unten allen möglichen Klammern übersehen!
Damian ist der beste ;)
Moin Zusammen,
vielen Dank an amenomade und Damian.
Ich habe die Zeit jetzt so
([{sunrise(0,"04:00","09:00")}-{sunset(0,"16:00","22:00")}]
geändert. Nun hat das Rollo wieder reagiert. Ich hoffe, dass es jetzt "richtig" arbeitet. Werde es über das Wochenende mal beobachten.
@amenomade: Ja, ich hatte das DOIF disabled, weil ich mir nochmal was anderes zusammen gebastelt hatte. Zum Testen halt. Hab aber bei allen Versuchen auch die Klammern nicht mehr richtig gesehen.
Gruss Dennis
So, die Steuerung läuft wie gewünscht. Noch ein paar Feinheiten, wegen den Winkeln und Zeiten, aber das klappt schon.
Für alle interessierten, hier der Code
([{sunrise(0,"04:00","09:00")}-{sunset(-900,"16:00","22:00")}]
and (([twilight:azimuth] > 80 and [twilight:elevation] < 20)
or ([twilight:azimuth] > 80 and [Wetter:cloudCover] > 60)
or [twilight:azimuth] < 80
or [twilight:azimuth] > 200))
(set Rollo off)
DOELSE
(set Rollo on)
Gruss Dennis