NEWS
Script wird zweimal ausgeführt?
-
@th3rockyeah In welchem Ordner liegt das Script?
-
@ahnungsbefreit im Common Ordner
-
@th3rockyeah
in neues Skript kopieren und altes löschen. Sicher das es 2. mal läuft?log(Math.random())
in das Skript einfügen und testen
Spiegelst du deinen Skriptorder auf die Festplatte? Auf welchem OS läuft ioBroker?
Ich hatte das nur wenn ich die Skripte extern über einen smb/nfs Freigabe bearbeite.
Kannst du den Code zeigen?
-
@ticaki Nein, sicher bin ich mir nicht.
Ich editiere über VScode (Windows) und spiele die Änderung über VScode auf den Pi, dabei wird das Skript beendet und neugestartet. OS ist das neuste Raspberry Pi.
Ich habe deine Zeile ergänzt und folgendes Log dabei erhalten:javascript.0 2023-08-02 17:11:39.151 info script.js.common.BewegungsmelderV2: Bewegungsmelder StairsToFirstFloor: Ausgelöst javascript.0 2023-08-02 17:11:39.110 info script.js.common.BewegungsmelderV2: Bewegungsmelder StairsToFirstFloor: Ausgelöst javascript.0 2023-08-02 17:10:59.288 info script.js.common.CommonMix: registered 8 subscriptions, 2 schedules, 0 messages, 0 logs and 0 file subscriptions javascript.0 2023-08-02 17:10:59.272 info script.js.common.CommonMix: 0.4416924518034808 javascript.0 2023-08-02 17:10:59.238 info Start javascript script.js.common.CommonMix javascript.0 2023-08-02 17:10:59.079 info Stop script script.js.common.CommonMix javascript.0 2023-08-02 17:10:58.914 info Stop script script.js.common.CommonMix
Beim Übertragen der Änderung schreibt er zweimal stop, dann start des Scripts und es läuft mit der Math.random() Ausgabe, danach gab es wieder zweimal die Ausgabe des Bewegungsmelders.
Vielleicht sind es auch zwei getrennte Probleme. 1. doppelter Stop beim Beenden des Skripts und 2. die Ausgabe des BewegungsmelderLogs?
Bei der Ausgabe des Logs vom Bewegungsmelder liegt es vielleicht auch am "any" in der On-Event Methode. Ich bin unsicher, ob das normal ist oder ob eben etwas nicht richtig im IoBroker konfiguriert ist.on({id: sensorState(lpSensorState, 'stateMotion'), change: "any", val:true}, function(obj) {...}
-
javascript.0 2023-08-02 17:11:39.151 info script.js.common.BewegungsmelderV2: Bewegungsmelder StairsToFirstFloor: Ausgelöst javascript.0 2023-08-02 17:11:39.110 info script.js.common.BewegungsmelderV2: Bewegungsmelder StairsToFirstFloor: Ausgelöst
Das sieht eher nach 2 Aufrufen von on() aus. 2 Skripte sollte keine Pause von 40ms haben. Weiß aber natürlich nicht welcher Betrieb bei dir ist
hm setzt mal:
log('dp: ' + obj.state.id + ' val: ' + obj.state.val + ' ack: ' + obj.state.ack + ' from: '+obj.state.from)
in on()
oder einfach
log(JSON.stringify(obj))
EDIT: Das any hab ich eher im Verdacht, daher die Logausgaben
-
@th3rockyeah sagte: liegt es vielleicht auch am "any"
Dann versuche mal:
on({id: sensorState(lpSensorState, 'stateMotion'), change: "gt"}, function(obj) {...}
-
@th3rockyeah
Danke für das... habs jetzt auch auf ssh umgestellt -
@ticaki Ich habe deine Ideen einmal in das Skript eingebaut:
javascript.0 2023-08-02 19:20:30.563 info script.js.common.BewegungsmelderV2: {"id":"zigbee.0.00158d00042d7b1f.occupancy","newState":{"val":true,"ts":1690996830549,"ack":true,"lc":1690996830502,"from":"system.adapter.zigbee.0","q":0,"user":"system.user.admin"},"oldState":{"val":true,"ts":1690996830502,"ack":true,"lc":1690996830502,"from":"system.adapter.zigbee.0","q":0,"user":"system.user.admin"},"state":{"val":true,"ts":1690996830549,"ack":true,"lc":1690996830502,"from":"system.adapter.zigbee.0","q":0,"user":"system.user.admin"}} javascript.0 2023-08-02 19:20:30.512 info script.js.common.BewegungsmelderV2: Bewegungsmelder StairsToFirstFloor: Ausgelöst, javascript.0 2023-08-02 19:20:30.509 info script.js.common.BewegungsmelderV2: dp: undefined val: true ack: true from: system.adapter.zigbee.0 javascript.0 2023-08-02 19:20:30.508 info script.js.common.BewegungsmelderV2: {"id":"zigbee.0.00158d00042d7b1f.occupancy","newState":{"val":true,"ts":1690996830502,"ack":true,"lc":1690996830502,"from":"system.adapter.zigbee.0","q":0,"user":"system.user.admin"},"oldState":{"val":false,"ts":1690995672419,"ack":true,"lc":1690995672419,"from":"system.adapter.zigbee.0","q":0,"user":"system.user.admin"},"state":{"val":true,"ts":1690996830502,"ack":true,"lc":1690996830502,"from":"system.adapter.zigbee.0","q":0,"user":"system.user.admin"}}
Was ich gerade bei dem Test entdeckt habe, ist, dass der neue Aqara Motion Sensor nur einmal feuert und der alte zweimal... Merkwürdig...
-
@paul53 Hatte ich schon mal ausprobiert, leider funktionierte die Erkennung des Bewegungsmelder nicht mehr richtig. Ich teste es nachher noch mal.
-
@ticaki
Hast du jetzt auch das Problem, dass das Skript zweimal gestoppt wird?javascript.0 2023-08-02 17:10:59.079 info Stop script script.js.common.CommonMix javascript.0 2023-08-02 17:10:58.914 info Stop script script.js.common.CommonMix
-
@th3rockyeah
jup, ich kann mich erinnern damals einen report zu 2 mal stop und 2 mal start geschrieben zu haben und damals sind die tatsächlich 2 mal gelaufen. 2 mal stop ist doch okups ein Fehler das ist nicht obj.state.id sondern obj.id sry
-
@ticaki ok. Danke. dann habe ich da schon einmal einen Haken dran.
Muss ich jetzt nur noch mal klären, warum der Bewegungsmelder zweimal feuert...Danke erstmal für eure schnelle Hilfe!
-
@th3rockyeah ich denke mal der löst einmal aus beim Wechsel false-->true und dann umgekehrt. Lass doch mal den Wert im Log ausgeben, dann siehst Du das
-
@ahnungsbefreit sagte: Wert im Log ausgeben
Das hat @Th3RockYeah bereits hier:
Einmal false --> true und 55 ms später true --> true.
Deshalb sollte er triggern mitchange: 'gt'
-
@paul53 ok, das hatte ich nicht gesehen aber genau darauf wollte ich hinaus, Trigger "any" ist vermutlich die Ursache
-
@ahnungsbefreit, @paul53 Ja trigger "any" ist die Ursache. Wenn ich auf "GT" stelle, schaltet der Bewegungsmelder nicht erneut an, wenn ich im Raum bin und er die Bewegung erfasst. "GT" geht erst, wenn der Bewegungsmelder keine Bewegung mehr registriert.
Scheint bei mir aber ggf. ein Logik-Problem zu sein. Ich muss das mehr Debuggen. Auf jeden Fall DANKE für euren Input!!
-
Hatte gerade 12:00 ebenfalls ein doppelt laufendens Skript, das ich jedoch mit restart der Javascript-Instanz entfernen konnte. Ist auch mit dem Code von 11:15 gelaufen. Also ist ein restart der Javascript Instanz nach dem Beenden der Bearbeitung anzuraten.
-
@ticaki das ist eigentlich nicht nötig. Ich habe so etwa 40 Scripte und bearbeitete einige davon öfters und hatte so ein Problem noch nie.
-
@ahnungsbefreit
Ich hatte das Problem bisher auch ausschließlich mit Skripten die async und await benutzen. Wobei ich jetzt 2 mal in letzter Zeit 100% Auslastung des Javascript Adapters hatte, weil er sich verschluckt hat. Bei eben diesem Skript. Aber auch nur wenn ich beim starten des Skripts die Arbeitsfunktion aufrufe, und gleichzeitig mit extendObject/setObject teste... 2 mal ist aber nicht genug um es an irgendwas fest zu machen.