Beiträge von ostfriese

    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.

    Welcome to the Forum.

    I would recommend that you open a new thread. If you describe your problem in detail there, you will be helped even without the connection diagrams that are not available in the moment. If necessary, someone will make a sketch.;)

    Greetings from the North Sea coast

    Michael

    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.

    Der Vorteil ist, dass die Limits pro Skript gelten:

    Das kann man so umgehen. Außerdem weißt du, wenn nur eines deiner Skripte abstürzt, wo der Fehler auftaucht.

    AFAIK ist das nicht der beste Weg (kvs). Der Chip, wo das gespeichert wird, ist nicht für dauerndes Schreiben vorgesehen.

    Der bessere Weg ist ws oder http-Endpoint.

    Beispiel mit http-endpoint:


    Uff, harter Tobak. Kennst du die Api?

    Z.B.

    Shelly.getComponentStatus("sys").time

    oder

    Shelly.getComponentStatus("sys").unixtime

    Und, dein Skript ist so megakompliziert, weil GPT zwar Javascript 'kann'*, aber die Shelly Api nicht kennt.

    Skript in sinnvolle Funktionseinheiten auf 2 oder 3 Skriptr aufteilen, Daten zwischen den Skripten austauschen über z.B.http-Endpoints <- auch in der Api zu finden.


    Ist als Anregung gemeint, nicht als Kritik.


    *und das auch eigentlich nicht wirklich.

    Ich kenne die offiziellen BT Skripte nicht. Ein ehemaliger User Dekat hat hier seine eigenen Skripte zu BT eingestellt.

    Da hatte er mal etwas dazu geschrieben. Es kommt halt auch auch Firmwareversionen. BT ist ja erst in letzter Zeit überarbeitet worden

    und war lange Zeit noch sehr experimentell. Da gab es damals Probleme in Scripten, weil, schlag mich tot, was es war, hing aber mit Scannen zusammen. Ich habe hier auch ein Paar eigene BT-Skripte im Einsatz. Ich würde sagen, Versuch macht klug. Ich habe noch nie etwas anderes einstellen müssen, als Enable Bluetooth. Und Weitergabe als MQTT geht so auch. Kannst das in einem Skript auch mit http, ws, wss, oder udp weiterleiten, wohin du willst.

    Willst du selber Skripten, oder nur fertige Skripte nutzen? Aber, ist Wurscht. Wir bekommen dein Problem schon gelöst.

    Versuche doch einfach mal, ob es mit der Empfohlenen Einstellung besser läuft. Cloud willst du doch nicht nutzen, oder?

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    Enable Bluetooth -> Bluetooth eingeschaltet, Skripte können BT nutzen, z.B. scannen.

    Enable RPC -> Der Shelly kann Befehle über BT engegen nehmen. Z.B. Ein/Aus.... Braucht man im Skript nicht, kann das Skript ja selber machen.

    Enable Bluetooth Gatway. Alles, was der Shelly über BT empfängt, wird in die Cloud übertragen, Scripte können BT nicht mehr, wie vorgesehen nutzen.

    So, wie auf dem Screenshot eingestellt, funktionieren alle üblichen Skripte.

    Die Hardware 'Bluetooth Gateway' ist etwas anderes, und stellt die, in der Produktbeschreibung genannten Eigenschaften zu Verfügung.

    Leute, das Forum war und ist immer für euch da. Natürlich wollen wir alle, das Forum für euch so gut wie möglich gestalten.

    Ihr habt ja selber, durch eure Mitarbeit, wesentlich dazu beigetragen. Daher kann ich euren Unmut gut verstehen.

    Alle getroffenen Maßnahmen haben Gründe. Was wir jetzt gut gebrauchen könnten, ist eure Geduld und eure Solidarität.

    Danke dafür.