NEWS
[gelöst] Adapter: wie TimezoneOffset ermitteln, getForeignState liefert keinen State
-
Nach meinem letzten etwas peinlichen Hilfeersuchen nun ein neues "Problemchen".
Ich möchte im Adapter die vom Anbieter gelieferten Zeiten lokalisieren. getTimezoneOffset() steht im Adapter nicht zur Verfügung.
Was wäre der empfohlene Weg, um UTC datetime-Werte in lokale Zeiten umzurechnen?
Ein 2. Problem habe ich beim Lesen von fremden States. Laut Beschreibung soll dies mit adapter.getForeignState() ohne Probleme möglich sein.
if(adapter.config.idRainSensor !== '') { // use only rain sensor if exist adapter.getForeignState(adapter.config.idRainSensor, function (err, idState) { if (err) { adapter.log.error(err); return; } // id rain sensor valid adapter.subscribeForeignStates(adapter.config.idRainSensor); }); }
Kann mir jemand einen Adapter empfehlen, der analoges umgesetzt hat?
Dies ist mir weder mit diesem noch einem anderen Datenpunkt gelungen. Beim Debuggen komme ich nicht in die nachfolgende Zeile "if (err) {", der Code wird ohne Fehlermeldung beim nächsten Codeblock fortgesetzt.
Muss ich für die Nutzung von getForeignState zusätzlich Requirements erfüllen? Rechte setzen?
Gibt es einen Adapter der getForeignState nutzt, wo ich mir eine Umsetzung anschauen kann?
-
getTimezoneOffset() steht im Adapter nicht zur Verfügung. `
https://wiki.selfhtml.org/wiki/JavaScript/Objekte/Date/getTimezoneOffset ist eine Javascript-Funktion, die auf Date-Objekte angewendet wird. Sie muss daher auch im Adapter zur Verfügung stehen. -
okay, ich hatte angenommen, das die Funktion unabhängig von einem Date-Object die Zeitzone liefert.
let dD = new Date(); let dO = dD.getTimezoneOffset();
liefert was ich möchte = -120.
Bleibt noch mein Problem mit adapter.getForeignState()
-
Bleibt noch mein Problem mit adapter.getForeignState() `
Du hast aber schon verstanden, dass der zweite Parameter eine Callback-Funktion ist, die zu einem späteren Zeitpunkt (üblicherweise wenige ms) aufgerufen wird?
D.h. es wird der getForeignState-Befehl abgesetzt, dann geht es sofort untendrunter weiter und später wird der Callback ausgeführt.
-
Ich hatte den BreakPoint auf "if (err) {" gesetzt und gewartet, dass die Ausführung da zum Stehen kommt, klappte aber irgendwie nicht. In einem ähnlichen Bsp. habe ich versucht, einen Wert von einem "externen Datenpunkt" zu lesen und in eine "globale" Skriptvariable zu schreiben, was mir aber nicht gelungen ist, der zu lesende Wert wurde nicht geschrieben.
Inzwischen habe ich das mit der Variablen anders gelöst und nach einem Neustart des ioBroker-Hosts bleibt die Skriptausführung jetzt auch bei meinem BreakPoint stehen. Waren vielleicht vorher zu viele Fehler.
Danke