Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [Vorlage] Alias-Erstellung: enum-alias-devices

    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

    [Vorlage] Alias-Erstellung: enum-alias-devices

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

      Hallo zusammen,

      ich bin kürzlich vom deconz auf den zigbee Adapter umgestiegen und habe mich über den Aufwand beim Anpassen der Geräte-IDs in meinen Skripten und in VIS geärgert. Für die Zukunft wollte ich auch zur besseren Lesbarkeit nur noch mit alias Geräten arbeiten.
      Nach ein wenig Recherche bin ich erstmal auf den alias Adapter gestoßen, der in der Konfiguration aber nicht das bietet, was ich mir vorstelle. Aufbauend auf dem createAlias script von @paul53 und dem alias Adapter ist nun ein Skript entstanden, welches ich hier gerne teilen möchte - vielleicht hat der eine oder andere da Bedarf.

      Was das Skript macht:
      das Skript schaut in eine Aufzählung "aliasdevices" und generiert für alle Gruppen, die dort eingetragen sind, alias-Geräte. States werden dabei komplett übernommen.

      Die ID des neuen Gerätes ist alias.0.<enumGroup>.<aliasID>
      enumGroup: Gerätegruppe in der der Aufzählung "aliasDevices"
      aliasID: kommt aus originalen Gerätenamen: z.b. "LED124x12 [<aliasID>]
      -> d.h. im Devicenamen wird nach der zukünftigen alias-ID gesucht, die in [] eingeschlossen ist.

      Aus den folgenden Geräten...
      2268bcf2-0215-4fb5-97bb-5a8866ac9076-grafik.png

      und dieser Aufzählung....
      3bdc0427-0d4e-4af5-a57d-fb2bebaaf0d1-grafik.png

      werden diese alias Geräte angelegt:
      6b1159c8-5aeb-4f38-ac5e-07eca573c0a3-grafik.png

      Das Skript kann leicht an andere Wünsche angepasst werden (z.B. automatische Hierarchie basierend auf Funktionen oder Räumen).

      Vielleicht nützt es dem einen oder anderen, dann viel Spass damit 🙂

      /* -----------------------------------------------------------------------
      enum-alias-devices by cpio, 2020
      
      This script creates alias devices in alias.0.
      
      includes createAlias from paul53 found here: https://forum.iobroker.net/topic/27295/vorlage-alias-per-skript-erzeugen
      (part of this script)
      
      Prerequsites:
      - alias adapter installed
      - device is listed in a enumeration called "aliasdevices"
      - device name contains "[<aliasID>]" where <aliasID> is a unique identifier
      
      Enum group can contain "." which will lead to subfoldr in alias.0, e.g.
      
      Example:
      - Enum :"aliasDevices"
      - Enum group: "kitchen.light"
      - group contains a device with common.name: "LED12455 [kitchenlight1]"
      
      Script will create alias a device with
      - id: "alias.0.kitchen.light.kitchenlight1"
      - common.name: "LED12455 [kitchenlight]"
      
      ----------------------------------------------------------------------- */
      
      var DEVICES ={}; // srcId -> targetId
      
      
      var devEnum = getEnums("aliasdevices");
      //loop through all groups in aliasdevices enum:
      for (var idxGroup=0;idxGroup<devEnum.length;idxGroup++){
          var aliasGroup = devEnum[idxGroup].name;
          console.log ("Group: " + aliasGroup);
      
          var members=devEnum[idxGroup].members;
          // loop through all members of enum group:
          for (var idxMember=0; idxMember<members.length;idxMember++){
              var srcId = members[idxMember];
              var srcObj = getObject(srcId);       
              //console.log ("src: " + srcId + " --- " + srcObj.common.name);
      
              // try to indentify target id from src name:
              var srcName = srcObj.common.name;
              const regex = new RegExp("\[.+\]");
      
              if (regex.test(srcName)){
                  var destId = srcName;
                  //destId=destId.replace(/(^[^/[]+[)/, "---");
                  destId=destId.replace(/([^[]+[)/, "");
                  destId=destId.replace(/(])/, "");
                  //console.log (prefix + " " + devName);
                  destId = "alias.0."+aliasGroup+"."+destId;
                  console.log (srcId + ": alias id found: "+ destId);
                  DEVICES[srcId] = destId;
                  setObject(destId, {common: {name: srcName}});
      
              }else {
                  console.log (srcId + ": Skipped. No matching id found in name.");//cp section in raw data found."
                  continue;
              }
      
          }
      }
          
      for (var key in DEVICES){
          var srcId = key;//devAlias[idx].srcId;
          var srcObj = getObject(srcId);
          var dstId = DEVICES[key];
          
          //https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#getobject
          console.log("");
          console.log("#######Creating Alias for: " + srcName)
          $("[id="+srcId+"]").each(function(id, i) {
              var aState=id.split (".");
              var SRC = id;
              var DST = dstId+"."+aState[aState.length-1];
              console.log("- Creating Alias: - srcId: " + SRC + " dstId:" +DST)
              createAlias(SRC, DST);
      
          });
      
          
      }
      
      // --------------------------------------------------------------------------------------------
      // CREATE ALIAS SCRIPT AUS DEM IOBROKER FORUM
      
      
      var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom;
      
      // Folgende kommentieren, wenn keine Änderung der Eigenschaft erforderlich
      // nameAlias = 'Licht Haustür';
      // desc = 'per Script erstellt';
      // typeAlias = 'boolean'; // oder 'number'
      // read = "val == 'Ein' ? true : false"; // Erkennung "Aus" --> false erfolgt automatisch  
      // write = "val ? 'Ein' : 'Aus'";
      // 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, telegram, mqtt-client, ...
      
       
      
      function createAlias(idSrc, idDst) {
      
         if(existsState(idDst)) log(idDst + ' schon vorhanden !', 'warn');
         else {
            var obj = {};
            obj.type = 'state';
            obj.common = getObject(idSrc).common;
            obj.common.alias = {};
            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);
         } 
      }
       
      
      
      
      
      
      
      Kodijack 1 Reply Last reply Reply Quote 0
      • Kodijack
        Kodijack @cpio last edited by

        @cpio Erstmal danke fürs Teilen, sehr nett!

        Mir fehlte irgendwie eine Funktion das Ganze etwas zu vereinfachen/automatisieren.
        Leider will das Script nicht so recht bei mir obwohl ich meine deiner Anleitung brav gefolgt zu sein.

        665ce41e-ca2e-43d1-950b-4d65566c2357-image.png

        Enum "aliasdevices" ist vorhanden, testweise einen Raum mit 3 Lichtern/Schaltern hinzugefügt.

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

        Support us

        ioBroker
        Community Adapters
        Donate

        955
        Online

        31.8k
        Users

        80.0k
        Topics

        1.3m
        Posts

        2
        2
        891
        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