NEWS
[gelöst] Javascript-adapter ruft on ereignis doppelt auf
-
Hallo,
ich habe gerade in einem Docker Container den javascript adapter 5.2.21 installiert und meine gesicherten Skripte eingefügt.
Es handelt sich also um etwas, was auf einer früheren Version funktioniert hat.dies ist mein code:
on({id:IdFrischwasserstellmotor, ack:true},(dp) =>{ if(dp.state.val) { SendTelegramMessage("Frischwasserstellmotor öffnen",usernamePrivat); } else { // Ausgabe des aktuellen States SendTelegramMessage("Frischwasserstellmotor schließen",usernamePrivat); // Nachfolgend den Zisternenstellmotor öffnen setStateDelayed(IdZisternenstellmotor,false,verfahrzeitFrischwasserstellmotor.val * 1000); } });Laut Log, wird die funktion doppelt aufgerufen
javascript.0 2022-03-01 16:47:42.148 info script.js.common.Zisterne: Zisternenstellmotor öffnen javascript.0 2022-03-01 16:47:41.842 info script.js.common.Zisterne: Zisternenstellmotor öffnenschaut man sich die Zeiten an, so würde ich vermuten, dass einmal mit ack =false und ack=true aufgerufen wird.
Dies habe ich aber ja in der on Bedingung abgefangen.
Habe dies auch mal mit geloggt. bei beidenAufrufen steht ack auf true. (Laut dem dp.state.ack) -
Hallo,
ich habe gerade in einem Docker Container den javascript adapter 5.2.21 installiert und meine gesicherten Skripte eingefügt.
Es handelt sich also um etwas, was auf einer früheren Version funktioniert hat.dies ist mein code:
on({id:IdFrischwasserstellmotor, ack:true},(dp) =>{ if(dp.state.val) { SendTelegramMessage("Frischwasserstellmotor öffnen",usernamePrivat); } else { // Ausgabe des aktuellen States SendTelegramMessage("Frischwasserstellmotor schließen",usernamePrivat); // Nachfolgend den Zisternenstellmotor öffnen setStateDelayed(IdZisternenstellmotor,false,verfahrzeitFrischwasserstellmotor.val * 1000); } });Laut Log, wird die funktion doppelt aufgerufen
javascript.0 2022-03-01 16:47:42.148 info script.js.common.Zisterne: Zisternenstellmotor öffnen javascript.0 2022-03-01 16:47:41.842 info script.js.common.Zisterne: Zisternenstellmotor öffnenschaut man sich die Zeiten an, so würde ich vermuten, dass einmal mit ack =false und ack=true aufgerufen wird.
Dies habe ich aber ja in der on Bedingung abgefangen.
Habe dies auch mal mit geloggt. bei beidenAufrufen steht ack auf true. (Laut dem dp.state.ack)@Ben1983
Ändere mal den Trigger auf Wertänderung:on(IdFrischwasserstellmotor, (dp) =>{und außerdem
setStateDelayed(IdZisternenstellmotor,false, getState(verfahrzeitFrischwasserstellmotor).val * 1000); // ID stimmt? // oder ist eine Variable, dann setStateDelayed(IdZisternenstellmotor,false,verfahrzeitFrischwasserstellmotor * 1000); -
@Ben1983
Ändere mal den Trigger auf Wertänderung:on(IdFrischwasserstellmotor, (dp) =>{und außerdem
setStateDelayed(IdZisternenstellmotor,false, getState(verfahrzeitFrischwasserstellmotor).val * 1000); // ID stimmt? // oder ist eine Variable, dann setStateDelayed(IdZisternenstellmotor,false,verfahrzeitFrischwasserstellmotor * 1000); -
@Ben1983
Ändere mal den Trigger auf Wertänderung:on(IdFrischwasserstellmotor, (dp) =>{und außerdem
setStateDelayed(IdZisternenstellmotor,false, getState(verfahrzeitFrischwasserstellmotor).val * 1000); // ID stimmt? // oder ist eine Variable, dann setStateDelayed(IdZisternenstellmotor,false,verfahrzeitFrischwasserstellmotor * 1000); -
@paul53 sagte in Javascript-adapter ruft on ereignis doppelt auf:
und außerdem
setStateDelayed(IdZisternenstellmotor,false, getState(verfahrzeitFrischwasserstellmotor).val * 1000); // ID stimmt?Warumsollte die nicht stimmen
-
@ben1983 sagte: Warumsollte die nicht stimmen
Wenn verfahrzeitFrischwasserstellmotor eine ID ist, fehlte bei Dir getState() um die ID.
-
@paul53 Die Id ist nur die zu setzende.
Das zu schreibende ist eine interne Variabel (Deshalb steht auch kein Id davor)
Aber davon abgesehen funktioniert es ja, nur reagiert die on() Abfrage anders als auf dem windows system. -
@paul53 Shelly…. Ist ein Adapter im beta
@haus-automatisierung
Kann das an dem Beta liegen?@ben1983 sagte in Javascript-adapter ruft on ereignis doppelt auf:
Kann das an dem Beta liegen?
Dass irgendwas den (hier nicht genannten) Datenpunkt 2x schreibt? Wie soll ich darauf antworten 😉 Kenne dein System nicht und weiß nichtmal um welche Geräte es geht.
Was erwartest da für eine Antwort?
-
@ben1983
Um zu sehen, woher es kommt, bau mal in das Skript einen zweiten Trigger auf Aktualisierung ein, der es im Log zeigt:on({id: IdFrischwasserstellmotor}, (dp) => { log('Frischwasser: ' + dp.state.val + ', Ack: ' + dp.state.ack + ', From: ' + dp.state.from); }); -
@ben1983 sagte in Javascript-adapter ruft on ereignis doppelt auf:
Kann das an dem Beta liegen?
Dass irgendwas den (hier nicht genannten) Datenpunkt 2x schreibt? Wie soll ich darauf antworten 😉 Kenne dein System nicht und weiß nichtmal um welche Geräte es geht.
Was erwartest da für eine Antwort?
@haus-automatisierung sorry.
Es wird ein Shelly 2.5 geschaltet.
Diesen schalte ich mit setstatedelayed.
Jeweils(val=true oder false) mit dem ack nicht angegeben, also false.
Die on Methode, welche ich auf ack=true Abfrage wird zwei mal mit val=true und ack=true aufgerufen. Aber frage ich auf lediglich die id ab, dann wird bei Änderung nur einmal mit ack = fAlse aufgerufenMein Gedanke war nun, dass irgendwie bei der Abfrage auf ack=true der Wert für ack nicht richtig übergeben wird.
-
@haus-automatisierung sorry.
Es wird ein Shelly 2.5 geschaltet.
Diesen schalte ich mit setstatedelayed.
Jeweils(val=true oder false) mit dem ack nicht angegeben, also false.
Die on Methode, welche ich auf ack=true Abfrage wird zwei mal mit val=true und ack=true aufgerufen. Aber frage ich auf lediglich die id ab, dann wird bei Änderung nur einmal mit ack = fAlse aufgerufenMein Gedanke war nun, dass irgendwie bei der Abfrage auf ack=true der Wert für ack nicht richtig übergeben wird.
@ben1983 sagte in Javascript-adapter ruft on ereignis doppelt auf:
Mein Gedanke war nun, dass irgendwie bei der Abfrage auf ack=true der Wert für ack nicht richtig übergeben wird.
Müsste ich in Ruhe testen, aber würde mich sehr wundern wenn das passiert. Die Versionen werden ja von tausenden Leuten schon genutzt. Das wäre sicherlich aufgefallen
-
@haus-automatisierung ja,
Das hat ja auf meiner Windows Installation auch funktioniert.
Jetzt bei der neuen auf Docker trat es auf. -
@ben1983
Um zu sehen, woher es kommt, bau mal in das Skript einen zweiten Trigger auf Aktualisierung ein, der es im Log zeigt:on({id: IdFrischwasserstellmotor}, (dp) => { log('Frischwasser: ' + dp.state.val + ', Ack: ' + dp.state.ack + ', From: ' + dp.state.from); });@paul53 @haus-automatisierung Das hier habe ich wie beschrieben eingefügt:
on({id: IdFrischwasserstellmotor}, (dp) => { log('Frischwasser: ' + dp.state.val + ', Ack: ' + dp.state.ack + ', From: ' + dp.state.from); });Im Log steht dann:
16:27:46.649 info javascript.0 (32410) script.js.common.eventtest: Frischwasser: false, Ack: false, From: system.adapter.javascript.0 16:27:46.652 info javascript.0 (32410) script.js.common.eventtest: Frischwasser: false, Ack: true, From: system.adapter.shelly.0 16:27:46.930 info javascript.0 (32410) script.js.common.eventtest: Frischwasser: false, Ack: true, From: system.adapter.shelly.0also für michsieht es so aus, dassichim script auf false setze und der shelly adapter 2 x mit true zurück meldet.
Oder? -
@paul53 @haus-automatisierung Das hier habe ich wie beschrieben eingefügt:
on({id: IdFrischwasserstellmotor}, (dp) => { log('Frischwasser: ' + dp.state.val + ', Ack: ' + dp.state.ack + ', From: ' + dp.state.from); });Im Log steht dann:
16:27:46.649 info javascript.0 (32410) script.js.common.eventtest: Frischwasser: false, Ack: false, From: system.adapter.javascript.0 16:27:46.652 info javascript.0 (32410) script.js.common.eventtest: Frischwasser: false, Ack: true, From: system.adapter.shelly.0 16:27:46.930 info javascript.0 (32410) script.js.common.eventtest: Frischwasser: false, Ack: true, From: system.adapter.shelly.0also für michsieht es so aus, dassichim script auf false setze und der shelly adapter 2 x mit true zurück meldet.
Oder? -
@paul53 @haus-automatisierung Das hier habe ich wie beschrieben eingefügt:
on({id: IdFrischwasserstellmotor}, (dp) => { log('Frischwasser: ' + dp.state.val + ', Ack: ' + dp.state.ack + ', From: ' + dp.state.from); });Im Log steht dann:
16:27:46.649 info javascript.0 (32410) script.js.common.eventtest: Frischwasser: false, Ack: false, From: system.adapter.javascript.0 16:27:46.652 info javascript.0 (32410) script.js.common.eventtest: Frischwasser: false, Ack: true, From: system.adapter.shelly.0 16:27:46.930 info javascript.0 (32410) script.js.common.eventtest: Frischwasser: false, Ack: true, From: system.adapter.shelly.0also für michsieht es so aus, dassichim script auf false setze und der shelly adapter 2 x mit true zurück meldet.
Oder?@ben1983 sagte in Javascript-adapter ruft on ereignis doppelt auf:
also für michsieht es so aus, dassichim script auf false setze und der shelly adapter 2 x mit true zurück meldet.
Ich würde das ja gerne nachvollziehen oder testen. Aber Du lieferst ja keine Infos :)
- Shelly 2.5 in welchem Modus (Switch oder Shutter)
- Welche Firmware-Version
- Welcher Datenpunkt genau
- Wie integriert (MQTT oder CoAP?), ...