ECMDDevice, Classdef zum herausfiltern eines Temperatur-Wertes

Begonnen von andreas_n, 30 Mai 2015, 15:20:55

Vorheriges Thema - Nächstes Thema

andreas_n

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

frober

Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

andreas_n

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

frober

Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

kpwg

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

andreas_n

#5
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


kpwg

Respekt, Andreas! 8)
Ich teste das auch mal und berichte.