Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Visualisierung
  4. [gelöst]Widget mit getrennter Statusvariable und Steuervar.

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    474

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.6k

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

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

Geplant Angeheftet Gesperrt Verschoben Visualisierung
android app vis
26 Beiträge 2 Kommentatoren 2.4k Aufrufe 2 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • 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
    schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
    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
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      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
        schrieb am zuletzt editiert von 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 Antworten Letzte Antwort
        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
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          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
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            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
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              0
              • A Offline
                A Offline
                AchimB
                schrieb am zuletzt editiert von
                #19

                Ja habe ich !

                paul53P 1 Antwort Letzte Antwort
                0
                • A AchimB

                  Ja habe ich !

                  paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von
                  #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 Antwort Letzte Antwort
                  0
                  • A Offline
                    A Offline
                    AchimB
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    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
                      schrieb am zuletzt editiert von
                      #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 Antwort Letzte Antwort
                      0
                      • A Offline
                        A Offline
                        AchimB
                        schrieb am zuletzt editiert von
                        #23

                        js-controller 2.2.8
                        Javascript 4.6.17

                        paul53P 1 Antwort Letzte Antwort
                        0
                        • A AchimB

                          js-controller 2.2.8
                          Javascript 4.6.17

                          paul53P Offline
                          paul53P Offline
                          paul53
                          schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                          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
                            schrieb am zuletzt editiert von
                            #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 Antwort Letzte Antwort
                            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
                              schrieb am zuletzt editiert von
                              #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 Antwort Letzte Antwort
                              0
                              Antworten
                              • In einem neuen Thema antworten
                              Anmelden zum Antworten
                              • Älteste zuerst
                              • Neuste zuerst
                              • Meiste Stimmen


                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              734

                              Online

                              32.5k

                              Benutzer

                              81.8k

                              Themen

                              1.3m

                              Beiträge
                              Community
                              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                              ioBroker Community 2014-2025
                              logo
                              • Anmelden

                              • Du hast noch kein Konto? Registrieren

                              • Anmelden oder registrieren, um zu suchen
                              • Erster Beitrag
                                Letzter Beitrag
                              0
                              • Home
                              • Aktuell
                              • Tags
                              • Ungelesen 0
                              • Kategorien
                              • Unreplied
                              • Beliebt
                              • GitHub
                              • Docu
                              • Hilfe