NEWS
[Frage] Wie lautet der Syntax für adapter.getState
-
Hi,
ich traue mich fast nicht zu fragen aber mir gelingt es einfach nicht einen durch den Adapter angelegten Datenpunkt auf undefined zu prüfen und dessen wert auszulesen. Die adapter.config…. Datenpunkte klappen wunderbar.
Der Datenpunkt den ich auslesen will lautet: backitup.0.History.Backup_history (der Wert ist ein String : Testwert)
Im Js-Script-Adapter-Editor ist das überhaupt kein Thema aber ich bekomme es in der Main.js einfach nicht hin, folgendes habe ich versucht:
adapter.log.info(adapter.getState(adapter.name+'.'+adapter.instance+".History.letztes_ccu_Backup")); adapter.log.info(adapter.getState(adapter.name+'.'+adapter.instance+".History.letztes_ccu_Backup").val);
und zig Abwandlungen davon.
Das setzen der States klappt wunderbar nur das prüfen ob undefined und das auslesen nicht.
Wäre toll wenn mir hier mal jemand den codeschnipsel anpassen könnte.
Eine Frage hätte ich zusätzlich, wie ich es verstanden habe ist es nicht möglich einen Datenpunkt zeitgleich mit adapter.setObjectNotExists zu erstellen und dessen Wert einzutragen oder?
Denn beim Scripten mit CreateState klappt das ja.
Vielen Dank schonmal
-
Laut https://github.com/ioBroker/ioBroker/wiki/Adapter-Development-Documentation#object-fields:
adapter.getState('myState', function (err, state) { adapter.log.info( 'State ' + adapter.namespace + '.myState -' + ' Value: ' + state.val + ', ack: ' + state.ack + ', time stamp: ' + state.ts + ', last changed: ' + state.lc );
-
Ist das gleiche wie bei einer anderen frage von dir: Adapter ist alles asynchron!! Also per callbacks ausschließlich.
Gesendet vom Handy …
-
Da bin ich noch nicht wirklich durchgestiegen :lol:
Ich versuche mich zu bessern
-
Wenn man aus dem JavaScript-Adapter Skript-Umfeld kommt muss man da umdenken.
Im JavaScript-Adapter sind einige Dinge synchron gemacht damit es beim Scripte-Scheiben einfacher ist. Aber Adapter ist "plain"
-
Wenn man aus dem JavaScript-Adapter Skript-Umfeld kommt muss man da umdenken.
Im JavaScript-Adapter sind einige Dinge synchron gemacht damit es beim Scripte-Scheiben einfacher ist. Aber Adapter ist "plain" `
Erschwerend kommt noch hinzu dass ich eigentlich nur ein Hobby-Scripter bin und das alles durch "learning bei schmeißing in the eis cold water" lernen muss :lol:
-
Danach kannst Du noch viele weitere Adapter bauen :-))
-
Danach kannst Du noch viele weitere Adapter bauen :-)) `
Bis dahin bin ich ergraut!
Eine Frage hab ich noch, wie macht der Profi das nun dass er mit:
adapter.setObjectNotExists('History.letztes_minimal_Backup', {type: 'state', common: {name: 'Letztes minimal Backup', type: 'string', state: 'Noch kein Backup', role: 'indicator'}, native: {}});
Den Datenpunkt erstellt und ihn gleich mit bspw. (Noch kein Backup) befüllt?
Weil wenn jetzt der Datenpunkt neu erstellt wurde, ist er ja leer d.h. wenn ich in abfrage bekomme ich einen error (TypeError: Cannot read property 'val' of null) Wenn ich ihn jedoch mit setState befüllen würde ohne vorher zu prüfen ob da schon was drin steht, würde ja bei jedem Adapterstart wieder der "Default-Eintrag" reingeschrieben werden.
Oder sehe ich das falsch?
-
An der Stelle würde ich das Trennen. Du machst einmal setObjectNotExists und danach ein "getState" und im Callback wenn state oder stata.val ===null ist dann den Wert setzen.
-
Ich weiß ich bin etwas spät, aber dafür gibts eigentlich
{..., common: { ..., def: "Standardwert", ... }, ...}
-
Menno … stimmt ... du hast recht ... ohje ...