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
    910

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

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

    Voraussetzung: Der Name ist genau einmal vorhanden.

    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
      #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

                        762

                        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