NEWS
UNSOLVED Löschen temp. Variablen mit aktuellem JS-Adapter?
-
@haus-automatisierung hast du mit den neuen Versionen vom JS-Adapter etwas am handling der im Blockly-Script erstellten Variablen (temp. Variablen) geändert?
Bei mir läuft die Stable vom js-Adapter in Version 8.7.6 mit JS-controller 6.0.11 und NPM 10.8.2 und node-js in Version 20.17.0.Heißt, hast du das handlich so geändert, dass die selbst erstellten Variablen nach Beendigung des Skript gelöscht werden und bei einem erneuten Aufruf nicht weiter verwendet werden können?
Meine Scripte zum Entprellen eines Tasters funktionieren nicht mehr, da die temp. Variable bei jedem Script-Aufruf neu geladen wird. Scheinbar gilt das auch für timer (timeout etc.)
Z.B. geht das bei mir nicht mehr. Mit Log sieht man, dass die Variable zwischen wahr und falsch hin und her wechselt:
https://forum.iobroker.net/post/1144194
Zusätzlich die Frage, wie man generell ein doppelten Aufruf bzw, das Entprellen eines Tasters umsetzen kann, falls o.g. Funktionalität nicht mehr geht.
-
@siggi0904 sagte: Variablen nach Beendigung des Skript gelöscht werden und bei einem erneuten Aufruf nicht weiter verwendet werden können?
Skriptvariablen haben noch nie einen Skriptstart überlebt.
-
@siggi0904 sagte: Entprellen eines Tasters umsetzen
-
@paul53 dank dir, für die Alternative zur temp. Variablen.
Aber in dem ob verlinkten Beitrag war auch die Rede davon, dass die timeout-variablen nicht halten.Wie ist das hier mit dem timeout? Wie läuft das bei nochmaligen Aufruf?
Denn wenn ich da ein Debug dazu packe rennt der scheinbar beim zweiten Aufruf durch.
Ich habe die Zeit natürlich höher genommen.Dank dir.
-
@siggi0904 sagte: Wie ist das hier mit dem timeout? Wie läuft das bei nochmaligen Aufruf?
Beim Skriptstart erhält
timeout
den Wert undefined, womit die Bedingung "nicht Verzögerung timeout" erfüllt ist. Nach Ablauf der Verzögerung wird in Blockly (seit Version 7.0.5) die Variabletimeout
automatisch auf null gesetzt, wodurch dann die Bedingung auch wieder erfüllt ist. -
@paul53 naja, das würde ja die Beobachtungen bestätigen, dass bei nochmaligen Aufruf des Scripts die timeouts nicht mehr gelten.
Oder ich stehe wieder auf dem Schlauch.
-
@siggi0904 sagte: dass bei nochmaligen Aufruf des Scripts die timeouts nicht mehr gelten.
Richtig, alle Timer eines Skriptes werden bei Skriptstop bzw. -restart gelöscht. Deshalb laufen normalerweise Skripte 24/7 und Aktionen innerhalb eines Skriptes werden durch Ereignisse (z.B. Trigger) ausgelöst.
-
@paul53 sorry für die späte Rückmeldung.
Also müssen alle temp. Variablen außerhalb des Triggers initialisiert werden und werden beim Aufruf durch einen Trigger weiter verwendet oder neu belegt.
Das gilt dann sicher auch für Timer, nur das diese nicht vorinitialisiert werden müssen.Ich hoffe, es verstanden zu haben.
-
@siggi0904 sagte: Also müssen alle temp. Variablen außerhalb des Triggers initialisiert werden
Blockly deklariert alle selbst erstellten Variablen und alle Timer-Variablen global im Skript (1. Zeile im erzeugten Javascript-Code).