Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [Gelöst] Keymatic Fernbedienung mit SPS

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    661

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    18
    1
    5.7k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.5k

[Gelöst] Keymatic Fernbedienung mit SPS

Scheduled Pinned Locked Moved Skripten / Logik
22 Posts 5 Posters 2.3k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • T Offline
    T Offline
    TOBO
    wrote on last edited by
    #1

    Hallo liebe Wissenden.

    Ich habe mehrere Keymatic Türschlössen und auch die Fernbedienungen. Zum öffnen/schließen habe ich in der

    Homematic eine direkte Verknüpfung der Fernbedienungstasten mit der Keymatic angelegt. Das funktioniert auch.

    Ich frage auch das Zustandsflag der Keymatic über IOBroker ab und signalisiere den Zustand der Keymatic auf

    einen SPS Ausgang.

    Jetzt gibt es noch eine Taste Licht an der Fernbedienung. Damit möchte ich auch was machen, bekomme es aber

    nicht hin. Schau ich mir den Status bei Objekte an und betätige die Taste, dann steht da immer true und es

    ändert mal kurz die Farbe, aber sonst nix.

    Gruss.

    ToBo

    1 Reply Last reply
    0
    • D Offline
      D Offline
      dwm
      wrote on last edited by
      #2

      Ja, das ist so, das passt.

      Der "true" Zustand wird quasi beim Drücken der Taste "aufgefrischt".

      In Javascript kannst Du darauf z.B. reagieren mit:

      subscribe ({id: "hm-rpc.0.ABCxxxxxxx.1.PRESS_SHORT", val:true}, function(data) {
      	// mach was, z.B Licht einschalten
      	setState("hm-rpc.0.DEFyyyyyyyy.1.STATE",true);
      });
      
      

      Die Id's musst Du natürlich entsprechend anpassen.

      CU

      Werner

      1 Reply Last reply
      0
      • T Offline
        T Offline
        TOBO
        wrote on last edited by
        #3

        Oha…. Ich habe das mit on..... versucht und geht natürlich nicht.

        Was bedeutet denn nun Subscribe ?

        1 Reply Last reply
        0
        • D Offline
          D Offline
          dwm
          wrote on last edited by
          #4

          Das sind Synonyme, das sollte egal sein.

          1 Reply Last reply
          0
          • T Offline
            T Offline
            TOBO
            wrote on last edited by
            #5
            subscribe ({id: "hm-rpc.0.ABCxxxxxxx.1.PRESS_SHORT", val:true}, function(data) {
               // mach was, z.B Licht einschalten
               setState("hm-rpc.0.DEFyyyyyyyy.1.STATE",true);
            });
            
            

            OK, das funktioniert. Nun versuche ich den Ausgang bei jedem neuem Tastendruck umzuschalten.

            So wird er einmal eingeschaltet und nie wieder aus.

            Ich habe mir das so gedacht. geht natürlich nicht :-(

            var idSrc = "hm-rpc.0.OEQ0119854.3.PRESS_SHORT";
            var idDst = "s7.0.Outputs.0.Lin_Licht";
            
            subscribe ({id: "hm-rpc.0.OEQ0119854.3.PRESS_SHORT", val:true}, function(data) {
               // mach was, z.B Licht einschalten
            
            IF ( idDst == "1") {
            
                setState("s7.0.Outputs.0.Lin_Licht",true);
            }
            
            IF ( idDst == "0") {
            
                setState("s7.0.Outputs.0.Lin_Licht",false);
            }   
            });
            
            
            1 Reply Last reply
            0
            • DutchmanD Offline
              DutchmanD Offline
              Dutchman
              Developer Most Active Administrators
              wrote on last edited by
              #6

              Tip: Bau es die Mal in blockly zusammen und schaue dann was für ein Code generiert wird und wo die Unterschiede mit deinen sind?

              –-----------------------

              Send from mobile device

              1 Reply Last reply
              0
              • T Offline
                T Offline
                TOBO
                wrote on last edited by
                #7

                Damit komme ich schon gar nicht klar. Das verstehe ich noch nicht.

                Ich muss einfach erst mal die Syntax verstehen.

                1 Reply Last reply
                0
                • DutchmanD Offline
                  DutchmanD Offline
                  Dutchman
                  Developer Most Active Administrators
                  wrote on last edited by
                  #8

                  Ok mal schnell so per tapatalk

                  Deine eerste variabele sagt nichts, da muss nog ein .State oder val hinter.

                  Wen du jetzt log(idSrc) hinzufügt ist diese bestimmt Lehr oder [object].

                  Muss sonst nachher Mal am pc Schaun ob da noch mehr ist?

                  Ich verstehe auch nicht ganz warum du diese Variable benutzt.

                  Kannst Mal dein usecase schreiben was du erreichen möchtest hilft in der logic…


                  Send from mobile device

                  1 Reply Last reply
                  0
                  • T Offline
                    T Offline
                    TOBO
                    wrote on last edited by
                    #9

                    Ich habe nun das.

                    var idSrc = "hm-rpc.0.OEQ0119854.3.PRESS_SHORT";
                    var idDst = "s7.0.Outputs.0.Lin_Licht";
                    var Flag = "s7.0.Markers.0.Flag_Licht";
                    
                    subscribe ({id: "hm-rpc.0.OEQ0119854.3.PRESS_SHORT", val:true}, function(data) {
                       setState(Flag,true);
                       //log("s7.0.Markers.0.Flag_Licht".State)
                    });
                    
                    on(Flag, function(dp) {  // Triggern bei Änderung
                    
                    IF ( IdDst.State == "0" );
                    {
                      setState(idDst,true);
                        setState(Flag,false);
                    }
                    
                    IF ( IdDst.State == "1" );
                    {
                      setState(idDst,false);
                        setState(Flag,false);
                    }
                    });
                    
                    

                    Der Merker wird auf 1 gesetzt, aber dann kommt eine fette Fehlermeldung.

                    Taste Licht an der Fernbedienung drücken, Ausgang in der SPS setzen. Taste wieder drücken, Ausgang zurücksetzen.

                    Ich könnte das auch in der SPS lösen, aber ich würde halt gern wissen, wie das als Script aussieht.

                    LD     M0.0
                    UN     A0.2
                    S      A0.2, 1
                    R      M0.0, 1
                    
                    LD     M0.0
                    U      A0.2
                    R      A0.2, 1
                    R      M0.0, 1
                    
                    
                    1 Reply Last reply
                    0
                    • T Offline
                      T Offline
                      TOBO
                      wrote on last edited by
                      #10

                      Also ich gebe es auf. Mit script bekomme ich es nicht hin.

                      1 Reply Last reply
                      0
                      • DutchmanD Offline
                        DutchmanD Offline
                        Dutchman
                        Developer Most Active Administrators
                        wrote on last edited by
                        #11

                        @TOBO:

                        Also ich gebe es auf. Mit script bekomme ich es nicht hin. `

                        noe das machen wir nicht das schaffen wa schon :)

                        ich kappiere nur total nicht was du hiermit meinst (vielleicht zu spaet fuer mich…)

                        @TOBO:

                        LD     M0.0
                        UN     A0.2
                        S      A0.2, 1
                        R      M0.0, 1
                        
                        LD     M0.0
                        U      A0.2
                        R      A0.2, 1
                        R      M0.0, 1
                        
                        ```` ` 
                        1 Reply Last reply
                        0
                        • T Offline
                          T Offline
                          TOBO
                          wrote on last edited by
                          #12

                          Veegiss das. Ist nur das SPS Programm. Damit gehts sofort.

                          1 Reply Last reply
                          0
                          • P Offline
                            P Offline
                            pix
                            wrote on last edited by
                            #13

                            Hallo,

                            das Abrufen der Objekte in den If-Bedingungen ist falsch. Ausserdem ist idDst machmal true und manchmal 0

                            var idSrc = "hm-rpc.0.OEQ0119854.3.PRESS_SHORT";
                            var idDst = "s7.0.Outputs.0.Lin_Licht";
                            var Flag = "s7.0.Markers.0.Flag_Licht";
                            
                            subscribe ({id: idSrc, val:true}, function(data) {
                               setState(Flag,true);
                               //log(getState(Flag).val);
                            });
                            
                            on(Flag, function(dp) {  // Triggern bei Änderung
                            
                            IF (getState(IdDst.State).val  == "0" );
                            {
                              setState(idDst,true);
                                setState(Flag,false);
                            }
                            
                            IF (getState(IdDst.State).val == "1" );
                            {
                              setState(idDst,false);
                                setState(Flag,false);
                            }
                            });
                            
                            

                            Gruß

                            Pix

                            PS: Kannst du den Thread Titel noch in Keymatic Fernbedienung mit SPS ändern?

                            ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                            1 Reply Last reply
                            0
                            • T Offline
                              T Offline
                              TOBO
                              wrote on last edited by
                              #14

                              Ja ja, die liebe Syntax. Da brauch ich noch ein bisschen.

                              Das Zweite If könnte man auch durch einfügen von Else im esten ersetzen.

                              Das bekomme ich auch nicht hin.

                              Wenn Du mir das noch zeigen könntest, bin ich ein glücklicher Mann

                              Großen Dank

                              ToBo

                              PS: müsste es nicht auch funktionieren, wenn ich bei dem Flag in der Deklaration die Zuordnung zu einem Merker in der SPS weglasse und Flag dann eine interne Variable ist ?

                              1 Reply Last reply
                              0
                              • T Offline
                                T Offline
                                TOBO
                                wrote on last edited by
                                #15

                                Habe Deinen Code gerade getestet und leider kommt eine Mega Fehlermeldung.

                                • avascript.0 ReferenceError: IF is not defined at Object. (script.js.HM_to_S7.Lin-Licht:12:1) at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:1325:48) at /opt/iobroker/node_modules/iobroker.javascript/javascript.js:585:48 at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:3237:17) at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:3256:28) at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:3256:28) at checkPatterns (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:581:17) at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:253:17) at change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:3045:37) at RedisClient. (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:93:25)

                                ` > avascript.0 2017-06-21 10:23:00.900 info Stop script script.js.HM_to_S7.Lin-Licht

                                javascript.0 2017-06-21 10:22:58.334 error at RedisClient. (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:93:25)

                                javascript.0 2017-06-21 10:22:58.334 error at change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:3045:37)

                                javascript.0 2017-06-21 10:22:58.334 error at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:253:17)

                                javascript.0 2017-06-21 10:22:58.334 error at checkPatterns (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:581:17)

                                javascript.0 2017-06-21 10:22:58.334 error at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:3256:28)

                                javascript.0 2017-06-21 10:22:58.334 error at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:3256:28)

                                javascript.0 2017-06-21 10:22:58.334 error at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:3237:17)

                                javascript.0 2017-06-21 10:22:58.334 error at /opt/iobroker/node_modules/iobroker.javascript/javascript.js:585:48

                                javascript.0 2017-06-21 10:22:58.334 error at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:1325:48)

                                javascript.0 2017-06-21 10:22:58.334 error at Object. (script.js.HM_to_S7.Lin-Licht:12:1)

                                javascript.0 2017-06-21 10:22:58.334 error ReferenceError: IF is not defined

                                javascript.0 2017-06-21 10:22:58.328 error pmessage io.s7.0.Markers.0.Flag_Licht {'val':false,'ack':true,'ts':1498033378325,'q':0,'from':'system.adapter.s7.0','lc':1498033378325} IF is not defined

                                javascript.0 2017-06-21 10:22:56.830 error at RedisClient. (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:93:25)

                                javascript.0 2017-06-21 10:22:56.830 error at change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:3045:37)

                                javascript.0 2017-06-21 10:22:56.830 error at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:253:17)

                                javascript.0 2017-06-21 10:22:56.830 error at checkPatterns (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:581:17)

                                javascript.0 2017-06-21 10:22:56.830 error at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:3256:28)

                                javascript.0 2017-06-21 10:22:56.830 error at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:3256:28)

                                javascript.0 2017-06-21 10:22:56.830 error at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:3237:17)

                                javascript.0 2017-06-21 10:22:56.830 error at /opt/iobroker/node_modules/iobroker.javascript/javascript.js:585:48

                                javascript.0 2017-06-21 10:22:56.830 error at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:1325:48)

                                javascript.0 2017-06-21 10:22:56.830 error at Object. (script.js.HM_to_S7.Lin-Licht:12:1)

                                javascript.0 2017-06-21 10:22:56.830 error ReferenceError: IF is not defined

                                javascript.0 2017-06-21 10:22:56.825 error pmessage io.s7.0.Markers.0.Flag_Licht {'val':true,'ack':false,'ts':1498033376821,'q':0,'from':'system.adapter.javascript.0','lc':1498033376821} IF is not defined

                                javascript.0 2017-06-21 10:22:53.280 info script.js.HM_to_S7.Lin-Licht: registered 2 subscriptions and 0 schedules `

                                1 Reply Last reply
                                0
                                • blauholstenB Offline
                                  blauholstenB Offline
                                  blauholsten
                                  Developer
                                  wrote on last edited by
                                  #16

                                  JavaScript ist case sensitiv, IF muss klein geschrieben werden…...if

                                  Entwickler vom: - Viessman Adapter
                                  - Alarm Adapter

                                  1 Reply Last reply
                                  0
                                  • DutchmanD Offline
                                    DutchmanD Offline
                                    Dutchman
                                    Developer Most Active Administrators
                                    wrote on last edited by
                                    #17

                                    @TOBO:

                                    Ja ja, die liebe Syntax. Da brauch ich noch ein bisschen.

                                    Das Zweite If könnte man auch durch einfügen von Else im esten ersetzen.

                                    Das bekomme ich auch nicht hin.

                                    Wenn Du mir das noch zeigen könntest, bin ich ein glücklicher Mann `

                                    du meinst den code

                                    IF (getState(IdDst.State).val  == "0" );
                                    {
                                      setState(idDst,true);
                                        setState(Flag,false);
                                    }
                                    
                                    IF (getState(IdDst.State).val == "1" );
                                    {
                                      setState(idDst,false);
                                        setState(Flag,false);
                                    }
                                    });
                                    
                                    

                                    umsetzen in eine elseif

                                    IF (getState(IdDst.State).val  == "0" ){
                                      setState(idDst,true);
                                      setState(Flag,false);
                                    } elseif (getState(IdDst.State).val == "1"){
                                        setState(idDst,false);
                                        setState(Flag,false);
                                    };
                                    
                                    

                                    ?

                                    1 Reply Last reply
                                    0
                                    • T Offline
                                      T Offline
                                      TOBO
                                      wrote on last edited by
                                      #18
                                      on(Flag, function(dp) {  // Triggern bei Änderung
                                      
                                      

                                      Soweit ich es verstehe, bedeutet obiger Code, das diese Funktion jedesmal bearbeitet wird, wenn sich der Status der Vaiable Flag ändert

                                      In diesem Fall von 0 –> 1 --> 0

                                      Ich möchte aber nur, dass die Funktion bearbeitet wird, wenn Flag von 0 --> 1 geht.

                                      Geht das auch ?

                                      1 Reply Last reply
                                      0
                                      • P Offline
                                        P Offline
                                        pix
                                        wrote on last edited by
                                        #19
                                        on({id: Flag,
                                            val: 1,
                                            oldVal: 0,
                                            change: 'ne'
                                        }, function(dp) {
                                           // tue was (kein if mehr nötig)
                                        });
                                        

                                        oder wenn Flag sowieso nur 0 oder 1 sein kann (und eine Nummer ist und kein String)

                                        on({id: Flag,
                                            change: 'gt'
                                        }, function(dp) {  // Wert größer als alter Wert
                                           // tue was (kein if mehr nötig)
                                        });
                                        

                                        oder klassisch:

                                        on(Flag,
                                        function(dp) {  // Wert größer als alter Wert
                                           if ((dp.state.val =="1") && (dp.oldState.val ==="0")) log('Neuer Wert');
                                        
                                        });
                                        

                                        steht alles hier: https://github.com/ioBroker/ioBroker.ja ... some-state

                                        Gruß

                                        Pix

                                        ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                                        1 Reply Last reply
                                        0
                                        • T Offline
                                          T Offline
                                          TOBO
                                          wrote on last edited by
                                          #20

                                          Super und Danke.

                                          Ich sehe halt viele Scripts, die super vereinfacht geschrieben sind. Auch wenn sie funktionieren, verstehe ich doch mit der kompletten, nicht einfachen Schreibweise eher was da passiert.

                                          Gruss.

                                          ToBo

                                          1 Reply Last reply
                                          0

                                          Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                                          Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                                          With your input, this post could be even better 💗

                                          Register Login
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          348

                                          Online

                                          32.7k

                                          Users

                                          82.6k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Home
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe