NEWS
Objekt erstellt, aber kein State abrufbar
-
@paul53
Ein Scipt Teil für ein Adapter.
Entschuldigung habe dies vergessen werde es anpassen! -
@proper0912 getForeignState ist für states anderer adapter. Versuch es mit getState.
alive = this.getState('alive');
//Edit so nun ist es richtig.
-
@ciddi89 Danke für den Tip.
Habe es ausprobiert und jetzt kommt im Debug "undefined".
Habe alive in settingsID.alive unbenannt und der Datenpunkt heisst alive! -
@proper0912 this.log.debug(alive.val)
-
Versuch es mal so:
settingsIdAlive = this.getState('alive'); this.log.debug(settingsIdAlive.val)
-
@ciddi89
Hi habe es heute aus Probiert und geht nicht.
Keine Ahnung was ich falsch mache! -
@proper0912 hast mal ein Code wo du das Objekt erstellst, wo du es beschreibst und wo du es abrufst?
-
@ciddi89
Klar hier ist er:
async function main() { adapter.log.debug('adapter.main: << MAIN >>'); settingsID = adapter.config; // +++++++++++++++++++ basic framework of Adapter ++++++++++++++++++++ await adapter.setObjectNotExistsAsync("alive", { type: "state", common: { name: "connect", type: "boolean", role: "state", read: true, write: true, def: false, }, native: {}, }); let settingsIdAlive = false; await adapter.getStateAsync('alive', (err, state) => { if (state) { settingsIdAlive = state.val; } else{ adapter.log.error(err) } }); adapter.log.debug(settingsIdAlive); if (adapter.on) { if (settingsIdAlive) { // @ts-ignore getDateOfInstanc(settingsID); getValue(settingsID); } else { // +++++++++++++++++++ basic framework with medium of Adapter ++++++++++++++++++++ if ( settingsID.triggerID > "" && settingsID.medium > "" ){ await adapter.setObjectNotExistsAsync(settingsID.medium + ".connect", { type: "state", common: { name: "connect", type: "boolean", role: "state", read: true, write: true, def: false, }, native: {}, }); await adapter.setObjectNotExistsAsync(settingsID.medium + ".instanceValue", { type: "state", common: { name: "instanceValue_" + settingsID.medium, type: "number", role: "value", read: true, write: true, def: 0, unit: "", }, native: {}, }); await adapter.subscribeStates("*"); adapter.log.debug('adapter.main: << MAIN Objekt greated >>'); } else { adapter.log.error("Keine referens Objekt-ID oder Medium angegeben") } await adapter.setStateAsync("alive", { val: true, ack: true }); } } else { adapter.log.error("Instance not startet"); } await adapter.getStateAsync('alive', (err, state) => { if (state) { settingsIdAlive = state.val; } else{ adapter.log.error(err) } }); adapter.log.debug(settingsIdAlive); adapter.stop(); };
Das ist er!
-
statt
await adapter.getStateAsync('alive', (err, state) => { if (state) { settingsIdAlive = state.val; } else{ adapter.log.error(err) } });
mach mal
settingsIdAlive = await adapter.getStateAsync('alive') adapter.log.debug(settingsIdAlive.val);
-
@ciddi89
Hi wenn ich das einfüge
settingsIdAlive = await adapter.getStateAsync('alive') adapter.log.debug(settingsIdAlive.val);
dann Sagt mein Programm: .val ist für boolean nicht verfügbar! ts(2339)
-
@proper0912 ja weil du vorher settingsIdAlive = false; deklariert hast. Nimmst du das raus und machst nur
let settingsIdAlive;
dann sollte es gehen.
-
@ciddi89 Danke jetzt funktioniert es so wie sein soll danke!
-
@ciddi89
Hi kannst du mir noch mal helfen?
Ich verstehe das einfach nicht.
Schau dir mal diesen Code an:await adapter.setStateAsync(`${settingsID.medium}.connect`, { val: false, ack: true }); await adapter.getForeignState(settingsID.triggerID, (err, state) => { // state can be null! if (state) { adapter.setState(settingsID.path.instanceValue,{ val: state.val, ack: true }); adapter.setStateAsync(`${settingsID.medium}.connect`, { val: true, ack: true }); } else{ adapter.log.info(err) } }); settingsID.value.instanceValue = await adapter.getStateAsync(`${settingsID.medium}.instanceValue`); adapter.log.debug(settingsID.value.instanceValue.val)
Da lese ich Zahl aus einem andere Adapter und schreibe sie in mein Adapter.
Danach schreibe ich mir die Zahl aus meinem Adapter in eine Variable und gebe si aus im Debug als Kontrolle!
Aber erst beim zweiten mal wird sie auch in die Variable geschrieben! Habe ich das was falsch verstanden?
Oder ist es einfach nur zu spät!Kannst du mir das noch mal Helfen ?
Oder ein anderer!Danke!
-
@proper0912 also als erstes musst du bei jeder function wo der Name async drin ist auch ein await vorsetzen. Hier etwas zum lesen über asynchrone Funktionen. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
Verstehe nun aber nicht ganz was du vorhast? Wenn du mit variablen weiter arbeiten willst würde ich erstmal auf arrow functions verzichten. Macht es dir vielleicht ein bisschen einfacher. In dem fall ist es okay weil du ja nur setState nutzt aber achte bitte auf korrekte Deklaration wenn du async functions nutzt.
-
@ciddi89 Danke noch mal für deine Hilfe!
Habe mir die Seite durchgelesen und habe es jetzt besser hinbekommen!
Klar ist es auch das es immer besser geht, aber für den Anfang bin ich schon ein wenig stolz das es jetzt geht.
Dank deiner Hilfe! -
@proper0912 gerne, dafür ist das Forum ja da