NEWS
Objekt-ID aus Objektnamen ermitteln ?
-
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
-
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); }); -
Welchen Namen suchst du? Kannst du das Objekt, welches du suchst, zeigen?
3473_home.txt
3473_home2.txt -
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:


-
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 schedulesjavascript-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); -
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.
-
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
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