Script MQTT-Fehlertolleranz

Script Usage Notice (for Users)

The use of scripts is strictly at your own risk. Neither Shelly nor the respective script authors or developers accept any liability for potential damages, malfunctions, data loss, or other issues that may arise from using these scripts. Please make sure you understand the source code and are aware of any potential side effects before running any script. Scripts are provided without warranty and are not subject to regular maintenance or official support.


Note for Developers

If you publish your own scripts, please ensure that you provide a clear description, list any limitations, and highlight potential security concerns. Please note that users run your scripts at their own risk. You are not liable for any damages unless they were caused intentionally, through gross negligence, or unless otherwise required by law.

VPN/Proxy detected

It appears that you are using a VPN, or proxy service. Please note that using such a service may limit the functionality of this website.

  • Ich habe auf einem i4 ein Script laufen das im Normalfall auch immer funktioniert.

    Ab und an steht das Script auf Stop und nach einem erneuten Start per Weboberfläche läuft es wieder.

    Das Script steht auch auf Autostart und sollte bei Spannungsausfall eigentlich auch sofort wieder laufen (nach Test macht es das auch).

    Ich vermute das der MQTT-Server ab und an nicht erreichbar ist (Warum auch immer er ist Intern im ioBroker).

    Das sind aber nur Vermutungen und ich finde den Fehler nicht.

    Hier das Script das Tastendrücke auf den Eingängen Zählt, diese an den MQTT weiter gibt und der Zähler kann vom MQTT beeinflusst werden.

    Könnt Ihr Euch das bitte mal ansehen und Möglicherweise findet Ihr da Verbesserungen so das das Script nicht auf Stop geht.

    Sonst kontrolliere ich das per Blockly ob es läuft und starte es auf dem Wege wieder Neu.

    Das ist aber eigentlich nur eine Übergangslösung und keine Problemlösung.

    mfg

    f.b.

    VG Frank


    System i7-4650U CPU, RAM-8GB,SSD-240GB, ioBroker

    mit :

    150 x z-wave, 28 x Shelly, 10 x ESP32 (Eigenendwicklung), Netatmo Wetterstation,

    8 x Alexa, Fritzbox, LG ESS10

  • Hallo Frank,

    Ich hab dein Skript mal grob überflogen, sieht eigentlich ganz gut aus (bis auf den fehlenden Error Handling Part), vielleicht handelt es sich um nen abgefragten null Wert.

    Man muss immer davon ausgehen, dass jeder Shelly Wert den man abfragt auch null sein kann, das ist bei manchen Werten von den Entwicklern so gewollt, dieser "null" Zustand kann von deiner Logik nicht weiter verarbeitet werden und löst dann einen Fehler aus, der zu einem Stop führt. Sowas passiert meistens nur beim Start, wenn der Shelly weder Zeit noch IP kennt, aber trotzdem versucht dein Skript auszuführen.

    Vielleicht hilft es deinen Config Check etwas anzupassen:

    Code
    function isConfigReady() {
      for (let key in CONFIG) {
        if (CONFIG[key] === "" || typeof CONFIG[key] === 'null') return false; //Auch auf null prüfen.
      }
      return true;
    }

    Wenn das net reicht, kann man immer noch einen Error Handler in jeden Shelly Call einbauen und versuchen den Fehler abzufangen, über das MQTT Debug Log kann man sich dann den abgefangenen Fehler genau ansehen.

    Hier ein Beispiel für nen Call Error Handler:

    Außerdem bedenke das du maximal 10 MQTT topic subscriptions sowie 5 Timer, in einem Skript haben kannst!


    In diesem Sinne sind hier noch weitere Verbesserungsvorschläge von mir:

    Edited 18 times, last by _[Deleted]_ (June 2, 2023 at 7:06 PM).

  • Vielleicht hilft es deinen Config Check etwas anzupassen:

    Ja das mit dem Config hatte ich auch als Fehlerquelle angesehen und habe darum eine Verzögerung eingebaut :

    Das führt dazu das eine weitere Bearbeitung erst nach 3000ms weitergefügrt wird.

    Ohne das läuft das Script fast nicht an.

    VG Frank


    System i7-4650U CPU, RAM-8GB,SSD-240GB, ioBroker

    mit :

    150 x z-wave, 28 x Shelly, 10 x ESP32 (Eigenendwicklung), Netatmo Wetterstation,

    8 x Alexa, Fritzbox, LG ESS10

  • ... dein Satz über deinem Code Ausschnitt war verdeckt,

    Ok, ja du hast recht, aber du prüfst nicht direkt auf Nullwerte, sondern nur auf leere Strings, deswegen solltest du auch zusätzlich auf Nullwerte prüfen und solange deine Timer Schleifen wiederholen bis es funktioniert, deine Timer Schleife solltest du übrigens auch anpassen, da man deinen Timer gerade über 5 mal gleichzeigt aufrufen kann.

    Schau dir bitte die von mir überarbeiten Code Stellen nochmal genau an.

    Meine Verbesserungsvorschläge:

    1. Filtern auf null Werte,

    2. Clear Timer vor dem Timer Call

    3. unsubscribe() topics vor nem neuen subscribe()

    Edited 5 times, last by _[Deleted]_ (June 2, 2023 at 8:02 PM).

  • Ok, ja du hast recht, aber du prüfst nicht direkt auf Nullwerte, sondern nur auf leere Strings, deswegen solltest du auch zusätzlich auf Nullwerte prüfen und solange deine Timer Schleifen wiederholen bis es funktioniert, deine Timer Schleife solltest du übrigens auch anpassen, da man deinen Timer gerade über 5 mal gleichzeigt aufrufen kann.

    Das mit dem Timer ist nicht auf meinem Mist gewachsen, das ist eine Vorlage schau hier :

    shelly-script-examples/mqtt-announce-control.js at main · ALLTERCO/shelly-script-examples · GitHub

    Da ich Probleme mit dem Script abbruch beim Starten hatte, habe ich nach Lösungen gesucht und nachgesehen was ALLTERCO da so bastelt und bin genau darauf gestoßen.

    Ich habe es mal eingebaut wie du geschrieben hast.

    Das klingt logisch, wenn das mehrfach hintereinander aufgerufen wird läuft irgendwann der Stack voll.

    Nur sollte ALLTERCO das in seinen Beispielen dann auch so machen damit nicht Andere das genau so falsch machen.

    VG Frank


    System i7-4650U CPU, RAM-8GB,SSD-240GB, ioBroker

    mit :

    150 x z-wave, 28 x Shelly, 10 x ESP32 (Eigenendwicklung), Netatmo Wetterstation,

    8 x Alexa, Fritzbox, LG ESS10

  • This threads contains 5 more posts that have been hidden for guests.