Sensordaten mittels SDR und RTL_433 über MQTT einlesen und auswerten

Begonnen von Biker1099, 10 Februar 2019, 13:56:37

Vorheriges Thema - Nächstes Thema

Biker1099

Hallo zusammen,

mit dem tool RTL_433 möchte ich über einen SDR DVB T Stick Sensoren auslesen und über mqtt dann an fhem übergeben.
Auf dem Raspberry läuft lokal mosquitto. Der MQTT String RTL_433/JSON MQTT wird in fhem auch gefunden.

rtl_433 -f 868290000 -M hires -M level -F json | mosquitto_pub -h 127.0.0.1 -i RTL_433 -l -t RTL_433/JSON

Die Daten kommen lt. log im Json Format für die unterschiedlichen verschieden Sensoren.

Bsp:


19.02.10 13:43:01 5: publish received for RTL_433/JSON, {"time" : "2019-02-10 13:43:01.224998", "brand" : "LaCrosse", "model" : "TX29-IT", "id" : 58, "battery" : "OK", "newbattery" : 0, "temperature_C" : 19.400, "humidity" : 51, "mic" : "CRC", "mod" : "FSK", "freq1" : 868.333, "freq2" : 868.218, "rssi" : -0.138, "snr" : 32.006, "noise" : -32.602}
2019.02.10 13:43:01 5: calling readingsSingleUpdate(Klima,,{"time" : "2019-02-10 13:43:01.224998", "brand" : "LaCrosse", "model" : "TX29-IT", "id" : 58, "battery" : "OK", "newbattery" : 0, "temperature_C" : 19.400, "humidity" : 51, "mic" : "CRC", "mod" : "FSK", "freq1" : 868.333, "freq2" : 868.218, "rssi" : -0.138, "snr" : 32.006, "noise" : -32.602},1)
2019.02.10 13:43:02 5: publish received for RTL_433/JSON, {"time" : "2019-02-10 13:43:01.754673", "brand" : "LaCrosse", "model" : "TX29-IT", "id" : 15, "battery" : "OK", "newbattery" : 0, "temperature_C" : 18.700, "humidity" : 58, "mic" : "CRC", "mod" : "FSK", "freq1" : 868.335, "freq2" : 868.222, "rssi" : -0.119, "snr" : 32.483, "noise" : -33.113}
2019.02.10 13:43:02 5: calling readingsSingleUpdate(Klima,,{"time" : "2019-02-10 13:43:01.754673", "brand" : "LaCrosse", "model" : "TX29-IT", "id" : 15, "battery" : "OK", "newbattery" : 0, "temperature_C" : 18.700, "humidity" : 58, "mic" : "CRC", "mod" : "FSK", "freq1" : 868.335, "freq2" : 868.222, "rssi" : -0.119, "snr" : 32.483, "noise" : -33.113},1)
2019.02.10 13:43:03 5: publish received for RTL_433/JSON, {"time" : "2019-02-10 13:43:02.814357", "brand" : "LaCrosse", "model" : "TX29-IT", "id" : 16, "battery" : "OK", "newbattery" : 0, "temperature_C" : 5.600, "humidity" : 91, "mic" : "CRC", "mod" : "FSK", "freq1" : 868.330, "freq2" : 868.230, "rssi" : -0.101, "snr" : 30.903, "noise" : -31.352}
2019.02.10 13:43:03 5: calling readingsSingleUpdate(Klima,,{"time" : "2019-02-10 13:43:02.814357", "brand" : "LaCrosse", "model" : "TX29-IT", "id" : 16, "battery" : "OK", "newbattery" : 0, "temperature_C" : 5.600, "humidity" : 91, "mic" : "CRC", "mod" : "FSK", "freq1" : 868.330, "freq2" : 868.230, "rssi" : -0.101, "snr" : 30.903, "noise" : -31.352},1)
2019.02.10 13:43:03 5: publish received for RTL_433/JSON, {"time" : "2019-02-10 13:43:02.945649", "brand" : "LaCrosse", "model" : "TX29-IT", "id" : 40, "battery" : "OK", "newbattery" : 0, "temperature_C" : 20.500, "humidity" : 51, "mic" : "CRC", "mod" : "FSK", "freq1" : 868.328, "freq2" : 868.220, "rssi" : -0.138, "snr" : 32.464, "noise" : -33.113}
2019.02.10 13:43:03 5: calling readingsSingleUpdate(Klima,,{"time" : "2019-02-10 13:43:02.945649", "brand" : "LaCrosse", "model" : "TX29-IT", "id" : 40, "battery" : "OK", "newbattery" : 0, "temperature_C" : 20.500, "humidity" : 51, "mic" : "CRC", "mod" : "FSK", "freq1" : 868.328, "freq2" : 868.220, "rssi" : -0.138, "snr" : 32.464, "noise" : -33.113},1)
2019.02.10 13:43:05 5: publish received for RTL_433/JSON, {"time" : "2019-02-10 13:43:05.051078", "brand" : "LaCrosse", "model" : "TX29-IT", "id" : 9, "battery" : "OK", "newbattery" : 0, "temperature_C" : 19.600, "humidity" : 55, "mic" : "CRC", "mod" : "FSK", "freq1" : 868.324, "freq2" : 868.212, "rssi" : -0.100, "snr" : 31.252, "noise" : -31.730}
..


Ziel ist eine Auswertung der Temperatur und Luftfeuchtigkeit der einzelnen Sensoren zu bekommen.
Leider komme ich hier nicht weiter und wäre über konkrete Vorschläge sehr dankbar.
Auch mit der command ref bin ich leider nicht so recht nicht weiter gekommen.
Ich habe es auch schon mit dem modul expandJSON vesucht, wobei mir nicht klar ist, wie ich es für diesen Fall konkret anlegen muss.
Könnt ihr mir sagen, wie ich an die einzelnen Sensordaten komme.

Internals:
   CHANGED   
   FUUID      5c4d9869-f33f-2d42-8e3d-49efe7e8b86d08d3
   IODev      mosquitto
   NAME       Klima
   NR         73
   STATE      incoming publish received
   TYPE       MQTT_DEVICE
   READINGS:
     2019-01-28 17:16:43   transmission-state incoming publish received
   message_ids:
   sets:
   subscribe:
     #
   subscribeExpr:
     ^.*$
   subscribeQos:
     #         
   subscribeReadings:
     RTL_433/JSON:
Attributes:
   IODev      mosquitto
   autoSubscribeReadings #
   room       9.9_MQTT
   stateFormat transmission-state
   subscribeReading_ RTL_433/JSON
   verbose    5


Vielen Dank schon einmal.

Beta-User

Vorab: Willkommen im Forum.

Mit expandJSON kenne ich mich nicht aus, vielleicht tust du dich mit den MQTT2-Modulen ggf. leichter, die "können" JSON auch direkt.
Ein grundsätzliches Problem sehe ich allerdings in der Art und Weise, wie die JSON-Daten reinkommen: Es schient ja jeweils pro ID ein Datensatz zu sein, alles kommt am selben Ort an. Man müßte demnach erst die ID extrahieren und dann erst das eigentliche JSON so auspacken, dass das ganze entweder in einem eigenen Device landet (Dummy) oder eben in dem MQTT(2)-Device mit einem passenden ID-Präfix ausgepackt wird. Schau dir dazu mal "json2nameValue()" in fhem.pl an.

Viel Erfolg!

Beta-User
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Biker1099

Sorry, für die späte Rückmeldung und vielen Dank für die  Hinweise. Ich werde mir das einmal näher ansehen.