Modul 40_RTL433.pm LogFile bzw. SVG erzeugen

Begonnen von snoop, 26 Februar 2019, 23:19:18

Vorheriges Thema - Nächstes Thema

snoop

Hallo, bin Neu hier.
Bis jetzt bin ich mit dem Lesen ganz gut klar gekommen. Aber jetzt komm ich nicht mehr weiter und bin auf Hilfe angewiesen.
Plan:
mit DVB-T Stick den Aussentemperaturfühler auslesen und ein Diagramm über Temp. und Feuchte erstellen.

Bis jetzt hab ich es hinbekommen in FHEM Werte vom Fühler zu bekommen. Aber ich schaff es nicht das zug in ein Diagramm (SVG-Plot) zu bringen.
Hier die Ausgabe von 'list RTL433'
Internals:
   NAME       RTL433
   NR         64
   PID        1258
   PROCESSED 
   STATE      Started
   TYPE       RTL433
   UNPROCESSED Humidity  : 26 %|Temperature: 6.50 C|Button    : 0|Battery   : LOW|Channel   : 1|rid       : 244|id        : 5|model     : Prologue sensor|time      : 2019-02-26 23:13:17|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Attributes:
   extraArguments -R03
   sensors    { sensor1 => { device => 'Prologue.ID5',
readings => [ 'Battery', 'Temperature', 'Humidity' ],
pattern => 'channel.*rid.*battery (\w+).*Temp: (-?[\d\.]+).*Humidity: ([\d\.]+)', },}


Danke schon mal für eure Hilfe. (zur Info: diverse Suchmaschinen haben mir nicht geholfen)

KernSani

Hi und willkommen,
als erstes: Bitte Code tags (das # oben im Editor) verwenden, macht das Ganze lesbarer.
Dann wäre interessant, wie dein Filelog aussieht und was das Problem mit dem Plot ist. Falls du eines von beiden nicht hast empfehle ich Anfänger-PDF, Commandref und Wiki.



Kurz, weil mobil
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

snoop

Danke für den Hinweis, werd ich das nächste mal machen.

Ich habe werde logFile noch Plot. das ist ja  mein Problem.
Also eigentlich das LogFile. Den Plot bring ich normal schon hin wenn ich ein Log hab.
Aber ich scheiter am Log, trotz lesen.
Deine erwähnte Lektüre ist mir nicht unbekannt.

KernSani

#3
Dann zeig mal was du bereits gemacht hast, um das Log zu definieren...

Edit: Mir fällt gerade auf, dass dein Device garkeime Readings hat... vielleicht solltest du das erstmal in Ordnung bringen (ich gebe aber zu: Von dem Modul hane ich noch etwas gehört)

Kurz, weil mobil
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

snoop

Wenn mein Problem anders einfacher zu lösen ist, gerne.
Ich will eigentlich nur Die Aussentemperatur und Feuchtigkeit von einem 433MHz -Sender in Fhem als Diagramm darstellen.
Nach langem Lesen und probieren bin ich auf die Möglichkeit mit dem DVB-T-Stick gekommen. Da solche Dinger noch ein paar rumliegen hab ich mir gedacht dass ich diesen Weg gehe.
Außerdem kann ich mit diese Methode (sofern es mal klappt) weiter 433MHz - Geräte einbinden.
Was ich bis jetzt getan hab:
Habe mir dieses Modul in FHEM installiert:
https://github.com/jnsbyr/fhem/blob/master/FHEM/40_RTL433.pm

Danach habe ich folgendes nach Anleitung ausgeführt:

define RTL433 RTL433

attr RTL433 extraArguments -R03

attr RTL433 sensors { sensor1 => { device => 'Prologue.ID5',
readings => [ 'Battery', 'Temperature', 'Humidity' ],
pattern => 'channel.*rid.*battery (\w+).*Temp: (-?[\d\.]+).*Humidity: ([\d\.]+)', },}


Nach einem Neustart bekam ich dann folgende Ausgabe:

Internals:
   NAME       RTL433
   NR         64
   PID        1258
   PROCESSED 
   STATE      Started
   TYPE       RTL433
   UNPROCESSED Humidity  : 29 %|Temperature: 13.80 C|Button    : 0|Battery   : LOW|Channel   : 1|rid       : 244|id        : 5|model     : Prologue sensor|time      : 2019-02-27 11:47:33|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Attributes:
   extraArguments -R03
   sensors    { sensor1 => { device => 'Prologue.ID5',
readings => [ 'Battery', 'Temperature', 'Humidity' ],
pattern => 'channel.*rid.*battery (\w+).*Temp: (-?[\d\.]+).*Humidity: ([\d\.]+)', },}


Bei 'readings' steht Battery , Temperature, Humidity. Und bei 'UNPROCESSED' stehen die Live-Informationen die ich brauche.
Wie bring ich jetzt folgendes in ein LogFile:
Humidity  : 29 %|Temperature: 13.80 C|Battery   : LOW
(Battery ist nicht zwingend notwendig)

PS.:
Ich habe schon mit 'define LogAussen FILELOG logs/433.log' rumgespielt. Aber damit kam ich nicht weiter.
433.log wurde mit
https://github.com/merbanan/rtl_433
erzeugt.
Danach stolperte cih eben auf das FHEM-Modul RTL433. Mit dem taucht jetzt wenigstens das oben beschriebene in der FHEM-Oberfläche auf.
Ich hoffe es ist jetzt Verständlich was ich will, bereits gemacht habe und wo mein Problem liegt.
Sollten noch weitere Infos benötigt werden lasst es mich wissen.

KernSani

Hi,

wie oben schon angedeutet - du hast keine readings, du hast ein Attribut namens readings, das vermutlich angibt welche readings erzeugt werden sollten, das scheint aber nicht zu funktionieren, nur wenn readings erstellt/aktualisiert werden, bibt es auch die entsprechenden events (auf die ein Filelog dann reagieren würde um sie ins Log zu schreiben). Daher müsstest du erstmal rausfinden, wie das Attribut "readings" genutzt werden muß, um aus UNPROCESSED vernünftige readings zu erzeugen.

Grüße,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

DeeSPe

Zitat von: snoop am 26 Februar 2019, 23:19:18
Plan:
mit DVB-T Stick den Aussentemperaturfühler auslesen und ein Diagramm über Temp. und Feuchte erstellen.

Mit einem "DVB-T Stick" kann man Temperatursensoren auslesen?
Oder was soll mit dem "DVB-T Stick" gemacht werden?
Und müsste es nicht mittlerweile "DVB-T2" sein? ;)

Ein Modul "RTL433" kennt mein FHEM nicht und dieses ist auch nicht in der commandref zu finden.
Woher ist das?

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Esjay

Zitat von: DeeSPe am 27 Februar 2019, 14:50:31
Mit einem "DVB-T Stick" kann man Temperatursensoren auslesen?
Oder was soll mit dem "DVB-T Stick" gemacht werden?
Und müsste es nicht mittlerweile "DVB-T2" sein? ;)

Ein Modul "RTL433" kennt mein FHEM nicht und dieses ist auch nicht in der commandref zu finden.
Woher ist das?

Gruß
Dan

Ich bin mal so frei.

https://www.hamspirit.de/6557/wie-du-die-signale-einer-funkwetterstation-mit-einem-dvb-t-stick-dekodierst/

Modul ist von hier:
https://github.com/jnsbyr/fhem/blob/master/FHEM/40_RTL433.pm

Scheint wohl nicht sehr bekannt zu sein.

Wenn du deine readings erfolgreich in FHEM eingebunden hast, und Events erzeugt werden, kannst du dir ein FileLog respektive im nächsten Schritt ein Plot direkt aus dem Event-Monitor generieren lassen.

Grüße


snoop

zuerst noch ein paar Infos bezüglich SDR mit DVB-T Sticks:
Es kann sein das noch die originalen Treiber auf die Blacklist müssen.
z.b diese Datei erzeugen: /etc/modprobe.d/blacklist-dvbt.conf und folgenden Inhalt einfügen.

blacklist dvb_usb_rtl28xxu
blacklist rtl2830
blacklist rtl2832

Funktioniert nicht nur mir dem Raspberry sonder auch mit jedem anderen Debian Derivat.
Gute Infos findet man unter anderem hier ->   http://blog.wenzlaff.de/?p=9492

So, aber jetzt wieder zu meinem Problem. Laut FHEM-Doku sollten doch Readings da sein?? Zitat:
ZitatReadings werden mit dem define-Befehl des jeweiligen Devices oder bei den ersten Übertragungen mit jenem angelegt und mit Werten gefüllt.
Ein Device habe ich doch mit " define MeinRTL RTL433" angelegt.
Ich komm nicht weiter und aus der Dokumentation werde ich auch nicht schlau.

Macht es die Sache einfacher wenn man eine JSON oder CSV File als Quelle hat? das ist mit der Software RTL_433 (nicht das Fhem-Modul) auch möglich.
Ich kann dann zum Beispiel unter logs eine Datei rtl433.json erstellen.
Entschuldigt bitte, aber ich finde die Syntax von Fhem / Perl ist nicht gerade verständlich. Auch den grundsätzlichen Aufbau von FHEM hab ich noch nicht wirklich verstanden.
Vielleicht bekomm ich es mit eurer Hilfe hin.

jensb

Die Version des Moduls RTL433 auf GitHub ist nicht für die aktuelle Version von rtl_433 geeignet. Ich werde am Wochenende ein Update auf GitHub bereit stellen.

Um Readings zu bekommen, muss man den Output von rtl_433 filtern. Das geht mit dem Attribut "sensors", das gleichzeitig die Readings und die Filterbedingungen als Regexp definiert. Beispiel:


{   sensor1 => { device => 'model : THGR122N House Code: 50 Channel : 1', readings => [ 'Battery', 'Temperature', 'Humidity' ],
                 pattern => '^time.*Battery : (\w+) Temperature: (-?[\d\.]+) C Humidity : ([\d\.]+).* %$', },
    sensor2 => { device => 'model : THGR122N House Code: 213 Channel : 3', readings => [ 'Battery', 'Temperature', 'Humidity' ],
                 pattern => '^time.*Battery : (\w+) Temperature: (-?[\d\.]+) C Humidity : ([\d\.]+).* %$',
                 scaleHumidity => 1, offsetHumidity => -6, },
    sensor3 => { device => 'model : THGR122N House Code: 171 Channel : 2', readings => [ 'Battery', 'Temperature', 'Humidity' ],
                 pattern => '^time.*Battery : (\w+) Temperature: (-?[\d\.]+) C Humidity : ([\d\.]+).* %$',
                 offsetHumidity => -6, },
    sensor4 => { device => 'model : AlectoV1 Rain Sensor House Code: 194 Channel : 0', readings => [ 'Battery', 'Rain' ],
                 pattern => '^time.*Battery : (\w+) Total Rain: ([\d\.]+) mm', },   
}


Das ergibt dann die Readings

sensor1Battery
sensor1Dewpoint
sensor1Humidity
sensor1Temperature
...


Dazu nimmt man die empfangenen Daten des Internal UNPROCESSED und baut sich eine passende Regexp. Das kann ein bisschen nervig sein, ist aber bei dem variablen Output von rtl_433 der beste Weg. Ggf. einen Online-Regexp-Tester verwenden.

Es kann auch hilfreich sein, die Auswertung auf bestimmte Decoder zu begrenzen mit dem Attribut extraArguments (Beispiel: -R12 -R16). Bei Empfangsproblemen sollte man mit dem Attribut bitLevel herumspielen. Genaueres zu den Attributen findet man in der Hilfe von rtl_433.

Grüße,
Jens
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

snoop

#10
So sieht bei mir dir Ausgabe im Terminal von 'rtl_433 -R03' aus.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
time      : 2019-02-28 22:11:25
model     : Prologue sensor                        id        : 5
rid       : 244          Channel   : 1             Battery   : LOW           Button    : 0             Temperature: 9.20 C
Humidity  : 27 %



In fehm habe ich beim Attribut Sensors folgendes angegeben:


{ sensor1 => { device => 'Prologue.*sensor',
readings => [ 'Battery', 'Temperature', 'Humidity' ],
pattern => 'channel.*rid.*battery (\w+).*Temp: (-?[\d\.]+).*Humidity: ([\d\.]+)', },}



bei UNPROCESSED steht dann:


Humidity : 27 %|Temperature: 9.10 C|Button : 0|Battery : LOW|Channel : 1|rid : 244|id : 5|model : Prologue sensor|time : 2019-02-28 22:16:40|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _



READINGS erscheinen keine. Liegt das jetzt an dem SENSORS-Eintrag oder an der alten Version?

Was beudet eigentlich der Ausdruck nach battery, Temp und Humidity? (Ausdruck in Klammern)
'channel.*rid.*battery (\w+).*Temp: (-?[\d\.]+).*Humidity: ([\d\.]+)',

Welcher Name gehört nach device? Ist er beliebig wählbar oder ist es die Ausgabe bei model?

Nach meinem Verständnis sollte doch diese Zeile zum Erfolg führen:


^Humidity : ([\d]+).*Temperature: ([\d\.]+).*Battery : ([A-Z]{1,4})


jensb

@snoop

ZitatLiegt das jetzt an dem SENSORS-Eintrag oder an der alten Version?
Du brauchst auf jeden Fall die neue Version. Alles andere ist Zeitverschwendung. Wenn die neue Version fertig ist, werde ich es hier posten.

ZitatWas beudet eigentlich der Ausdruck nach battery, Temp und Humidity? (Ausdruck in Klammern)
Das ist der entscheidende Teil der Regexp. Die Elemente in den Klammern werden aus dem Quelltext extrahiert und als Readings zur Verfügung gestellt. Dazu bitte die Regexp-Doku von Perl zu Rate ziehen.

Beispiele:


  • (\w+): 1 or more word characters (same as [a-zA-Z0-9_]+) - erlaubt Texte wie OK und LOW für die Battery
  • (-?[\d\.]+) : 1 or more digits and dots with optional "-" prefix - erlaubt Zahlenwerte mit Dezimalpunkt und Vorzeichen

Grüße,
Jens
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

jensb

Die neue Version des Moduls 40_RTL433 ist nun über GitHub verfügbar.


Grüße,
Jens
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

snoop

So, jetzt bin ich wieder dazu gekommen.
Danke für die Arbeit. Jetzt läuft es genau so wie es es laufen soll.

Eine Frage hab ich noch. Wie stellt man den Batteriestatus (LOW/HIGH) im Diagramm dar?

jensb

Da gibt es mehrere Möglichkeiten. Ich verwende meist die Abkürzung, wandle den Text in eine Zahl und gebe mich damit zufrieden. Das geht im Plot-Editor mit der Spalte "Function". Den Spaltenindex (hier 2) müsstest du je nach Logausgabeformat ggf. anpassen:

$fld[2]&&$fld[2]eq'LOW'?0:1

Grüße,
Jens
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb