[HTTPMOD] mehrere getxxURL mit gleichem JSON

Begonnen von mahowi, 11 März 2017, 11:10:17

Vorheriges Thema - Nächstes Thema

mahowi

Hallo,

aktuell lese ich die Daten von tado° mit der Definition aus diesem Beitrag aus. Wenn ich jetzt analog zu get01URL https://my.tado.com/api/v2/homes/%homeid%/zones/1/state eine zweite Zone mit get02URL abfragen will, habe ich das Problem, daß die Readings der ersten URL überschrieben werden, da das empfangene JSON gleich ist.

Momentan löse ich das durch 2 Devices. Kann ich beide Zonen auch in einem Device auslesen, in dem die Ausgaben von beiden unterschieden werden?
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

StefanStrobel

Hallo,

Deine Lösung mit zwei Devices ist derzeit vermutlich der einzige Weg.

Gruss
    Stefan

mahowi

Das habe ich mir fast gedacht. Schön wäre es, sowas wie einen Präfix für die verschiedenen URLs definieren zu können.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

StefanStrobel

Klingt auf den ersten Blick einfach, aber das hat Auswirkungen auf MaxAget etc. und führt dann doch zu Änderungen an einigen Stellen im Code ...
Ich setze es mal auf die Wunschliste ;-)
Der Weg mit zwei Geräten sollte aber auch ohne Probleme funktionieren oder?

Gruss
   Stefan

mahowi

Ja, mit 2 Geräten läuft es problemlos. Ist also nur ein "nice to have".  ;)
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

dev0

Du könntest die JSON Strings auch von dem Modul expandJSON zerlegen lassen, dass ich in den nächsten Tagen auch ins svn einchecken möchte. Mit gesetztem Attribut addReadingsPrefix werden die neuen Readings mit einem entsprechenden Prefix angelegt.

Dei vorläufige Version findest Du hier: https://github.com/ddtlabs/expandJSON

mahowi

Wenn ich das richtig sehe, müsste ich dann mit HTTPMOD nur die rohen JSON-Daten holen und an Dein Modul weiterreichen. Die fertigen Readings stehen dann in expandJSON. Damit habe ich dann zwar alle Readings in einem Device, aber der Aufbau ist komplizierter.

Ich werde es mir mal ansehen, aber ich denke, vom Aufwand her ist es mit meinen 2 HTTPMOD-Geräten einfacher.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

dev0

Zitat von: mahowi am 13 März 2017, 11:19:16
Die fertigen Readings stehen dann in expandJSON.
Nein, die neu erzeugten Readings würden auch ins ursprüngliche HTTPMOD Device geschrieben. Die Readings werden in das Device geschrieben, woher auch die JSON Daten herkommen.
Wenn man die regexp für die Source-Readings geschickt wählt, dann reicht auch eine expandJSON Instanz für x-beliebig viele HTTPMOD/MQTT,... Devices. Weiterhin hat man die Möglichkeit, die neuen Readings auszuwählen, die aus dem JSON String überhaupt geschrieben werden sollen.

expandJSON ist im Endeffect nicht mehr als ein userReading, dass JSONs in einzelne Readings ins gleiche Device aufteilt...

mahowi

Hm, das wird so vermutlich nicht funktionieren. Wenn ich die URLs mit HTTPMOD abrufe, bekomme ich für jede URL ein JSON zurück. Diese sind aber gleich aufgebaut, d.h. es stehen die dieselben Bezeichner nur mit unterschiedlichen Werten drin. Das sieht dann so aus:

Zone 1:
{"tadoMode":"AWAY","geolocationOverride":false,"geolocationOverrideDisableTime":null,"preparation":null,"setting":{"type":"HEATING","power":"ON","temperature":{"celsius":17.21,"fahrenheit":62.97}},"overlayType":null,"overlay":null,"link":{"state":"ONLINE"},"activityDataPoints":{"heatingPower":{"type":"PERCENTAGE","percentage":53.00,"timestamp":"2017-03-13T12:13:26.857Z"}},"sensorDataPoints":{"insideTemperature":{"celsius":17.16,"fahrenheit":62.89,"timestamp":"2017-03-13T12:27:01.239Z","type":"TEMPERATURE","precision":{"celsius":0.1,"fahrenheit":0.1}},"humidity":{"type":"PERCENTAGE","percentage":32.90,"timestamp":"2017-03-13T12:27:01.239Z"}}}

Zone 2:
{"tadoMode":"AWAY","geolocationOverride":false,"geolocationOverrideDisableTime":null,"preparation":null,"setting":{"type":"HEATING","power":"ON","temperature":{"celsius":18.21,"fahrenheit":64.77}},"overlayType":null,"overlay":null,"link":{"state":"ONLINE"},"activityDataPoints":{"heatingPower":{"type":"PERCENTAGE","percentage":0.00,"timestamp":"2017-03-13T12:28:53.920Z"}},"sensorDataPoints":{"insideTemperature":{"celsius":19.34,"fahrenheit":66.81,"timestamp":"2017-03-13T12:28:52.852Z","type":"TEMPERATURE","precision":{"celsius":1.0,"fahrenheit":1.0}},"humidity":{"type":"PERCENTAGE","percentage":32.60,"timestamp":"2017-03-13T12:28:52.852Z"}}}

Wenn sich beide anders als durch die zu den Parametern gehörigen Werte unterscheiden würden, könnte ich ja beide auch direkt in HTTPMOD auswerten. JSON wird da ja auch direkt in Readings zerlegt.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

dev0

Wenn die JSON Strings, nacheinander, ins selbe Reading geschrieben werden, dann habe ich diese Ausgangslage falsch verstanden.
Wenn sie allerdings in unterschiedlichen Readings verfügbar sind, dann würde es funktionieren. Ich kenne HTTPMOD nicht...

mahowi

Genau das ist das Problem. Die Readingnamen müssten schon beim Einlesen mit einem Präfix geändert werden, damit ich beide URLs in einem Device abrufen kann. So überschreiben sich die beiden gegenseitig.

Dein Modul müsste also schon beim Erstellen der Readings eingreifen, damit es funktioniert.

Aber vielen Dank für die Hilfe. Dein Modul kann ich bestimmt an anderer Stelle noch einsetzen.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee