Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Doppeltes ausführen einer Funktion

    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

    Doppeltes ausführen einer Funktion

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

      Hallo,

      ich weiß -denn ich habe schon viel gesucht 😄 -dieses Thema gab es schon, aber keine angebotene Lösung hat funktioniert.

      Folgendes ganz simples Programm wird zweimal abgearbeitet, wenn ich mit dem Messenger "Telegram" einen Virtuellen Button der CCU drücke.

      on({id: 'hm-rpc.0.BidCoS-RF.4.PRESS_SHORT'}, function (obj) {
              console.log("Antasten= " + antasten);
        });
      

      in der Konsole steht dann:

      22:16:51.137 [info] javascript.0 script.js.Telegram.Alarmanlage: Antasten= true

      22:16:51.197 [info] javascript.0 script.js.Telegram.Alarmanlage: Antasten= true

      Alles was ich Netz gefunden habe z.B {id: 'hm-rpc.0.BidCoS-RF.4.PRESS_SHORT', change: "false"} habe ich erfolglos probiert.

      Wäre echt nett, wenn hier jemand nem alten Mann aufs Pferdchen helfen könnte 🙂

      Danke dafür und Gruß Jörg

      1 Reply Last reply Reply Quote 0
      • blauholsten
        blauholsten Developer last edited by

        @JoergC66:

        Hallo,

        ich weiß -denn ich habe schon viel gesucht 😄 -dieses Thema gab es schon, aber keine angebotene Lösung hat funktioniert.

        Folgendes ganz simples Programm wird zweimal abgearbeitet, wenn ich mit dem Messenger "Telegram" einen Virtuellen Button der CCU drücke.

        on({id: 'hm-rpc.0.BidCoS-RF.4.PRESS_SHORT'}, function (obj) {
                console.log("Antasten= " + antasten);
          });
        

        in der Konsole steht dann:

        22:16:51.137 [info] javascript.0 script.js.Telegram.Alarmanlage: Antasten= true

        22:16:51.197 [info] javascript.0 script.js.Telegram.Alarmanlage: Antasten= true

        Alles was ich Netz gefunden habe z.B {id: 'hm-rpc.0.BidCoS-RF.4.PRESS_SHORT', change: "false"} habe ich erfolglos probiert.

        Wäre echt nett, wenn hier jemand nem alten Mann aufs Pferdchen helfen könnte 🙂

        Danke dafür und Gruß Jörg `

        on({id: 'hm-rpc.0.BidCoS-RF.4.PRESS_SHORT'}, function (obj) {
                if(obj.state.val)console.log("Antasten= " + obj.state.val);
          });
        

        Woher kommt bei dir antasten

        1 Reply Last reply Reply Quote 0
        • J
          JoergC66 last edited by

          Das ist nur eine Variable, die ich hier im Beispiel vergessen habe zu löschen, sie diente der Fehlersuche, hat also keine Bedeutung.

          Was macht das : obj.state.val ??

          1 Reply Last reply Reply Quote 0
          • P
            pix last edited by

            Hallo,

            ich spekuliere mal:

            Der "Tastendruck" auf der virtuellen Taste löste auch ein "Loslassen" aus. Das heißt, die Funktion wird beim Antasten, sowie beim Lostasten ausgelöst.

            Deine Bedingung ist durch die verwendete Kurzschreibweise ein Abo auf Veränderung des Wertes. Abonniere mal den Wert true und prüfe die Logausgabe:

            
            on({id: 'hm-rpc.0.BidCoS-RF.4.PRESS_SHORT', val: true}, function (obj) {
                    console.log("Antasten= " + obj.state.val);
              });
            
            

            Gruß

            Pix

            1 Reply Last reply Reply Quote 0
            • J
              JoergC66 last edited by

              Erstmal vielen Dank für eure Mühen!!

              @pix Das hatte ich schon probiert, brachte keine Änderung.

              Die Antwort von blauholsten funktioniert.

              @blauholsten Was genau passiert da und warum ist das nötig?

              1 Reply Last reply Reply Quote 0
              • P
                pix last edited by

                Ich nehme die blauholstens Antwort mal vorweg:

                on({id: 'hm-rpc.0.BidCoS-RF.4.PRESS_SHORT'}, function (obj) {
                

                auf Änderung, Callback in Objekt mit Namen "obj"

                 if(obj.state.val)console.log("Antasten= " + obj.state.val);
                

                Wenn der Wert des Objektes (obj.state.val) wahr ist (Kurzschreibweise von obj.state.val === true), dann erfolgt die Logausgabe des Wertes des Objektes.

                Also wird nur bei true ins Log geschrieben, nicht bei false.

                Gruß

                Pix

                1 Reply Last reply Reply Quote 0
                • J
                  JoergC66 last edited by

                  Ah ja, ich verstehe …. ein bischen 😢

                  Vielen Dank für die Erklärung.

                  Doch dieses Problem verfolgt mich:

                  on({id: "hm-rpc.0.KEQ0111275.2.PRESS_SHORT"/*HM-RC-X KEQ0111275:2.PRESS_SHORT*/}, function (obj) {	//Taste auf Fernbedienung
                      if(obj.state.val)
                          Alarmanlage_an();
                  });
                  
                  function Alarmanlage_an(){
                      if (!getState("hm-rpc.0.KEQ0030837.1.STATE").val){		//Wenn Fensterkontakt "zu"
                          setState("hm-rega.0.1587"/*Alarmanlage*/, "1");		//Systemvariable der CCU auf 1 = Scharf
                      }     
                  }
                  
                  on({id: "hm-rega.0.1587"/*Alarmanlage*/, change: "1"}, function (obj) {	//Wenn Alarmanlage scharf
                       if(obj.state.val){
                          request("http://192.168.2.144:50000/track=Die_Alarmanlage_ist_an.mp3");	//Tablet soll ansage mache- geht aber nur eine Zeitlang, dann bleibt alles stumm
                          sendTo("telegram", "send", {
                              text: (String('Alarmanlage ist ') + String((obj.state ? obj.state.val : "") ? 'an' : 'aus'))
                          });
                       }
                    });
                  

                  Das log-File sieht dann so aus:

                  20:32:06.546	[info]	javascript.0 script.js.Telegram.Alarmanlage: getState(id=hm-rpc.0.KEQ0030837.1.STATE, timerId=0) => {"val":false,"ack":true,"ts":1517048026193,"q":0,"from":"system.adapter.hm-rpc.0","lc":1517048026193}
                  20:32:06.548	[warn]	javascript.0 at Alarmanlage_an (script.js.Telegram.Alarmanlage:25:9)
                  20:32:06.548	[warn]	javascript.0 at Object. (script.js.Telegram.Alarmanlage:15:9)
                  20:32:06.548	[info]	javascript.0 script.js.Telegram.Alarmanlage: setForeignState(id=hm-rega.0.1587, state="1")
                  20:32:06.548	[info]	javascript.0 script.js.Telegram.Alarmanlage: In dieser Funktion die Alarmanlage anschalten.
                  20:32:06.565	[info]	javascript.0 script.js.Telegram.Alarmanlage: sendTo(adapter=telegram, cmd=send, msg={"text":"Alarmanlage ist an"})
                  20:32:17.746	[info]	javascript.0 script.js.Telegram.Alarmanlage: sendTo(adapter=telegram, cmd=send, msg={"text":"Alarmanlage ist an"})
                  

                  Die Warnungen beziehen sich auf die Zeile mit dem "setState …"

                  Also wieder diese blöde doppelte Ausführung. Heulsmiley

                  Was mache ich denn nun wieder falsch?

                  Gruß Jörg

                  1 Reply Last reply Reply Quote 0
                  • blauholsten
                    blauholsten Developer last edited by

                    @pix:

                    Ich nehme die blauholstens Antwort mal vorweg:

                    on({id: 'hm-rpc.0.BidCoS-RF.4.PRESS_SHORT'}, function (obj) {
                    

                    auf Änderung, Callback in Objekt mit Namen "obj"

                     if(obj.state.val)console.log("Antasten= " + obj.state.val);
                    

                    Wenn der Wert des Objektes (obj.state.val) wahr ist (Kurzschreibweise von obj.state.val === true), dann erfolgt die Logausgabe des Wertes des Objektes.

                    Also wird nur bei true ins Log geschrieben, nicht bei false.

                    Gruß

                    Pix `
                    Danke…

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    497
                    Online

                    31.7k
                    Users

                    79.8k
                    Topics

                    1.3m
                    Posts

                    3
                    8
                    821
                    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