Hallo Zusammen,
ich habe bei einem Bekannten 4 Shelly 2.5 für Rollladensteuerung installiert, weil ich es nicht mehr mit ansehen konnte, wenn bei ihm im Sommer die Rollläden um 19 Uhr herunterfahren, weil er mit dem Nachstellen seiner Zeitschaltuhren nicht hinterher kommt.
Von dem Komfort zunächst begeistert kommt er jetzt zur Sonnenwende und meint, dass ihm 5:30 doch zu früh ist und er von den Rollladenmotoren geweckt wird. "Kein Problem" dachte ich zunächst, musste dann aber feststellen, dass ein Shelly 2.5 keine Timer-Logik kann - entweder Sonnenaufgang oder Zeit, aber keine Kombination aus beiden. Bei FHEM wäre das mit einer Zeile erledigt (https://wiki.fhem.de/wiki/SUNRISE_EL - Bsp. define Rollladen_morgens at *{sunrise(0,"06:00","08:00")} set grpRolladen up), aber mit einem Shelly ohne Hausautomatisierung im Hintergrund ist das Problem nicht lösbar.
Irgendwann habe ich mal von der Möglichkeit gelesen, dass man Shellys jetzt mit einem Skript programmieren kann. Weil der Shelly 2.5 das nicht kann müsste die preisgünstigste und einfachste Lösung mit einem Shelly 1 Plus realisierbar sein. Nach der Durchsicht der Skript Beispiele ist dabei diese Lösung entstanden: Timer Rolladen morgens.js.txt
Mit der Test-IP produziert das Skript folgende Ausgabe und die Timer sind anschließend entsprechend enabled bzw. disabled.
Rolladentimer initialisieren...
Sonnenaufgang (UTC): 2022-07-01T03:25:27+00:00
Tag: 1 Monat: 7 Jahr: 2022
Stunde: 3 Minute: 25 Sekunde: 27
Wochentag: 5
Sonnenaufgang vor 6 Uhr
Shutter: 192.168.37.220 Timer1 => false Timer2 => true
Shutter: 192.168.37.220 Timer: 1 enable: false
Shutter: 192.168.37.220 Timer: 2 enable: true
Bei der Programmierung ergaben sich folgende Probleme:
1. Ein Shelly kann selber die Zeiten für Sonnenaufgang und Sonnenuntergang berechnen. Ich habe aber leider nicht herausgefunden, wie man diese Werte abfragen bzw. nutzen kann. Deshalb => https://api.sunrise-sunset.org
2. Beim Extrahieren und Umwandeln von Zahlen aus Zeichenketten hat kein im Internet gefundenes Verfahren funktioniert. Deshalb ASCII()-48 => getNumber()
3. Lt. Doku kann man die "timespec" eines Timers über URL ändern. Syntax unbekannt?
Über Anregungen, besonders wg. der "timespec"-Änderung, würde ich mich freuen ...
Gruß
Manfred