Script: function - Funktionswert wird nicht zurückgegeben ..

Hinweis zur Nutzung von Skripten (für Nutzer)

Die Verwendung von Skripten erfolgt ausdrücklich auf eigene Gefahr. Weder Shelly noch die jeweiligen Autoren oder Entwickler der Skripte übernehmen irgendeine Form der Haftung für mögliche Schäden, Fehlfunktionen, Datenverluste oder anderweitige Beeinträchtigungen, die durch die Nutzung dieser Skripte entstehen könnten. Bitte stellen Sie vor dem Einsatz sicher, dass Sie den Quellcode verstehen und sich der möglichen Auswirkungen bewusst sind. Die Skripte werden ohne Gewähr bereitgestellt und unterliegen keiner regelmäßigen Wartung oder offiziellen Unterstützung.


Hinweis für Entwickler

Wenn Sie eigene Skripte bereitstellen, achten Sie bitte darauf, eine klare Beschreibung, eventuelle Einschränkungen und Sicherheitsaspekte zu dokumentieren. Beachten Sie zudem, dass Nutzer Ihre Skripte grundsätzlich auf eigenes Risiko verwenden. Eine Haftung für Schäden ist ausgeschlossen, sofern diese nicht vorsätzlich oder grob fahrlässig verursacht wurden oder gesetzlich anderweitig geregelt ist.

VPN/Proxy erkannt

Es scheint, dass Sie einen VPN- oder Proxy-Dienst verwenden. Bitte beachten Sie, dass die Nutzung eines solchen Dienstes die Funktionalität dieser Webseite einschränken kann.

  • Hallo zusammen,


    ich muss vorab sagen: ich bin eigentlich kein Programmierer und nutze die Copy-and-Paste Programierung um bestehende ShellyScrips anzupassen.


    Ich stehe gerade aber auf dem Schlauch und gebrauche Unterstützung.

    Ich möchte die akutelle Solarleistung meiner openDTU im Shelly anzeigen lassen und nutze eine Funktion, die den JSON-String der openDTU liest, parsed und eigentlich den Wert "total.Power.v" zurückliefern soll.

    Ich kann mir den Wert in der Funktion selber anzeigen lassen, bekommte den gepasten JSON aber nicht in eine andere Variable übergeben und damit nicht aus der Funktion heraus.

    Was mache ich falsch?


    hier die Funktion:


    die Console gibt mit richtig den Wert "parsedData.total.Power.v aus.

    lasse ich mir den Wert über die Variable "solarPower" anzeigen, ist der Wert undeffiniert.

    Entsprechend kann ich ihn nicht an die Funktion übergeben..


    Am Ende möchte ich über den Aufruf "getSolarPower()" die Grösse "parsedData.total.Power.v" im Hauptprogramm aufrufen..

    Ich gehe davon aus, dass es sich hier um unterschiedliche Variablen-Typen handelt, die inkompartiebel sind(?)

    Was mache ich falsch?


    Danke für Hilfe !!

    Shelly PRO3 em mit dem Ziel: einfaches Energiemanagement über Scripting (da gibt es noch viel zu lernen für mich... :/)

  • Ganz kurz beschrieben: Shelly.call ist eine asynchrone Funktion, bei der man in der Callback-Funktion (function(result, error_code, error_message)) den Wert erst erhält, wenn der HTTP Aufruf fertig ist. Das erfolgt zeitversetzt. Damit ist der Wert außerhalb der Callback-Funktion in Zeile 29 gar nicht vorhanden.

    Es hilft auch nicht, den Wert innerhalb des Callbacks zurück zugeben, weil er dann nirgendwo "ankommt".

    Ich versuche später mal eine mögliche Lösung zu skizzieren.

    Überwiegend PRO 3EM im Einsatz zur Haus und PV Überwachung

  • Ok dann kann ich den Wert erst dan zurückgeben, wenn er verfügbar ist..

    Das müsste aber irgendwie dann prallel angefragt und zwischengespeichert werden, damit die Funktion nicht beim Warten auf dem Wert "ausgebremst" wird, oder?


    Ich bin auf deine mögliche Lösung gespannt :thumbup:


    Danke schon mal für den Input :)

    Shelly PRO3 em mit dem Ziel: einfaches Energiemanagement über Scripting (da gibt es noch viel zu lernen für mich... :/)

  • Die Daten direkt im Hauptprogramm zu nutzen, wird schwierig. Man müsste eine Zeit lang warten, bevor die Daten gültig sind. Da der http.get Call eine unbekannte Zeit benötigt, wird es schwierig. Klar, man könnte einfach eine ausreichend große Zeitspanne warten, aber das ist ggf. nicht praktikabel.

    Alternativ verarbeitet man die Daten direkt in der http.get Callback Funktion. Das führt aber zu recht tief geschachteltem Code. Kommt halt drauf an, was man noch mit den Werte so anstellen möchte.

    Die 3. Möglichkeit ist, sich selber einen "Fertig" Event zu senden. Dann kann man den Wert im Event-Handler auswerten. Hier der Code dafür:

    Überwiegend PRO 3EM im Einsatz zur Haus und PV Überwachung

  • Danke schon mal für deiner Unterstütung :thumbup:


    Leider bekomme ich eine Fehler, wenn ich deine Änderungen übernehme:

    ✕ Uncaught Error: Cannot read property 'info' of undefined at if (event.info.event !== 'SolarpowerEvent') { ^ in function "handleSolarPower" called from Shelly.addEventHandler(handleSolarPower());}


    Hast du eine Idee, woran das liegen kann?

    Shelly PRO3 em mit dem Ziel: einfaches Energiemanagement über Scripting (da gibt es noch viel zu lernen für mich... :/)

  • Dieses Thema enthält 7 weitere Beiträge, die nur für registrierte Benutzer sichtbar sind.