NEWS

Test auf eindeutige Datenpunktnamen



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


  • 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 !== '')
    


  • @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.



  • @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.



  • @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


Log in to reply
 

Suggested Topics

  • 5
  • 3
  • 11
  • 3
  • 5
  • 20
  • 1
  • 2

971
Online

32.1k
Users

38.8k
Topics

525.6k
Posts