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. Objekt-ID aus Objektnamen ermitteln ?

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Objekt-ID aus Objektnamen ermitteln ?

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
11 Beiträge 2 Kommentatoren 4.0k Aufrufe
  • Ä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.
  • BluefoxB Offline
    BluefoxB Offline
    Bluefox
    schrieb am zuletzt editiert von
    #2

    @paul53:

    Wie kann ich außerhalb von "on / subscribe" aus dem Objektnamen die id ermitteln ?

    Voraussetzung: Der Name ist genau einmal vorhanden. `

    ### getIdByName 
        getIdByName(name, alwaysArray)
    
    returns id of the object with given name. If there are more than one object with this name the result will be an array. If _alwaysArray_ flag is set, the result will be always an array if some ID found.
    
    

    Aber nur in der 0.5.4

    1 Antwort Letzte Antwort
    0
    • paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #3

      Danke für die Ergänzung :D

      Würde ich gern testen, aber zur Zeit scheint es Probleme mit dem Zugriff auf GitHub zu geben.

      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
      0
      • BluefoxB Offline
        BluefoxB Offline
        Bluefox
        schrieb am zuletzt editiert von
        #4

        Ist mit noch eingefallen, dass auch das funktionieren sollte:

        $('channel[name=MyName]').each(function (id) {
            log(id + ' - ' + getObject(id).common.name);
        });
        $('state[name=MyName]').each(function (id) {
            log(id + ' - ' + getObject(id).common.name);
        });
        
        
        1 Antwort Letzte Antwort
        0
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #5

          Beide Varianten hatte ich schon versucht.

          Bei der 1. Variante passiert nichts.

          Die 2. Variante liefert:

          javascript-0 2015-08-18 14:55:54 error script.js.Wohnen_Heizregler: TypeError: Cannot read property 'common' of undefined

          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
          0
          • BluefoxB Offline
            BluefoxB Offline
            Bluefox
            schrieb am zuletzt editiert von
            #6

            Welchen Namen suchst du? Kannst du das Objekt, welches du suchst, zeigen?
            3473_home.txt
            3473_home2.txt

            1 Antwort Letzte Antwort
            0
            • paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von
              #7

              Ich benötige die ID für die Initialisierung von Ist- und Sollwert bei Script-Start, da es sehr lange dauern kann, bis sich der Sollwert ändert.

              // 2-Punkt-Regler Raumheizung
              
              // Raumkurzname am Anfang des Datenpunktnamen
              var raum = "Wohnen";
              // halbe Hysterese in K
              var hh = 0.1;
              
              function hys(x, w) {
                  var dpname = raum + ".Heizen";
                  if (x <= w - hh) { setState(dpname, true);}
                  else if (x >= w + hh) { setState(dpname, false);}
                  log("2-Punkt: " + x + ", " + w);
              }
              
              var xname = raum + ".Temperatur";
              on({name: xname}, function(dp) {
                  this.x = dp.newState.val;
                  hys(this.x, this.w);
              });
              
              var wname = raum + ".Sollwert";
              on({name: wname}, function(dp) {
                  this.w = dp.newState.val;
                  hys(this.x, this.w);
              });
              
              // Script start
              var xid = "hm-rpc.1.CUX9002002.1.TEMPERATURE";  //getIdByName(xname);
              this.x = getState(xid).val;
              log("x: " + this.x);
              
              var wid = "hm-rpc.1.CUX9002002.2.SETPOINT";   //getIdByName(wname);
              this.w = getState(wid).val;
              log("w: " + this.w);
              
              

              Das sind die beiden Objekte:
              493_wohnen_sollwert.jpg
              493_wohnen_temperatur.jpg

              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
              0
              • paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von
                #8

                Die Aktualisierung über ioBroker funktioniert noch immer nicht. Deshalb habe ich zum Testen mir die Datei "javascript.js" aus dem GitHub kopiert und ausgetauscht.

                Die Funktion "getIdByName(name)" funktioniert einwandfrei :D :
                ` > javascript-0 2015-08-18 17:14:37 info script.js.Wohnen_Heizregler: registered 2 subscriptions and 0 schedules

                javascript-0 2015-08-18 17:14:37 info script.js.Wohnen_Heizregler: 2-Punkt: 25.8, 22.5

                javascript-0 2015-08-18 17:14:37 info script.js.Wohnen_Heizregler: w: hm-rpc.1.CUX9002002.2.SETPOINT

                javascript-0 2015-08-18 17:14:37 info script.js.Wohnen_Heizregler: x: hm-rpc.1.CUX9002002.1.TEMPERATURE

                javascript-0 2015-08-18 17:14:37 info Start javascript script.js.Wohnen_Heizregler `
                mit diesem Scriptende:

                // Script start
                var xid = getIdByName(xname);  //"hm-rpc.1.CUX9002002.1.TEMPERATURE";
                this.x = getState(xid).val;
                log("x: " + xid);
                
                var wid = getIdByName(wname);  //"hm-rpc.1.CUX9002002.2.SETPOINT";
                this.w = getState(wid).val;
                log("w: " + wid);
                
                hys(this.x, this.w);
                
                

                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
                0
                • paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von
                  #9

                  Hat man erst einmal die Objekt-ID des Datenpunktes, kann man das Script vereinfachen:

                  // 2-Punkt-Regler Raumheizung
                  
                  // Raumkurzname am Anfang des Datenpunktnamen
                  var raum = "Wohnen";
                  // halbe Hysterese in K
                  var hh = 0.1;
                  
                  var xid = getIdByName(raum + ".Temperatur");
                  var wid = getIdByName(raum + ".Sollwert");
                  var yid = getIdByName(raum + ".Heizen");
                  
                  function hys() {
                      var x = getState(xid).val;
                      var w = getState(wid).val;
                      if (x <= w - hh) { setState(yid, "Ein");}
                      else if (x >= w + hh) { setState(yid, "Aus");}
                  }
                  
                  on(xid, function() {
                      hys();
                  });
                  
                  on(wid, function() {
                      hys();
                  });
                  
                  // Script start
                  hys();
                  
                  

                  Könnte "getState()" auch mit dem Namen arbeiten, würde die ID nur selten benötigt werden.

                  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
                  0
                  • BluefoxB Offline
                    BluefoxB Offline
                    Bluefox
                    schrieb am zuletzt editiert von
                    #10

                    @paul53:

                    Hat man erst einmal die Objekt-ID des Datenpunktes, kann man das Script vereinfachen:

                    // 2-Punkt-Regler Raumheizung
                    
                    // Raumkurzname am Anfang des Datenpunktnamen
                    var raum = "Wohnen";
                    // halbe Hysterese in K
                    var hh = 0.1;
                    
                    var xid = getIdByName(raum + ".Temperatur");
                    var wid = getIdByName(raum + ".Sollwert");
                    
                    function hys() {
                        var yname = raum + ".Heizen";
                        var x = getState(xid).val;
                        var w = getState(wid).val;
                        if (x <= w - hh) { setState(yname, true);}
                        else if (x >= w + hh) { setState(yname, false);}
                    }
                    
                    on(xid, function() {
                        hys();
                    });
                    
                    on(wid, function() {
                        hys();
                    });
                    
                    // Script start
                    hys();
                    
                    

                    Könnte "getState()" auch mit dem Namen arbeiten, würde die ID nur selten benötigt werden. `
                    Nach dem ich getIdByName implementiert habe wird es einfach getState über Name zu implementieren.

                    Was mache ich aber, falls man zwei States mit dem gleichen Namen habe?
                    1148_wallpaper.jpg

                    1 Antwort Letzte Antwort
                    0
                    • paul53P Offline
                      paul53P Offline
                      paul53
                      schrieb am zuletzt editiert von
                      #11

                      @Bluefox:

                      Was mache ich aber, falls man zwei States mit dem gleichen Namen habe? `
                      Den ersten gefundenen State nehmen, so wie HM Script.

                      Noch besser: Einen Prüflauf implementieren, der auf mehrfache Vergabe von Namen testet.

                      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
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      725

                      Online

                      32.6k

                      Benutzer

                      82.2k

                      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