[gelöst] Adapter: wie TimezoneOffset ermitteln, getForeignState liefert keinen State

Wie man einen Adapter entwickelt, oder wie man debuggen kann.
Antworten
Benutzeravatar
greyhound
starter
Beiträge: 96
Registriert: 27.10.2016, 22:00
Wohnort: Berlin

[gelöst] Adapter: wie TimezoneOffset ermitteln, getForeignState liefert keinen State

Beitrag von greyhound » 16.05.2018, 10:47

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.

Code: Alles auswählen

       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?
Zuletzt geändert von greyhound am 16.05.2018, 14:41, insgesamt 1-mal geändert.
ioBroker auf ODROID-XU4 / Influx u. a. auf FUJITSU D3400-B, Celeron G3900, 16 GB RAM / CCU2 / Nuki

paul53
guru
Beiträge: 3271
Registriert: 09.06.2015, 16:03
Wohnort: Berlin

Re: Adapter: wie TimezoneOffset ermitteln, getForeignState liefert keinen State

Beitrag von paul53 » 16.05.2018, 11:04

greyhound hat geschrieben:
16.05.2018, 10:47
getTimezoneOffset() steht im Adapter nicht zur Verfügung.
getTimezoneOffset() ist eine Javascript-Funktion, die auf Date-Objekte angewendet wird. Sie muss daher auch im Adapter zur Verfügung stehen.
Versionen für RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs:
Jessie lite, Kernel 4.4.50-v7+, hmcon 0.18, node 8.11.3, Host 1.4.2, Admin 2.0.9, Javascript 3.6.4, HM-RPC 1.7.4, Email 1.0.4, History 1.8.5, Flot 1.9.1, Vis 1.0.4, Web 2.4.0

Benutzeravatar
greyhound
starter
Beiträge: 96
Registriert: 27.10.2016, 22:00
Wohnort: Berlin

Re: Adapter: wie TimezoneOffset ermitteln, getForeignState liefert keinen State

Beitrag von greyhound » 16.05.2018, 12:27

okay, ich hatte angenommen, das die Funktion unabhängig von einem Date-Object die Zeitzone liefert.

Code: Alles auswählen

        let dD = new Date();
        let dO = dD.getTimezoneOffset();
liefert was ich möchte = -120.

Bleibt noch mein Problem mit adapter.getForeignState()
ioBroker auf ODROID-XU4 / Influx u. a. auf FUJITSU D3400-B, Celeron G3900, 16 GB RAM / CCU2 / Nuki

Benutzeravatar
AlCalzone
guru
Beiträge: 2407
Registriert: 01.03.2016, 15:16

Re: Adapter: wie TimezoneOffset ermitteln, getForeignState liefert keinen State

Beitrag von AlCalzone » 16.05.2018, 13:35

greyhound hat geschrieben:
16.05.2018, 12:27
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.
Meine Adapter:
IKEA Trådfri: GitHub | Test & Hilfe
G-Homa: GitHub | Test & Hilfe

Benutzeravatar
greyhound
starter
Beiträge: 96
Registriert: 27.10.2016, 22:00
Wohnort: Berlin

Re: Adapter: wie TimezoneOffset ermitteln, getForeignState liefert keinen State

Beitrag von greyhound » 16.05.2018, 14:41

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
ioBroker auf ODROID-XU4 / Influx u. a. auf FUJITSU D3400-B, Celeron G3900, 16 GB RAM / CCU2 / Nuki

Antworten