Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Datenpunkte zusammenführen switch + state

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    SOLVED Datenpunkte zusammenführen switch + state

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

      @Elektroniker86 sagte:

      Wie wirkt sich das denn auf die Performance aus?

      Kaum. Beim RAM-Verbrauch schon etwas mehr, aber wenn dadurch der Szenen-Adapter eingespart wird, sogar weniger.

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

        @Elektroniker86 sagte:

        kann man dieses Script auch so umschreiben das dass auch für die Rolladen funktioniert?

        Kann man.

        // IDs anpassen
        const idCmd = 's7.1.DBs.DB1.NAI01';
        const idStat = 's7.1.DBs.DB1.AM01';
         
        const js = 'system.adapter.javascript.' + instance;
        const common = getObject(idCmd).common;
        const idVis = 'LOGO.s7-1.' + common.name.replace(/\s/g, '_');
         
        common.read = true;
        createState(idVis, getState(idStat).val, common);
         
        on({id: 'javascript.0.' + idVis, change: 'ne', fromNe: js}, function(dp) {
            setState(idCmd, dp.state.val);
        });
         
        on(idStat, function(dp) {
            setState(idVis, dp.state.val, true);
        });
        
        Elektroniker86 2 Replies Last reply Reply Quote 1
        • BBTown
          BBTown @Elektroniker86 last edited by

          @Elektroniker86 ob das überhaupt eine Auswirkung hat, dass musst Du schon ausprobieren.
          Ich sehe dazu aber überhaupt keine Alternative, also ist das sowieso nebensächlich .... denke ich zumindest mal 😎

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

            Ok, trotzdem vielen Dank für eure Hilfe!!!

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

              So, ich habe mal ein Blockly für oben beschriebenes Problem gebaut.
              Es funktioniert, aber würdet ihr vielleicht nochmal drüber schauen ob man das eventuell noch optimieren könnte?

              Vielen Dank im vorraus!

              test blockly.png

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

                @Elektroniker86 sagte:

                Es funktioniert,

                Genügt es, den Taster-Datenpunkt auf true zu aktualisieren oder muss er nach kurzer Zeit auf false gesetzt werden ?
                Dann schlage ich folgendes Skript vor, das beliebig kopiert werden kann und in dem jeweils nur die IDs in Zeilen 2 und 3 angepasst werden müssen. Die Datenpunkte für Vis usw. werden automatisch unter Verwendung des Taster-Namens erzeugt.

                // IDs anpassen
                const idButton = 's7.0.abc.NI19';
                const idActor = 's7.0.xyz.Q19';
                
                const js = 'system.adapter.javascript.' + instance;
                const common = getObject(idButton).common;
                const idVis = 'Logo.' + common.name.replace(' ', '_');
                
                common.read = true;
                createState(idVis, getState(idActor).val, common);
                
                on({id: idVis, change: 'ne', fromNe: js}, function() {
                    setState(idButton, true);
                });
                
                on(idActor, function(dp) {
                    setState(idVis, dp.state.val, true);
                });
                
                Elektroniker86 1 Reply Last reply Reply Quote 0
                • Elektroniker86
                  Elektroniker86 @paul53 last edited by

                  @paul53

                  Ja genau, es reicht den Taster Datenpunkt einmal auf true zu setzen.
                  Danach springt er nach einer Sekunde automatisch wieder auf false.

                  Cool, vielen Dank für deine Mühe. Werde das Script morgen testen.
                  Wo werden dann die Datenpunkte angelegt ?
                  Hätte da schon gerne ein Ordner unter Javascript.0/LOGO/s7.0........s7.1.........s7.2 usw.

                  Damit das soweit geordnet ist wie beim s7 Adapter unter Objekte.

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

                    @Elektroniker86 sagte:

                    Wo werden dann die Datenpunkte angelegt ?

                    Unter javascript.0.Logo.
                    Beispiel: "javascript.0.Logo.Wandleuchten_Terasse"

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

                      Ah ja, das heißt wenn ein Datenpunkt unter "javascript.0.Logo.s70.Wandleuchten_Terasse" landen soll dann muss das cript so aussehen?

                      // IDs anpassen
                      const idButton = 's7.0.abc.NI19';
                      const idActor = 's7.0.xyz.Q19';
                       
                      const js = 'system.adapter.javascript.' + instance;
                      const common = getObject(idButton).common;
                      const idVis = 'Logo.s70' + common.name.replace(' ', '_');
                       
                      common.read = true;
                      createState(idVis, getState(idActor).val, common);
                       
                      on({id: idVis, change: 'ne', fromNe: js}, function() {
                          setState(idButton, true);
                      });
                       
                      on(idActor, function(dp) {
                          setState(idVis, dp.state.val, true);
                      });
                      
                      
                      paul53 1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 @Elektroniker86 last edited by

                        @Elektroniker86 sagte:

                        muss das cript so aussehen?

                        Fast - es fehlt noch der Punkt hinter s70

                        const idVis = 'Logo.s70.' + common.name.replace(' ', '_');
                        
                        1 Reply Last reply Reply Quote 0
                        • Elektroniker86
                          Elektroniker86 last edited by Elektroniker86

                          @Elektroniker86 sagte in Datenpunkte zusammenführen switch + state:

                                                                                                                                                      // IDs anpassen                                                                                                        const idButton = 's7.0.abc.NI19';                                                                                                        const idActor = 's7.0.xyz.Q19';                                                                                                                                                                                                                 const js = 'system.adapter.javascript.' + instance;                                                                                                        const common = getObject(idButton).common;                                                                                                        const idVis = 'Logo.s70' + common.name.replace(' ', '_');                                                                                                                                                                                                                 common.read = true;                                                                                                        createState(idVis, getState(idActor).val, common);                                                                                                                                                                                                                 on({id: idVis, change: 'ne', fromNe: js}, function() {                                                                                                            setState(idButton, true);                                                                                                        });                                                                                                                                                                                                                 on(idActor, function(dp) {                                                                                                            setState(idVis, dp.state.val, true);                                                                                                        });                                                                                                                                 
                          

                          Alles klar ja den Punkt hatte ich vergessen.
                          So, ich habe eben das Script getestet soweit alles in Ordnung.
                          Allerdings kann ich die Aktoren nicht über den neuen Datenpunkt schalten.
                          Wenn sich der Status vom Aktor ändert dann wechselt der neue Datenpunkt entsprechend mit, passt ja.
                          Aber ich muss von dem neuen Datenpunkt auch den "Aktor" /Button ansteuern können.

                          paul53 1 Reply Last reply Reply Quote 0
                          • Elektroniker86
                            Elektroniker86 last edited by

                            So habe ich das jetzt eingetragen, sollte doch so passen?

                            Unbenannt.png

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

                              @Elektroniker86 sagte:

                              kann ich die Aktoren nicht über den neuen Datenpunkt schalten.

                              Das soll in Zeilen 13 bis 15 passieren: Tastendruck, wenn sich der Wert ändert, außer die Änderung erfolgt aus dem Skript. Füge mal vor Zeile 14 ein Log ein:

                              on({id: idVis, change: 'ne', fromNe: js}, function() {
                                  log('Tastendruck');
                                  setState(idButton, true);
                              });
                              
                              Elektroniker86 2 Replies Last reply Reply Quote 0
                              • Elektroniker86
                                Elektroniker86 @paul53 last edited by

                                @paul53 sagte in Datenpunkte zusammenführen switch + state:

                                                                                                                                                            on({id: idVis, change: 'ne', fromNe: js}, function() {                                                                                                                                                                                log('Tastendruck');                                                                                                                                                                                setState(idButton, true);                                                                                                                                                                            });                                            
                                
                                // IDs anpassen
                                const idButton = 's7.0.DBs.DB1.NI02';
                                const idActor = 's7.0.DBs.DB1.Q02';
                                 
                                const js = 'system.adapter.javascript.' + instance;
                                const common = getObject(idButton).common;
                                const idVis = 'LOGO.s7-0.' + common.name.replace(' ', '_');
                                 
                                common.read = true;
                                createState(idVis, getState(idActor).val, common);
                                 
                                on({id: idVis, change: 'ne', fromNe: js}, function() {
                                    setState(idButton, true);on({id: idVis, change: 'ne', fromNe: js}, function() {
                                    log('Tastendruck');
                                    setState(idButton, true);
                                });
                                
                                });
                                 
                                on(idActor, function(dp) {
                                    setState(idVis, dp.state.val, true);
                                });
                                 
                                
                                

                                So?

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

                                  @Elektroniker86 sagte:

                                  So?

                                  Nein, so:

                                  // IDs anpassen
                                  const idButton = 's7.0.DBs.DB1.NI02';
                                  const idActor = 's7.0.DBs.DB1.Q02';
                                   
                                  const js = 'system.adapter.javascript.' + instance;
                                  const common = getObject(idButton).common;
                                  const idVis = 'LOGO.s7-0.' + common.name.replace(' ', '_');
                                   
                                  common.read = true;
                                  createState(idVis, getState(idActor).val, common);
                                   
                                  on({id: idVis, change: 'ne', fromNe: js}, function() {
                                      log('Tastendruck');
                                      setState(idButton, true);
                                  });
                                   
                                  on(idActor, function(dp) {
                                      setState(idVis, dp.state.val, true);
                                  });
                                  
                                  1 Reply Last reply Reply Quote 0
                                  • Elektroniker86
                                    Elektroniker86 last edited by

                                    Javascript spuckt das im Log aus::

                                    13:48:51.637 info javascript.0 Stop script script.js.common.LOGO.s7-0.Deckenleuchte_Zimmer_KG_hinten
                                    13:48:51.657 info javascript.0 Start javascript script.js.common.LOGO.s7-0.Deckenleuchte_Zimmer_KG_hinten
                                    13:48:51.658 info javascript.0 script.js.common.LOGO.s7-0.Deckenleuchte_Zimmer_KG_hinten: registered 2 subscriptions and 0 schedules
                                    13:48:58.646 info javascript.0 Stop script script.js.common.LOGO.s7-0.Deckenleuchte_Zimmer_KG_hinten
                                    13:49:01.052 info javascript.0 Start javascript script.js.common.LOGO.s7-0.Deckenleuchte_Zimmer_KG_hinten
                                    13:49:01.053 info javascript.0 script.js.common.LOGO.s7-0.Deckenleuchte_Zimmer_KG_hinten: registered 2 subscriptions and 0 schedules

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

                                      @Elektroniker86 sagte:

                                      Javascript spuckt das im Log aus:

                                      Hast Du den Wert des Datenpunktes geändert (z.B. in Vis). Nur dann erscheint "Tastendruck" im Log.

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

                                        Im Vis habe ich noch überhaupt nichts geändert. Ich habe jetzt nur erst mal zum test ein Script angelegt und das ganze teste ich unter objekte .... Javascript.LOGO.s7-0.

                                        Wenn es in Objekte Funktioniert, dann muss der Rest auch funktionieren oder nicht?

                                        Wenn ich am neuen Datenpunkt z.B auf true klicke dann wird die Button ID nicht angesteuert.

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

                                          @Elektroniker86 sagte:

                                          es reicht den Taster Datenpunkt einmal auf true zu setzen.
                                          Danach springt er nach einer Sekunde automatisch wieder auf false.

                                          Das passierte wohl im Szene-Adapter ? Dann muss dieses Verhalten auch im Skript erzeugt werden.

                                          // IDs anpassen
                                          const idButton = 's7.0.DBs.DB1.NI02';
                                          const idActor = 's7.0.DBs.DB1.Q02';
                                           
                                          const js = 'system.adapter.javascript.' + instance;
                                          const common = getObject(idButton).common;
                                          const idVis = 'LOGO.s7-0.' + common.name.replace(' ', '_');
                                           
                                          common.read = true;
                                          createState(idVis, getState(idActor).val, common);
                                           
                                          on({id: idVis, change: 'ne', fromNe: js}, function() {
                                              log('Tastendruck');
                                              setState(idButton, true);
                                              setTimeout(function() {
                                                  setState(idButton, false);
                                              }, 500);
                                          });
                                           
                                          on(idActor, function(dp) {
                                              setState(idVis, dp.state.val, true);
                                          });
                                          
                                          
                                          1 Reply Last reply Reply Quote 0
                                          • paul53
                                            paul53 @Elektroniker86 last edited by paul53

                                            @Elektroniker86 sagte:

                                            Wenn es in Objekte Funktioniert, dann muss der Rest auch funktionieren oder nicht?

                                            Ja.

                                            @Elektroniker86 sagte in Datenpunkte zusammenführen switch + state:

                                            Wenn ich am neuen Datenpunkt z.B auf true klicke dann wird die Button ID nicht angesteuert.

                                            Wie stellst Du es fest ? Der Wert des Tasters ändert sich nicht, sondern nur der Zeitstempel.

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

                                              Doch der wert ändert sich kurz auf true und geht wieder zurück.
                                              Habe als switch deklariert ...... ahh ist das der fehler?

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

                                              Support us

                                              ioBroker
                                              Community Adapters
                                              Donate
                                              FAQ Cloud / IOT
                                              HowTo: Node.js-Update
                                              HowTo: Backup/Restore
                                              Downloads
                                              BLOG

                                              508
                                              Online

                                              31.7k
                                              Users

                                              79.6k
                                              Topics

                                              1.3m
                                              Posts

                                              datenpunkte objekte s7.0
                                              3
                                              55
                                              3290
                                              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