Hallo,
aktuell lese ich die Daten von tado° mit der Definition aus diesem Beitrag (https://forum.fhem.de/index.php/topic,21598.msg601014.html#msg601014) 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?
Hallo,
Deine Lösung mit zwei Devices ist derzeit vermutlich der einzige Weg.
Gruss
Stefan
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.
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
Ja, mit 2 Geräten läuft es problemlos. Ist also nur ein "nice to have". ;)
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
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.
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...
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.
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...
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.