Na, dann bist du hier genau richtig. Herzlich willkommen im Forum.
Beiträge von ostfriese
-
-
Na dann, auch von mir herzlichen Glückwunsch.
-
Hauseigene Gateway
Hast du da mal einen Link, bitte. Ich finde da nur Sensoren/Aktoren.
-
Leider nein. Alterco hat beschlossen, für Geräte ab Gen2 keine Firmware mehr herauszugeben. Angst vorm Chinamann wegen Nachbau
-
Wenn es später ist als Sonnenaufgang und früher als Sonnenuntergang nicht schalten (return).
Um diese Bedingung zu checken, müssen die Zeiten in Zahlen umgerechnet werden (function to_number -> Stunden * 60 + Minuten).
Die Astrozeiten brauchst du zum Programmstart. Deswegen einmal bei Programmstart aufrufen.
Dann eine wiederholenden Timer (t = Timer.set(60 * 1000, true, check_midnight);).
Der Timer wird jede Minute aufgerufen und wenn es 00:00 ist, werden die Astrozeiten aktualisiert.
Zusammenbauen musst du das alles bitte selber.
Code
Alles anzeigen. . . function checkmidnight() { if(Shelly.getComponentStatus("sys").time === '00:00') { get_astro(); } } function time_to_number(t) { return parseInt(t.split(':')[0]) * 60 + parseInt(t.split(':')[1]); } onMotionChange: function(motion) { now = Shelly.getComponentStatus("sys").time; if(to_number(now) > to_number(sunrise) && to_number(now) < to_number(sunset)) return; Shelly.call("Switch.set", { id: 0, on: motion }); }; let sunrise; let sunset; get_astro(); t = Timer.set(60 * 1000, true, check_midnight);
-
Wenn es ein Gen 2/3 ist, erreichst du mit dieser Methode folgendes:
1.) Der Shelly taucht nie wieder in deinem Netzwerk auf.
2.) Du findest ihn mit Hilfe einer Wärmebildkamera.
-
Ich kann. Eben getestet. Aber das heißt ja nichts. Admin ?
-
Welcome to the forum. Feel free to ask your questions. Pretty sure you will find help here,
Greetings
Michael
-
Vorausgesetzt du hast unter Setting --> Location and time den richtigen Breiten- und Längengrad eingetragen.
-
Du kannst dir auch die Astro-Zeiten selbst holen:
Code: Astro
Alles anzeigenfunction get_astro(){ print('Try to get location...'); Shelly.call('sys.getConfig','', function(result, error_code, error_message,action_type) { if(error_code === 0) { lon = result.location.lon; lat = result.location.lat print('Longutude: ' + lon); print('Latitude: ' + lat); url = "https://api.sunrisesunset.io/json?lat=" + lat + "&lng=" + lon; print('Try to get astro data...'); Shelly.call('http.get', {url:url,timeout:15}, function(result, error_code, error_message,action_type) { if(error_code === 0) { let res = JSON.parse(result.body); print('Sunrise: ' + twelve_to_twentyfour(res.results.sunrise)); print('Sunset : ' + twelve_to_twentyfour(res.results.sunset)); sunrise = time_to_number(res.results.sunrise.slice(0,res.results.sunrise.indexOf(' '))); sunset = time_to_number(res.results.sunset.slice(0,res.results.sunset.indexOf(' '))); sunset += 12 * 3600; print('System ready'); } } ); } } ); } let lon let lat let sunrise; let sunset; get_astro();
-
Da muss jemand anders ran. Bin Shelly-Cloud-Verweigerer.
-
ChatGPT
Schön, dass es klappt
-
Das u.g. Skript macht Folgendes:
Wenn es aufgerufen wird, fährt es die Jalousie in die unter desired_pos angegebene Position + 1.
Da ich nun keine weitere Kontrolle habe, wegen der asynchronen Ausführung, startet gleichzeitig ein, sich wiederholender, Timer.
Der Timer ruft jede Sekunde die Funktion get_cur_pos auf. Diese Funktion stellt die aktuelle Position fest und wenn desired_pos + 1
erreicht ist, wird der Befehl aufgerufen, die Position desired_pos, also die gewünschte Position, anzufahren. Also 1% nach oben.
Auch hier habe ich keine Kontrolle, also starte ich einen einmaligen Timer, der das Skript nach 3 Sekunden beendet, sofern stop_if_ready = true.
Da ich keine Jalousien habe, ist das Skript ungetestet. Ich gehe davon aus, dass Position 0 ganz geöffnet und Position 100 ganz geschlossen ist.
Code
Alles anzeigen// user config let desired_pos = 93; let stop_if_ready = true; // user config end function stop_script() { Shelly.call("script.stop", {"id":Shelly.getCurrentScriptId()}); } function get_cur_pos() { let coverStatus = Shelly.getComponentStatus("cover", 0); if(coverStatus.current_pos === desired_pos + 1) { Timer.clear(t1); Shelly.call('Cover.GoToPosition', {'id': 0, 'pos': desired_pos}, function(result, error_code, error_message) { if(error_code === 0) { if(stop_if_ready) { t1 = Timer.set(3000,false,stop_script); } } } ); } } let t1; Shelly.call('Cover.GoToPosition', {'id': 0, 'pos': desired_pos + 1}, function(result, error_code, error_message) { if(error_code === 0) { t1 = Timer.set(1000,true,get_cur_pos); } } );
-
-
Ich muss wissen, wann das Fertig kommt, wenn du NUR meinen Code ausführst.
-
Die entscheidende Frage ist, kommt die Ausgabe, wenn sie in der Stellung 93 ist, oder vorher?
-
Kann man ja machen. Meine Lösung ist autark. Deine Lösung ist auf Netzwerk und laufenden MQTT Server angewiesen.
Gleich zwei zusätzliche Fehlerquellen. Dein Shelly-Flugzeug wird dann über Satellit gesteuert.
-
"händisch" gestoppt wird bzw. nicht gestartet
Setze es auf Autostart, dann hat sich "nicht gestartet" erledigt. Und ""händisch" gestoppt" trifft ja wohl auf alles zu, egal, wie man es löst.
Außerdem kann man das Spielchen ja auch noch so treiben, dass das Skript den Watchdog überwacht und umgekehrt der Watchdog das Skript.
-
Der Watchdog ist bulletproof und läuft sogar weiter, wenn das Netzwerk ausfällt. Kannst ja noch einmal einen Watchdog auf den Watchdog ansetzen
-
Gibt, wenn das so nicht geht, noch andere Möglichkeiten. Aber teste und berichte erst einmal.