Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. [gelöst]Widget mit getrennter Statusvariable und Steuervar.

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

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

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

      @AchimB sagte:

      Der Taster schaltet den Ausgang !

      Das ist klar. Aber wie ? Taster false --> Ausgang false / Taster true --> Ausgang true ? Dann wäre der Taster kein Taster, sondern ein Schalter.

      1 Reply Last reply Reply Quote 0
      • A
        AchimB last edited by

        Taster True => Ausgang => True beim nächsten Flankenwechsel Ausgang => False !

        Taste also immer mit "1" und erzeuge dann einen wechsel des Ausgangs !
        Habe Quasi einen Stromstoßschalter in S7 programmiert und übernehme nur die Werte !

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

          @AchimB sagte:

          Taste also immer mit "1" und erzeuge dann einen wechsel des Ausgangs !

          Also toggled der Taster. Dann kann Alias nicht verwendet werden, sondern man muss den Datenpunkt für Vis per Skript verarbeiten.

          // 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 = '0_userdata.0.s7-0.' + common.name.replace(/\s/g, '_'); // Anpassen !
           
          common.read = true;
          if(!existsState(idVis)) 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);
          });
          

          Für die Verwendung des Skripts müssen nur die 3 IDs angepasst werden.

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

            @paul53 sagte:

            Dann kann Alias nicht verwendet werden

            Muss mich korrigieren, denn ich habe es gerade getestet. Es funktioniert auch mit Alias:

                "alias": {
                      "id": {
                        "read": "knx.0.Wohnen.Licht.Esstisch_Status",
                        "write": "knx.0.Wohnen.Licht.Esstisch_Taster"
                      },
                      "write": "val ? true : true"
                    }
            
            1 Reply Last reply Reply Quote 0
            • A
              AchimB last edited by

              @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ß

              paul53 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @AchimB last edited by 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 1 Reply Last reply Reply Quote 0
                • A
                  AchimB @paul53 last edited by

                  @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

                  paul53 1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @AchimB last edited by 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 2 Replies Last reply Reply Quote 0
                    • A
                      AchimB @paul53 last edited by

                      @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 Reply Quote 0
                      • A
                        AchimB @paul53 last edited by

                        @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 !

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

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

                          1 Reply Last reply Reply Quote 0
                          • A
                            AchimB last edited by

                            Ja habe ich !

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

                              @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() ?

                              1 Reply Last reply Reply Quote 0
                              • A
                                AchimB last edited by

                                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

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

                                  @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 ?

                                  1 Reply Last reply Reply Quote 0
                                  • A
                                    AchimB last edited by

                                    js-controller 2.2.8
                                    Javascript 4.6.17

                                    paul53 1 Reply Last reply Reply Quote 0
                                    • paul53
                                      paul53 @AchimB last edited by 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 1 Reply Last reply Reply Quote 0
                                      • A
                                        AchimB @paul53 last edited by

                                        @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 !!

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

                                          @AchimB sagte:

                                          genau das was ich wollte !

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

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

                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          536
                                          Online

                                          31.9k
                                          Users

                                          80.1k
                                          Topics

                                          1.3m
                                          Posts

                                          android app vis
                                          2
                                          26
                                          1577
                                          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