Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Alias aus Liste erstellen

    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

    Alias aus Liste erstellen

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

      Hallo zusammen,

      meine Alias erstelle ich aktuell per Skript, welches ich mir hier aus dem Forum kopiert habe.
      Bei einer neuen Erstellung eines Alias, muss ich dann immer die Daten wie Raum, Name und original DP eingeben.

      Skript:

      // Original Datenpunkt, der im Alias verwendet werden soll
      // Beispiel: fritzdect.0.DECT200_087610209660.temp, sonoff.0.SD_KZ_Lichterkette.POWER
      const original_datenpunkt = 'shelly.0.SHSW-25#C45BBE755073#1.Shutter.Open'
      
      // Alias Typ Definitionen
      // Schalter =     .STATE
      // Steckdosen =   .SET
      // Leistung =     .POWER
      // Verbrauch =    .POWER_SUM
      // Sensoren =     .ACTUAL
      // Temepraturen = .TEMP
      // Helligkeit =    .BRIGHTNESS
      // Rolladen =      .Level / .Pause / .Up / .Down
      
      
      // Aliasname Besipiel
      // Steckdosen =      SD_RAUMKÜRZEL_NAME.SET
      // Leistung =        SD_RAUMKÜRZEL_NAME.POWER
      // Fenstersensor =   FS_RAUMKÜRZEL_NAME.ACTUAL
      // Heizung =         HZ_RAUMKÜRZEL_NAME.TEMP
      // Heizung Aktuell = HZ_EAUMKÜRZEL_NAME.ACTUAL
      // Lichtschalter =   LS_SD_RAUMKÜRZEL_NAME.STATE
      // Rolloaden  =      RA_SZ_Velux.Level
      const alias_name = 'RA_SZ_Front.Up';
      
      // Raumname
      // Beispiele: Buero, Flur, Garten, Kinderzimmer, Kueche, Schlafzimmer, Wohnzimmer
      const raum_name = 'Schlafzimmer';
      
      
      
      // AB HIER NICHTS MEHR ÄNDERN
      
      // Original-Datenpunkt
      const idOrigin = original_datenpunkt; 
      // Optional: Status-Datenpunkt, wenn Kommando und Status getrennt.
      // Bei Nicht-Verwendung Leerstring '' zuweisen
      const idRead = '';
      
      // Alias-Datenpunkt
      const idAlias = raum_name+'.'+alias_name;
      var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom, raum, gewerk;
      
      // Folgende kommentieren, wenn keine Änderung der Eigenschaft erforderlich
      nameAlias = alias_name
      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);
      
      

      Ist es möglich das Ganze auch mit Hilfe einer Liste und einer Schleife zu machen?

      Die Liste könnte dann so aussehen:

      Raum;Name;OrigDP;Gewerk

      Ich komme aus der Windows / Powershell Ecke und bin daher in Javascript noch ganz am Anfang.

      Glasfaser 1 Reply Last reply Reply Quote 0
      • Glasfaser
        Glasfaser @Kuddel last edited by Glasfaser

        @kuddel

        ich nutze dieses Script :

        /**************************************************************
        Github - https://github.com/xCruziX/ioBroker-Creating-Alias/blob/master/CreateAlias.js
        				Changelog
        
        {} in Zeile 175 geändert 
        
        Version 1.1.5
        - added flag for correcting source id
        
        Version 1.1.4
        - fix error by using bCreateAliasPath and bConvertExistingPath (has no target 9/Error creating alias-path)
        
        Version 1.1.3
          - use callbacks in alias-path
          
        **************************************************************/
        
        /**************************************
        		Flags /
        		Variablen
        ***************************************/
        
        // typeAlias = 'boolean'; // oder 'number'
        // read = "val == 'Ein' ? true : false"; // Erkennung "Aus" --> false erfolgt automatisch  
        // write = "val ? 'Ein' : 'Aus'";
        // nameAlias = 'Licht Haustür';
        // role = 'switch';
        // desc = 'per Script erstellt';
        // 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)
         
         
        let bCreateAliasPath = false;  // If this flag is true, each folder is created seperately so rooms and functions can be assigned.
        
        /*
        Requirements: bCreateAliasPath == true
        If this flag is true, existing folders in the path will be converted so rooms and functions can be assigned.
        */
        let bConvertExistingPath = false;
        
        /*
        If the alias already exists and there is a difference between the new source id and the source id in the existing alias,
        the source id will be changed.
        This can be used for changing the source ids of an alias, for example for a devices change.
        */
        let bCorrectSource = false;
        
        /***************************************
        		Dont't change anything from here /
        		Ab hier nichts verändern
        ***************************************/
        
        let arEnum = [];
        let arId = [];
        let timeoutAssignEnum;
        var callbackAlias = undefined;
        function createAlias(idSrc, idDst,raum, gewerk,typeAlias, read, write, nameAlias, role, desc, min, max, unit, states) {
          if(!idDst.includes('alias.0.'))
              idDst = 'alias.0.' + idDst;
          if(!existsObject(idSrc))
          {
              log('Source-Id ' + idSrc +' does not exists.','warn');
              return;
          }
          
          // Create the object Path for alias id, 
          // so you can assign rooms and function to the parents
          var createAliasPath = (id) => {
               if(bCreateAliasPath){
                    let lisMergedIds = [];
                    let mergedId = 'alias.0';
                    id = id.replace(mergedId + '.', ''); // Remove prefix alias so it will not be changed
                    let split = id.split('.'); 
                    for(let i=0;i<split.length-1;i++){
                        mergedId += '.' + split[i];
                        lisMergedIds.push(mergedId);
                    }
                    
                    function path(){
                        if(lisMergedIds.length == 0) {// Zu Ende erstellt
                            alias();
                            return;
                        }
                        let tmpId = lisMergedIds[0];
                        lisMergedIds.splice(0,1); // entferne element
                        if(!existsObject(tmpId) || bConvertExistingPath){ // not exists
                            let obj;
                            if(existsObject(tmpId))
                                obj = getObject(tmpId);
                            else
                                obj = {};
        
                            let bApply = false;
                            if(obj != undefined){
                                if(obj.type == undefined || String(obj.type) != 'meta'){
                                    obj.type = 'meta';
                                    bApply = true;
                                }
                                if(obj.common == undefined){
                                    obj.common = {};
                                    obj.common.type = 'meta.folder';
                                    bApply = true;
                                }
                                else if(obj.common.type == undefined || String(obj.common.type) != 'meta.folder'){
                                    obj.common.type = 'meta.folder';
                                    bApply = true;
                                }
                                if(obj.native == undefined){
                                    obj.native = {};
                                    bApply = true;
                                }
                            }
                            else{
                                path();
                                log('Object is undefined');
                                return;
                            }
                            
        
                            if(bApply){
                                setObject(tmpId, obj, (err) =>{
                                if(!err){
                                    log('Created Alias-Path ' + tmpId);
                                    path();
                                }
                                else
                                    log('Error creating alias-path','error');
                            });
                            }
                            else
                                path();
                            
                        }
                    }
                    path();
               }
               else
                 alias();
          }
          
          
          function alias(){
              // Create alias object
              
                if(!existsObject(idDst)){
                    let obj = {};
                    obj.type = 'state';
                    obj.common = getObject(idSrc).common;
                    obj.common.alias = {};
                    obj.common.alias.id = idSrc;
                    if(typeAlias !== undefined) 
                        obj.common.type = typeAlias;
                    if(obj.common.read !== undefined) 
                        obj.common.alias.read = read;
                    if(obj.common.write !== undefined) 
                        obj.common.alias.write = write;
                    if(nameAlias !== undefined) 
                        obj.common.name = nameAlias;
                    if(role !== undefined) 
                        obj.common.role = role;
                    if(desc !== undefined) 
                        obj.common.desc = desc;
                    if(min !== undefined) 
                        obj.common.min = min;
                    if(max !== undefined) 
                        obj.common.max = max;
                    if(unit !== undefined) 
                        obj.common.unit = unit;
                    if(states !== undefined) 
                        obj.common.states = states;
        
                    obj.native = {};
                    obj.common.custom = {}; // Damit die Zuordnung zu iQontrol, Sql etc. nicht übernommen wird
                    log('Created Alias-State ' + idDst);
                    setObject(idDst, obj,(err) =>{ 
                        if(!err)
                            startAttach(); 
                        else
                            log('Error creating-alias','error');
                    });
                }
                else if(bCorrectSource){
                    // Check the Source ID
                    // log('Checking Sourcepath');
                    let obj = getObject(idDst);
                    if(obj != undefined && obj.common != undefined && obj.common.alias != undefined && obj.common.alias.id != undefined
                    && obj.common.alias.id != idSrc){
                        let before = obj.common.alias.id;
                        obj.common.alias.id = idSrc;
                        setObject(idDst, obj,(err) =>{ 
                            if(!err){
                                log(idDst + ': Correcting Sourcepath from \''  + before + '\' to \'' +  idSrc + '\'');
                                startAttach(); 
                            }
                            else
                                log('Error correcting path','error');
                            });
                    }
                    else
                        startAttach();
                }
                else
                    startAttach();
          }
          
          
          // Save ID and Enum (room or function)
          var attach = (id, enu,value) => {
              if(id.length == 0){
                  log('ID has lenght 0, can not attach to enum','warn');
                  return;
              }
              if(value.length == 0){
                  log('Value has lenght 0','warn');
                  return;
              }
            
              let sEnuId = 'enum.' + enu + '.' + value;
              if(enu.length > 0 && existsObject(sEnuId)) 
              {
                  let obj = getObject(sEnuId)
                  let members = obj.common.members;
                  if(!members.includes(id)){
                      arEnum.push(sEnuId);
                      arId.push(id);
                  }
              }
              else
           	      log('Can not find enum ' + sEnuId,'warn');
          }
         
         function startAttach(){
            let bRoom = raum !== undefined && raum.length > 0;
            let bGewerk = gewerk !== undefined && gewerk.length > 0;
            
            if(bRoom)
                attach(idDst,'rooms',raum);
            if(bGewerk)
                attach(idDst,'functions',gewerk);
            if(bRoom || bGewerk){
                    if(timeoutAssignEnum){
                        clearTimeout(timeoutAssignEnum);
                        timeoutAssignEnum = null;
                    }
                    timeoutAssignEnum = setTimeout(finishScript,100);
            }
         }
         
          createAliasPath(idDst);
        }
        
        function finishScript(){
        	assignEnums();
        }
        
        // Add the saved IDs to the rooms/functions
        function assignEnums(){
         if(arEnum.length == 0 || arId.length == 0){
              return;
         }
        
         if(arEnum.length != arId.length){
              log('Arrays have different size','error');
              return;
         }
         let mapEnumId = new Map();
         
         for(let i=0;i < arEnum.length; i++){
             let enu = arEnum[i];
             let id = arId[i];
             if(existsObject(id)){
            	 let obj = getObject(enu)
            	 let members;
            	 if(!mapEnumId.has(enu)){
            		 members = obj.common.members;
            		 mapEnumId.set(enu,members);
            	 }
            	 else
            		 members = mapEnumId.get(enu);    
            	 if(!members.includes(id)){
            		  log("Adding " + id + " to " + enu);
            		  members.push(id);
            	 }	      
             }
             else
                 log('Can not find Alias ' + id,'error');
         }
          
          function setMembers(members,enu,map){
              let obj = getObject(enu);
              obj.common.members = members;
              setObject(enu,obj);
          }
          mapEnumId.forEach(setMembers);
        }
        
        
        function createAliasWithObject({
            idSrc, 
            idDst, 
            raum = undefined, 
            gewerk = undefined, 
            typeAlias = undefined, 
            read = undefined,
            write = undefined,
            nameAlias = undefined, 
            role = undefined, 
            desc = undefined, 
            min = undefined, 
            max = undefined,
            unit = undefined, 
            states = undefined
        }) {
            createAlias(idSrc, idDst,raum, gewerk,typeAlias, read, write, nameAlias, role, desc, min, max, unit, states);
        }
        
        createAliasWithObject({
            idSrc: 'smartmeter.0.1-0:16_7_0__255.value',
            idDst: "alias.0.Strom.Smartmeter.value"
            
        });
        
        

        dort ist ganz unten eine Vorgabe , durch "function createAliasWithObject" geregelt

        createAliasWithObject({
        
            idSrc: 'smartmeter.0.1-0:16_7_0__255.value',
            idDst: "alias.0.Strom.Smartmeter.value"
          
        });
        

        jenachdem was du brauchts einfach erweitern :

        1 Reply Last reply Reply Quote 0
        • frana120500
          frana120500 last edited by frana120500

          @Glasfaser

          Ich bin bei JS leider nicht so firm. Könntest du bitte anhand eines Beispiels zeigen wie ich den 'idDst' erweitern muss wenn ich z.b. noch 'Raum' und 'Funktion' definieren will.

          Und wie trege ich da mehrere Source-DP und Aliase ein?

          Danke dir.

          Edit: ok, die erweiterung um Rolle, Raum etc. habe ich selber hinbekommen. Aber wie kann ich denn jetzt für mehrere DP gleichzeitig einen Alias anlegen?

          1. Edit: Ok, vergiss meine Nachfrage gg Habe es durch probieren selber hinbekommen.
          createAliasWithObject({
          
              idSrc: 'hm-rpc.0.OEQ04432621.1.STATE',
          
              idDst: 'alias.0.Terrasse.Lampe',
          
              raum: 'Terrasse',
          
              idSrc: 'hm-rpc.0.OEQ12213302.1.STATE',
          
              idDst: 'alias.0.Terrasse.Dose',
          
              raum: 'Terrasse'
          
          frana120500 1 Reply Last reply Reply Quote 0
          • frana120500
            frana120500 @frana120500 last edited by

            @Glasfaser

            Ich brauche doch noch deine Hilfe. Wenn ich es so mache wie im Beitrag davor, legt er mir immer den letzten Eintrag an (in dem fall den Alias "Dose"

            Wo mache ich da den Fehler?

            N 1 Reply Last reply Reply Quote 0
            • N
              Nordischerjung @frana120500 last edited by Nordischerjung

              @frana120500 Moin,

              so 100% weiß ich es auch nicht, aber versuch doch mal so:

              function createAliasWithObject({
              
                  idSrc,
                  idDst, 
                  raum = undefined,  */hier das undefined entfernen bei dem du es benötigst*/
                  gewerk = undefined, 
                  typeAlias = undefined, 
                  read = undefined,
                  write = undefined,
                  nameAlias = undefined, 
                  role = undefined, 
                  desc = undefined, 
                  min = undefined, 
                  max = undefined,
                  unit = undefined, 
                  states = undefined
              
              }) {
              
                  createAlias(idSrc, idDst,raum, gewerk,typeAlias, read, write, nameAlias, role, desc, min, max, unit, states);
              
              }
              
              
              createAliasWithObject({
              
                  idSrc: 'smartmeter.0.1-0:16_7_0__255.value',
                  idDst: "alias.0.Strom.Smartmeter.value"
                  raum: 'Wohnzimmer'  */und hier dan beschreiben*/
                  
              
              });
              

              siehe Beispiel raum

              frana120500 1 Reply Last reply Reply Quote 0
              • frana120500
                frana120500 @Nordischerjung last edited by

                @nordischerjung ja, das funktioniert. aber wie muss der Code aussehen, wenn ich einen zweiten Alias anlegen möchte? Dann legt er bei mir nur den letzten Eintrag an

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

                  ich habe das
                  = undefined
                  beim raum gelöscht, so dass oben nur noch steht

                  raum,
                  

                  der Code für den/das Alias sieht bei mir so aus

                  createAliasWithObject({
                  
                      idSrc: 'sonoff.0.Bewässerung.POWER1',
                  
                      idDst: 'alias.0.Garten.BewaesserungKreis1EIN',
                  
                      raum: 'Garten',
                  
                      idSrc: 'sonoff.0.Bewässerung.POWER2',
                  
                      idDst: 'alias.0.Garten.BewaesserungKreis1AUS',
                  
                      raum: 'Garten',
                  
                      idSrc: 'sonoff.0.Bewässerung.POWER3',
                  
                      idDst: 'alias.0.Garten.BewaesserungKreis2EIN',
                  
                      raum: 'Garten',
                  
                      idSrc: 'sonoff.0.Bewässerung.POWER4',
                  
                      idDst: 'alias.0.Garten.BewaesserungKreis2AUS',
                  
                      raum: 'Garten'
                  
                  Glasfaser 1 Reply Last reply Reply Quote 0
                  • Glasfaser
                    Glasfaser @frana120500 last edited by Glasfaser

                    @frana120500 sagte in Alias aus Liste erstellen:

                    Pro Alias 1 x , nicht mehere idSrc: da rein

                    createAliasWithObject({
                    
                    frana120500 1 Reply Last reply Reply Quote 0
                    • frana120500
                      frana120500 @Glasfaser last edited by

                      @glasfaser also so?

                      createAliasWithObject({
                       
                          idSrc: 'sonoff.0.Bewässerung.POWER1',
                       
                          idDst: 'alias.0.Garten.BewaesserungKreis1EIN',
                       
                          raum: 'Garten',
                      
                      createAliasWithObject({
                       
                          idSrc: 'sonoff.0.Bewässerung.POWER2',
                       
                          idDst: 'alias.0.Garten.BewaesserungKreis1AUS',
                       
                          raum: 'Garten',
                       
                      createAliasWithObject({
                          idSrc: 'sonoff.0.Bewässerung.POWER3',
                       
                          idDst: 'alias.0.Garten.BewaesserungKreis2EIN',
                       
                          raum: 'Garten',
                       
                      createAliasWithObject({
                      
                          idSrc: 'sonoff.0.Bewässerung.POWER4',
                       
                          idDst: 'alias.0.Garten.BewaesserungKreis2AUS',
                       
                          raum: 'Garten'
                      
                      Glasfaser 1 Reply Last reply Reply Quote 0
                      • Glasfaser
                        Glasfaser @frana120500 last edited by

                        @frana120500 sagte in Alias aus Liste erstellen:

                        createAliasWithObject({

                        So ,

                        createAliasWithObject({
                        
                            idSrc: 'sonoff.0.Bewässerung.POWER1',
                        
                            idDst: 'alias.0.Garten.BewaesserungKreis1EIN',
                        
                            raum: 'Garten'
                        });
                        

                        Komma am Ende raus und es schließen mit });

                        frana120500 1 Reply Last reply Reply Quote 0
                        • frana120500
                          frana120500 @Glasfaser last edited by

                          @glasfaser ahhhh, die Kleinigkeiten. Jetzt gehts es. und den Block wiederhole ich halt für jedes Alias. Funzt. Danke

                          K 1 Reply Last reply Reply Quote 0
                          • K
                            Kuddel @frana120500 last edited by

                            Ich habe es mittlerweile hinbekommen, aus einer JSON Liste mit allen originalen DPs und weiteren Infos wie Name, Raum etc. vollautomatisch alle Alias einrichten zu lassen.

                            Bin noch bis nächste Woche im Urlaub und kann dann mein Skript posten

                            frana120500 W 2 Replies Last reply Reply Quote 0
                            • frana120500
                              frana120500 @Kuddel last edited by

                              was ich mich noch frage: Ich habe das bisher über den Devices Adapter angelegt. Da kann ich ja recht einfach das Gerät austauschen wenn es defekt ist. Wie passe ich denn das Alias an wenn ich es mit dem Script hier erstellt habe?

                              Die Aliase die mit dem Script erstellt worden sind, tauchen zwar unter alias.0 auf, aber nicht im Devices Adapter. Muss ich da die RAW Daten vom Alias bearbeiten?

                              Oder steh ich grad auf dem Schlauch?

                              K 1 Reply Last reply Reply Quote 0
                              • K
                                Kuddel @frana120500 last edited by

                                @frana120500 ich kann meine per Skript erstellten Alias im Menü unter dem Punkt Geräte anpassen.

                                Alternativ den alten Alias löschen und neu erstellen

                                1 Reply Last reply Reply Quote 0
                                • crunchip
                                  crunchip Forum Testing Most Active last edited by

                                  @frana120500 sagte in Alias aus Liste erstellen:

                                  Muss ich da die RAW Daten vom Alias bearbeiten?

                                  theoretisch ja, würde ich sagen

                                  @frana120500 sagte in Alias aus Liste erstellen:

                                  den Devices Adapter

                                  ich verwende den alias Manager, ist flexibler

                                  1 Reply Last reply Reply Quote 0
                                  • W
                                    Whilk-and-Misky @Kuddel last edited by

                                    @Kuddel Kannst Du noch dein Script / Lösungsweg posten? Danke im Voraus 🙂

                                    K 1 Reply Last reply Reply Quote 0
                                    • K
                                      Kuddel @Whilk-and-Misky last edited by

                                      @whilk-and-misky

                                      Hier mein Skript. Es funktioniert in meinen Augen sehr gut, hat aber bestimmt noch Verbesserungspotential

                                      let geraete = [
                                         //Ankleide
                                         {"raum": "AZ","name": "Deckenlampe","gewerk": "LS","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"},
                                         {"raum": "AZ","name": "Velux","gewerk": "RA","dp": "klf200.0.products.2.targetPosition"},
                                         {"raum": "AZ","name": "Velux","gewerk": "FS","dp": "zigbee.0.xxxxxxxxxxxxxxxx.opened"},
                                         {"raum": "AZ","name": "Heizkoerper","gewerk": "HZ","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.4.SET_TEMPERATURE"},
                                         {"raum": "AZ","name": "Heizkoerper","gewerk": "TH","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.4.ACTUAL_TEMPERATURE"},
                                         
                                         //Badezimmer
                                         {"raum": "BZ","name": "Deckenlampe","gewerk": "LS","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"},
                                         {"raum": "BZ","name": "Spiegel","gewerk": "LS","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay1.Switch"},
                                         {"raum": "BZ","name": "Velux","gewerk": "RA","dp": "klf200.0.products.3.targetPosition"},
                                         {"raum": "BZ","name": "Velux","gewerk": "FS","dp": "zigbee.0.xxxxxxxxxxxxxxxx.opened"},
                                      
                                         //Buero
                                         {"raum": "BR","name": "Fenster-Links","gewerk": "DK","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"},
                                         {"raum": "BR","name": "Fenster-Rechts","gewerk": "DK","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"},
                                         {"raum": "BR","name": "Heizkoerper","gewerk": "HZ","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.4.SET_TEMPERATURE"},
                                         {"raum": "BR","name": "Heizkoerper","gewerk": "TH","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.4.ACTUAL_TEMPERATURE"},
                                         {"raum": "BR","name": "Deckenlampe","gewerk": "LS","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"},
                                         {"raum": "BR","name": "Fenster","gewerk": "RA","dp": "homepilot20.0.Actuator.1-xxxxxxxxxxxxxxxx.Position_inverted"},
                                         {"raum": "BR","name": "3D-Drucker","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"},
                                         {"raum": "BR","name": "Ladegeraet","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"},
                                         {"raum": "BR","name": "Ladegeraet","gewerk": "POWER","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Power"},
                                         {"raum": "BR","name": "PC-Monitore","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"},
                                         {"raum": "BR","name": "PC-Monitore","gewerk": "POWER","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Power"},
                                         {"raum": "BR","name": "PCs","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"},
                                         {"raum": "BR","name": "PCs","gewerk": "POWER","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Power"},
                                      
                                         
                                         //Flur
                                         {"raum": "FL","name": "Bewegungsmelder","gewerk": "BM","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.MOTION"},
                                         {"raum": "FL","name": "Briefkasten-Deckel","gewerk": "FS","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"},
                                         {"raum": "FL","name": "Haustuer","gewerk": "FS","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"},
                                         {"raum": "FL","name": "Aussenlampe","gewerk": "LS","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"},
                                         {"raum": "FL","name": "Lichterkette","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"},
                                         {"raum": "FL","name": "Nachtlicht","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"},
                                         
                                         //Garten
                                         {"raum": "GA","name": "Haustuer","gewerk": "BM","dp": "zigbee.0.xxxxxxxxxxxxxxxx.occupancy"},
                                         {"raum": "GA","name": "Kamera-Haustuer","gewerk": "BM","dp": "synology.0.SurveillanceStation.cameras.Haustuer.motionDetected"},
                                         {"raum": "GA","name": "Kamera-Balkon","gewerk": "BM","dp": "synology.0.SurveillanceStation.cameras.Balkon.motionDetected"},
                                         {"raum": "GA","name": "Parkplatz","gewerk": "BM","dp": "zigbee.0.xxxxxxxxxxxxxxxx.occupancy"},
                                         {"raum": "GA","name": "Pavillon","gewerk": "BM","dp": "zigbee.0.xxxxxxxxxxxxxxxx.occupancy"},
                                         {"raum": "GA","name": "Stufenbeleuchtung","gewerk": "HA","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"},
                                         {"raum": "GA","name": "Gartenbeleuchtung","gewerk": "HA","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"},
                                         {"raum": "GA","name": "Pavillon","gewerk": "HA","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.2.STATE"},
                                         {"raum": "GA","name": "Pavillon","gewerk": "HA","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.2.STATE"},
                                         {"raum": "GA","name": "Whirlpool","gewerk": "SD","dp": "fritzdect.0.DECT_xxxxxxxxxxxxxxxx.state"},
                                         {"raum": "GA","name": "Whirlpool","gewerk": "POWER","dp": "fritzdect.0.DECT_xxxxxxxxxxxxxxxx.power"},
                                         {"raum": "GA","name": "Whirlpool","gewerk": "POWER_SUM","dp": "fritzdect.0.DECT_xxxxxxxxxxxxxxxx.energy"},
                                         {"raum": "GA","name": "Whirlpool","gewerk": "TH","dp": "shelly.0.xxxxxxxxxxxxxxxx.ext.temperatureC1"},
                                         
                                         //Kinderzimmer
                                         {"raum": "KZ","name": "Balkontuer","gewerk": "DK","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"},
                                         {"raum": "KZ","name": "Heizkoerper","gewerk": "HZ","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.4.SET_TEMPERATURE"},
                                         {"raum": "KZ","name": "Heizkoerper","gewerk": "TH","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.4.ACTUAL_TEMPERATURE"},
                                         {"raum": "KZ","name": "Front","gewerk": "RA","dp": "shelly.0.xxxxxxxxxxxxxxxx.Shutter.Position"},
                                         {"raum": "KZ","name": "Front","gewerk": "UP","dp": "shelly.0.xxxxxxxxxxxxxxxx.Shutter.Open"},
                                         {"raum": "KZ","name": "Front","gewerk": "DOWN","dp": "shelly.0.xxxxxxxxxxxxxxxx1.Shutter.Close"},
                                         {"raum": "KZ","name": "Front","gewerk": "STOP","dp": "shelly.0.xxxxxxxxxxxxxxxx.Shutter.Pause"},
                                         {"raum": "KZ","name": "Velux","gewerk": "RA","dp": "klf200.0.products.1.targetPosition"},
                                         {"raum": "KZ","name": "Lichterkette","gewerk": "SD","dp": "sonoff.0.SD_KZ_Lichterkette.POWER"},
                                         {"raum": "KZ","name": "Velux","gewerk": "FS","dp": "zigbee.0.xxxxxxxxxxxxxxxx.opened"},
                                         {"raum": "KZ","name": "Front","gewerk": "POWER","dp": "shelly.0.xxxxxxxxxxxxxxxx.Shutter.Power"},
                                         
                                      
                                         //Keller
                                         {"raum": "KE","name": "ESX-NUC","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"},
                                         {"raum": "KE","name": "ESX-NUC","gewerk": "POWER","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Power"},
                                         {"raum": "KE","name": "ESX-NUC-Backup","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"},
                                         {"raum": "KE","name": "ESX-NUC-Backup","gewerk": "POWER","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Power"},    
                                         {"raum": "KE","name": "ESXP01","gewerk": "SD","dp": "fritzdect.0.xxxxxxxxxxxxxxxx.state"},
                                         {"raum": "KE","name": "ESXP01","gewerk": "POWER","dp": "fritzdect.0.xxxxxxxxxxxxxxxx.power"},
                                         {"raum": "KE","name": "ESXP02","gewerk": "SD","dp": "fritzdect.0.xxxxxxxxxxxxxxxx.state"},
                                         {"raum": "KE","name": "ESXP02","gewerk": "POWER","dp": "fritzdect.0.xxxxxxxxxxxxxxxx.power"},
                                         {"raum": "KE","name": "Trockner","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"},
                                         {"raum": "KE","name": "Trockner","gewerk": "POWER","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Power"},
                                         {"raum": "KE","name": "USV","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"},
                                         {"raum": "KE","name": "USV","gewerk": "POWER","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Power"},
                                         {"raum": "KE","name": "Waschmaschine","gewerk": "SD","dp": "xxxxxxxxxxxxxxxx.Relay0.Switch"},
                                         {"raum": "KE","name": "Waschmaschine","gewerk": "POWER","dp": "xxxxxxxxxxxxxxxx.Relay0.Power"},
                                         
                                         //Kueche
                                         {"raum": "KU","name": "Kuechenfenster","gewerk": "FS","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"},
                                         {"raum": "KU","name": "Heizkoerper","gewerk": "HZ","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.4.SET_TEMPERATURE"},
                                         {"raum": "KU","name": "Heizkoerper","gewerk": "TH","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.4.ACTUAL_TEMPERATURE"},
                                         {"raum": "KU","name": "Deckenlampe","gewerk": "LS","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"},
                                         {"raum": "KU","name": "Schrankbeleuchtung","gewerk": "LS","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"},
                                         {"raum": "KU","name": "Fenster","gewerk": "RA","dp": "homepilot20.0.Actuator.2-xxxxxxxxxxxxxxxx.Position_inverted"},
                                         {"raum": "KU","name": "Geschirrspueler","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"},
                                         {"raum": "KU","name": "Geschirrspueler","gewerk": "POWER","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Power"},
                                         
                                         //Schlafzimmer
                                         {"raum": "SZ","name": "Balkontuer","gewerk": "DK","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"},
                                         {"raum": "SZ","name": "Heizkoerper","gewerk": "HZ","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.4.SET_TEMPERATURE"},
                                         {"raum": "SZ","name": "Heizkoerper","gewerk": "TH","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.4.ACTUAL_TEMPERATURE"},
                                         {"raum": "SZ","name": "Deckenlampe","gewerk": "LS","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"},
                                         {"raum": "SZ","name": "Velux","gewerk": "RA","dp": "klf200.0.products.0.targetPosition"},
                                         {"raum": "SZ","name": "Front","gewerk": "RA","dp": "shelly.0.xxxxxxxxxxxxxxxx.Shutter.Position"},
                                         {"raum": "SZ","name": "Front","gewerk": "UP","dp": "shelly.0.xxxxxxxxxxxxxxxx.Shutter.Open"},
                                         {"raum": "SZ","name": "Front","gewerk": "DOWN","dp": "shelly.0.xxxxxxxxxxxxxxxx.Shutter.Close"},
                                         {"raum": "SZ","name": "Front","gewerk": "STOP","dp": "shelly.0.xxxxxxxxxxxxxxxx.Shutter.Pause"},
                                         {"raum": "SZ","name": "Front","gewerk": "POWER","dp": "shelly.0.xxxxxxxxxxxxxxxx.Shutter.Power"},
                                         {"raum": "SZ","name": "Balkon","gewerk": "SD","dp": "fritzdect.0.xxxxxxxxxxxxxxxx.state"},
                                         {"raum": "SZ","name": "SchlafzimmerTV","gewerk": "SD","dp": "fritzdect.0.xxxxxxxxxxxxxxxx.state"},
                                         {"raum": "SZ","name": "SchlafzimmerTV","gewerk": "POWER","dp": "fritzdect.0.xxxxxxxxxxxxxxxx.power"},
                                         {"raum": "SZ","name": "Kommode","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"},
                                         {"raum": "SZ","name": "Lichterkette","gewerk": "SD","dp": "sonoff.0.SD_SZ_Lichterkette.POWER"},
                                         {"raum": "SZ","name": "Balkon","gewerk": "TH","dp": "fritzdect.0.xxxxxxxxxxxxxxxx.celsius"},
                                         {"raum": "SZ","name": "Velux","gewerk": "FS","dp": "zigbee.0.xxxxxxxxxxxxxxxx.opened"},
                                      
                                         
                                         //Wohnzimmer
                                         {"raum": "WZ","name": "Front-Links","gewerk": "FS","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"},
                                         {"raum": "WZ","name": "Front-Rechts","gewerk": "FS","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"},
                                         {"raum": "WZ","name": "Seite-Links","gewerk": "FS","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"},
                                         {"raum": "WZ","name": "Seite-Rechts","gewerk": "FS","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"},
                                         {"raum": "WZ","name": "Heizkoerper","gewerk": "HZ","dp": "hm-rpc.1.INT0000001.1.SET_TEMPERATURE"},
                                         {"raum": "WZ","name": "Heizkoerper","gewerk": "TH","dp": "hm-rpc.1.INT0000001.1.ACTUAL_TEMPERATURE"},
                                         {"raum": "WZ","name": "Heizkoerper-Seite","gewerk": "TH","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.4.ACTUAL_TEMPERATURE"},
                                         {"raum": "WZ","name": "Heizkoerper-Front","gewerk": "TH","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.4.ACTUAL_TEMPERATURE"},
                                         {"raum": "WZ","name": "Esstischlampe","gewerk": "LS","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.LEVEL"},
                                         {"raum": "WZ","name": "Wohnzimmerlampe","gewerk": "LS","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.LEVEL"},
                                         {"raum": "WZ","name": "Front-Links","gewerk": "RA","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.LEVEL"},
                                         {"raum": "WZ","name": "Front-Rechts","gewerk": "RA","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.LEVEL"},
                                         {"raum": "WZ","name": "Leinwand","gewerk": "RA","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.LEVEL"},
                                         {"raum": "WZ","name": "Seite","gewerk": "RA","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.LEVEL"},
                                         {"raum": "WZ","name": "AV-Receiver","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"},
                                         {"raum": "WZ","name": "FireTV","gewerk": "SD","dp": "fritzdect.0.xxxxxxxxxxxxxxxx.state"},
                                         {"raum": "WZ","name": "Front","gewerk": "SD","dp": "sonoff.0.SD_WZ_Front.POWER"},
                                         {"raum": "WZ","name": "Kodi","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"},
                                         {"raum": "WZ","name": "Kodi","gewerk": "POWER","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Power"},
                                         {"raum": "WZ","name": "Lichtkugeln","gewerk": "SD","dp": "shelly.xxxxxxxxxxxxxxxx.Relay0.Switch"},
                                         {"raum": "WZ","name": "PS-4-Luefter","gewerk": "SD","dp": "fritzdect.0.xxxxxxxxxxxxxxxx.state"},
                                         {"raum": "WZ","name": "PS-4-Luefter","gewerk": "TH","dp": "fritzdect.0.xxxxxxxxxxxxxxxx.celsius"},
                                         {"raum": "WZ","name": "Schriftleuchte","gewerk": "SD","dp": "zigbee.0.xxxxxxxxxxxxxxxx.state"},
                                         {"raum": "WZ","name": "Seite","gewerk": "SD","dp": "sonoff.0.SD_WZ_Seite.POWER"},
                                         {"raum": "WZ","name": "TV","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"},
                                         {"raum": "WZ","name": "Tablet","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"},
                                         {"raum": "WZ","name": "Wii","gewerk": "SD","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.STATE"},
                                         
                                         	
                                      ];
                                      
                                      
                                      //Jedes Gerät abarbeiten
                                      geraete.forEach(geraet => {
                                         //Raumname definieren
                                         if(geraet.raum == "AZ"){var raumname = "Ankleide"};
                                         if(geraet.raum == "BZ"){var raumname = "Badezimmer"};
                                         if(geraet.raum == "BR"){var raumname = "Buero"};
                                         if(geraet.raum == "FL"){var raumname = "Flur"};
                                         if(geraet.raum == "GA"){var raumname = "Garten"};
                                         if(geraet.raum == "KE"){var raumname = "Keller"};
                                         if(geraet.raum == "KZ"){var raumname = "Kinderzimmer"};
                                         if(geraet.raum == "KU"){var raumname = "Kueche"};
                                         if(geraet.raum == "SZ"){var raumname = "Schlafzimmer"};
                                         if(geraet.raum == "WZ"){var raumname = "Wohnzimmer"};
                                      
                                         //Statuskuerzel definieren
                                         if(geraet.gewerk == "BM") {var statuskuerzel = "ACTUAL"; var gewerk = "BM"};
                                         if(geraet.gewerk == "DK") {var statuskuerzel = "ACTUAL"; var gewerk = "DK"};
                                         if(geraet.gewerk == "FS") {var statuskuerzel = "ACTUAL"; var gewerk = "FS"};
                                         if(geraet.gewerk == "HA") {var statuskuerzel = "STATE"; var gewerk = "HA"};
                                         if(geraet.gewerk == "HZ") {var statuskuerzel = "TEMP"; var gewerk = "HZ"};
                                         if(geraet.gewerk == "LS") {var statuskuerzel = "STATE"; var gewerk = "LS"};
                                         if(geraet.gewerk == "RA") {var statuskuerzel = "LEVEL"; var gewerk = "RA"};
                                         if(geraet.gewerk == "SD") {var statuskuerzel = "STATE"; var gewerk = "SD"};
                                         if(geraet.gewerk == "TH") {var statuskuerzel = "TEMP"; var gewerk = "TH"};
                                      
                                         //Sonderstatuskuerzel definieren
                                         if(geraet.gewerk == "POWER") {var statuskuerzel = "POWER"; var gewerk = "SD"};
                                         if(geraet.gewerk == "POWER_SUM") {var statuskuerzel = "POWER_SUM"; var gewerk = "SD"};
                                         if(geraet.gewerk == "DOWN") {var statuskuerzel = "DOWN"; var gewerk = "RA"};
                                         if(geraet.gewerk == "UP") {var statuskuerzel = "UP"; var gewerk = "RA"};
                                         if(geraet.gewerk == "STOP") {var statuskuerzel = "STOP"; var gewerk = "RA"};
                                         if(geraet.gewerk == "POWER" && geraet.dp.match(/^.*.Shutter.Power$/)) {var statuskuerzel = "POWER"; var gewerk = "RA"};
                                      
                                      
                                         //Variablen für Erstellung definieren
                                         const original_datenpunkt = geraet.dp;
                                         const alias_name =  gewerk + '_' + geraet.raum + '_' + geraet.name + '.' + statuskuerzel;
                                         const raum_name = raumname;
                                      
                                      
                                         /////////////////////////////////
                                         // AB HIER NICHTS MEHR ÄNDERN  //
                                         /////////////////////////////////
                                      
                                         // Original-Datenpunkt
                                         const idOrigin = original_datenpunkt; 
                                         // Optional: Status-Datenpunkt, wenn Kommando und Status getrennt.
                                         // Bei Nicht-Verwendung Leerstring '' zuweisen
                                         const idRead = '';
                                          
                                         // Alias-Datenpunkt
                                         const idAlias = raum_name+'.'+alias_name;
                                         var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom, raum, gewerk;
                                          
                                         // Folgende kommentieren, wenn keine Änderung der Eigenschaft erforderlich
                                         nameAlias = alias_name
                                         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{
                                            if(!existsState(idDst)){ 
                                               console.log('alias.0.' + raumname + "." + alias_name + ' wird erstellt')
                                         	  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);
                                         
                                      });
                                      

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

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      395
                                      Online

                                      31.8k
                                      Users

                                      80.0k
                                      Topics

                                      1.3m
                                      Posts

                                      javascript
                                      6
                                      17
                                      981
                                      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