NEWS
[gelöst] Entprellen von Schaltern
-
Huhu,
ich habe hier einige Probleme mit Datenpunkten die ich als Schalter benutze.
Egal ob ich Blockly, JS oder NodeRed benutze. Wenn ich den Datenpunkt "auf Aktualisierung" prüfe wird 3 mal getriggert.
Dies führt natürlich dazu dass die nachfolgenden Befehle im Script auch 3 mal ausgeführt werden.
Wenn ich "auf Änderung" prüfe gibt es diese Probleme nicht.
Hier mal die Debug-Ausgabe, geschaltet aus Vis On/Off.
15.1.2019, 12:24:39.257 [info ]: javascript.0 Stop script script.js.Schalter.SZ_Beamer 15.1.2019, 12:24:41.804 [info ]: javascript.0 Start javascript script.js.Schalter.SZ_Beamer 15.1.2019, 12:24:41.808 [info ]: javascript.0 script.js.Schalter.SZ_Beamer: registered 1 subscription and 0 schedules 15.1.2019, 12:24:48.028 [info ]: javascript.0 script.js.Schalter.SZ_Beamer: true 15.1.2019, 12:24:48.061 [info ]: javascript.0 script.js.Schalter.SZ_Beamer: true 15.1.2019, 12:24:49.025 [info ]: javascript.0 script.js.Schalter.SZ_Beamer: true 15.1.2019, 12:24:54.160 [info ]: javascript.0 script.js.Schalter.SZ_Beamer: false 15.1.2019, 12:24:54.198 [info ]: javascript.0 script.js.Schalter.SZ_Beamer: false 15.1.2019, 12:24:55.173 [info ]: javascript.0 script.js.Schalter.SZ_Beamer: false
Gibt es eine Möglichkeit dies zu entprellen ??
Grüsse
Ingo
-
So…
zum Beispiel:
Entpreller ist eine Variable
Anstatt debug deine eigentlichen Befehle ausführen
Timeout nach Bedarf anpassen.
-
-
Super, funktioniert.
Vielen Dank.
Grüsse
Ingo
-
funktioniert. `
Dann markiere bitte das Thema im Betreff des ersten Beitrags als [gelöst]. -
Noch ne kurze Info dazu.
"falls Entpreller = 0" hat nicht funktioniert habe stattdessen "falls Entpreller ≠ 1" genommen, das klappt.
Grüsse
Ingo
-
Das liegt daran, dass die Variable beim Skriptstart nicht mit 0 initialisiert wird und somit "undefined" zurückgibt. Wenn außerhalb des Triggers (also oben dran verbunden) die Variable auf 0 gesetzt wird funktioniert es auch mit dem Vergleich auf 0
-
habe stattdessen "falls Entpreller ≠ 1" genommen, das klappt. `
Das funktioniert nicht.Was auch nach Skriptstart funktioniert: falls nicht Entpreller
-
OK, die Variable vorher zu setzen ist wahrscheinlich die sauberste Lösung.
Danke
Grüsse
Ingo
-
Ich habe das in der Praxis anstatt mit Variable mit Datenpunkt gelöst und nur für das Beispiel geändert.
Das Problem ist mir dabei nicht aufgefallen.
Also sorry, war mein Fehler.
-
Hallo, ich hänge mich mal hier dran.
So wirklich gelöst ist das Problem ja nicht, es wurde ja auch ein Github dazu erstellt:
https://github.com/ioBroker/ioBroker.ja … issues/288
Ich verwende bei mir mehrere GHoma-Steckdosen mit Leistungsmessung. Damit will ich u.a. Trockner/Waschmaschine überwachen.
Im Log bekommen ich jetzt jedes Update mehrfach angezeigt, teilweise auch von die Leistungswerten von andere Steckdosen obwohl die korrekte ausgewählt wurden. (Trockner hat ~ 500W)
code Aus Blockly
on({id: new RegExp('g-homa\\.0\\.4FEC24\\.power' + "|" + 'vis\\.0\\.datapoints\\.WM_Meldung_Aus'), change: "ne"}, function (obj) { CrtPower = getState("g-homa.0.4FEC24.power").val; console.log((['Trockner Leistung:',(obj.state ? obj.state.val : ""),' W, Status: ',WM_Status].join(''))); ..
Log
13:37:12.958 info javascript.0 script.js.GHoma.Trockner: Trockner Leistung:475.94 W, Status: 2 13:37:12.959 info javascript.0 script.js.GHoma.Trockner: Trockner Leistung:475.94 W, Status: 2 13:37:12.959 info javascript.0 script.js.GHoma.Trockner: Trockner Leistung:475.94 W, Status: 2 13:37:13.401 info javascript.0 script.js.GHoma.Trockner: Trockner Leistung:0.93 W, Status: 2 13:37:13.402 info javascript.0 script.js.GHoma.Trockner: Trockner Leistung:0.93 W, Status: 2 13:37:13.403 info javascript.0 script.js.GHoma.Trockner: Trockner Leistung:0.93 W, Status: 2 13:38:27.978 info javascript.0 script.js.GHoma.Trockner: Trockner Leistung:475.28 W, Status: 2 13:38:27.979 info javascript.0 script.js.GHoma.Trockner: Trockner Leistung:475.28 W, Status: 2 13:38:27.979 info javascript.0 script.js.GHoma.Trockner: Trockner Leistung:475.28 W, Status: 2 13:38:51.831 info javascript.0 script.js.GHoma.Trockner: Trockner Leistung:484.22 W, Status: 2 13:38:51.832 info javascript.0 script.js.GHoma.Trockner: Trockner Leistung:484.22 W, Status: 2 13:38:51.832 info javascript.0 script.js.GHoma.Trockner: Trockner Leistung:484.22 W, Status: 2 13:38:52.337 info javascript.0 script.js.GHoma.Trockner: Trockner Leistung:0.94 W, Status: 2 13:38:52.338 info javascript.0 script.js.GHoma.Trockner: Trockner Leistung:0.94 W, Status: 2 13:38:52.338 info javascript.0 script.js.GHoma.Trockner: Trockner Leistung:0.94 W, Status: 2
Hier steht auch noch was dazu allerdings ohne Lösung:
-
Участник @Tottbeck написал в [gelöst] Entprellen von Schaltern:
obj.state ? obj.state.val : ""
Kannst du so was ausgeben:
console.log('Leistung: ' + JSON.stringify(state))
? -
Hi,
ich muss zum verständnis mal was nachfragen! -
@totocotonio
Ohne selber ein Spezialist bei Blockly zu sein - hast du die Variable entpreller irgendwo mit 0 vorbelegt ? Wenn nein, dann rechne ich damit das er da nicht rein kommt. -
@Asgothian Ok, wo muss dann mein eigentliches Blockly hin?
-
@totocotonio
setz mal ein Objekt Setze Entpreller auf 0 vor den Falls Objekt geändert block. Das wird dann nur einmal beim Aufruf des Blocklys aufgerufen -
@Asgothian Auwei, ich verstehe nicht was du meinst.
-
@totocotonio
versuch das mal so:
(Bild hab ich zusammen kopiert, kann aktuell nicht auf meinen iobroker)
Und ja, da wo du hin zeigst muss das rein was du ausführen willst. -
@Asgothian Ahhh ,
jetzt weiß ich wie du es meintest und so habe auch ich es verstanden.Ich versuche es mal so.
Danke.
-
@Asgothian Hi,
ich habe so gemacht und es funktioniert scheinbar, ich muss es noch ausgiebig testen.