FHEM Forum

FHEM => Sonstiges => Thema gestartet von: andreas_n am 30 Mai 2015, 15:20:55

Titel: ECMDDevice, Classdef zum herausfiltern eines Temperatur-Wertes
Beitrag von: andreas_n am 30 Mai 2015, 15:20:55
Via Ethersex und Control6 wird periodisch eine Temperaturtelegramm gesendet.

"temp 28ff5200671402ea 17.8\n"

Dies sollte mit einer folgender Definition in einer classdef einer FHEM-Variable zugewiesen werden.

reading temperature match "temp %devID ([0-9]*[.][0-9])\n"
reading temperature postproc {\s/temp %devID ([0-9]*[.][0-9])\n ..... hier weiß ich nicht mehr so recht weiter.


Bin mir sicher, dass die match-Angabe stimmt.
Aber wie bekomme ich die 17.8 nur aus dem String in die Variable "temperature"
Anmerkung: "([0-9]*[.][0-9])" filtert bereits den gewünschten Zahlenwert raus.

Gruß
Andreas
Titel: Antw:ECMDDevice, Classdef zum herausfiltern eines Temperatur-Wertes
Beitrag von: frober am 31 Mai 2015, 19:30:03
Unter http://www.ethersex.de/index.php/Nutzung_in_FHEM_(Deutsch)#1-Wire_Temperatursensoren (http://www.ethersex.de/index.php/Nutzung_in_FHEM_(Deutsch)#1-Wire_Temperatursensoren) sind die classdefs für einige Anwendungen beschrieben.
Titel: Antw:ECMDDevice, Classdef zum herausfiltern eines Temperatur-Wertes
Beitrag von: andreas_n am 01 Juni 2015, 20:57:29
Danke für die Antwort.

Ja die Seite kenne ich gut. Hilft mir nur nicht weiter.

Ich würde gerne wissen, wie Man/Frau aus dem String "temp 28ff5200671402ea 17.8\n"  die 17.8 herausfiltert.
Der String wird selbstständig gesendet durch ein Control6 Programm gesendet.

Gruß
Andreas
Titel: Antw:ECMDDevice, Classdef zum herausfiltern eines Temperatur-Wertes
Beitrag von: frober am 02 Juni 2015, 13:47:34
Probiers mal mit

\d+[.]\d
Titel: Antw:ECMDDevice, Classdef zum herausfiltern eines Temperatur-Wertes
Beitrag von: kpwg am 02 Juni 2015, 20:00:51
Hallo ihr beiden,

filtern würde ich das mit dem Substitutionsoperator, nur wo genau kann ich den in FHEM für diese "Bearbeitung" einfügen?

Ich würde jetzt so beginnen:
Der String temp 28ff5200671402ea 17.8\n sollte sich doch als temp $1 $2 abbilden lassen.
Das könnte dann  s/(.*) (.*)\n/$1 $2/ erst mal in $1 und $2 bringen, um dann wie in anderen classdefs in passende readings übernommen zu werden.
Damit können dann auch per naming angepasste Sensoren sowie negative Temperaturen bedient werden.

Bitte berichtigen, wenn es der falsche Ansatz ist  :P

Viele Grüße, Ricardo
Titel: Antw:ECMDDevice, Classdef zum herausfiltern eines Temperatur-Wertes
Beitrag von: andreas_n am 05 Juni 2015, 15:53:54
Danke ja so geht es jetzt.
(Habe im Sendestring nach der devID noch ein \n eingefügt. - War wahrscheinlich nicht erforderlich)

# Uebergabeparameter  devID (15dig)
params devID


reading T match "temp %devID \n([-0-9]*[.][0-9])\n"
reading T postproc {\
s/temp %devID\n([-0-9]*[.][0-9])\n/T: $1/;\
my $hash  = $defs{%NAME};\
my $temperature = $1;\
my $state = $1;\
\
readingsSingleUpdate($hash, "temperature", $temperature, 1);\
readingsSingleUpdate($hash, "state", $state, 1);\
\
}


Danke

Titel: Antw:ECMDDevice, Classdef zum herausfiltern eines Temperatur-Wertes
Beitrag von: kpwg am 05 Juni 2015, 16:17:16
Respekt, Andreas! 8)
Ich teste das auch mal und berichte.