HTTPMOD Abfrage mit speziellen Readings

Begonnen von Cruiser79, 16 Dezember 2025, 08:14:56

Vorheriges Thema - Nächstes Thema

Cruiser79

Moin,

ich habe eine Webadresse, die ich per HTTPMOD Abfrage, die mir folgende Ausgabe liefert (Auszug)

{
    "data": {
        "sensors": [
            {
                "id": "viacloud:46:8bd1fb1c-b3d9-4132-83f7-1909219615b5",
                "type": "SPEED_SIGN",
                "datasources": [
                    {
                        "id": "viacloud:46:8bd1fb1c-b3d9-4132-83f7-1909219615b5",
                        "name": "Speed Limit",
                        "stringValue": "50",
                        "numberValue": 50,
                        "datasourceType": "SPEED_LIMIT",
                        "unit": "km/h",
                        "__typename": "Datasource"
                    },
                    {
                        "id": "viacloud:46:8bd1fb1c-b3d9-4132-83f7-1909219615b5",
                        "name": "Average Speed",
                        "stringValue": "48",
                        "numberValue": 48,
                        "datasourceType": "AVERAGE_SPEED",
                        "unit": "km/h",
                        "__typename": "Datasource"
                    },

Ich kann darauf natürlich jetzt ganz "normal" mit JSON drauf zugreifen
reading01JSON data_sensors_01_datasources_01_numberValue
reading01Name SpeedLimit
Was aber eigentlich gerne hätte, wäre die id und den Typ des Sensors als eindeutige id in meinem Reading. So das ich ein Reading hätte, das ungefähr wie folgt aussieht
data_sensors_8bd1fb1c_b3d9_4132_83f7_1909219615b5_datasources_speed_limit_numberValueDas wird HTTPMOD wahrscheinlich nicht alleine können, aber gibt es von jemanden eine Idee, wie ich das umsetzen könnte?

Gruß,
Tim
FHEM auf Raspberry Pi
HM-CFG-LAN mit HM-TC-IT-WM-W-EU, HM-CC-RT-DN, HM-WDS10-TH-O, HM-LC-SW1-FM, HM-LC-Bl1-FM
Signalduino mit Elro AB440, LOGILINK WS0002, IT CMR-1000

rudolfkoenig

Womoeglich kann dabei json2nameValue helfen: https://wiki.fhem.de/wiki/MQTT2_DEVICE_-_Schritt_f%C3%BCr_Schritt#json2nameValue.28.29
json2reading baut auf diese Funktion auf, und erzeugt aus JSON die Readings.

betateilchen

Vielleicht wäre auch JsonMod statt HTTPMOD die bessere Wahl.
Schon mit complete() in der readinglist gehen die Namen in Richtung Deiner Wunschvorstellung.
Wenn man die Aufbereitung der Namen dann noch ein bisschen verfeinert, lässt sich Dein Wunsch vermutlich erfüllen.

defmod tj JsonMod file:///tmp/test.json
attr tj readingList complete()

setstate tj 2025-12-16 10:51:59 .computedReadings data.sensors.0.datasources.1.numberValue,data.sensors.0.datasources.1.__typename,data.sensors.0.datasources.0.name,data.sensors.0.datasources.0.__typename,data.sensors.0.datasources.1.name,data.sensors.0.datasources.0.unit,data.sensors.0.datasources.0.stringValue,data.sensors.0.datasources.0.datasourceType,data.sensors.0.type,data.sensors.0.datasources.0.id,data.sensors.0.datasources.1.stringValue,data.sensors.0.datasources.1.id,data.sensors.0.datasources.0.numberValue,data.sensors.0.datasources.1.unit,data.sensors.0.datasources.1.datasourceType,data.sensors.0.id
setstate tj 2025-12-16 10:51:59 data.sensors.0.datasources.0.__typename Datasource
setstate tj 2025-12-16 10:51:59 data.sensors.0.datasources.0.datasourceType SPEED_LIMIT
setstate tj 2025-12-16 10:51:59 data.sensors.0.datasources.0.id viacloud:46:8bd1fb1c-b3d9-4132-83f7-1909219615b5
setstate tj 2025-12-16 10:51:59 data.sensors.0.datasources.0.name Speed Limit
setstate tj 2025-12-16 10:51:59 data.sensors.0.datasources.0.numberValue 50
setstate tj 2025-12-16 10:51:59 data.sensors.0.datasources.0.stringValue 50
setstate tj 2025-12-16 10:51:59 data.sensors.0.datasources.0.unit km/h
setstate tj 2025-12-16 10:51:59 data.sensors.0.datasources.1.__typename Datasource
setstate tj 2025-12-16 10:51:59 data.sensors.0.datasources.1.datasourceType AVERAGE_SPEED
setstate tj 2025-12-16 10:51:59 data.sensors.0.datasources.1.id viacloud:46:8bd1fb1c-b3d9-4132-83f7-1909219615b5
setstate tj 2025-12-16 10:51:59 data.sensors.0.datasources.1.name Average Speed
setstate tj 2025-12-16 10:51:59 data.sensors.0.datasources.1.numberValue 48
setstate tj 2025-12-16 10:51:59 data.sensors.0.datasources.1.stringValue 48
setstate tj 2025-12-16 10:51:59 data.sensors.0.datasources.1.unit km/h
setstate tj 2025-12-16 10:51:59 data.sensors.0.id viacloud:46:8bd1fb1c-b3d9-4132-83f7-1909219615b5
setstate tj 2025-12-16 10:51:59 data.sensors.0.type SPEED_SIGN

In der Datei /tmp/test.json steht der Json-Auszug, den Du oben gepostet hattest.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!