Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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

  • Der neue Monatsrückblick für Mai und Juni 2026 ist online!
    BluefoxB
    Bluefox
    8
    1
    1.1k

  • wichtiges UPDATE für controller 7.2.2 im stable
    HomoranH
    Homoran
    10
    1
    3.6k

  • Neues YouTube-Video: Visualisierung im Devices-Adapter
    BluefoxB
    Bluefox
    16
    1
    6.2k

Objekt-ID aus Objektnamen ermitteln ?

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
11 Beiträge 2 Kommentatoren 4.3k 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: Asus PN 42 / N100 / 8 GB / 500 GB; Proxmox mit 2 VM (iob / openCCU)

      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: Asus PN 42 / N100 / 8 GB / 500 GB; Proxmox mit 2 VM (iob / openCCU)

          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: Asus PN 42 / N100 / 8 GB / 500 GB; Proxmox mit 2 VM (iob / openCCU)

              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: Asus PN 42 / N100 / 8 GB / 500 GB; Proxmox mit 2 VM (iob / openCCU)

                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: Asus PN 42 / N100 / 8 GB / 500 GB; Proxmox mit 2 VM (iob / openCCU)

                  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: Asus PN 42 / N100 / 8 GB / 500 GB; Proxmox mit 2 VM (iob / openCCU)

                      1 Antwort Letzte Antwort
                      0

                      Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                      Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                      Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                      Registrieren Anmelden
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      497

                      Online

                      33.0k

                      Benutzer

                      83.6k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2026
                      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