FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: mannebk am 23 Mai 2021, 15:02:55

Titel: [gelöst] WeekDayTimer nur im Sommerhalbjahr
Beitrag von: mannebk am 23 Mai 2021, 15:02:55
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
Titel: Antw:WeekDayTimer nur im Sommerhalbjahr
Beitrag von: Beta-User am 23 Mai 2021, 15:28:40
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)
Titel: Antw:WeekDayTimer nur im Sommerhalbjahr
Beitrag von: mannebk am 23 Mai 2021, 15:47:46
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
Titel: Antw:WeekDayTimer nur im Sommerhalbjahr
Beitrag von: Beta-User am 23 Mai 2021, 15:57:18
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
Titel: Antw:WeekDayTimer nur im Sommerhalbjahr
Beitrag von: mannebk am 23 Mai 2021, 16:33:53
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.
Titel: Antw:WeekDayTimer nur im Sommerhalbjahr
Beitrag von: Beta-User am 23 Mai 2021, 16:51:11
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).
Titel: Antw:WeekDayTimer nur im Sommerhalbjahr
Beitrag von: mannebk am 23 Mai 2021, 16:55:23
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...
Titel: Antw:WeekDayTimer nur im Sommerhalbjahr
Beitrag von: Beta-User am 23 Mai 2021, 17:07:16
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 ;) .
Titel: Antw:WeekDayTimer nur im Sommerhalbjahr
Beitrag von: mannebk am 23 Mai 2021, 17:19:12
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
Titel: Antw:WeekDayTimer nur im Sommerhalbjahr
Beitrag 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...
Titel: Antw:WeekDayTimer nur im Sommerhalbjahr
Beitrag von: Beta-User am 23 Mai 2021, 18:49:31
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)
Titel: Antw:WeekDayTimer nur im Sommerhalbjahr
Beitrag von: mannebk am 23 Mai 2021, 19:58:47
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]
Titel: Antw:[gelöst] WeekDayTimer nur im Sommerhalbjahr
Beitrag von: Beta-User am 23 Mai 2021, 21:03:09
fyi: "nichts" ist bei Perl oft undef, und das ist bool = false.