NEWS
[gelöst] desc aus Datenpunk auslesen
-
Hallo,
ich erstelle mir viele ähnliche Datenpunkte, welche ich mit "desc" näher beschreibe mit:createState(id, 0, false, {type: 'number', desc: dpDesc});
aber beim lesen der Datenpunkte komme ich nicht mehr an "desc" ran:
Da motzt der compiler.titles.each(function (id, i) { //let state = getState(id).common.desc; // compilerfehler bei ".common": Property 'common' does not exist on type 'State<any> let state = getState(id); console.log(state);
Und wenn ich den state, den ich mit getState gekriegt hab ausdrucke bekomme ich auch kein desc:
{ val: 0, ack: true, ts: 1750006620561, q: 0, c: 'script.js.Eigene_Scripte.Run.Boerse.BoersenkurseSPI', from: 'system.adapter.javascript.0', user: 'system.user.admin', lc: 1750006620561 }
-
let desc = getObject(id).common.name
-
@mcu
Vielen Dank. Das funktioniert.
Nur zum Verständnis: Was ist der Unterschied zwischen getState und getObject.
getState liefert doch auch ein "Objekt" oder zumindest was, das wie ein Objekt aussieht.
Wenn ich die zwei vergleiche:getState:
{ val: 0, ack: true, ts: 1750006620561, q: 0, c: 'script.js.Eigene_Scripte.Run.Boerse.BoersenkurseSPI', from: 'system.adapter.javascript.0', user: 'system.user.admin', lc: 1750006620561 }
und getObject:
{ common: { type: 'number', desc: 'ZWM, Zwahlen & Mayr SA', name: '0_userdata.0.Boerse.SIX.SPI.Titles.ZWM', role: 'state' }, native: {}, type: 'state', from: 'system.adapter.javascript.0', user: 'system.user.admin', ts: 1750006619687 }
Dann sieht man im einen eine Teilmenge des jeweils anderen.
Das heisst, in getObject ist nicht alles vorhanden, jedoch ein Teil von getState und Umgekehrt, aber jeder hat Teile des jeweils anderen?
Wie muss man sich das Ganze vorstellen?
Gibt es da ein Objekt welches alles beinhaltet? -
-
@paul53
Da steig ich eben nicht ganz durch.
Beim statischen Objekt vom Typ state stimmt das ja mit dem Resultat von getState überein mit ausnahme von "expire". Das ist wohl optional.Aber danach steht dort: "Attribute des statischen Objektes sind id, type = 'state', common, native"
For common, native und type: ok,
aber wo ist id?Und bei meinem Objekt finden sich auch noch "from", "user" und ts. ?
-
@iob69 Der Unterschied ist das Objekt stellt den State dar bzw. beschreibt ihn und seine Funktion, während der State zwar auch ein Objekt ist das jedoch nur Informationen zum Wert speichert. Also wann wurde der Wert geschrieben, von wo wurde er geschrieben usw.
-
@jey-cee
Ok, ich stell mir das so vor wie bei Objektorientierten Sprachen wie typescript die (statische) Klasse und das (dynamische) Objekt.
Da sieht es aber so aus, dass hier offenbar das Objekt statisch ist? Ein bisschen verwirrend, aber ich glaub ich hab's so einigermassen begriffen. -
@iob69 sagte: wo ist id?
Ist doch als Teil des statischen Objektes beschrieben.
Attribute des statischen Objektes sind id, type = 'state', common, native.
getObject(id) zeigt die ID nicht an, da das Objekt über die ID adressiert wurde.
@iob69 sagte: finden sich auch noch "from", "user" und ts. ?
Das sind automatisch beim Erstellen des Objektes erzeugte Eigenschaften, die die Art und den Zeitpunkt der Erstellung anzeigen.
-
@paul53
@Jey-Cee
Danke für die Antworten. Ich komme so weiter.
Weiss jemand noch, ob man beim Erstellen eines Status diesen gleich in die history aufnehmen kann (programmatisch) und wenn ja, wie man die Parameter (wie geloggt wird) mitgeben kann?
Oder anders gesagt, kann man Datenpunkte programmatisch in die History einbinden, oder geht das nur per Hand mit dem "Zahnrad" in den Objekten?Ah, ich glaub das geht mit dem "Aktivieren" in der Doku:
https://www.iobroker.net/#de/adapters/adapterref/iobroker.history/README.md -
@iob69 sagte in [gelöst] desc aus Datenpunk auslesen:
Oder anders gesagt, kann man Datenpunkte programmatisch in die History einbinden, oder geht das nur per Hand mit dem "Zahnrad" in den Objekten?
Du musst das Objekt entsprechend anpassen. Dafür gibt es Custom.
Hier mal ein Beispiel für ein Objekt bei dem SQL Aktiviert ist:{ "type": "state", "common": { "name": "PIR Status", "role": "sensor.motion", "type": "boolean", "read": true, "write": false, "custom": { "sql.0": { "enabled": true, "storageType": "", "counter": false, "aliasId": "", "changesOnly": true, "debounce": 0, "changesRelogInterval": "0", "changesMinDelta": 0, "retention": "63072000" } } }, "native": {}, "_id": "enocean.0.0085230e.PIRS", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" }, "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1655843993485 }
-
@iob69 sagte in [gelöst] desc aus Datenpunk auslesen:
Weiss jemand noch, ob man beim Erstellen eines Status diesen gleich in die history aufnehmen kann (programmatisch) und wenn ja, wie man die Parameter (wie geloggt wird) mitgeben kann?
Am einfachsten per sendTo an die History-Instanz: https://github.com/ioBroker/ioBroker.history/blob/master/docs/de/README.md#verlaufsprotokollierung-über-javascript
Ich würde nicht direkt die
custom
Optionen auf dem Objekt setzen (ggf. bekommt das die Instanz dann gar nicht mit und würde das Objekt erst nach einem Neustart der Instanz berücksichtigen).