Skip to content
  • 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
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Visualisierung
  4. [gelöst]Widget mit getrennter Statusvariable und Steuervar.

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

[gelöst]Widget mit getrennter Statusvariable und Steuervar.

Scheduled Pinned Locked Moved Visualisierung
android app vis
26 Posts 2 Posters 2.3k Views 2 Watching
  • 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.
  • A Offline
    A Offline
    AchimB
    wrote on last edited by
    #12

    @paul53
    Danke für deine Hilfe aber leider fehlt mir wohl noch einiges an Grundwissen !
    Wenn ich es halbwegs richtig verstanden habe soll ich einen Alias anlegen der aus Taster und Rückmeldung erzeugt wird und diesen dann als Objekt_ID ins Widget eintragen.
    Habe also einen Aussgang z.B. : s7.2.Outputs.8.7 und einen Eingang : s7.2.Markers.17.S7_Merker_15 so das ich den Alias mit dem Taster beschreiben kann und gleichzeitig den aktuellen Ausgang lesen kann !
    Ist das soweit richtig ?
    Wenn das soweit richtig ist frage ich mich nur wo ich das Script anlege bzw. wo ich den Alias erzeuge ? Im Widget selber unter Scripte oder muss ich ein separates Script erstellen in JS oder TS ?
    Und wie würde das dann komplett aussehen ?
    Habe bisher nur mit Blockly gearbeitet und da weiß ich das ich einen Datenpunkt erzeugen kann den ich nachher wieder abholen kann aber das ist für mich absolut neuland ! Deshalb verzeih meine dummen Fragen !
    Gruß

    paul53P 1 Reply Last reply
    0
    • A AchimB

      @paul53
      Danke für deine Hilfe aber leider fehlt mir wohl noch einiges an Grundwissen !
      Wenn ich es halbwegs richtig verstanden habe soll ich einen Alias anlegen der aus Taster und Rückmeldung erzeugt wird und diesen dann als Objekt_ID ins Widget eintragen.
      Habe also einen Aussgang z.B. : s7.2.Outputs.8.7 und einen Eingang : s7.2.Markers.17.S7_Merker_15 so das ich den Alias mit dem Taster beschreiben kann und gleichzeitig den aktuellen Ausgang lesen kann !
      Ist das soweit richtig ?
      Wenn das soweit richtig ist frage ich mich nur wo ich das Script anlege bzw. wo ich den Alias erzeuge ? Im Widget selber unter Scripte oder muss ich ein separates Script erstellen in JS oder TS ?
      Und wie würde das dann komplett aussehen ?
      Habe bisher nur mit Blockly gearbeitet und da weiß ich das ich einen Datenpunkt erzeugen kann den ich nachher wieder abholen kann aber das ist für mich absolut neuland ! Deshalb verzeih meine dummen Fragen !
      Gruß

      paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by paul53
      #13

      @AchimB sagte:

      soll ich einen Alias anlegen der aus Taster und Rückmeldung erzeugt wird und diesen dann als Objekt_ID ins Widget eintragen.

      Ja.

      @AchimB sagte in Widget mit getrennter Statusvariable und Steuervariable:

      ein separates Script erstellen in JS

      Ja, folgendes Javascript einmal ausführen, nachdem idAlias und nameAlias angepasst sind ('s7.2.Markers.17.S7_Merker_15' ist der Taster ?)

      // Original-Datenpunkt
      const idOrigin = 's7.2.Markers.17.S7_Merker_15'; 
      // Optional: Status-Datenpunkt, wenn Kommando und Status getrennt.
      // Bei Nicht-Verwendung Leerstring '' zuweisen
      const idRead = 's7.2.Outputs.8.7';
       
      // Alias-Datenpunkt
      const idAlias = 'Wohnen.Licht.Esstisch';
      var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom, raum, gewerk;
      // Folgende kommentieren, wenn keine Änderung der Eigenschaft erforderlich
      nameAlias = 'Lampe Esstisch';
      desc = 'per Script erstellt';
      // typeAlias = 'boolean'; // oder 'number'
      // read = "val < 20 ? true : false"; // Erkennung "Aus" --> false erfolgt automatisch  
      write = "val ? true : true";
      role = 'switch';
      // min = 0; // nur Zahlen
      // max = 100; // nur Zahlen
      // unit = '%'; // nur für Zahlen
      // states = {0: 'Aus', 1: 'Auto', 2: 'Ein'}; // Zahlen (Multistate) oder Logikwert (z.B. Aus/Ein)
      // custom = []; // verhindert doppelte Ausführung von history, ...
      // raum = 'EG_Flur'; // Groß-/Kleinschreibung in der ID beachten !
      // gewerk = 'Licht'; // Groß-/Kleinschreibung in der ID beachten !
      
      function createAlias(idDst, idSrc, idRd) {
         if(existsState(idDst)) log(idDst + ' schon vorhanden !', 'warn');
         else {
            var obj = {};
            obj.type = 'state';
            obj.common = getObject(idSrc).common;
            obj.common.alias = {};
            if(idRd) {
                obj.common.alias.id = {};
                obj.common.alias.id.read = idRd;
                obj.common.alias.id.write = idSrc;
                obj.common.read = true;
            } else obj.common.alias.id = idSrc;
            if(typeAlias) obj.common.type = typeAlias;
            if(obj.common.read !== false && read) obj.common.alias.read = read;
            if(obj.common.write !== false && write) obj.common.alias.write = write;
            if(nameAlias) obj.common.name = nameAlias;
            if(role) obj.common.role = role;
            if(desc) obj.common.desc = desc;
            if(min !== undefined) obj.common.min = min;
            if(max !== undefined) obj.common.max = max;
            if(unit) obj.common.unit = unit;
            if(states) obj.common.states = states;
            if(custom && obj.common.custom) obj.common.custom = custom;
            obj.native = {};
            setObject(idDst, obj);
            if(raum && getObject('enum.rooms.' + raum)) {
               let obj = getObject('enum.rooms.' + raum)
               obj.common.members.push(idDst);
               setObject('enum.rooms.' + raum, obj);
            }
            if(gewerk && getObject('enum.functions.' + gewerk)) {
               let obj = getObject('enum.functions.' + gewerk)
               obj.common.members.push(idDst);
               setObject('enum.functions.' + gewerk, obj);
            }
         } 
      }
       
      createAlias('alias.0.' + idAlias, idOrigin, idRead);
      

      Nach Anpassung von idOrigin, idRead, idAlias, nameAlias kann es für weitere Aliasse zu S7-Datenpunkten mit Taster/Status verwendet werden.

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      A 1 Reply Last reply
      0
      • paul53P paul53

        @AchimB sagte:

        soll ich einen Alias anlegen der aus Taster und Rückmeldung erzeugt wird und diesen dann als Objekt_ID ins Widget eintragen.

        Ja.

        @AchimB sagte in Widget mit getrennter Statusvariable und Steuervariable:

        ein separates Script erstellen in JS

        Ja, folgendes Javascript einmal ausführen, nachdem idAlias und nameAlias angepasst sind ('s7.2.Markers.17.S7_Merker_15' ist der Taster ?)

        // Original-Datenpunkt
        const idOrigin = 's7.2.Markers.17.S7_Merker_15'; 
        // Optional: Status-Datenpunkt, wenn Kommando und Status getrennt.
        // Bei Nicht-Verwendung Leerstring '' zuweisen
        const idRead = 's7.2.Outputs.8.7';
         
        // Alias-Datenpunkt
        const idAlias = 'Wohnen.Licht.Esstisch';
        var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom, raum, gewerk;
        // Folgende kommentieren, wenn keine Änderung der Eigenschaft erforderlich
        nameAlias = 'Lampe Esstisch';
        desc = 'per Script erstellt';
        // typeAlias = 'boolean'; // oder 'number'
        // read = "val < 20 ? true : false"; // Erkennung "Aus" --> false erfolgt automatisch  
        write = "val ? true : true";
        role = 'switch';
        // min = 0; // nur Zahlen
        // max = 100; // nur Zahlen
        // unit = '%'; // nur für Zahlen
        // states = {0: 'Aus', 1: 'Auto', 2: 'Ein'}; // Zahlen (Multistate) oder Logikwert (z.B. Aus/Ein)
        // custom = []; // verhindert doppelte Ausführung von history, ...
        // raum = 'EG_Flur'; // Groß-/Kleinschreibung in der ID beachten !
        // gewerk = 'Licht'; // Groß-/Kleinschreibung in der ID beachten !
        
        function createAlias(idDst, idSrc, idRd) {
           if(existsState(idDst)) log(idDst + ' schon vorhanden !', 'warn');
           else {
              var obj = {};
              obj.type = 'state';
              obj.common = getObject(idSrc).common;
              obj.common.alias = {};
              if(idRd) {
                  obj.common.alias.id = {};
                  obj.common.alias.id.read = idRd;
                  obj.common.alias.id.write = idSrc;
                  obj.common.read = true;
              } else obj.common.alias.id = idSrc;
              if(typeAlias) obj.common.type = typeAlias;
              if(obj.common.read !== false && read) obj.common.alias.read = read;
              if(obj.common.write !== false && write) obj.common.alias.write = write;
              if(nameAlias) obj.common.name = nameAlias;
              if(role) obj.common.role = role;
              if(desc) obj.common.desc = desc;
              if(min !== undefined) obj.common.min = min;
              if(max !== undefined) obj.common.max = max;
              if(unit) obj.common.unit = unit;
              if(states) obj.common.states = states;
              if(custom && obj.common.custom) obj.common.custom = custom;
              obj.native = {};
              setObject(idDst, obj);
              if(raum && getObject('enum.rooms.' + raum)) {
                 let obj = getObject('enum.rooms.' + raum)
                 obj.common.members.push(idDst);
                 setObject('enum.rooms.' + raum, obj);
              }
              if(gewerk && getObject('enum.functions.' + gewerk)) {
                 let obj = getObject('enum.functions.' + gewerk)
                 obj.common.members.push(idDst);
                 setObject('enum.functions.' + gewerk, obj);
              }
           } 
        }
         
        createAlias('alias.0.' + idAlias, idOrigin, idRead);
        

        Nach Anpassung von idOrigin, idRead, idAlias, nameAlias kann es für weitere Aliasse zu S7-Datenpunkten mit Taster/Status verwendet werden.

        A Offline
        A Offline
        AchimB
        wrote on last edited by
        #14

        @paul53 said in Widget mit getrennter Statusvariable und Steuervariable:

        ('s7.2.Markers.17.S7_Merker_15' ist der Taster ?)

        Ja korrekt !
        Als idAlias habe ich dann einen Ordner aus Javascript.0
        'Beleuchtung'
        genommen und nameAlias einen freien Namen
        'Lampe Büro'

        funktioniert aber nicht !

        18:02:34.768 error javascript.0 (23398) script.js.Licht.Licht_Büro: /opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:1913
        18:02:34.771 error javascript.0 (23398) at createAlias (script.js.Licht.Licht_Büro:50:7)
        18:02:34.772 error javascript.0 (23398) at script.js.Licht.Licht_Büro:64:1

        paul53P 1 Reply Last reply
        0
        • A AchimB

          @paul53 said in Widget mit getrennter Statusvariable und Steuervariable:

          ('s7.2.Markers.17.S7_Merker_15' ist der Taster ?)

          Ja korrekt !
          Als idAlias habe ich dann einen Ordner aus Javascript.0
          'Beleuchtung'
          genommen und nameAlias einen freien Namen
          'Lampe Büro'

          funktioniert aber nicht !

          18:02:34.768 error javascript.0 (23398) script.js.Licht.Licht_Büro: /opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:1913
          18:02:34.771 error javascript.0 (23398) at createAlias (script.js.Licht.Licht_Büro:50:7)
          18:02:34.772 error javascript.0 (23398) at script.js.Licht.Licht_Büro:64:1

          paul53P Offline
          paul53P Offline
          paul53
          wrote on last edited by paul53
          #15

          @AchimB sagte:

          Als idAlias habe ich dann einen Ordner aus Javascript.0 'Beleuchtung' genommen

          Alias-Datenpunkte werden im Ordner "alias.0" erstellt, also z.B.

          idAlias = 'Beleuchtung.Buero'; // Ordner: alias.0.Beleuchtung
          

          Was ist das für ein Skript "Licht.Licht_Büro" ?

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          A 2 Replies Last reply
          0
          • paul53P paul53

            @AchimB sagte:

            Als idAlias habe ich dann einen Ordner aus Javascript.0 'Beleuchtung' genommen

            Alias-Datenpunkte werden im Ordner "alias.0" erstellt, also z.B.

            idAlias = 'Beleuchtung.Buero'; // Ordner: alias.0.Beleuchtung
            

            Was ist das für ein Skript "Licht.Licht_Büro" ?

            A Offline
            A Offline
            AchimB
            wrote on last edited by
            #16

            @paul53 said in Widget mit getrennter Statusvariable und Steuervariable:

            Alias-Datenpunkte werden im Ordner "alias.0" erstellt, also z.B.
            idAlias = 'Beleuchtung.Buero'; // Ordner: alias.0.Beleuchtung

            Habe aber keinen Ordner : Alias.0

            1 Reply Last reply
            0
            • paul53P paul53

              @AchimB sagte:

              Als idAlias habe ich dann einen Ordner aus Javascript.0 'Beleuchtung' genommen

              Alias-Datenpunkte werden im Ordner "alias.0" erstellt, also z.B.

              idAlias = 'Beleuchtung.Buero'; // Ordner: alias.0.Beleuchtung
              

              Was ist das für ein Skript "Licht.Licht_Büro" ?

              A Offline
              A Offline
              AchimB
              wrote on last edited by
              #17

              @paul53 said in Widget mit getrennter Statusvariable und Steuervariable:

              Was ist das für ein Skript "Licht.Licht_Büro" ?

              Das ist das Script das ich angelegt habe !

              paul53P 1 Reply Last reply
              0
              • A AchimB

                @paul53 said in Widget mit getrennter Statusvariable und Steuervariable:

                Was ist das für ein Skript "Licht.Licht_Büro" ?

                Das ist das Script das ich angelegt habe !

                paul53P Offline
                paul53P Offline
                paul53
                wrote on last edited by
                #18

                @AchimB
                Hast Du in den Einstellungen der Javascript-Instanz "setObject" freigegeben ?

                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                1 Reply Last reply
                0
                • A Offline
                  A Offline
                  AchimB
                  wrote on last edited by
                  #19

                  Ja habe ich !

                  paul53P 1 Reply Last reply
                  0
                  • A AchimB

                    Ja habe ich !

                    paul53P Offline
                    paul53P Offline
                    paul53
                    wrote on last edited by
                    #20

                    @AchimB sagte:

                    Ja habe ich !

                    Dann wundert mich die Fehlermeldung

                    18:02:34.771 error javascript.0 (23398) at createAlias (script.js.Licht.Licht_Büro:50:7)
                    

                    Es ist Zeile 50 mit setObject() ?

                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                    1 Reply Last reply
                    0
                    • A Offline
                      A Offline
                      AchimB
                      wrote on last edited by
                      #21

                      Habe in der Log Datei noch folgende Meldungen !
                      javascript.0 2020-07-26 20:04:43.008 error (1360) at Script.runInContext (vm.js:133:20)
                      javascript.0 2020-07-26 20:04:43.008 error (1360) at script.js.Licht.Licht_Büro:64:1
                      javascript.0 2020-07-26 20:04:43.007 error (1360) at createAlias (script.js.Licht.Licht_Büro:50:7)
                      javascript.0 2020-07-26 20:04:43.007 error (1360) at sandbox.setObject (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:2801:25)
                      javascript.0 2020-07-26 20:04:43.006 error (1360) at Adapter.setForeignObject (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:1913:101)
                      javascript.0 2020-07-26 20:04:43.006 error (1360) TypeError: obj.common.alias.id.startsWith is not a function
                      javascript.0 2020-07-26 20:04:43.006 error (1360) ^
                      javascript.0 2020-07-26 20:04:43.005 error (1360) if (obj && obj.common && obj.common.alias && obj.common.alias.id && obj.common.alias.id.startsWith(ALIAS_STARTS_WITH)) {
                      javascript.0 2020-07-26 20:04:43.004 error (1360) script.js.Licht.Licht_Büro: /opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:1913

                      paul53P 1 Reply Last reply
                      0
                      • A AchimB

                        Habe in der Log Datei noch folgende Meldungen !
                        javascript.0 2020-07-26 20:04:43.008 error (1360) at Script.runInContext (vm.js:133:20)
                        javascript.0 2020-07-26 20:04:43.008 error (1360) at script.js.Licht.Licht_Büro:64:1
                        javascript.0 2020-07-26 20:04:43.007 error (1360) at createAlias (script.js.Licht.Licht_Büro:50:7)
                        javascript.0 2020-07-26 20:04:43.007 error (1360) at sandbox.setObject (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:2801:25)
                        javascript.0 2020-07-26 20:04:43.006 error (1360) at Adapter.setForeignObject (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:1913:101)
                        javascript.0 2020-07-26 20:04:43.006 error (1360) TypeError: obj.common.alias.id.startsWith is not a function
                        javascript.0 2020-07-26 20:04:43.006 error (1360) ^
                        javascript.0 2020-07-26 20:04:43.005 error (1360) if (obj && obj.common && obj.common.alias && obj.common.alias.id && obj.common.alias.id.startsWith(ALIAS_STARTS_WITH)) {
                        javascript.0 2020-07-26 20:04:43.004 error (1360) script.js.Licht.Licht_Büro: /opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:1913

                        paul53P Offline
                        paul53P Offline
                        paul53
                        wrote on last edited by
                        #22

                        @AchimB sagte:

                        noch folgende Meldungen !

                        Das sind meist Folge-Meldungen von

                        javascript.0 2020-07-26 20:04:43.007 error (1360) at createAlias (script.js.Licht.Licht_Büro:50:7)
                        

                        Welche Version haben der js-controller (Host) und der Javascript-Adapter ?

                        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                        1 Reply Last reply
                        0
                        • A Offline
                          A Offline
                          AchimB
                          wrote on last edited by
                          #23

                          js-controller 2.2.8
                          Javascript 4.6.17

                          paul53P 1 Reply Last reply
                          0
                          • A AchimB

                            js-controller 2.2.8
                            Javascript 4.6.17

                            paul53P Offline
                            paul53P Offline
                            paul53
                            wrote on last edited by paul53
                            #24

                            @AchimB sagte:

                            js-controller 2.2.8

                            Das mit getrenntem Kommando und Status im Alias funktioniert erst ab js-controller 3.0 ! Siehe Doku

                            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                            A 1 Reply Last reply
                            0
                            • paul53P paul53

                              @AchimB sagte:

                              js-controller 2.2.8

                              Das mit getrenntem Kommando und Status im Alias funktioniert erst ab js-controller 3.0 ! Siehe Doku

                              A Offline
                              A Offline
                              AchimB
                              wrote on last edited by
                              #25

                              @paul53 said in Widget mit getrennter Statusvariable und Steuervariable:

                              Das mit getrenntem Kommando und Status im Alias funktioniert erst ab js-controller 3.0 ! Siehe Doku

                              Sorry mein Fehler !
                              Hab ein Update gemacht und Funktioniert !
                              Man darf zwar nicht zu schnell hintereinander schalten dann kommt er nicht mehr hinterher aber ansonsten genau das was ich wollte !
                              Vielen Dank für deine Geduld !!

                              paul53P 1 Reply Last reply
                              0
                              • A AchimB

                                @paul53 said in Widget mit getrennter Statusvariable und Steuervariable:

                                Das mit getrenntem Kommando und Status im Alias funktioniert erst ab js-controller 3.0 ! Siehe Doku

                                Sorry mein Fehler !
                                Hab ein Update gemacht und Funktioniert !
                                Man darf zwar nicht zu schnell hintereinander schalten dann kommt er nicht mehr hinterher aber ansonsten genau das was ich wollte !
                                Vielen Dank für deine Geduld !!

                                paul53P Offline
                                paul53P Offline
                                paul53
                                wrote on last edited by
                                #26

                                @AchimB sagte:

                                genau das was ich wollte !

                                Dann markiere bitte das Thema in der Überschrift des ersten Beitrags als [gelöst].

                                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                1 Reply Last reply
                                0
                                Reply
                                • Reply as topic
                                Log in to reply
                                • Oldest to Newest
                                • Newest to Oldest
                                • Most Votes


                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                760

                                Online

                                32.4k

                                Users

                                81.4k

                                Topics

                                1.3m

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

                                • Don't have an account? Register

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