Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Test auf eindeutige Datenpunktnamen

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Test auf eindeutige Datenpunktnamen

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

      Mit folgendem Skript teste ich, ob alle Datenpunktnamen in ioBroker eindeutig sind:

      var eindeutig = true;
      
      $('state').each(function (id, i) {
          var obj = getObject(id);
          var name;
          if(obj && obj.common) name = obj.common.name;
          if(name && name !== '') {
              var ids = getIdByName(name);
              if(typeof ids === 'object') {
                  log(name + ':  ' + JSON.stringify(ids));
                  eindeutig = false;
              }
          }
      });
      
      if(eindeutig) log('Alle DP-Namen sind eindeutig');
      
      
      1 Reply Last reply Reply Quote 0
      • blauholsten
        blauholsten Developer last edited by

        Hi paul53

        Könntest du mal kurz genauer erklären was der Hintergrund ist das zu benutzen?

        Zweite Frage, kann SZ diese Abfrage mal erklären, ich stehe da ein bisschen auf dem Schlauch und verstehe das nicht ganz. :oops:

        if(name && name !== '')
        
        1 Reply Last reply Reply Quote 0
        • ruhr70
          ruhr70 last edited by

          @blauholsten:

          Zweite Frage, kann SZ diese Abfrage mal erklären, ich stehe da ein bisschen auf dem Schlauch und verstehe das nicht ganz. :oops:

          if(name && name !== '')
          ```` `  
          

          if(name) -> true, wenn vorhanden (auch "")

          if(name !== '') -> true, wenn der Name nicht leer ist.

          Zusammen:

          name existiert UND (&&) ist nicht leer

          [EDIT] zum ersten Teil der Frage:

          Wie ich es verstanden habe, nutzt Paul für alle seine Skripte den Namen und nicht die vollständige id.

          Dadurch muss er die Skripte nicht anpassen, wenn z.B. eine defekte Homematic Komponente ausgetauscht wird.

          Damit dies funktioniert, müssen aber alle Namen eindeutig vergeben werden.

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

            @blauholsten:

            Könntest du mal kurz genauer erklären was der Hintergrund ist das zu benutzen? `
            @ruhr70:

            …nutzt Paul für alle seine Skripte den Namen und nicht die vollständige id.

            Dadurch muss er die Skripte nicht anpassen, wenn z.B. eine defekte Homematic Komponente ausgetauscht wird.

            Damit dies funktioniert, müssen aber alle Namen eindeutig vergeben werden. `
            So ist es. Außerdem kann ich Skripte, die ich erfolgreich getestet habe, einfach kopieren (z.B. von einem Raum in einen anderen) ohne irgendeine Veränderung am Skript vornehmen zu müssen. Das funktioniert so:

            // Raumkurzname am Anfang des Datenpunktnamen und als JS-Gruppenname
            var raum = name.split(".")[2];
            
            var xid = getIdByName(raum + ".Temperatur");
            var wid = getIdByName(raum + ".Sollwert");
            var hid = getIdByName(raum + ".Heizen");
            ...
            
            

            @blauholsten:

            if(name && name !== '')
            ```` `  
            

            @ruhr70:

            name existiert UND (&&) ist nicht leer `
            Richtig: Datenpunkten, die ich nicht auswerten will, vergebe ich keinen Namen; also müssen diese aus dem Test ausgeklammert werden.

            1 Reply Last reply Reply Quote 0
            • blauholsten
              blauholsten Developer last edited by

              @ruhr70:

              if(name) -> true, wenn vorhanden (auch "")

              if(name !== '') -> true, wenn der Name nicht leer ist.

              Zusammen:

              name existiert UND (&&) ist nicht leer `
              Man bin ich blind….Ich hatte da gerade voll das Brett vorm Kopf. Trotzdem danke

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

              Support us

              ioBroker
              Community Adapters
              Donate

              528
              Online

              31.7k
              Users

              79.7k
              Topics

              1.3m
              Posts

              javascript
              3
              5
              969
              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