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

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

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

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

      Hallo ,
      Suche ein Widget das mir nach schalten mit einem Taster den aktuellen Ausgang signalisiert !
      Arbeite mit einer s7 300 und habe mir bis jetzt mit einem Widget zum schalten und einem zum signalisieren beholfen.
      man kann auch 2 Widgets übereinander legen und mit der Sichtbarkeit arbeiten aber es muss doch eine einfacherer Möglichkeit geben !
      Wäre sehr Dankbar für eure Unterstützung !!
      Gruß

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

        @AchimB Widget mit getrennter Statusvariable und Steuervariable

        Man kann Kommando- und Status-Datenpunkt in einem Alias zusammenführen.

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

          @paul53
          Danke für die schnelle Antwort aber leider kann ich dir nicht folgen !
          Im Grunde möchte ich ja nur eine Lampe schalten und anschließend die korrekte Rückmeldung haben !
          Also M13.0 als Steuer variabel und A8.0 Status variabel.
          Und das nach Möglichkeit in einem einfachen Lampen-Widget !
          Vielleicht gibt es ja auch die Möglichkeit über ein Blockly und einen Datenpunkt das Widget auszutricksen ?
          Wenn es nur die von dir aufgezeigte Möglichkeit gibt werde ich das nicht realisieren können !
          Gruß

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

            @AchimB sagte:

            Vielleicht gibt es ja auch die Möglichkeit über ein Blockly und einen Datenpunkt das Widget auszutricksen ?

            Das geht auch mit Blockly und einem eigenen Datenpunkt für Vis (unter 0_userdata.0). Die Verwendung eines Alias ist aber einfacher.

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

              @paul53
              Einfacher ist relativ 😉
              Habe überhaupt keinen Ansatz wo ich was eintragen müsste und was ich nachher im Widget aufrufen sollte !
              Bin Vielleicht noch nicht soweit !
              Werde mich mal durch den gesamten Chat kämpfen und es versuchen zu verstehen !

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

                @AchimB sagte:

                nach schalten mit einem Taster den aktuellen Ausgang signalisiert !

                Folgt der Ausgang dem Wert des Tasters oder toggled der Taster den Ausgang ?

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

                  @paul53
                  Der Taster schaltet den Ausgang !

                  paul53 1 Reply Last reply Reply Quote 0
                  • 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
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            946
                                            Online

                                            31.6k
                                            Users

                                            79.4k
                                            Topics

                                            1.3m
                                            Posts

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