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. Skripten / Logik
  4. JavaScript
  5. [Vorlage] Alias-Erstellung: enum-alias-devices

NEWS

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.2k

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

Geplant Angeheftet Gesperrt Verschoben JavaScript
2 Beiträge 2 Kommentatoren 917 Aufrufe 7 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.
  • C Offline
    C Offline
    cpio
    schrieb am zuletzt editiert von cpio
    #1

    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);
       } 
    }
     
    
    
    
    
    
    
    KodijackK 1 Antwort Letzte Antwort
    0
    • C 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);
         } 
      }
       
      
      
      
      
      
      
      KodijackK Offline
      KodijackK Offline
      Kodijack
      schrieb am zuletzt editiert von
      #2

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

      829

      Online

      32.4k

      Benutzer

      81.5k

      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