Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Zusammenführen von enum.functions

    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] Zusammenführen von enum.functions

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

      Moin Leute,

      gibt es eine Möglichkeit, per Script, enum.functions zusammenzuführen?

      Hintergrund, ich habe z.B. enum.functions.Licht (von Homematic) und enum.functions.light. Ich würde jetzt gerne alle Lampen (Objekte) in enum.functions.Licht schieben ohne alle händisch anzupassen, da es über 30 Stellen wären.

      Habt ihr Ideen?

      Gruß,
      Mark

      paul53 1 Reply Last reply Reply Quote 0
      • E
        ente34 last edited by

        @mark77
        Hier ein Script, das 0_userdata.0.lampen.state_1 und _2 anlegt.
        Schau dir mal addToEnum() an

        'use strict';
        
        async function addToEnum(enumName, newStateId) {
            let myEnum = await getObjectAsync(enumName);
            if (myEnum) {
                let pos = myEnum.common.members.indexOf(newStateId);
                if (pos === -1) {
                    myEnum.common.members.push(newStateId);
                    myEnum.from = "system.adapter." + "0";
                    myEnum.ts = new Date().getTime();
                    setObjectAsync(enumName, myEnum);
                }
            }
        }
        
        async function CreateStates() {
            try {
                for (let i = 1; i < 3; i++) {
                    const id = `0_userdata.0.lampen.state_${i}`;
                    if (await existsStateAsync(id)) {
                        log(`State ${id} already exists`, 'warn');
                    } else {
                        await createStateAsync(id, { type: 'boolean', read: true, write: true, role: 'switch', def: false, smartName: { smartType: "LIGHT" } });
                        await addToEnum("enum.functions.light", id);
                        await addToEnum("enum.rooms.living_room", id);
                        const stateObject = await getStateAsync(id);
                        if (stateObject && (stateObject.val || stateObject.val === false)) {
                            log(`State '${id}' created, value: '${stateObject.val}'`)
                        } else {
                            log(`Unable to get state value of '${id}'.`, 'error');
                        }
                    }
                }
            } catch (error) {
                log(`Unexpected error - ${error}`, 'error');
            }
        
        }
        
        CreateStates();
        
        1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @mark77 last edited by

          @mark77 sagte: alle Lampen (Objekte) in enum.functions.Licht schieben

          Versuche es mal so (nicht getestet):

          const idslight = getObject('enum.functions.light').common.members;
          const objLicht = getObject('enum.functions.Licht');
          
          for(let i = 0; i < idslight.length; i++) {
              objLicht.common.members.push(idslight[i]); 
          }
          
          setObject('enum.functions.Licht', objLicht);
          
          M 2 Replies Last reply Reply Quote 0
          • M
            mark77 last edited by

            Ich danke euch, schaue ich mir mal an!

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

              @paul53 deine Lösung könnte funktionieren, zumindest sieht es als Trockenlauf (als Log Ausgabe) gut aus.
              Ich bin akllerdings den Weg gegangen, einfach in der Homematic Licht in lights umzubenennen.

              Wald, Büme, ich...

              Danke für eure Bemühungen!

              Gruß,
              Mark

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

                @paul53 funktioniert bestens.

                Habe das Script nur ein wenig angepasst, damit man nicht vergisst, die letzte Zeile zu ändern, sonst ist das Chaos groß 🙄 🙄 🙄

                var oldNames = 'enum.rooms.kleiner_flur';
                var newNames = 'enum.rooms.kleiner Flur'; 
                
                const idslight = getObject(oldNames).common.members;
                const objLicht = getObject(newNames);
                
                 
                
                for(let i = 0; i < idslight.length; i++) {
                
                    objLicht.common.members.push(idslight[i]); 
                
                    
                
                }
                
                setObject(newNames, objLicht);
                
                

                DANKE!

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

                  @mark77 sagte: damit man nicht vergisst, die letzte Zeile zu ändern

                  Etwas allgemeiner gehalten:

                  const idSrc = 'enum.functions.light';
                  const idDst = 'enum.functions.Licht';
                  
                  const membersSrc = getObject(idSrc).common.members;
                  const objDst = getObject(idDst);
                  
                  for(let i = 0; i < membersSrc.length; i++) {
                      objDst.common.members.push(membersSrc[i]); 
                  }
                  
                  setObject(idDst, objDst);
                  
                  1 Reply Last reply Reply Quote 1
                  • First post
                    Last post

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  525
                  Online

                  31.8k
                  Users

                  80.0k
                  Topics

                  1.3m
                  Posts

                  javascript
                  3
                  7
                  382
                  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