romkeller8 und vielleicht auch Neo1984
Es gibt keine einfache Möglichkeit, dies zu realisieren, weil dein Anliegen keine vorgesehene Standard-Anwendung ist.
Du solltest dir die Dokumentation ansehen und damit experimentieren.
https://shelly-api-docs.shelly.cloud/gen2/ComponentsAndServices/Cover
Die Methode "Cover.GoToPosition" akzeptiert ausschließlich ganzzahlige Parameter.
Beispiel: Fährt auf die Position 1%, d.h. fast geschlossen.
http://<Shelly IP Adresse>/rpc/cover.gotoposition?id=0&pos=1
Mit Nachkommastellen arbeitet die Methode nicht.
Somit bleibt nur ein Skript, welches ich bereits in #2 und #5 prinzipiell beschrieb.
Ob alternativ auch ein übergeordnetes System dazu geeignet ist, weiß ich nicht. Ich könnte dies allenfalls mit einem Node-RED Flow testen.
Gegenüber einem Skript sind solche Lösungen imho aber suboptimal, weil dies ein Shelly sehr gut selbst bewerkstelligen kann.
Zu Skript gibt es ein kleines Tutorial.
Weitergehende und hierfür erforderliche Informationen sind recht gut dokumentiert: https://shelly-api-docs.shelly.cloud/gen2/Scripts/S…anguageFeatures
Zum experimentieren und testen ist ein Eventhandler geeignet, der Events mit event.name==="cover" selektiert, d.h. nur dann das Folgende abarbeitet.
Prüfen, ob event.info.event==="closed" ist. Nur wenn dies vorliegt
- per Methode "Cover.Open" das Hochfahren der Jalousie starten. Shelly.call("Cover.open", {id:0});
- per Timer.set(<die von dir gewünschte Dauer in ms>, false, function() {Shelly.call("Cover.stop" {id:0});}); das Fahren der Jalousie anhalten.
Ob die von dir gewünschte Position bzw. Öffnung der Jalousie so hinreichend genau erreicht wird, musst du selbst testen. Ich habe keine derart komfortablen Jalousien.
Hier nun doch ein vermutlich geeignetes Skript zum testen:
let Duration = 150; // Millisekunden
function open(dur) {
Shelly.call("Cover.Open", {id:0});
Timer.set(dur, false,
function(){
Shelly.call("Cover.Stop", {id:0});
}
);
}
Shelly.addEventHandler(
function (event) {
if(event.name==="cover") {
if(event.info.event==="closed") open(Duration);
}
}
);
Alles anzeigen
Dieses Skript fährt aber immer, wenn es geschlossen wird, die Jalousie ein kurzes Stück hoch.
Um dies nur bei Bedarf zu erreichen, muss ggf. weiterer Code zusammengestellt werden. Dazu sind aber weitere Informationen darüber notwendig, wie der Shelly gesteuert werden soll. Mit einem Sprachassistenten (Alexa, Hey Google, Iris?) wird das nicht unmittelbar gelingen.
Jeden Morgen sollen meine heruntergeladenen Jalousien zu weniger als 1% geöffnet werden
Dazu ist ein spezieller Zeitplan (schedule job) geeignet, der die Skriptfunktion open(dur) aufruft.
Ein solcher Job lässt sich mit der aktuellen Web UI (Firmware 1.2.0 oder 1.2.1) nicht erstellen.
Ich kann dir dazu meine Webseite empfehlen, die solches unterstützt: Unterstützung beim anlegen, ändern und entfernen von Schedule Jobs (Zeitplänen)
Zusätzlich kannst du dir meine Doku für Einsteiger in Schedule Jobs durchlesen: Mächtige Schedule Jobs
Der für deine Zwecke passende URL (Browser Adresszeile) lautet etwa so:
http://<Shelly IP Adresse>/rpc/schedule.create?timespec="0 0 7 * * *"&calls=[{"method":"script.eval","params":{"id":<Id deines Skripts>,"code":"open(150"}}]
Dieser ruft täglich um 07:00 Uhr die Skript-Funktion open mit dem Parameter 150 (ms) auf.
Die Uhrzeit und auch bspw. die Wochentage lassen sich per aktueller Web UI ändern, nicht aber der Funktionsaufruf "open(150)".
Letzteres gelingt mit meiner o.a. Webseite.
Es sollte klar sein, dass du mit der Dauer des kurzzeitigen Öffnens experimentieren musst.