In Perl eine Zahl aus einem Ausdruck filtern, wie?

Begonnen von franky08, 10 September 2013, 20:14:35

Vorheriges Thema - Nächstes Thema

franky08

Interresant wird das ganze wenn die Temperatur unter 0 geht, also im Minusbereich ist, dann schaltet das Licht auch! Also wenn die Raumtemperatur höher ist wie die Temperatur (Differenz_2_1) über dem Herd.

Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

franky08

Kann man das mit abs ändern um den absoluten Wert zu bekommen?

DiffTemp {my $diff = ReadingsVal($name,"state","99"); abs($diff =~ m/T:\s*([\d\.]+)/); return $1;}



Gruß Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

justme1968

DiffTemp {my $diff = ReadingsVal($name,"state","99"); $diff =~ m/T:\s*([\d\.]+)/; return abs($1);}

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

franky08

Das hatte ich schon so probiert, doch dann bekomme ich als DiffTemp immer 16 zurück, egal wie hoch die Temperatur im state ist.


Readings
DiffTemp
16
2013-09-13 17:54:35
state
T: 0.5
2013-09-13 17:48:52

Nach einem Neustart des fhem Servers scheint es jetzt zu funktionieren, wie gesagt ich hatte es schon mit return abs ($1) probiert und es dann verworfen, da in dem reading DiffTemp 16 stand.
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

franky08

Hallo Andre,
es scheint als ob manchmal ein falscher Wert (immer 16) in der DiffTemp steht, ich dachte ich hätte das gestern mit einem Neustart behoben aber eben ist es wieder aufgetreten:

Readings
DiffTemp
16
2013-09-14 09:19:26
state
T: -0.3
2013-09-14 09:19:26

Was kann das sein, das userreading hatte ich so angepasst, wie du es mir gezeigt hast:
DiffTemp {my $diff = ReadingsVal($name,"state","99"); $diff =~ m/T:\s*([\d\.]+)/; return abs($1);}

Nachdem eben vom Sensor ein neuer T: Wert kam stimmt alles wieder

DiffTemp
1.3
2013-09-14 09:25:06
state
T: 1.3
2013-09-14 09:25:06

Seltsam,

Viele Grüße
Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

justme1968

bau am besten mal vor dem return ein Log 3, $diff; Log 3, $1; ein.

dann stehen beide werte im logfile. und man kann nachträglich nachschauen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

franky08

2013.09.14 09:43:42 2: HMLAN_Parse: HMLAN1 new condition disconnected
2013.09.14 09:43:42 3: Opening HMLAN1 device 192.168.2.222:1000
2013.09.14 09:43:42 3: HMLAN1 device opened
2013.09.14 09:43:42 2: HMLAN_Parse: HMLAN1 new condition init
2013.09.14 09:43:43 1: Including ./log/fhem.save
2013.09.14 09:43:48 3: Device Diff_Temp_Sensor added to ActionDetector with 000:10 time
2013.09.14 09:43:48 3: Device IR_Sensor added to ActionDetector with 000:10 time
2013.09.14 09:43:48 3: Device Schalter_Tuer added to ActionDetector with 028:00 time
2013.09.14 09:43:49 3: Device THSensor added to ActionDetector with 000:10 time
2013.09.14 09:45:39 3: T: -0.3
2013.09.14 09:45:39 3: 16

2013.09.14 09:45:39 2: CUL_HM set Herdlicht on
2013.09.14 09:45:39 2: HMLAN_Parse: HMLAN1 new condition ok
2013.09.14 09:45:46 2: CUL_HM set Badlicht on-for-timer 180
2013.09.14 09:45:46 2: CUL_HM set Badlicht on-for-timer 180
2013.09.14 09:45:46 2: CUL_HM set Badlicht on-for-timer 180
2013.09.14 09:48:20 3: T: -0.5
2013.09.14 09:48:20 3: 16
2013.09.14 09:50:46 3: T: -0.2
2013.09.14 09:50:46 3: 16
2013.09.14 09:52:59 3: T: 1.4
2013.09.14 09:52:59 3: 16

2013.09.14 09:53:19 2: CUL_HM set Badlicht on-for-timer 180
2013.09.14 09:53:19 2: CUL_HM set Badlicht on-for-timer 180
2013.09.14 09:53:19 2: CUL_HM set Badlicht on-for-timer 180
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

justme1968

wenn negative werte vorkommen können muss der regulären ausdruck noch so erweitert werden das - auch erlaubt ist.$diff =~ m/T:\s*([\d\.-]+)/;
gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

franky08

Kann das abs dann aus dem regex weg, wenn die negativen Werte im regulärem Ausdruck schon berücksichtigt werden ?
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

justme1968

man kann den regulären ausdruck auch so umbauen das er das - ignoriert und wirklich nur die zahl zurück liefert. dann kann das abs weg:my $diff = ReadingsVal($name,"state","99"); $diff =~ m/T:\s*-?([\d\.]+)/; return($1);
gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

franky08

Vielen Dank, Andre, ich denke das es jetzt funktioniert. Ein schönes Wochenende und viele Grüße

Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...