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
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.
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
Probiers mal mit
\d+[.]\d
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
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
Respekt, Andreas! 8)
Ich teste das auch mal und berichte.