Hi Foriker,
ich bastele an meinem ersten Rolladen, der inzwischen mit ASC endlich halbwegs tut was er soll. (SonOff Dual R2 steuert den Rohrmotor)
Für die Beschattung hab ich noch nen WeekDayTimer, der mir unser Küchenfenster (südliches Fenster) außerhalb der Rolladensteuerung mit ASC dann noch beschattet. Das funktioniert jetzt auch, aber.
Das müsste ich jetzt 2x im Jahr aktivieren bzw. deaktiveren, manuell, aber das ist ja nicht sinn und zweck von automation.
Hat hier wer ne Idee wie sich die Periode auch noch automatisieren lässt?
Aktuell steht im WDT DEF:
MQTT2_Rolladen_EG_Kueche_A50221 11:00|sunprotection 14:30|half 15:30|open
Ich würde jetzt gern noch ergänzen das das vom 15.Mai bis zum 30 September fährt, sonst nicht.
Aber ich werd aus den Beispielen für Bedingungen und anderen Fragen diesbezüglich im Forum einfach nicht schlau.
Ich hab schon raus gefunden das ich mit
{ localtime() }
das Datum ermitteln kann.
Danke
Gruß Manne
localtime gibt nicht "nur" das Datum aus, man kann z.B. damit auch den Tag des Jahres abfragen.
Hab's jetzt nicht datumsmäßig exakt ermittelt, aber der Spur nach klappt folgende CONDITION:
(my $yd = (localtime(time))[7]; $yd > 140 && $yd < 220)
Vielen Dank,
die genauen Grenzwerte kann sich mit deinem Beispiel jetzt jeder ermittlen, erstklassig. Mach ich dann :-)
edit nachträglich: hier ist ein Link wo man sich das auslesen kann mit den Tagesnummern
https://www.matheretter.de/rechner/tagesnummern
Jetzt bleibt noch mein fehlendes Verständniss von FHEM bzw dem WDT Modul.
Wie ich oben schon schrieb, werd ich aus den beispielen zu den Konditionen nicht schlau.
Kann mir wer nen scrennshot machen dere so was ähnliches hat, wie das in der FHEM Oberfläche korrekt aussehen muss?
Danke
Gruß Manne
screenshots sind sch...
Hier mal eine raw-Definition, mit der ich das kurz angetestet hatte:
defmod testWDT3 WeekdayTimer devStrich0 de Mo,Mi-Fr|{sunrise_abs("CIVIL",0,"00:00","23:59")}|on (my $yd = (localtime(time))[7];; $yd > 140 && $yd < 220)
attr testWDT3 commandTemplate set $NAME $EVENT
Danke erstmal. Damit komme ich weiter.
Ich verstehe das, nen Screenshot is ...ße, belegt nen haufen Platz auf dem Forums-Server, aber er ist für Dummis wie mich dann auch wieder Selbsterklärend.
So hab ich versucht deinen dankbar angenommenen Codeschnipsel Input zu verstehen und es auf meine Anwendung umzubauen.
Das ist dabei raus gekommen (ebenfalls raw)
defmod rolladenWDT WeekdayTimer MQTT2_Rolladen_EG_Kueche_A50221 de So-Sa|11:00|sunprotection (my $yd = (localtime(time))[7];; $yd > 140 && $yd < 220) So-Sa|14:30|half (my $yd = (localtime(time))[7];; $yd > 140 && $yd < 220) So-Sa|15:30|open (my $yd = (localtime(time))[7];; $yd > 140 && $yd < 220)
attr rolladenWDT commandTemplate set $NAME $EVENT
ergibt das einen Sinn was ich da zusammen gestückelt habe?
Ich wette es enthält Fehler, ich bin nämlich nicht sicher ob die Datumseinschränkung nicht nur 1x da stehen müsste. Mir geht aber grad auch jede Idee wie das zu testen wäre ab.
Ein list würde dir vermutlich diverse Infos liefern.Die CONDITION muss am Ende stehen, und gilt für alle Schaltzeiten (bzw. eigentlich für den Tag).
Hab ich gemäß deinem Hinweis umgebaut.
Danach kam mit list für das WDT Modul das raus
Internals:
COMMAND
CONDITION (my $yd = (localtime(time))[7]; $yd > 150 && $yd < 273)
DEF MQTT2_Rolladen_EG_Kueche_A50221 de So-Sa|11:00|sunprotection So-Sa|14:30|half So-Sa|15:30|open (my $yd = (localtime(time))[7]; $yd > 150 && $yd < 273)
DEVICE MQTT2_Rolladen_EG_Kueche_A50221
FUUID 5e31b1af-f33f-3f65-e6d4-02add2a211827dce
GlobalDaylistSpec
LANGUAGE de
NAME rolladenWDT
NR 15
Profil 0: Sonntag 11:00:00 sunprotection, 14:30:00 half, 15:30:00 open,
Profil 1: Montag 11:00:00 sunprotection, 14:30:00 half, 15:30:00 open,
Profil 2: Dienstag 11:00:00 sunprotection, 14:30:00 half, 15:30:00 open,
Profil 3: Mittwoch 11:00:00 sunprotection, 14:30:00 half, 15:30:00 open,
Profil 4: Donnerstag 11:00:00 sunprotection, 14:30:00 half, 15:30:00 open,
Profil 5: Freitag 11:00:00 sunprotection, 14:30:00 half, 15:30:00 open,
Profil 6: Samstag 11:00:00 sunprotection, 14:30:00 half, 15:30:00 open,
STATE active
STILLDONETIME 0
TYPE WeekdayTimer
setModifier
READINGS:
2021-05-23 16:46:00 currValue open
2021-05-23 16:46:00 nextUpdate 2021-05-24 11:00:00
2021-05-23 16:46:00 nextValue sunprotection
2021-05-23 16:46:00 state active
SWITCHINGTIMES:
0123456|11:00|sunprotection
0123456|14:30|half
0123456|15:30|open
TIMER:
rolladenWDT_midnight:
HASH rolladenWDT
MODIFIER midnight
NAME rolladenWDT_midnight
SETTIMERATMIDNIGHT 1
helper:
daysRegExp (so|mo|di|mi|do|fr|sa|\$we|\!\$we)
daysRegExpMessage (so|mo|di|mi|do|fr|sa|$we|!$we)
SWITCHINGTIME:
0:
11:00:00 sunprotection
14:30:00 half
15:30:00 open
1:
11:00:00 sunprotection
14:30:00 half
15:30:00 open
2:
11:00:00 sunprotection
14:30:00 half
15:30:00 open
3:
11:00:00 sunprotection
14:30:00 half
15:30:00 open
4:
11:00:00 sunprotection
14:30:00 half
15:30:00 open
5:
11:00:00 sunprotection
14:30:00 half
15:30:00 open
6:
11:00:00 sunprotection
14:30:00 half
15:30:00 open
WEDAYS:
0 1
6 1
profil:
1:
EPOCH 1621760400
PARA sunprotection
TIME 11:00
WE_Override 0
TAGE:
0
1
2
3
4
5
6
2:
EPOCH 1621773000
PARA half
TIME 14:30
WE_Override 0
TAGE:
0
1
2
3
4
5
6
3:
EPOCH 1621776600
PARA open
TIME 15:30
WE_Override 0
TAGE:
0
1
2
3
4
5
6
profile_IDX:
0:
11:00:00 1
14:30:00 2
15:30:00 3
1:
11:00:00 1
14:30:00 2
15:30:00 3
2:
11:00:00 1
14:30:00 2
15:30:00 3
3:
11:00:00 1
14:30:00 2
15:30:00 3
4:
11:00:00 1
14:30:00 2
15:30:00 3
5:
11:00:00 1
14:30:00 2
15:30:00 3
6:
11:00:00 1
14:30:00 2
15:30:00 3
Attributes:
commandTemplate set $NAME $EVENT
comment syntax
Rolladen_EG_Kueche_A50221 12:00|sunprotection 14:30|half 15:30|open
Tage ausrechnen:
https://www.matheretter.de/rechner/tagesnummern
room Rolladen
Ich lass das jetzt mal mit Zeiten in den nächsten 10 Min laufen, sehe ja dann im Log obs funktioniert hat, und dann ändere ich das auf einen Tag der erst in in ein paar Tagen ist und machs nochmal...
Sieht doch schon mal nicht schlecht aus...
Hinweise noch: mo-so kann man weglassen, wdt nimmt alle Tage, wenn nichts angegeben ist. de braucht man auch nur, wenn FHEM (global) nicht auf de steht ;) .
leider honoriert FHEM Deine Condition nicht.
Habs mit übermorgen und mit ende August probiert und beidesmal hat er einfach den Rolladen bewegt....
der erste war mit start 135, der zweit, dritte etc, mit immer späteren Starttagen.
Ich war also positiv und negativ von heute
Sorry, das muss ich mir auch nochmal intensiver anschauen. Irgendwie ist da der Wurm drin, eigentlich sollte das klappen, v.a., wenn man das ganze ggf. in myUtils auslagert. Tut es aber nicht...
Zitat von: Beta-User am 23 Mai 2021, 18:30:38
Sorry, das muss ich mir auch nochmal intensiver anschauen. Irgendwie ist da der Wurm drin, eigentlich sollte das klappen, v.a., wenn man das ganze ggf. in myUtils auslagert. Tut es aber nicht...
...doch, wenn man es auslagert, tut es:
Code für myUtils:
sub myIsShadingPeriode {
return 1 if (localtime(time))[7] > 120 && (localtime(time))[7] < 220;
return 0;
}
Finale Fassung:
defmod testWDT3 WeekdayTimer devStrich0 {sunrise_abs("CIVIL",0,"00:00","23:59")}|on {sunset_abs("CIVIL",0,"00:00","23:59")}|off (myIsShadingPeriode())
Und der Gegentest:
defmod testWDT3 WeekdayTimer devStrich0 {sunrise_abs("CIVIL",0,"00:00","23:59")}|on {sunset_abs("CIVIL",0,"00:00","23:59")}|off (myIsShadingPeriode() == 0)
bzw. wenn man es ohne den Parameter "my $yd" notiert, geht es auch:
defmod testWDT3 WeekdayTimer devStrich0 {sunrise_abs("CIVIL",0,"00:00","23:59")}|on {sunset_abs("CIVIL",0,"00:00","23:59")}|off ((localtime(time))[7] > 160 && (localtime(time))[7] < 220)
Wow, erstklassig ;D
Ich hab inzwischen auch rausgefunden das dieser Code hier in der CMD Zeile vom FHEM bei Wahr ne 1 zurück gibt und bei unwahr nix im Fenster schreibt :-). Wahr wäre wenn man innerhalb der angegebenen Zeit ist.
{(localtime(time))[7] > 140 && (localtime(time))[7] < 220}
Und damit man weiß ob die oben verlinkte Tagesnummerntabelle mit dem Digi-Brain vom FHEM einigkeit hat, zeigt dieser Codeschnippsel in der FHEM CMD den heutigen Tag des Jahres als ganze Zahl an:
{(localtime(time))[7]}
[/code]
fyi: "nichts" ist bei Perl oft undef, und das ist bool = false.