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. [gelöst] Namen der Datenpunkte ändern

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.2k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    738

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.0k

[gelöst] Namen der Datenpunkte ändern

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
5 Beiträge 2 Kommentatoren 527 Aufrufe 1 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.
  • S Offline
    S Offline
    SevenUp
    schrieb am zuletzt editiert von SevenUp
    #1

    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);
    

    paul53P 1 Antwort Letzte Antwort
    0
    • S 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);
      

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2

      @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}});
          } 
      });
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Antwort Letzte Antwort
      1
      • S Offline
        S Offline
        SevenUp
        schrieb am zuletzt editiert von
        #3

        @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
        
        paul53P 1 Antwort Letzte Antwort
        0
        • S SevenUp

          @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
          
          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von paul53
          #4

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

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

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          S 1 Antwort Letzte Antwort
          1
          • paul53P paul53

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

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

            S Offline
            S Offline
            SevenUp
            schrieb am zuletzt editiert von
            #5

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

            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

            662

            Online

            32.6k

            Benutzer

            82.0k

            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