Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Namen der Datenpunkte ändern

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [gelöst] Namen der Datenpunkte ändern

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

      Ich habe viele gleiche Geräte in unterschiedlichen Räumen, z.B. die Fenstersensoren. Dafür habe ich Alias(e?) erstellt. Die Namen der Datenpunkte sind nun bei allen Geräten identisch:
      Bild 2023-08-0215_49_52-ob5zivw.png auf abload.de

      Bei der Verwendung der DP in Blockly sieht man somit nicht, um welche Geräte es sich handelt:
      Bild 2023-08-0214_43_05-ja3gegx.png auf abload.de

      Nun würde ich gerne die Namen der DP automatisch festlegen lassen, nach dem Schema "Name des Ordners + letzter Teil der DP-ID", also z.B. "Fenster Schlafzimmer open".

      Ich war mir sicher, dass ich einen Skript dafür schon mal gesehen habe. Finde mit der Suche es aber nicht. Mit ChatGPT hatte ich es auch versucht, es referenziert aber immer auf etwas, was beim ioBroker nicht existiert (hier: ReferenceError: getObjectList is not defined):

      const adapter = 'alias.0';
      const folderPath = 'Fenster.SLZ';
      
      // Funktion, um den Namen des States zu extrahieren
      function getStateName(stateId) {
        const parts = stateId.split('.');
        return parts[parts.length - 1]; // Gibt den letzten Teil der State-ID zurück
      }
      
      // Funktion, um den Namen des Ordners zu extrahieren
      function getFolderName(stateId) {
        const parts = stateId.split('.');
        parts.pop(); // Entfernt den letzten Teil der State-ID
        return parts.join('.'); // Kombiniert die verbleibenden Teile zurück zu einer State-ID
      }
      
      // Funktion zum Abrufen der Liste aller vorhandenen Objekte
      async function getAllObjects() {
        return new Promise((resolve, reject) => {
          getObjectList({ include_docs: true }, (err, objects) => {
            if (err) {
              reject(err);
            } else {
              resolve(objects);
            }
          });
        });
      }
      
      // Funktion zum Umbenennen der States im Ordner
      async function renameStatesInFolder(folderPath) {
        try {
          const objects = await getAllObjects();
      
          for (const obj of objects) {
            const stateId = obj._id;
            const state = obj.doc;
            
            if (state.type === 'state' && stateId.startsWith(`${adapter}.${folderPath}`)) {
              const stateName = getStateName(stateId);
              const folderName = getFolderName(stateId);
              const newDisplayName = `${folderName}.${stateName}`;
      
              // Neuen Namen für den Zustand setzen
              await setStateAsync(`${adapter}.${newDisplayName}`, state.common.val);
      
              console.log(`Der State "${stateId}" wurde erfolgreich in "${newDisplayName}" umbenannt.`);
            }
          }
        } catch (err) {
          console.error(`Fehler beim Umbenennen der States: ${err}`);
        }
      }
      
      // Aufruf der Funktion zum Umbenennen aller States im Ordner
      renameStatesInFolder(folderPath);
      

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

        @sevenup

        Versuche mal

        const idsFenster = $('alias.0.Fenster.*');
        
        idsFenster.each(function(id) {
            let nameEnd = getObject(id).common.name;
            let idDev = id.substring(0, id.lastIndexOf('.'));
            let Name = getObject(idDev).common.name;
            if(!nameEnd.includes(Name)) {
                Name = Name + ' ' + nameEnd;
                extendObject(id, {common: {name: Name}});
            } 
        });
        
        1 Reply Last reply Reply Quote 1
        • S
          SevenUp last edited by

          @paul53 Danke!
          Skript läuft ohne Fehler durch und der neue Name wird auch richtig zusammengesetzt. Die DP haben aber weiterhin die alten Namen. (Object-Tab im Browser aktualisiert, Baum aktualisiert, Object-Tab in einem anderen Browser geöffnet)

          18:05:24.395	info	javascript.0 (3254680) script.js.Sonstiges.States_umbenennen: Name: Fenster Wohnzimmer Links low_battery für ID: alias.0.Fenster.WOZ.Links.low_battery
          18:05:24.395	info	javascript.0 (3254680) script.js.Sonstiges.States_umbenennen: Name: Fenster Wohnzimmer Links open für ID: alias.0.Fenster.WOZ.Links.open
          18:05:24.395	info	javascript.0 (3254680) script.js.Sonstiges.States_umbenennen: Name: Fenster Wohnzimmer Links reachable für ID: alias.0.Fenster.WOZ.Links.reachable
          18:05:24.395	info	javascript.0 (3254680) script.js.Sonstiges.States_umbenennen: Name: Fenster Wohnzimmer Rechts low_battery für ID: alias.0.Fenster.WOZ.Rechts.low_battery
          18:05:24.395	info	javascript.0 (3254680) script.js.Sonstiges.States_umbenennen: Name: Fenster Wohnzimmer Rechts open für ID: alias.0.Fenster.WOZ.Rechts.open
          18:05:24.395	info	javascript.0 (3254680) script.js.Sonstiges.States_umbenennen: Name: Fenster Wohnzimmer Rechts reachable für ID: alias.0.Fenster.WOZ.Rechts.reachable
          
          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @SevenUp last edited by paul53

            @sevenup sagte: Die DP haben aber weiterhin die alten Namen.

            Ist "setObject" in der Konfiguration der Javascript-Instanz freigegeben?

            S 1 Reply Last reply Reply Quote 1
            • S
              SevenUp @paul53 last edited by

              @paul53 das wusste ich nicht. Nun geht es.
              Wunderbar, vielen Dank!

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

              Support us

              ioBroker
              Community Adapters
              Donate

              463
              Online

              31.7k
              Users

              79.8k
              Topics

              1.3m
              Posts

              2
              5
              328
              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