RTL-433 + MQTT - einzelne Readings auslesen

Begonnen von 1.fhemtester, 22 August 2022, 16:11:26

Vorheriges Thema - Nächstes Thema

1.fhemtester

Ich habe einen RTL-433 SDR mit MQTT laufen. MQTT2_SERVER und MQTT2_DEVICE ist installiert und läuft problemlos.
AttrTemplate MQTT2_CLIENT_general_bridge wurde gesetzt.

Readlinglist zeigt:

rtl_433_b362ffff:rtl_433/r4-64/events:.* { json2nameValue($EVENT) }
rtl_433_b362ffff:rtl_433/r4-64/devices/AlectoV1-Wind/1/36/time:.* 1_36_time
rtl_433_b362ffff:rtl_433/r4-64/devices/AlectoV1-Wind/1/36/id:.* 1_36_id
rtl_433_b362ffff:rtl_433/r4-64/devices/AlectoV1-Wind/1/36/channel:.* 1_36_channel
rtl_433_b362ffff:rtl_433/r4-64/devices/AlectoV1-Wind/1/36/battery_ok:.* 1_36_battery_ok
rtl_433_b362ffff:rtl_433/r4-64/devices/AlectoV1-Wind/1/36/wind_avg_m_s:.* 1_36_wind_avg_m_s
rtl_433_b362ffff:rtl_433/r4-64/devices/AlectoV1-Wind/1/36/wind_max_m_s:.* 1_36_wind_max_m_s
rtl_433_b362ffff:rtl_433/r4-64/devices/AlectoV1-Wind/1/36/wind_dir_deg:.* 1_36_wind_dir_deg
rtl_433_b362ffff:rtl_433/r4-64/devices/AlectoV1-Wind/1/36/mic:.* 1_36_mic
rtl_433_b362ffff:rtl_433/r4-64/devices/AmbientWeather-TX8300/1/108/time:.* 1_108_time
rtl_433_b362ffff:rtl_433/r4-64/devices/AmbientWeather-TX8300/1/108/id:.* 1_108_id
rtl_433_b362ffff:rtl_433/r4-64/devices/AmbientWeather-TX8300/1/108/channel:.* 1_108_channel
rtl_433_b362ffff:rtl_433/r4-64/devices/AmbientWeather-TX8300/1/108/battery:.* 1_108_battery
rtl_433_b362ffff:rtl_433/r4-64/devices/AmbientWeather-TX8300/1/108/temperature_C:.* 1_108_temperature_C
rtl_433_b362ffff:rtl_433/r4-64/devices/AmbientWeather-TX8300/1/108/mic:.* 1_108_mic
...
(gekürzt, da zahlreiche weitere Einträge vorhanden)

Readings werden aktualisiert.

Wie kann ich am einfachsten die zahlreichen devices in einzelne Geräte aufsplitten und "Fremdgeräte" ausblenden ?

Otto123

#1
Hi,

schau mal hier als Einstieg
https://wiki.fhem.de/wiki/MQTT2-Module_-_Praxisbeispiele#bridgeRegexp
https://forum.fhem.de/index.php/topic,116480.msg1107818.html#msg1107818
Also bridgeRegexp ist das Mittel um Geräte aufzusplitten.
Das hier verwirrt mich
AttrTemplate MQTT2_CLIENT_general_bridge wurde gesetzt.
Ich denke damit warst Du falsch? Du hast doch keinen MQTT2_CLIENT ?


Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

1.fhemtester

Hallo Otto,

automatisch wurde ein MQTT2_DEVICE MQTT2_rtl_433_b362ffff angelegt.
Dort hab ich dann attrTemplate MQTT2_CLIENT_general_bridge gesetzt.

Manuell konnte ich

define K1 MQTT2_DEVICE 1_36
attr K1 autocreate 1
attr K1 event-on-change-reading .*
attr K1 readingList rtl_433_b362ffff:rtl_433/r4-64/devices/AmbientWeather-TX8300/1/108/battery:.* 1_36_battery\
rtl_433_b362ffff:rtl_433/r4-64/devices/AlectoV1-Wind/1/36/wind_avg_m_s:.* 1_36_wind_avg_m_s\
rtl_433_b362ffff:rtl_433/r4-64/devices/AlectoV1-Wind/1/36/wind_max_m_s:.* 1_36_wind_max_m_s\
rtl_433_b362ffff:rtl_433/r4-64/devices/AlectoV1-Wind/1/36/wind_dir_deg:.* 1_36_wind_dir_deg\
rtl_433_b362ffff:rtl_433/r4-64/devices/AlectoV1-Temperature/1/36/temperature_C:.* 1_36_temperature_C\
rtl_433_b362ffff:rtl_433/r4-64/devices/AlectoV1-Temperature/1/36/humidity:.* 1_36_humidity
attr K1 room MQTT2_DEVICE
attr K1 stateFormat T: 1_36_temperature_C H: 1_36_humidity W: 1_36_wind_avg_m_s max 1_36_wind_max_m_s

anlegen.

Weil ich aber viele Geräte empfange, suche ich nach einen (halb)automatischen Lösung.

Die Wiki Artikel und viele Postings zu MQTT hab ich gelesen aber wohl nicht vollständig verstanden.

Auch bridgeRegexp hab ich gesehen, aber wo und wie genau muss ich das setzen ?

Otto123

#3
Zitat von: 1.fhemtester am 22 August 2022, 21:09:14
Dort hab ich dann attrTemplate MQTT2_CLIENT_general_bridge gesetzt.
Ok ich revidiere meine Aussage: Mit Abstand betrachtet ist der Template Name unglücklich gewählt? kannst Du jetzt nix für.

Allerdings nützt Dir das Template noch nichts, denn das dort gesetzte Attribute bridgeRegexp passt nicht für Dich.

In dem Beitrag https://forum.fhem.de/index.php/topic,116480.msg1107818.html#msg1107818 habe ich eigentlich Schritt für Schritt erklärt wie man vorgehen muss. Versuch Dich doch mal wenigstens vorzutasten. Ich weiß leider nicht mehr ob es da noch einen umfassenderen Beitrag gab. ::)

Hier mal Vorschlag erarbeitet https://regex101.com/r/vw2vHn/1

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

1.fhemtester

O.k. Danke versuch ich mal.
Erstaunlich, dass da noch niemand eine fertige Lösung hat.
SDRs sind verbreitet und RTL_433 ist doch schon einige Monate alt und eine FHEM Anbindung über MQTT biete sich an um sich mal in der Umgebung umzusehen was da so alles sendet.
Aussensensor brauch ich mir keinen kaufen, da gibt es einige.  :)

DetlefR

Mal nicht ganz zum Thema passend.

Wie bekommt man den SDR dazu, all das zu empfangen und zu senden.
Ich habe auch noch so ein Ding rumliegen. Aber so richtig beschäftigt.. dazu hat es bisher nicht gereicht.

Gruß
Detlef

1.fhemtester

Senden kann der RTL nicht, nur empfangen.

Hier eine Schnellinstallation für Linux:

sudo apt-get install libtool libusb-1.0-0-dev librtlsdr-dev rtl-sdr build-essential cmake pkg-config
git clone https://github.com/merbanan/rtl_433.git
    cd rtl_433/
    mkdir build
    cd build
    cmake ..
    make
    make install
rtl_433
Damit wird die default Einstellung mit 433.92 gesetzt.

Dann sollten Meldungen ähnlich

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
time      : 2022-08-23 10:19:16
model     : AlectoV1-Wind House Code: 36
Channel   : 1            Battery   : 1             Wind speed: 0.00 m/s
Wind gust : 0.00 m/s     Wind Direction: 315       Integrity : CHECKSUM

erscheinen.

Wenn erfolgreich dann in FHEM den MQTT Server aktivieren

define MQTTR2 MQTT2_SERVER 1883

und den RTL mit

rtl_433 -F mqtt://localhost:1883 &

starten.

Wenn alles klappt erscheint dann eine Readinglist ähnlich dem ersten Posting.

RTL_433 kennt eine große  Anzahl von Optionen u.a. zur Auswahl von Protokollen und auch zum Frequenz setzten z.b für 868.3 MHz.
Wenn auf 433.92 nichts empfangen wird kann man es auch auf  868.3  versuchen.

DetlefR


1.fhemtester

Hallo Otto,
Danke für den Hinweis

attr MQTT2_rtl_433_b362ffff bridgeRegexp rtl_433\/([^\/:]+)\/([^\/:]+)\/([^\/:]+)\-([^\/:]+)\/([^\/:]+)\/([^\/:]+).* "$3_$4_$5"

tut für mich was es soll.

Da aber RTL_433 viele Geräte kennt, muss die  bridgeRegexp nicht unbedingt für jedes Gerät passen.
Optimierungen sind also gerne gesehen