Beiträge von ostfriese

    Du kannst dir auch die Astro-Zeiten selbst holen:

    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.

    Ok, dann muss ich mir etwas anders einfallen lassen. Ist dann etwas komplizierter.

    Poste mal bitte die Ausgabe von (im Browser eingeben):

    Code
    http://<ip_des_Shelly>/rpc/Shelly.GetStatus

    Dann habe ich die Daten, die ich brauche. Kann ich dann im Laufe des Tages machen.

    Die Ausführung von calls ist asynchron. Muss man anders machen.

    Probiere mal bitte Folgendes und sage mir, wann in der Console 'Fertig' ausgegeben wird. Wenn das ausgegeben wird, nachdem

    die Jalousie auf 24% gefahren ist, ist das machbar.

    Code: Test
     Shelly.call('Cover.GoToPosition', {'id': 0, 'pos': 24},
        function(result, error_code, error_message) {
            print('Fertig');
        }
    );

    Kann der Shelly selbst:

    Einfach dein Skript bei dein_Skript_Name einsetzen und starten.

    Nein, das fragt ja nur den Errorcode des Requets ab. Jeder kritische Fall sollte durch try/catch abgefangen werden.

    Diese Zeile:

    Code
    if (error_code === 0 && response && response.code && response.code === 200)

    macht zum Beispiel bei KEINER response, im Sinne von, der Shelly ist gar nicht erreichbar, durchaus ärger.

    Wenn es response gar nicht gibt, ist das weder true noch false, sondern undefined. else kennt aber nur true oder false. Dann wird ein Fehler geworfen.

    Code
    //response ist nicht definiert
    
    if (response) {
      print('ok');
    }else {
      print('nok');
    }

    Resultat: Uncaught ReferenceError: "response" is not defined. Skript abgebrochen.


    Code
    //response ist nicht definiert
    
    try {
      if (response) {
        print('ok');
      }
    } catch(e) {
        print('nok');
    }

    Resultat: nok. Skript läuft weiter.


    Und, dein Code:

    Code
        Shelly.call(
            'HTTP.GET', 
            {
                'url': url
            },

    würde ich, wie folgt, ergänzen:

    Code
        Shelly.call(
            'HTTP.GET', 
            {
                'url': url, timeout:10
            },

    Ein timeout ist ein definierter Fehlerfall und führt zu einem anderen Fehlercode, als wenn gar nicht passiert. Ein Grund weniger für einen Absturz

    Ich denke, beide Maßnahmen sind sinnvoll. Teste mal.