NEWS
SOLVED [gelöst] adapter.getState bei Boolean immer false?
-
Hallo zusammen,
bin am verzweifeln ......mit adapter.getState bei type: boolean bekomme ich immer ein false zurück.
Ist erst seit den letzten Updates so....
admin 3.6.9
js-controller 2.0.25Jemand eine Idee?
Danke und Gruß
LausiD -
@AlCalzone
Sorry, hatte am Code nichts geändert.
Nach langer Suche habe ich das Problem entdeckt
Mit adapter.setObject zB{_id: 'info.Settings.logCheckObject', type: 'state', common: {name: 'LOG "check channel ....." ', type: 'boolean', read: true, write: true, role: 'switch'}, native: {}}
wird mit js-controller 2.0.29 das zugehörige State immer auf false gesetzt.
Hat das einen bestimmten Grund?Danke und Gruß
LausiD -
@LausiD Ohne Code kann man nur raten.
-
@AlCalzone
Sorry, hatte am Code nichts geändert.
Nach langer Suche habe ich das Problem entdeckt
Mit adapter.setObject zB{_id: 'info.Settings.logCheckObject', type: 'state', common: {name: 'LOG "check channel ....." ', type: 'boolean', read: true, write: true, role: 'switch'}, native: {}}
wird mit js-controller 2.0.29 das zugehörige State immer auf false gesetzt.
Hat das einen bestimmten Grund?Danke und Gruß
LausiD -
@LausiD Ich tippe auf einen Bug.
-
Checke nachher. Gibt eh noch eine 2.0.34 nachher.
-
@LausiD "It's a feature"
Es gibt bestimnte Defaults für bestimmte Rollen: siehe https://github.com/ioBroker/ioBroker.js-controller/blob/master/lib/defaultObjs.js#L49
Unter anderen die Rolle "switch" und da kommt der Default "false" her. Der einzige Unterschied zu früher ist das mit controller 2.0 der Default Wert auch gesetzt wird.
Was ist denn dein Problem mit dem Default-Wert?
-
PS: setObject ist übrigens nicht sinnvoll!! setObjectNotExists ist sinnvoller. Sonst wird das Objekt jedes mal komplett überschrieben, es verliert also u.a. custom Settings und sowas. Also setObject --> setObjectNotExists!
-
Ooookkkk ... wir haben Intern nochmal gesprochen und ja es wird wohl oft "get/setObject" genutzt anstelle get/set/extendObject. Ich habe als schnelle Lösung für die rollen "switch" und "level.dimmer" die Default Werte rausgenommen die intern vorgegeben sind. Es gibt jetzt noch einige "indicator.* "Rollen wo es gemacht wird.
2.0.34 vom controller ist auf GitHub und wird noch final diskutiert und geht dann raus. Falls sich etwas ändert melde ich mich hier nochmals.
-
@apollon77 sagte in adapter.getState bei Boolean immer false?:
2.0.34 vom controller ist auf GitHub und wird noch final diskutiert und geht dann raus. Falls sich etwas ändert melde ich mich hier nochmals.
@AlCalzoneSuper, läuft mit 2.0.34 wieder einwandfrei
Vielen Dank auch für die Erklärungen, konnte wieder einiges dazu lernen.
Was ich bisher mache:
Bei Anlage neuer Instanz werden die vorgegeben Werte aus Variablen in die jeweiligen Objekte geschrieben.
Die States können jetzt jederzeit geändert werden und sind beim nächsten Start Adapter in den Objekten gespeichert.
setObject verwende bei jedem Start Adapter um von den Setings,Configuration usw über den Adapter auch den Namen der Objekes ändern zu können.
Bisher wurden eben keine States automatisch angelegt und alles war gut.
Gerne auch Vorschläge zur besseren Lösung.Finde den js-adapter sehr gelungen, weniger Speicherbedarf freut den PI User....Vielen Dank für die Arbeit
Gruß
LausiD -
Also in meinen Augen ist aktuell der "best practice" eine Logik mit:
- getObject um rauszufinden ob das Objekt existiert
- wenn ja extendObject um die releanten teile die man ändern will zu ändern
- wenn nein setObject um initial zu setzen