NEWS
Javascript "startSkript" startet Skript doppelt
-
@boronsbruder Würde
runscript
nutzen, aussdem erst nachsendMSG
setzen, sonst wird die Nachricht nicht gesendet?setTimeout(function(){ runScript() },2000)
-
@boronsbruder
Versuch mal in der Subscribtion anstellechange: „ne“
durch
val: false
auszutauschen.
Damit benötigst du dann deine erste if-Abfrage nicht mehr.Ich habe hin und wieder auch schon für mich nicht ganz nachvollziehbare Verhalten bei change: „ne“ gehabt, sodass ich immer versuche explizit auf den gewünschten Wert in der Subscription abzufragen.
-
@ofri2607 sagte in Javascript "startSkript" startet Skript doppelt:
@boronsbruder
Versuch mal in der Subscribtion anstellechange: „ne“
durch
val: false
auszutauschen.
Damit benötigst du dann deine erste if-Abfrage nicht mehr.Ich habe hin und wieder auch schon für mich nicht ganz nachvollziehbare Verhalten bei change: „ne“ gehabt, sodass ich immer versuche explizit auf den gewünschten Wert in der Subscription abzufragen.
Davon rate ich dringend ab. Wenn schon die if-abfrage verzichtet werden soll, dann bitte mit
change:"lt"
Das triggert ausschliesslich auf den Wechsel von
False auf True.True auf False.A.
Edit - Fehlerbehebung. -
Also, das mit
change: 'lt'
hab ich mal präventiv getestet. (@Asgothian du meintest sicher: triggert von TRUE auf FALSE - nur um keine Fehler reinzubringen)
Die Sache ist die, es wird immer nur dasstartSkript
doppelt ausgeführt. Die anderen TeilesendMsg und der ConsolenOutput
werden korrekt einmal ausgeführt.Die Lösung ist folgende:
stopScript('common.Bewässerung.Ventil_Steuerung', () => { setTimeout( ()=> {runScript('common.Bewässerung.Ventil_Steuerung')},1000); });
Selbst ohne den Timeout also mit
stopScript('common.Bewässerung.Ventil_Steuerung', () => { runScript('common.Bewässerung.Ventil_Steuerung'); });
startet das Skript doppelt!
Warum? Ich hab keine Ahnung... -
@boronsbruder sagte in Javascript "startSkript" startet Skript doppelt:
triggert von TRUE auf FALSE - nur um keine Fehler reinzubringen
korrekt, mein Fehler.
-
@boronsbruder sagte in Javascript "startSkript" startet Skript doppelt:
startet das Skript doppelt!
Warum? Ich hab keine Ahnung...bitte mal eine Debug ausgäbe in den Trigger, mit Angabe der Quelle und so weiter. Schauen ob der Trigger 2 mal kommt.
A.
-
@asgothian sagte in Javascript "startSkript" startet Skript doppelt:
Davon rate ich dringend ab.
Was ist der Grund, warum du von eine Variante mit „val: false“ dringend abrätst?
Ich habe es in der Form des Öfteren in meinen Skript‘s problemlos und mit dem jew. gewünschten Ergebnis am Laufen; bin aber auch alles andere als ein Profi. Daher wäre, um daraus zu Lernen, der Hintergrund für mich interessant. -
@ofri2607 Ganz einfach:
val:false reagiert sowohl auf Änderungen von
true
auffalse
, als auch auf Aktualisierungen (sprich wennfalse
einfach noch einmal in den DP geschrieben wird. Z.Bsp. wenn dahinter liegende Logik sich initialisiert) oder etwas bestätigt wird.Meistens ist das ungewünscht. Deswegen triggere ich boolean states zumeist auf
greater than
(fuertrue
) undless than
fuerfalse
)A.
-
ich benutze dann sowas:
change: "ne", val: false
Müsste doch genauso funktionieren.
Also bei Veränderung und val = false -
@bahnuhr sagte in Javascript "startSkript" startet Skript doppelt:
ich benutze dann sowas:
change: "ne", val: false
Müsste doch genauso funktionieren.
Also bei Veränderung und val = falseja, Aber warum 2x prüfen wenn 1x reicht ?
-
@asgothian sagte in Javascript "startSkript" startet Skript doppelt:
ja, Aber warum 2x prüfen wenn 1x reicht ?
weil ich das andere nicht gewusst habe und mir es so logischer war
-
Ich predige das eigentlich seit 2020.
true
>false
-
@asgothian sagte in Javascript "startSkript" startet Skript doppelt:
true > false
@bahnuhr
ist einfache binäre (bool'sche) Algebra!
false = 0
true = 1 -
@homoran sagte in Javascript "startSkript" startet Skript doppelt:
false = 0
true = 1Ja, das ist klar.
Aber dass dies seit 5 Jahre schon gepredigt wurde ist mir nicht bekannt.
Und ich lese täglich 2-4 Stunden hier im Forum.Muss an mir vorbei gegangen sein.
-
@bahnuhr sagte in Javascript "startSkript" startet Skript doppelt:
Aber dass dies seit 5 Jahre schon gepredigt wurde ist mir nicht bekannt.
spätestens bei Blockly wird immer wieder darauf hingewiesen den Trigger auf ist größer/ kleiner als letztes zu nehmen um eindeutigere Trigger zu erhalten und weitere Prüfungen in der folgenden Logik einzusparen
-
@homoran sagte in Javascript "startSkript" startet Skript doppelt:
Blockly
ach deshalb
ich nehm JS und kein Blockly
-
@bahnuhr sagte in Javascript "startSkript" startet Skript doppelt:
ich nehm JS und kein Blockly
Weiß ich!
Den entsprechenden Satz dazu hatte ich wieder gelöscht -
@boronsbruder sagte in Javascript "startSkript" startet Skript doppelt:
startet das Skript doppelt!
Warum? Ich hab keine Ahnung...Nehmen wir mal an im Javascript adapter steht:
for (let a=0; a<alleScriptDieTriggern.length; a++) {
und du rufst jetzt synchron im Trigger die funktion
alleScriptDieTriggern.push()
auf. Das starten eines Skripts mit Trigger ist ja nix anderes.
Dann wäre es möglich das ein await irgendwo deinem Skript die Zeit verschaft da einen Eintrag rein zu moggeln so das length+1 geht.Wobei es dann am ende steht und die chance, dass da nochmal genug zeit ist, eher niedrig - daher löst dieser Trigger nur einmal aus.
Aber nur vermutung.