RTL-433 + MQTT - einzelne Readings auslesen

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

Vorheriges Thema - Nächstes Thema

kpwg

#15
Hallo Thomas,

danke für den Denkanstoß! Mit ein wenig Spielerei bei Regex101 bin ich ans Ziel gekommen:
rtl433:home/rtl433/RTL_433toMQTT\/([^\/:]+)\/([^\/:]+)\/([A-Za-z0-9._]+)[/]?:.* "$1_$2_$3"
rtl433:home/rtl433/RTL_433toMQTT\/([^\/:]+)\/([^\/:]+)[\/]?:.* "$1_$2"
rtl433:home/rtl433/RTL_433toMQTT\/([^\/:]+)\/?:.* "$1"
Die Lösung matcht nun passend ohne multiple-match, was bekanntlich schief geht. Ich teste noch ein wenig, aber der erste praktische Durchlauf sieht schon sehr gut aus.
Viele Grüße,

Ricardo

TomLee

#16
Was ich nicht verstehe (ich hab aber auch nicht wirklich Ahnung von der Sache, sorge bloss für Knabberspass, Nebeneffekt ist das ich evtl. dabei selbst was mitnehme), warum siehst Du in jeder Zeile am Ende einen optionalen Schrägstrich vor ?
Warum matchst du im dritten "Unterordner" explizit  auf Buchstaben und numerische Werte ?

Wozu die dritte Zeile ? Ist es so gedacht das Daten nur unter dem ersten "Unterordner" (Gerätetyp) reinkommen können ?
Die Zeile ist hinten dann doch aber Käse ?

Generell, kann es auch Daten geben die in einem vierten oder fünften "Unterordner" reinkommen ?

kpwg

Zitat von: TomLee am 31 Juli 2024, 13:02:38Was ich nicht verstehe (ich hab aber auch nicht wirklich Ahnung von der Sache, sorge bloss für Knabberspass, Nebeneffekt ist das ich evtl. dabei selbst was mitnehme), warum siehst Du in jeder Zeile am Ende einen optionalen Schrägstrich vor ?
Warum matchst du im dritten "Unterordner" explizit  auf Buchstaben und numerische Werte ?
copy-paste aus bereits funktionierenden regEx'en :)
Ich habe davon auch keine Ahnung, aber an dieser Stelle viel dazu gelernt. Am Ende ist der Nutzen ja sowieso fragwürdig, aber die Lösung funktioniert.
ZitatWozu die dritte Zeile ? Ist es so gedacht das Daten nur unter dem ersten "Unterordner" (Gerätetyp) reinkommen können ?
Die Zeile ist hinten dann doch aber Käse ?

Generell, kann es auch Daten geben die in einem vierten oder fünften "Unterordner" reinkommen ?
Nein, ich kenne zumindest Keine.

Der RTL_433toMQTT liefert vier Arten von Sensordaten:

1. die von sich selbst, bestehend aus
rtl433:home/rtl433/RFtoMQTT:.* { json2nameValue($EVENT) }
rtl433:home/rtl433/SYStoMQTT:.* { json2nameValue($EVENT) }
rtl433:home/rtl433/SSD1306toMQTT:.* { json2nameValue($EVENT) }
rtl433:home/rtl433/WebUItoMQTT:.* { json2nameValue($EVENT) }
(Um perspektivisch ein Template zu erstellen, müssten die noch für bridgeRegexp erfasst werden)

2. Sensordaten mit drei Parametern, z.B.
home/rtl433/RTL_433toMQTT/Rubicson-Temperature/1/244:.* { json2nameValue($EVENT) }
3. Sensordaten mit zwei Parametern, z.B.
home/rtl433/RTL_433toMQTT/Govee-Water/0:.* { json2nameValue($EVENT) }
4. Sensordaten mit nur einem Parameter, z.B.
home/rtl433/RTL_433toMQTT/Generic-Motion:.* { json2nameValue($EVENT) }
Mir ging es vor allem um die vollautomatische Sortierung in einzelne SubDevices, im MainDevice sollen keine Sensordaten erscheinen, welche sich nicht zuordnen lassen. Es soll auch jedes SubDevice nur einen Sensor beinhalten. Das funktioniert natürlich nicht bei (4), den Sensordaten mit nur einem Parameter, da werden die verschiedenen Sensoren offenbar über die Nutzdaten unterschieden. Ich benötige das nicht, die Sortierung ist damit aber vollständig.

TomLee

#18
rtl433:home/rtl433/RTL_433toMQTT\/([^\/:]+)\/?:.*:.* "$1"passt so aber nicht für nur einen Unterordner
home/rtl433/RTL_433toMQTT/Generic-Motion:.* { json2nameValue($EVENT) }
Versuchs mal genau so wie ich zeige.
Die CID (rtl433:) weglassen und das escapen in dem Attribut kann man machen muss man aber nicht:
home/rtl433/RTL_433toMQTT/([^/]+)/([^/]+)/([^/]+):.* "oMQTTgw_$1_$2_$3"
home/rtl433/RTL_433toMQTT/([^/]+)/([^/]+):.* "oMQTTgw_$1_$2"
home/rtl433/RTL_433toMQTT/([^/]+):.* "oMQTTgw_$1"

kpwg

#19
Du hast recht, ich habs korrigiert.
https://regex101.com/r/yV34Sq/1
So matcht es, Deine Version aber hat ein Problem mit dem Zeilenumbruch, wenn ich das richtig deute.