NEWS
[erledigt]Objekt-Struktur on/subscribe()?
-
Hallo zusammen,
ich habe mal wieder ein kleines Verständnisproblem:
Mit einem on/subscribe bekomme ich Zugriff auf Daten, die in der "normalen" Struktur des Objektes (im admin unter 'Objekte') nicht zu sehen sind.
z.B. obj.oldState.ts oder obj.newState.ts
Fragen:
1.) Wo sind diese Daten gespeichert?
2.) Wie kann ich ausserhalb eines subscribe auf diese Daten zugreifen?
Konkret möchte ich in einem schedule folgendes machen:
var obj = getObject('hm-rpc.0.hm...'); var oldTimestamp = obj.oldState.ts;
Das funktioniert leider nicht und gibt nur ein 'undefined' zurück?
Vielen Dank für jede Hilfe!
-
1.) Wo sind diese Daten gespeichert? `
Bei Standardeinstellung in der Datei "iobroker-data/states.json".
@Stmiko:2.) Wie kann ich ausserhalb eines subscribe auf diese Daten zugreifen? `
Auf die newState-Werte mit (z.B. ts):var t = getState(id).ts;
Die oldState-Werte sind nur per on() / subscribe() verfügbar.
-
Hallo Paul,
ok, vielen Dank für die Klarstellung.
Schade das man an die oldState nicht "normal" herankommt, aber es geht halt nicht alles
-
Hallo Paul,
ok, vielen Dank für die Klarstellung.
Schade das man an die oldState nicht "normal" herankommt, aber es geht halt nicht alles
`
oldState kann es in dem Sinne ja nur bei einer Änderung geben. Was du meinst ist History, wo alte Werte dauerhaft gespeichert werden.
-
Hallo Paul,
ok, vielen Dank für die Klarstellung.
Schade das man an die oldState nicht "normal" herankommt, aber es geht halt nicht alles
`
Du kannst selbst oldValue implementieren:var oldValue = null; on('hm-rpc.0.hm...', function (obj) { console.log('New value = ' + obj.state.val + ', old value = ' + oldValue); oldValue = obj.state.val; });
-
Wenn man unbedingt asynchron an die neuen und alten Zustände ran will, dann würde ich es so machen:
var oldState = null; var newState = null; on('hm-rpc.0.hm...', function (obj) { newState = obj.state; oldState = obj.oldState; });
Dann kann man nach der ersten Zustandsänderung (mit if(newState) prüfen !) jeweils mit .val, .ts oder .lc auf die Elemente zugreifen.
-
Vielen Dank für eure Hilfe.
So wie von Paul beschrieben , habe ich es jetzt gemacht und es funktioniert wunderbar!