NEWS
CreateState Frage was automatisch angelegt wird?
-
Hi,
ich überlege gerade an einem Adapter für die Einbindung von "nut" - also USV Daten.
Von nut kommen Daten in keys ala "battery.voltage.nominal" und dem entsprechenden Wert zurück. Diese wollte ich am liebsten auch in dieser Struktur ins iobroker bekommen. Frage: kynn ich ein "createState" mit dem Key machen und die Channels werden automatisch angelegt oder muss ich was basteln um diese "." notation wieder auseinanderzunehmen um die Cheánnels alle einzeln manuell anlegen zu lassen?
Hat ein anderer Adapter sowas schon gemacht?
Danke für Tips
-
Auf die Schnelle:
Im Skript geht es.
createState('oben.mitte.unten', 0); ```` ![261_bildschirmfoto_2016-07-02_um_13.13.13.jpg](/assets/uploads/files/261_bildschirmfoto_2016-07-02_um_13.13.13.jpg) Gruß Pix
-
Cool, Danke, Das wollte ich wissen
-
-
Für das Ändern des Wertes ist
setState("key.name", 1);
zuständig. Es funktioniert allerdings nicht unmittelbar nach createstate(), da createstate() etwas Zeit braucht.
-
hm … wie findet man raus ob ein State schon existiert oder nicht?
Das Problem ist: Jeder NUT-Treiber liefert pot. andere Werte zurück. Bedeutet: die anzulegenden States kommen quasi aus dem Response.
Also müsste ich checken ob ein State da ist oder ob er angelegt werden muss wenn ich die Daten durchgehe ...
-
Du solltest schon wissen, welche Werte / Ereignisse in Datenpunkten angezeigt werden sollen. Alle anderen Werte werden ignoriert.
Eine ähnliche Aufgabenstellung wird http://forum.iobroker.net/viewtopic.php?f=23&t=3048&start=20#p29650 behandelt.
-
Das ist in meinen Augen nicht so einfach:Ich habe zwei verschienene APC-USVs und die liefern unterschiedliche Werte. "NUT" als Protokoll unterstützt noch einen Haufen weiterer USVs von allen möglichen Herstellern.
Wenn ich jetzt eine Auswahl mache limitiere ich mögliche andere Adapter-Nutzer die ggf ganz andere Werte interessant finden.
Also hätte ich aktuell den Ansatz gewählt die Daten die NUT zurückliefert auch in ioBroker bereitzustellen - und damit ist es nun mal dynamisch je nach USV.
-
Bei einem Adapter sieht es natürlich anders aus - das Beispiel von Pix war für den Javascript-Adapter. Für die Adapter-Entwicklung gibt es abweichende https://github.com/ioBroker/ioBroker/wiki/Adapter-Development-Documentation#functions (z.B. createDevice, createChannel, createState), die dann anzuwenden wären.
Ich vermute mal, dass es eine Möglichkeit zur Abfrage gibt, welche "keys" vorhanden sind ?
-
Jupp, diese Funktionsliste hatte ich auch gefunden … aber dann waren genau diese Fragen offen
-
Hat ein anderer Adapter sowas schon gemacht? `
Hab es (wie andere auch) mal beim homepilot Adapter verwendet.https://github.com/Pix---/ioBroker.home ... er/main.js
Das gibt es den Befehl adapter.setObjectNotExists
// create Channel DeviceID adapter.setObjectNotExists(path, { type: 'channel', role: '', common: { name: devicename + ' (Device ID ' + deviceid + ')' }, native: {} }); // create States adapter.setObjectNotExists(path + '.name', { type: 'state', common: { name: 'name ' + devicename, desc: 'name stored in homepilot for device ' + deviceid, type: 'string', read: true, write: false }, native: {} });
Erst wird geprüft, ob das Objekt schon existiert und dann erst angelegt (auch mit Rückmeldung).
adapter.setObjectNotExists(path + '.level', { type: 'state', common: { name: 'level ' + devicename, desc: 'level of device ' + deviceid, type: 'number', min: 0, max: 100, unit: '%', read: true, write: false }, native: {} }, function(err, obj) { if (!err && obj) adapter.log.info('Objects for ' + product + '(' + deviceid + ') created'); });
Danach kannst du mit adapter.setState die Objekte füllen.
Gruß
Pix
-
Frage: kynn ich ein "createState" mit dem Key machen und die Channels werden automatisch angelegt oder muss ich was basteln um diese "." notation wieder auseinanderzunehmen um die Cheánnels alle einzeln manuell anlegen zu lassen? `
Das "createState" des JS-Adapters erzeugt kein "device" und auch keinen "channel", sondern erzeugt bei einem Punkt im Namen nur eine optische Trennung (Ordnerstruktur). Es wird also nichts weiter übrig bleiben, als diese "." notation wieder auseinanderzunehmen. -
@pix:Hat ein anderer Adapter sowas schon gemacht? `
Hab es (wie andere auch) mal beim homepilot Adapter verwendet.https://github.com/Pix---/ioBroker.home ... er/main.js
Das gibt es den Befehl adapter.setObjectNotExists `
Heisst ich muss ein "battery.blubb.bla" über Schleifen/Rekurion auseinandernehmen um jeweils die Pfadteile nacheinander anzulegen und dann zu füllen …
Ok, dann muss ich doch etwas tiefer rein und vllt doch was kleines Rekursives basteln