NEWS
SetStateDelayed
-
Ich glaube so ein Problem hatte ich auch schon mal. Nach Konvertierung in Zahl ging es. Hatte nicht mit typeof getestet was raus kam. Angelegt war mein Objekt als Zahl hätte also so funktionieren müsssen...
-
Versuch doch einfach mal:
setStateDelayed(idRollo, 0, parseInt(Versatz)); });
Wenns dann klappt, liegts am Datentyp vom Versatz.
-
Hallo zusammen, kleine Verständnisfrage zu setStateDelayed()
Setzt es das Delay für die Variable ausserhalb des Skriptes, sodass ich das "löschen falls läuft" Skript übergreifend in javascript verwenden kann?
Oder geht das "löschen falls läuft" nur in ein un dem selben Skript bei mehreren Kommandos?
-
@madjack84 sagte in SetStateDelayed:
Setzt es das Delay für die Variable ausserhalb des Skriptes,
Es macht gar nix mit iwelchen Variablen. Es verzögert einfach den setState um x Millisekunden.
sodass ich das "löschen falls läuft" Skript übergreifend in javascript
Hä? Was soll das "löschen falls läuft" Skript sein? Und was hat es mit setStateDelayed zu tun?
https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md
-
@madjack84
Das geht nur im selben Skript. Du wirfst da gerade mit Blockly Begriffen um dich "löschen falls läuft" istif (ref) clearStateDelayed(ref);
Die benötigte Variable kann man nur mit maximaler Gültigkeit fürs Skript definieren.
-
@ticaki Danke.. da hast du natürlich Recht... ich mache das in Blockly und dort gibt es die schöne Option "löschen falls läuft". Das läuft auf setStateDelayed heraus.
das hier:
https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/de/blockly.md#beispiel-2und Sorry ja: Es geht um States in iobroker die von allen Skripten aus erreichbar sind (zB HM.0.rollo.1.level) , und keine dedizierten Variablen im Skript. Da habe ich mich schlecht ausgedrückt.
"Das geht nur im selben Skript"
Gilt das auch für states?
Wollte eben wissen wo der Timer aufgehangen wird... direkt am iobroker State, dann könnten alles Skripte den Timer löschen/editieren.
-
@madjack84
Ich habe Quark geschrieben war aber schön fettsetStateDelayed() löscht alle setStateDelayed(), die auf diesem State laufen. Egal aus welchem Skript (gerade getestet und sehr hilfreich)
EDIT: Ich halte das Beispiel da oben für schlecht. Wenn 10 Minuten durchgehend Bewegung ist schaltet das Licht aus.
Ist zumindest bei meinem BWM so.
-
@ticaki cool, danke für die Info
Ist wirklich hilfreich. -
@ticaki einen kleinen Schmerz habe ich allerdings...
geht hier um Rolladen:
Ein skript steuert alle Rolläden per Änderung auf blinds_target (hier ein Ausschnitt)
Bildschirmfoto 2020-04-22 um 07.34.04.png
Blinds target wird hier gesetzt und DIREKT danach
checkt das Skript die Sonne und soll vor den 30Sek den Rolladen Ost nur auf 30 fahren lassen.
Bildschirmfoto 2020-04-22 um 07.34.56.png
leider funktioniert das löschen falls läuft hier nicht. Es werden laut protokoll erst die 30 und nach 30s die 100 gesendet.
Ich fürchte das ist ein Timingproblem, da die wetterbedingte Steuern quasi gleichzeitig (multicore) oder erst nach Abarbeitung erfolgt. Drum habe ich gerade den timeout2 eingeführt um quasi einen no-op zu erzeugen
Oder mache ich grundlegend was falsch? -
Das hab ich jetzt echt nicht getestet.
Denke aber das es so richtig ist. setState() schreibt den Wert ebenfalls nicht direkt sondern erst wenn der Skriptabschnitt durchlaufen ist..