Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] Javascript-adapter ruft on ereignis doppelt auf

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] Javascript-adapter ruft on ereignis doppelt auf

    This topic has been deleted. Only users with topic management privileges can see it.
    • Ben1983
      Ben1983 last edited by Ben1983

      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 öffnen
      

      schaut 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)

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @Ben1983 last edited by paul53

        @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 2 Replies Last reply Reply Quote 0
        • Ben1983
          Ben1983 @paul53 last edited by

          @paul53 so funktioniert es.
          So ging es allerdings vorher nicht.
          Und der sinn von meiner abfrage war, dass ich den trigger erst auslöse, wenn der shellyadapter bestätigt hat.
          Hat sich da was geändert?

          1 Reply Last reply Reply Quote 0
          • Ben1983
            Ben1983 @paul53 last edited by

            @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

            paul53 1 Reply Last reply Reply Quote 0
            • paul53
              paul53 @Ben1983 last edited by paul53

              @ben1983 sagte: Warumsollte die nicht stimmen

              Wenn verfahrzeitFrischwasserstellmotor eine ID ist, fehlte bei Dir getState() um die ID.

              Ben1983 1 Reply Last reply Reply Quote 0
              • Ben1983
                Ben1983 @paul53 last edited by

                @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 1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 @Ben1983 last edited by

                  @ben1983 sagte: ist eine interne Variabel

                  Ein Objekt (wegen .val)?

                  Ben1983 2 Replies Last reply Reply Quote 0
                  • Ben1983
                    Ben1983 @paul53 last edited by

                    @paul53 Nein, weil ich das nicht nur da verwende.
                    Ich lese es bei änderung ein und reagiere darauf indem ich es in den Arbeitsspeicher schreibe.
                    So muss ich nicht überall getState aufrufen.

                    1 Reply Last reply Reply Quote 0
                    • Ben1983
                      Ben1983 @paul53 last edited by

                      @paul53 Frage mich jetzt nur, warum er den aufruf doppelt absetzt?

                      paul53 2 Replies Last reply Reply Quote 0
                      • paul53
                        paul53 @Ben1983 last edited by

                        @ben1983 sagte: Frage mich jetzt nur, warum er den aufruf doppelt absetzt?

                        Welcher Adapter setzt den DP mit IdFrischwasserstellmotor?

                        1 Reply Last reply Reply Quote 0
                        • Ben1983
                          Ben1983 last edited by Ben1983

                          @paul53 Shelly…. Ist ein Adapter im beta

                          @haus-automatisierung
                          Kann das an dem Beta liegen?

                          haus-automatisierung 1 Reply Last reply Reply Quote 0
                          • haus-automatisierung
                            haus-automatisierung Developer Most Active @Ben1983 last edited by

                            @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 1 Reply Last reply Reply Quote 0
                            • paul53
                              paul53 @Ben1983 last edited by paul53

                              @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 1 Reply Last reply Reply Quote 0
                              • Ben1983
                                Ben1983 last edited by

                                @paul53 mache ich

                                1 Reply Last reply Reply Quote 0
                                • Ben1983
                                  Ben1983 @haus-automatisierung last edited by Ben1983

                                  @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 aufgerufen

                                  Mein Gedanke war nun, dass irgendwie bei der Abfrage auf ack=true der Wert für ack nicht richtig übergeben wird.

                                  haus-automatisierung 1 Reply Last reply Reply Quote 0
                                  • haus-automatisierung
                                    haus-automatisierung Developer Most Active @Ben1983 last edited by

                                    @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

                                    1 Reply Last reply Reply Quote 0
                                    • Ben1983
                                      Ben1983 last edited by

                                      @haus-automatisierung ja,
                                      Das hat ja auf meiner Windows Installation auch funktioniert.
                                      Jetzt bei der neuen auf Docker trat es auf.

                                      1 Reply Last reply Reply Quote 0
                                      • Ben1983
                                        Ben1983 @paul53 last edited by

                                        @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.0
                                        

                                        also 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 2 Replies Last reply Reply Quote 0
                                        • paul53
                                          paul53 @Ben1983 last edited by paul53

                                          @ben1983 sagte: im script auf false setze und der shelly adapter 2 x mit true zurück meldet. Oder?

                                          Ja, so sieht es aus: Im Abstand von ca. 300 ms wird val = false und ack = true gesendet.

                                          1 Reply Last reply Reply Quote 0
                                          • haus-automatisierung
                                            haus-automatisierung Developer Most Active @Ben1983 last edited by

                                            @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?), ...
                                            Ben1983 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            605
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

                                            4
                                            48
                                            1477
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo