Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [Gelöst]Alias mit Script erstellen - Button

    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]Alias mit Script erstellen - Button

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

      Ich habe hier im Forum ein Script gefunden mit dem man Aliasse anlegen kann
      Leider weiss ich nicht mehr wo

      Hier mal das Script

      // Original-Datenpunkt
      const idOrigin = 'sonoff.0.Lichtschalter-Stube.POWER1'; 
      // Optional: Status-Datenpunkt, wenn Kommando und Status getrennt.
      // Bei Nicht-Verwendung Leerstring '' zuweisen
      const idRead = '';
       
      // Alias-Datenpunkt
      const idAlias = '01_Stube.01_Schalter.Schalter-Esstisch';
       
      var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom, raum, gewerk;
       
      // Folgende kommentieren, wenn keine Änderung der Eigenschaft erforderlich
      nameAlias = 'Schalter - Esstisch';
      desc = 'per Script erstellt';
      // typeAlias = 'boolean'; // oder 'number'
      // read = "val < 0 ? -val : 0"; // Erkennung "Aus" --> false erfolgt automatisch  
      // write = "val ? String(1) : String(0)";
      // role = 'value';
      // 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 !
       
      // Ab hier nichts ändern !!
      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(obj.common.type == 'number') {
               if(min !== undefined) obj.common.min = min;
               if(max !== undefined) obj.common.max = max;
               if(unit) obj.common.unit = unit;
            } else {
               if(obj.common.min !== undefined) delete obj.common.min;
               if(obj.common.max !== undefined) delete obj.common.max;
               if(obj.common.unit) delete obj.common.unit;
            }
            if(states) obj.common.states = states;
            if(custom && obj.common.custom) obj.common.custom = custom;
            obj.native = {};
            setObject(idDst, obj, function() {
               if(idRd) setState(idRd, getState(idRd).val, true);
               else setState(idSrc, getState(idSrc).val, true); 
            });
            if(raum && existsObject('enum.rooms.' + raum)) {
               let obj = getObject('enum.rooms.' + raum)
               obj.common.members.push(idDst);
               setObject('enum.rooms.' + raum, obj);
            }
            if(gewerk && existsObject('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);
      

      Das funktioniert so perfekt
      Ich kann mit den Alias z.B, Dein AV-Receiver lauter machen
      Aber nur wenn ich direkt drauf drucke also im Browser direkt auf den Button

      Wenn ich den Button jetzt aber per Blockly anspreche funktioniert leider nichts
      Das betrifft aber nur Alias mit der Rolle "button" andere mit z.B. Rolle "switch" funktionieren.

      Hatte das schon jemand und hat dafür eine Lösung für mich?

      PS:
      Wenn ich im Blocky den Alias gegen den Originalen DP austausche funktioniert es

      dslraser paul53 3 Replies Last reply Reply Quote 0
      • dslraser
        dslraser Forum Testing Most Active @Wszene last edited by

        @wszene sagte in Alias mit Script erstellen - Button funktionieren nicht:

        Leider weiss ich nicht mehr wo

        https://forum.iobroker.net/post/334261

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

          @wszene sagte: Wenn ich den Button jetzt aber per Blockly anspreche funktioniert leider nichts

          Zeige bitte das Blockly und die RAW-Ansicht der Eigenschaften des Alias-DP (in Code tags).

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

            @paul53
            Hier die RAW Ansicht

            {
              "type": "state",
              "common": {
                "name": "AV-Receiver - Leiser",
                "role": "button",
                "type": "number",
                "write": true,
                "read": true,
                "min": 0,
                "alias": {
                  "id": "harmony.0.Fernbedienung.Bose-AV-Receiver.VolumeDown"
                },
                "desc": "per Script erstellt"
              },
              "native": {},
              "from": "system.adapter.javascript.0",
              "user": "system.user.admin",
              "ts": 1611037285630,
              "_id": "alias.0.01_Stube.04_Fernbedienung.AV_Receiver-Leiser",
              "acl": {
                "object": 1636,
                "state": 1636,
                "owner": "system.user.admin",
                "ownerGroup": "system.group.administrator"
              }
            }
            

            und Hier das Blockly wie es funktioniert
            Bildschirmfoto 2021-01-20 um 19.39.28.png
            und hier wie ich es gern hätte (nur im erst falls Block geändert)
            Bildschirmfoto 2021-01-20 um 19.42.42.png

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

              @wszene
              Fehler 1:

                  "type": "number",
              

              Fehler 2: "wiederhole 8 mal" sendet 8 mal im ms-Abstand
              Fehler 3: Button schaltet man nicht mit "umschalten", sondern mit "steuere" mit "wahr"

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

                @paul53
                Das Script übernimmt doch aber die Daten vom Original DP oder täusche ich mich da und mit dem funktioniert es

                Das mit der Wiederholung ist weil einmal zu wenig ist
                Wie würdest du das denn machen wenn der der Button 8x gedrückt werden soll?

                Das mit steuere habe ich auch erst gehabt aber das hat leider nicht funktioniert

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

                  @wszene sagte: Das mit steuere habe ich auch erst gehabt aber das hat leider nicht funktioniert

                  Dann ist es kein Button, also ist die Rolle falsch.

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

                    @paul53

                    Der Orginal DP ist vom Harmony Adapter da ist es auch ein button

                    EDIT:
                    Ich habe es jetzt nochmal mit steuere probiert
                    Mit dem Originalen DP geht es aber wieder nicht mit dem Alias

                    Hier mal das was das Log dazu sagt

                    javascript.0	2021-01-20 20:22:30.122	warn	(1070) at processTimers (internal/timers.js:497:7)
                    javascript.0	2021-01-20 20:22:30.122	warn	(1070) at listOnTimeout (internal/timers.js:556:17)
                    javascript.0	2021-01-20 20:22:30.118	warn	(1070) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1475:29)
                    javascript.0	2021-01-20 20:22:30.118	warn	(1070) at Object.setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1417:20)
                    javascript.0	2021-01-20 20:22:30.116	warn	(1070) You are assigning a boolean to the state "harmony.0.Fernbedienung.Bose-AV-Receiver.VolumeUp" which expects a number. Please fix your code to use a number or change the state type to boolean. T
                    
                    paul53 1 Reply Last reply Reply Quote 0
                    • paul53
                      paul53 @Wszene last edited by

                      @wszene sagte: Ich kann mit den Alias z.B, Dein AV-Receiver lauter machen. Aber nur wenn ich direkt drauf drucke also im Browser direkt auf den Button

                      Prüfe mal mit dem Test-Blockly wie sich der Datenpunkt "VolumeDown" verhält, wenn man den Button manuell (Tab Objekte) betätigt.

                      Bild_2021-01-20_203053.png

                      dslraser Wszene 2 Replies Last reply Reply Quote 0
                      • dslraser
                        dslraser Forum Testing Most Active @paul53 last edited by

                        @paul53
                        ich habe bei mir gerade mal nachgesehen. Im Harmony Adapter sind die Button tatsächlich alle mit type number.
                        Ist das eigentlich okay ?

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

                          @dslraser sagte: Im Harmony Adapter sind die Button tatsächlich alle mit type number.
                          Ist das eigentlich okay ?

                          Nein

                          dslraser 2 Replies Last reply Reply Quote 0
                          • dslraser
                            dslraser Forum Testing Most Active @paul53 last edited by

                            @paul53
                            nur ein Beispiel...

                            Screenshot_20210120-203711_Chrome.jpg

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

                              @wszene sagte in Alias mit Script erstellen - Button funktionieren nicht:

                              Hier mal das was das Log dazu sagt

                              Die Warnung ist normal, wenn true auf einen Datenpunkt vom Typ "number" geschrieben wird.

                              Ändere mal den Alias common (type, min raus, read und alias.write), damit er nach "boolean" wandelt:

                                "common": {
                                  "name": "AV-Receiver - Leiser",
                                  "role": "button",
                                  "type": "boolean",
                                  "write": true,
                                  "read": false,
                                  "alias": {
                                    "id": "harmony.0.Fernbedienung.Bose-AV-Receiver.VolumeDown",
                                    "write": "val ? 1 : 0"
                                  },
                                  "desc": "per Script erstellt"
                                },
                              
                              Wszene 1 Reply Last reply Reply Quote 0
                              • Wszene
                                Wszene @paul53 last edited by

                                @paul53 sagte in Alias mit Script erstellen - Button funktionieren nicht:

                                @wszene sagte: Ich kann mit den Alias z.B, Dein AV-Receiver lauter machen. Aber nur wenn ich direkt drauf drucke also im Browser direkt auf den Button

                                Prüfe mal mit dem Test-Blockly wie sich der Datenpunkt "VolumeDown" verhält, wenn man den Button manuell (Tab Objekte) betätigt.

                                Bild_2021-01-20_203053.png

                                Hier die Ausgabe

                                javascript.0	2021-01-20 20:42:53.243	info	(1070) script.js.Zum_Testen.Test-Skript: Leiser: 0 , ack: true
                                harmony.0	2021-01-20 20:42:53.225	info	(1055) hub busy, stateChange delayed: harmony.0.Fernbedienung.Bose-AV-Receiver.VolumeUp = true
                                
                                paul53 1 Reply Last reply Reply Quote 0
                                • paul53
                                  paul53 @Wszene last edited by

                                  @wszene sagte: javascript.0 2021-01-20 20:42:53.243 info (1070) script.js.Zum_Testen.Test-Skript: Leiser: 0 , ack: true

                                  Da muss vorher noch ein Log mit ack: false kommen.

                                  1 Reply Last reply Reply Quote 0
                                  • dslraser
                                    dslraser Forum Testing Most Active @paul53 last edited by

                                    @paul53 sagte in Alias mit Script erstellen - Button funktionieren nicht:

                                    @dslraser sagte: Im Harmony Adapter sind die Button tatsächlich alle mit type number.
                                    Ist das eigentlich okay ?

                                    Nein

                                    ich habe mal ein issue angelegt

                                    https://github.com/Pmant/ioBroker.harmony/issues/68

                                    dslraser created this issue in Pmant/ioBroker.harmony

                                    open Button mit type number #68

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

                                      @paul53 sagte in Alias mit Script erstellen - Button funktionieren nicht:

                                      @wszene sagte in Alias mit Script erstellen - Button funktionieren nicht:

                                      Hier mal das was das Log dazu sagt

                                      Die Warnung ist normal, wenn true auf einen Datenpunkt vom Typ "number" geschrieben wird.

                                      Ändere mal den Alias common (type, min raus, read und alias.write), damit er nach "boolean" wandelt:

                                        "common": {
                                          "name": "AV-Receiver - Leiser",
                                          "role": "button",
                                          "type": "boolean",
                                          "write": true,
                                          "read": false,
                                          "alias": {
                                            "id": "harmony.0.Fernbedienung.Bose-AV-Receiver.VolumeDown",
                                            "write": "val ? 1 : 0"
                                          },
                                          "desc": "per Script erstellt"
                                        },
                                      

                                      Mit der Änderung klappt es
                                      Gibt es eine Mäglichkeit diese auch direkt mit dem Script zu machen also beim erstellen des Alias?

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

                                        @wszene sagte: Gibt es eine Mäglichkeit diese auch direkt mit dem Script zu machen also beim erstellen des Alias?

                                        Ja, außer common.read = false. Hier der Anfang:

                                        // Original-Datenpunkt
                                        const idOrigin = 'sonoff.0.Lichtschalter-Stube.POWER1'; 
                                        // Optional: Status-Datenpunkt, wenn Kommando und Status getrennt.
                                        // Bei Nicht-Verwendung Leerstring '' zuweisen
                                        const idRead = '';
                                         
                                        // Alias-Datenpunkt
                                        const idAlias = '01_Stube.01_Schalter.Schalter-Esstisch';
                                         
                                        var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom, raum, gewerk;
                                         
                                        // Folgende kommentieren, wenn keine Änderung der Eigenschaft erforderlich
                                        nameAlias = 'Schalter - Esstisch';
                                        desc = 'per Script erstellt';
                                        typeAlias = 'boolean'; // oder 'number'
                                        // read = "val < 0 ? -val : 0"; // Erkennung "Aus" --> false erfolgt automatisch  
                                        write = "val ? 1 : 0";
                                        
                                        Wszene 1 Reply Last reply Reply Quote 0
                                        • Wszene
                                          Wszene @paul53 last edited by

                                          @paul53 sagte in Alias mit Script erstellen - Button funktionieren nicht:

                                          common.read = false

                                          Was macht dieses Kommando nur für mein Verständniss

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

                                            @wszene sagte: nur für mein Verständniss

                                            Das bedeutet "write only", hat aber keine Auswirkung auf die Button-Funktionalität.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            908
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

                                            blockly communication javascript
                                            3
                                            21
                                            682
                                            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