Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Gelöst] Keymatic Fernbedienung mit SPS

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Gelöst] Keymatic Fernbedienung mit SPS

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

      Das sind Synonyme, das sollte egal sein.

      1 Reply Last reply Reply Quote 0
      • T
        TOBO last edited by

        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 Reply Quote 0
        • Dutchman
          Dutchman Developer Most Active Administrators last edited by

          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 Reply Quote 0
          • T
            TOBO last edited by

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

            Ich muss einfach erst mal die Syntax verstehen.

            1 Reply Last reply Reply Quote 0
            • Dutchman
              Dutchman Developer Most Active Administrators last edited by

              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 Reply Quote 0
              • T
                TOBO last edited by

                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 Reply Quote 0
                • T
                  TOBO last edited by

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

                  1 Reply Last reply Reply Quote 0
                  • Dutchman
                    Dutchman Developer Most Active Administrators last edited by

                    @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 Reply Quote 0
                    • T
                      TOBO last edited by

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

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

                        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?

                        1 Reply Last reply Reply Quote 0
                        • T
                          TOBO last edited by

                          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 Reply Quote 0
                          • T
                            TOBO last edited by

                            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 Reply Quote 0
                            • blauholsten
                              blauholsten Developer last edited by

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

                              1 Reply Last reply Reply Quote 0
                              • Dutchman
                                Dutchman Developer Most Active Administrators last edited by

                                @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 Reply Quote 0
                                • T
                                  TOBO last edited by

                                  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 Reply Quote 0
                                  • P
                                    pix last edited by

                                    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

                                    1 Reply Last reply Reply Quote 0
                                    • T
                                      TOBO last edited by

                                      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 Reply Quote 0
                                      • T
                                        TOBO last edited by

                                        Ich dachte das wär es nun und ich weiss wie es geht und schon gehts eben nicht.

                                        Ich habe nun das hier:

                                        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) {
                                        log(getState(idDst).val);
                                        
                                        if (getState(idDst.State).val  === false )
                                        {
                                         setState(idDst,true);
                                          log(getState(idDst).val);
                                          log("True setzen");
                                         } else {
                                         setState(idDst,false);
                                           log(getState(idDst).val);
                                           log(" else false setzen");
                                        }
                                        
                                        });
                                        
                                        

                                        Es wird ausschließlich der Else teil bearbeitet. idDst ist definitiv false, aber wird nicht erkannt. Habe es auch mit

                                        if (getState(idDst.State).val  == "0" )
                                        

                                        versucht. Gleiche Ergebnis. Im IOBroker Log habe ich auch eine Warnung "State "undefined" not found"

                                        1 Reply Last reply Reply Quote 0
                                        • T
                                          TOBO last edited by

                                          Habe es gefunden und es geht jetzt.

                                          if (getState(idDst).val  == "0" )
                                          

                                          Ohne State funktioniert es.

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

                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          739
                                          Online

                                          31.7k
                                          Users

                                          79.8k
                                          Topics

                                          1.3m
                                          Posts

                                          5
                                          22
                                          2127
                                          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