NEWS
Script funktioniert manchmal nur nach Script Neustart
-
Hallo zusammen,
ich habe ein Script das eine Senderwahl für Radiosender realisieren soll.
Nutze einen einfachen Zigbee Taster dafür, der je nach dem wie oft gedrückt der entsprechende Sender gewählt wird.
Dafür habe ich ein TimeOut von 3 Sekunden eingebaut bei dem die Auswertung erfolgt wie oft gedrückt wurde.
Wird die Taste innerhalb der 3 Sekunden nochmal gedrückt dann wird die Variable "sender" erhöht.Mein Problem ist das es nur ein halben Tag funktioniert, danach erfolgt bei dem Script keine Reaktion mehr.
Es reicht in diesem Fall das ich das Script anhalte und einfach neustarte.
Habe schon diverse Log Ausgaben eingebaut um zu sehen wo es hakt.... er kommt nicht mal mehr in die Tasten Erkennungsroutine rein am Anfang.var sender, senderalt, timeout, timeout2; sender = 0; on({id:'alias.0.Kueche.RadioSwitch.BUTTON', change: "gt"}, async function (obj) { if (getState("alias.0.Kueche.RadioSwitch.BUTTON").val == 1002) { console.log("TASTE ERKANNT - SENDER VORHER:" + sender); clearTimeout(timeout); if (getState("alias.0.Kueche.Player.PLAYERSTATE").val == 'playing') { setState("alias.0.Kueche.Player.STOP", true); sender = 0; console.log("STOPPE MUSIK"); } else if (sender < 6) { sender++; console.log("ERHÖHE SENDER UM 1:"+sender); } else if (sender == 6) { sender = 6; } //Radiosender abspielen timeout = setTimeout(async function () { if (sender == 1) { setState("alias.0.Kueche.Player.URL", '{"url":"http://streams.radiopsr.de/psr-live/mp3-192/mediaplayer","volume":"30"}'); await wait(500); console.log("SPIELE PSR"); sender = 0; } else if (sender == 2) { setState("alias.0.Kueche.Player.URL", '{"url":"http://mp3.planetradio.de/planetradio/hqlivestream.mp3","volume":"30"}'); await wait(500); console.log("SPIELE PLANET"); sender = 0; } else if (sender > 2) { sender = 0; console.log("SENDER WAR GROESSER 2"); } }, 3000);
Das change: hatte ich Anfangs in Verdacht und habe es auch schon auf "ne" geändert, brachte aber keine Besserung.
Bei allen anderen Scripts habe ich keine derartigen Probleme.Im Badezimmer habe ich von der Funktion her das gleiche Script...der Code stammt hier aus einer Konvertierung aus Blockly.
Hier besteht das Problem nicht.
Die "on id" Abfrage am Anfang sieht hier anders aus, wobei mir hier der Code nicht ganz klar ist (bin noch Anfänger):on({id: [].concat(['alias.0.Bad.RadioSwitch.BUTTON']), change: "ne"}, async function (obj) { //var value = obj.state.val; //var oldValue = obj.oldState.val; (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})();
Hat jemand einen Tip für mich?
-
@chefffe
anbei mal ein paar Anmerkungen:@chefffe sagte in Script funktioniert manchmal nur nach Script Neustart:
change: "gt"
Bist du sicher, dass du gt willst. Ich benutze fasst ausschließlich ne.
1002 ist eine Zahl; ist das richtig ?
Der Variablen sender wurde nix neues zugewiesen. Also dürfte der Wert immer 0 sein.
Was willst du dort mit sender++
Und unten: Wenn sender 6 ist warum dann nochmal sender = 6 ? -
@chefffe said in Script funktioniert manchmal nur nach Script Neustart:
Hat jemand einen Tip für mich?
Ich würde dem Ganzen noch zwei geschweifte und eine runde Klammer am Ende spendieren.
3000); }});
-
Wie gesagt "ne" hab ich auch schon drin gehabt, funktioniert auch.
Die "1002" ist eine Zahl, sozusagen der Status für einmal kurz drücken - der springt dann wieder zurück auf "0".
Es stimmt was du sagst....die Variable "sender" hat am Anfang "0", ich wollte hier nur eine Ausgabe machen ob er hier im Programm durchkommt bzw ob Sender "0" hat abfragen.
Das unten mit dem sender == 6 ist natürlich quatsch, sollte heissen sender > 6.Das mit der Klammer probiere ich mal.....
Komisch ist nur das der Code einwandfrei funktioniert und spätestens nach einem Tag passiert hier gar nix mehr.
Script Pause und wieder Play und dann läuft er wieder ohne zu murren für einen weiteren Tag.Hab den Codeteil mit dem "on id" vom Bad mal in der Küche reingenommen....wenns im anderen Raum funktioniert muss es hier ja auch gehen.