NEWS
Javascript "startSkript" startet Skript doppelt
-
@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.
-
Das ist das komplette Skript (mit der Debug-Zeile und dem "Fehler" mit nur runskript ohne Timeout
//Definitionen const sDPFrost = '0_userdata.0.Wetter.aktuell.Frost'; const aDP_Frost_Devices=['hm-rpc.0.00089D89BA198D.3.STATE','hm-rpc.0.00089D89A1686E.4.STATE','hm-rpc.0.00089F29B112F6.3.STATE']; //Pumpe Zisterne, Moorbeet, Teich => aus wenn Frost, weil Kanäle und-verknüpft const sDP_SensorIBC1 = 'hm-rpc.0.001F1A4990B273.1.STATE'; // Pegelschalter IBC voll const titel = "RaspMatic Reboot"; var msg = 'Frost aktualisiert ' + '\n\r'; // Trigger RaspMatic nach Reboot function sendMsg(pushmsg){ sendTo("pushover", { message: pushmsg , // mandatory - your text message title: titel, // optional - your message's title, otherwise your app's name is used //sound: 'magic', // optional - the name of one of the sounds supported by device clients to override the user's default sound choice // pushover, bike, bugle, cashregister, classical, cosmic, falling, // gamelan, incoming, intermission, magic, mechanical, pianobar, siren, // spacealarm, tugboat, alien, climb, persistent, echo, updown, none priority: -1 // optional // -1 to always send as a quiet notification, // 1 to display as high-priority and bypass the user's quiet hours, or // 2 to also require confirmation from the user }); }; on ({id: 'hm-rega.0.950', change: 'lt'}, function(data){ //Variable "CCU im Reboot" von RaspMatic // if (!data.state.val) // CCU nicht mehr im Reboot // { console.log(data); var bFrost = getState(sDPFrost).val; // Frost initialisieren aDP_Frost_Devices.forEach (id => { setState(id, !bFrost); msg += '-- ' + id + ' : ' + !bFrost +'\n\r'; }); // IBC Pegel initialisieren var bIBC_voll = getState(sDP_SensorIBC1).val; setState('0_userdata.0.Bewässerung.IBC.Pegel_voll', bIBC_voll); msg += ' -- IBC Pegel voll : ' + bIBC_voll + '\n\r'; //Bewässerung reinit => Ventil-Steuerung-Skript neutstarten stopScript('common.Bewässerung.Ventil_Steuerung', () => { //setTimeout( ()=> {runScript('common.Bewässerung.Ventil_Steuerung')},1000); runScript('common.Bewässerung.Ventil_Steuerung'); }); msg += ' -- Reinit Venti-Überwachung \n\r'; // Info über Boot loggen console.warn ("[Raspimatic-Boot] " + msg); sendMsg(msg); // } });
Es gibt nur eine Ausgabe ->
EventObj { id: 'hm-rega.0.950', newState: { val: false, ts: 1757669894412, ack: false, lc: 1757669894412, from: 'system.adapter.admin.0', q: 0, c: undefined, user: 'system.user.admin' }, oldState: { val: true, ts: 1757669892106, ack: true, lc: 1757669888017, from: 'system.adapter.hm-rega.0', q: 0, c: undefined, user: 'system.user.admin' }, state: { val: false, ts: 1757669894412, ack: false, lc: 1757669894412, from: 'system.adapter.admin.0', q: 0, c: undefined, user: 'system.user.admin' } }
aber das Skript startet wieder 2x:
javascript.0 2025-09-12 11:38:15.492 info Start JavaScript script.js.common.Bewässerung.Ventil_Steuerung (Javascript/js) javascript.0 2025-09-12 11:38:14.589 info Start JavaScript script.js.common.Bewässerung.Ventil_Steuerung (Javascript/js)
Und beide gestartet Skripts laufen dann parallel weiter...
-
Hast du mal den javascript-adapter neu gestartet? Im Hintergrund laufende Skript bekommst du nicht durch abschalten weg.
-
@ticaki
Das weiß ich und hab ich auch.
Das "Problem" bzw. die Frage ist warum das Skript doppelt startet -
Das wäre eine der antwortmöglichkeiten gewesen - wenns 2 mal läuft könnte es auch 2 mal gestartet werden.
Hatte das selbe Problem schon vor 4 Jahren und noch immer keine Antwort ausser einem großzügigem Timeout vor dem restart - ich hatte da teils 10 Sekunden drin.
Wenn dein Skript nicht mehr enthält als du hier gezeigt hast, fällt mir kein Grund ein.