In Perl eine Zahl aus einem Ausdruck filtern, wie?

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

Vorheriges Thema - Nächstes Thema

franky08

Danke Andre, leider schaltet der Aktor immer noch nicht. Habe den Code wieder über DEF eingefügt da ich mich oft mit den Klammern vertue.
Wenn ich z.B. über {ReadingsVal("Differenz_2_1","state","99"} den State auslese, bekomme ich immer T: 3.4, also es steht immer das T: mit dabei. Gibt %EVENT nur die reine Zahl zurück?

Gruß Frank

Log:

2013.09.11 13:35:42 3: HerdlichtOn return value: syntax error at (eval 66) line 1, near "T:"
syntax error at (eval 66) line 1, at EOF
syntax error at (eval 66) line 1, at EOF
Unmatched right curly bracket at (eval 66) line 1, at end of line

 fhem.cfg

#Herdlicht schalten
#
define HerdlichtOn notify Differenz_2_1 {if( %EVENT >2 ) {\\
fhem( "set Herdlicht on" );;;;\\
} else {\\
fhem( "set Herdlicht off" );;;;\\
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

zeig bitte mal mal die ausgabe von 'list Differenz_2_1' bzw ein screenshot aus der detail ansicht im web.

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

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

franky08

Das Listing:

Internals:
   DEF        20BD8B04
   NAME       Differenz_2_1
   NR         106
   STATE      T: 3.6
   TYPE       CUL_HM
   chanNo     04
   device     Diff_Temp_Sensor
   Readings:
     2013-09-11 15:11:48   state           T: 3.6
   Helper:
     Role:
       chn        1
Attributes:
   expert     1
   fp_Grundriss 100,361,0,
   model      HM-WDS30-OT2-SM
   peerIDs    
   room       Kueche

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!
Habe jetzt mal das notify Syntaxmäßig richtig in deinen Code eingetragen und jetzt scheint es zu laufen. Bin gerade beim testen.
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

mein fehler, die \ und die doppelten ;; sind natürlich  nur nötig wenn du es direkt ins file einträgst. wenn du es im web editierst dann nur einfache ; und keine \.

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

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

franky08

Ja, vielen Dank nochmal. Es läuft definitiv. Werde trotzdem mal sehen wie man es lösen kann, dass nicht alle 2 Minuten wenn ein neuer Wert vom Sensor kommt, die Entscheidung on/off getroffen werden muss. Sonst schreibt mir das notify das ganze Logfile voll.

Vielen Dank
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

wenn alles geht kannst du die Log zeilen wieder entfernen. dann sollte nichts im log auftauchen.

ansonsten versuch das mal mit dem user reading und event-on-change oder threshold.

ich würde auch im homematic bereich mal anfragen ob das T: aus state nicht weg kann. das sollte da nichts zu suchen haben. die readings sollten immer nur die temperatur als zahl enthalten. sonst nichts. wenn jemand ein T: sehen möchte kann er es sich ja mit stateFormat so hin konfigurieren.

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

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

franky08

An der Sache arbeitet Martin noch, damit in den Readings der 4 Channel die temperature angegeben wird.
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!

Ich melde mich nochmal wegen der Differenztemperatur. Wie kann ich deinen Code:

 {my $diff = ReadingsVal("Differenz_2_1","state","99");;\
#$diff =~ m/T:\s*([\d\.]+)/;;\

einer Variable zuweisen, so in der Art Diff =  {my $diff = ReadingsVal("Differenz_2_1","state","99");;\
#$diff =~ m/T:\s*([\d\.]+)/;;\


Es geht darum dass ich die Abfrage umbauen will (THRESHOLD Modul) und dafür hätte ich den Temperaturwert gerne den Namen Diff gegeben.
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

du brauchst keine variable sondern ein user reading. da gibst du einfach den wert von $diff mit return zurück.

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

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

franky08

Hallo Andre,

ich weis nicht wie ich da genau vorgehen muss. Ich habe es jetzt folgendermaßen probiert aber da bekomme ich nur Fehlermeldungen beim speichern der fhem.cfg.

define DiffTemp dummy
attr DiffTemp userreadings Differenz_2_1 {my $diff = ReadingsVal("Differenz_2_1","state","99");;\
$diff =~ m/T:\s*([\d\.]+)/;;}
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

du brauchst keinen dummy. das user reading kommt direkt in das original device. bei dir also Differenz_2_1.

am besten wieder ohne die \ und doppelten ; im web frontend eingeben. also in die detail ansicht gehen, unten bei attr userReadings auswählen, das hier eingeben:
ZitatDiffTemp {my $diff = ReadingsVal($name,"state","99"); $diff =~ m/T:\s*([\d\.]+)/; return $1;}
und return drücken und speichern.

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

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

franky08

Habe es jetzt folgendermaßen : userreadings ist definiert als DiffTemp nur das Threshold Modul meckert "erwarte numerischen Ausdruck o.ä.

define HerdlichtON_OFF THRESHOLD Differenz_2_1:DiffTemp:init_desired_value 3|set Herdlicht on

mus die 3 in "" ?


HerdlichtON_OFF: value:init_desired_value, hysteresis needs a numeric parameter
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

define HerdlichtON_OFF THRESHOLD Differenz_2_1:DiffTemp:3|set Herdlicht on|set Herdlicht off

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

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

franky08

Das userreading funktioniert, unter Readings kommt jetzt :

Readings
DiffTemp
3.9
2013-09-12 19:47:11
state
T: 3.9
2013-09-12 19:47:11

aber das Threshold Modul schaltet nicht

Was mir aufgefallen ist das im Reading von HerdlichtOn_Off die Hysteresis auf 3 steht

OK, jetzt

define HerdlichtON_OFF THRESHOLD Differenz_2_1:DiffTemp:1:3|set Herdlicht on|set Herdlicht off

der 1. Wert ist die Hysteresis und der 2. die desired

Vielen Dank nochmal Andre
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...