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. ioBroker Allgemein
  4. Zigbee2MQTT Name als ID verwenden

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    553

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.7k

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

Zigbee2MQTT Name als ID verwenden

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
5 Beiträge 3 Kommentatoren 2.1k Aufrufe 2 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.
  • G Offline
    G Offline
    Gaunt
    schrieb am zuletzt editiert von
    #1

    Hallo Zusammen,

    ich habe Zigbee2MQTT im Einsatz inklusiv dem dazugehörigen Adapter.

    Innerhalb von Zigbee2MQTT habe ich meinen Geräten Namen gegeben. Diese Namen werden in den Objekten unter MQTT auch korrekt angezeigt. Inklusiv der Daten die diese Geräte senden (Das Gerät mit der Endnummer b745 wurde nicht benannt).
    73bfa9c4-7692-40d6-af3a-38bca2ee72a4-image.png

    Wenn ich nun in die geparsten Daten aus dem Zigbee2MQTT Adapter Wechsel, wird in der Spalte "ID" die ID des Zigbee Gerätes angezeigt und unter "Name" der Name dem diesem Gerät zugewiesen wurde.
    1ee277a2-8475-448a-a354-b0a5a5ac013e-image.png .

    Ich bin davon ausgegangen, dass der Adapter Zigbee2MQTT den Zigbee Namen als ID für das Gerät/Verzeichnis vom IOBroker verwendet.
    Habe ich die Einstellung "Verwende ZigbeeName als ID im IOBroker anstelle ZigBeeID" übersehen oder gibt es diese Einstellung nicht?

    1 Antwort Letzte Antwort
    0
    • mcm1957M Online
      mcm1957M Online
      mcm1957
      schrieb am zuletzt editiert von
      #2

      Vom Grundkonzept ioBroker gesehen ist das Verhalten so richtig.

      IDs sollten soweit wie möglich aus (nahezu) unveränderbaren und vor allem möglichst garantiert eindeutigen Eigenschaften des Geräts gebildet werden, z.B. MAC-Addresse, UUID, ...

      Insofern ist es also OK, dass der Adapter den frei wählbaren Text als Namen ablegt. Genau dafür ist dieses Feld auch gedacht,

      Für das Mapping auf beliebige IDs die durch den User festgelegt werden existiert das alias System. Damit ist bei einem Hardwaretausch nur eine Anpassung an einer Stelle erforderlich.

      Ob der Adapter eine Konfigurationsmöglichkeit bietet um "userfriendly" auch eher vom Standard abweichende IDs zu geneieren weiß ich leider auchnicht.

      Entwicklung u Betreuung: envertech-pv, hoymiles-ms, ns-client, pid, snmp Adapter;
      Support Repositoryverwaltung.

      Wer Danke sagen will, kann nen Kaffee spendieren: https://paypal.me/mcm1957atiobroker

      LESEN - gute Forenbeitrage

      1 Antwort Letzte Antwort
      1
      • G Offline
        G Offline
        Gaunt
        schrieb am zuletzt editiert von
        #3

        Ja vom Gedanken her ist das verhalten vom IOBroker genau richtig. Eindeutige Namen die zugewiesen werden.
        Die Einstellung userfrindly wäre gut wenn es die gibt. der MQTT Adapter verwendet ja ebenfalls diesen userfrindly Namen.

        Das verlagert die eindeutige ID vergabe in die Verantwortung des Benutzers. Das macht ein späteres Austauschen der Geräte bei Gerätedefekt einfacher. Altes Gerät entfernen, neues Gerät anlernen und den Namen vom alten Gerät übernehmen.

        Dann werde ich wohl die ID nehmen müssen.

        T 1 Antwort Letzte Antwort
        1
        • G Gaunt

          Ja vom Gedanken her ist das verhalten vom IOBroker genau richtig. Eindeutige Namen die zugewiesen werden.
          Die Einstellung userfrindly wäre gut wenn es die gibt. der MQTT Adapter verwendet ja ebenfalls diesen userfrindly Namen.

          Das verlagert die eindeutige ID vergabe in die Verantwortung des Benutzers. Das macht ein späteres Austauschen der Geräte bei Gerätedefekt einfacher. Altes Gerät entfernen, neues Gerät anlernen und den Namen vom alten Gerät übernehmen.

          Dann werde ich wohl die ID nehmen müssen.

          T Nicht stören
          T Nicht stören
          ticaki
          schrieb am zuletzt editiert von ticaki
          #4

          @mcm57
          @gaunt sagte in Zigbee2MQTT Name als ID verwenden:

          Das verlagert die eindeutige ID vergabe in die Verantwortung des Benutzers. Das macht ein späteres Austauschen der Geräte bei Gerätedefekt einfacher. Altes Gerät entfernen, neues Gerät anlernen und den Namen vom alten Gerät übernehmen.

          Das wäre mir auch das liebste genau aus diesem Gedanken. Aber zumindest ich dürfte nicht mehr in die Gruppe "Standardnutzer" fallen und für den ist es ja gedacht :)

          Aber hab ein Skript geschrieben, dass das ganze vereinfacht. Erstellt im alias.0 Zweig eine "mirror" von zigbee2mqtt mit namen als ids.

          Ist ein Typescript und erfordert das setObject() im Javascript-Adapter erlaubt ist:

          const prefix = 'alias.0';
          async function init() {
              const jQstates = $('state[state.id=zigbee2mqtt.*]');
               
              const objs: any = {}
              for (const dp of jQstates) {
                  if (await existsObjectAsync(dp)) objs[dp] = await getObjectAsync(dp);
              }
              for (const id in objs) {
                  const arr  = id.split('.');
                  
                  arr.pop()
                  while (arr.length>0) {
                      const tempId = arr.join('.');
                      
                      if (objs[tempId] === undefined && await existsObjectAsync(tempId)) {
                          objs[tempId] = await getObjectAsync(tempId);               
                      }
                      
                      arr.pop()
                  }
              }
              const checkUnique = {};
              for (const id in objs) {
                  const arr  = id.split('.');
                  if (arr.length == 3) {
                      const obj = objs[id];
                      if (obj.common.name == '') {
                          log(`common.name of ${id} is empty!`, 'warn')
                          obj._id = '';
                          continue;
                      }
                      const newName = obj.common.name.replace('.', '/');
                      arr.pop()
                      arr.push(newName)
                      const newId = arr.join('.')
                      if (checkUnique[newId] !== undefined) {
                          log(`common.name of ${id} and ${checkUnique[newId]} the same.`, 'error')
                          obj._id = '';
                          continue;
                      }
                      checkUnique[newId] = id;
                  }
              }
            
              let counter = 0;
              for (let id in objs) {
                  const obj = objs[id];
                  if (obj._id == '') continue;
                  let doit = false;
                  for (const newId in checkUnique) {
                      const oldId = checkUnique[newId]
                      if (id.startsWith(oldId)) {
                          id = id.replace(oldId, newId);
                          doit = true;
                      }
                  }
                  if (!doit && id.split('.').length >= 3) continue;
                  if (obj.type === 'state') {
                      obj.common.alias = {};
                      obj.common.alias.id = obj._id
                  }
                  obj._id = '';
                  counter++
                  await extendObjectAsync(`${prefix}.${id}`, obj);
              }
              log(`Create ${counter} alias.`)
          }
          init();
          

          Blöd ist nur das man keine Aliase auf Aliase zeigen lassen kann. Aber ist wohl wegen Kreisverkehr so :)

          Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

          Spenden

          1 Antwort Letzte Antwort
          0
          • G Offline
            G Offline
            Gaunt
            schrieb am zuletzt editiert von
            #5

            @ticaki oh das sieht sehr Interessant aus. Das werde ich mir mal genau angucken und ausprobieren. Vielen Dank dafür
            :-)
            und deine kleine Skriptsammlung sieht auch gut aus. Die Anwesenheit werde ich mir auch mal angucken ;-)
            Danke für eure Hilfe

            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
            FAQ Cloud / IOT
            HowTo: Node.js-Update
            HowTo: Backup/Restore
            Downloads
            BLOG

            846

            Online

            32.5k

            Benutzer

            81.8k

            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