In Perl eine Zahl aus einem Ausdruck filtern, wie?

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

Vorheriges Thema - Nächstes Thema

franky08

Hallo, nachdem ich jetzt eine geraume Zeit in einer Perl Dokumentation gelesen habe aber daraus nicht ganz schlau geworden bin, habe ich folgende Frage: Wie kann ich aus: {if (ReadingsVal("Differenz_2_1","state","99")>2)} aus dem State nur die Temperatur herausfiltern. {ReadingsVal("Differenz_2_1","state","99")} gibt z.B. T: 3.1 zurück, dass ist eine Differenztemperatur. Ich brauche aber nur den numerischen Wert von T: also nur die Zahl.

kann mir da jemand weiterhelfen?

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

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


ein anderes beispiel ist hier: Link

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

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

franky08

Danke andre, habe im Moment noch andere Sachen um die Ohren werde morgen damit arbeiten.
Der Wert aus T: steht dann in $1, oder?

Danke 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

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

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

franky08

Hallo andre!
Komme da irgendwie nicht weiter. Der Wert, der von $1 geliefert wird muss in folgenden Code rein:

define Temp_Reading at {\
my $diff = ReadingsVal("Differenz_2_1","state","99");\
$diff =~ m/T:\s*([\d\.]+)/;\
$diff = $1;}
define HerdTmrOn at *22:50:00 {\
{fhem ("define Herd at +*00:02:00 \
{if (Value("$1")>2) \
{fhem(\"set Herdlicht on\")} \
else {fhem(\"set Herdlicht off\")}\
}\
")\
}}
define HerdTmrOff at *23:15:00 {fhem ("delete Herd")}
define HerdAUS at *23:15:30 set Herdlicht off

at erwartet eine Zeitangabe aber ich weis nicht wie es sonst zu lösen ist.

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

ich bin mir nicht sicher was du genau vor hast.... vielleicht beschreibst du es mal in worten.

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

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

franky08

Hallo Andre!

Also, ein Differenztemperatursensor (Differenz_2_1) wertet über die 2 Messfühler einmal die Umgebungstemp. und einmal die Temperatur über einem Herd aus. Wenn der Herd eingeschaltet wird und über dem Herd die Temperatur ansteigt soll ein Aktor (Herdlicht) geschaltet werden.
Der Sensor liefert in den Readings leider nur den State und keine "temperature" Hier in dem Code von gestern stehen nur noch die Zeiten vom testen drinne.
 define HerdTmrOn at *22:50:00 um die Zeit startet das Ganze (wie ein drübergebauter Timer)
define Herd at +*00:02:00 es wird alle 2 Minuten das Herdlicht geschaltet oder eben nicht geschaltet
ReadingsVal("Differenz_2_1","state","99") soll die Temperaturdifferenz liefern
Vielleicht könnte man das ganze über ein notify lösen, damit nicht alle 2 min. on oder off geschaltet werden muss (Air-Last)
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

ob ein notify besser ist hängt von einem sensort ab und wie oft er sendet bzw. ob er z.b. sendet wenn sich die temperatur ändert oder regelmässig.

es gibt viele möglichkeiten dein problem zu lösen. du kannst z.b. vorher prüfen ob die lampe schon den zustand hat dein sie haben soll und nichts tun. oder on-for-timer verwenden um sicher zu stellen das sie auch aus geht falls das thermometer ein paar werte überspringt.

das schalten ist aber im prinzip immer gleich:my $diff = ReadingsVal("Differenz_2_1","state","99");
$diff =~ m/T:\s*([\d\.]+)/;

if( $1>2 ) {
  fhem( "set Herdlicht on" );
} else {
  fhem( "set Herdlicht off" );
}


das kannst du entwerder in ein notify packen oder alle 2 minuten ausführen. in beiden fällen solltest du z.b. am anfang prüfen ob es hell ist ( isday() ) oder du nicht im zeitintervall bist in dem du schalten möchtest und direkt mit return zurück springen. und ein mal kurz nach ende des intervalls aus schalten.

wenn du es in ein at packst und on-for-timer verwendest musst du dich ums off nicht kümmern.

am besten legst du dein at oder notify mit einem leeren {} an und gibst den code dann direkt im web frontend mit einem klick auf DEF in der detail ansicht ein. dann musst du dich um \ oder doppelte ;; nicht selber kümmern.

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

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

franky08

Hallo Andre, bin eben mal schnell von Arbeit nach Hause um es zu testen. Eine Timer brauche ich eigentlich nicht der Code soll, egal zu welcher Tages-oder Nachtzeit ausgeführt werden. Habe den Code im web Frontend, in DEF eingegeben. Leider schaltet der Aktor aber nicht. In der fhem.cfg steht jetzt folgendes:

#Herdlicht schalten
#
define HerdlichtOn notify DiffTemp {my $diff = ReadingsVal("Differenz_2_1","state","99");;\
$diff =~ m/T:\s*([\d\.]+)/;;\
\
if( $1>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

das schaut erst mal nicht schlecht aus.

- schau im event viewer ob du events vom temperatursensor bekommst

- schau im log file ob du etwas siehst

- du kannst ein Log 3, "$1"; vor dem if einbauen und im log schauen ob das extrahieren richtig funktioniert.

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

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

justme1968

ach ja: wenn du wirklich immer schalten möchtest unabhängig von der tageszeit bietet sich auch das threshold modul an.

das führt genau ein mal einen schaltvorgang duch wenn ein grenzwert über bzw unterschritten wird.ohne immer wieder zu schalten wenn sich am zustand nichts ändert.

damit du ein reading bekomms das threshold auch auswerten kann brauchst du ein passendes reding im device. das ist aber kein problem. das kannst du dir mit einem userReading selber hinzufügen.

ich würde fast vorschlagen das du damit anfängst. das userReading kannst du später auch in einem notify verwenden. entweder direkt als differenz temperatur oder sogar auf 0 und 1 umgerechnet und mit event-on-change reading auch so beschränken das es keine überfüssigen schaltvorgänge gibt.

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

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

franky08

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 kannst es z.b. links unten unter logfile lesen.

gruss
  andre

ps: das leerzeichen zwischen Log und 3 ist wichtig.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

franky08

Das Leerzeichen ist OK. Im Logfile tauch nichts auf Mhh. Im Eventmonitor stehen alle 4 Channels vom Sensor:
2013-09-11 12:55:12 CUL_HM Differenz_1_2 T: -3.2
2013-09-11 12:55:12 CUL_HM Differenz_2_1 T: 3.2
2013-09-11 12:55:12 CUL_HM Temperatur_1 T: 23.0
2013-09-11 12:55:12 CUL_HM Temperatur_2 T: 26.2

Im Logfile steht nichts, was den Sensor oder den Aktor betrifft:
2013.09.11 12:42:14 0: Server shutdown
2013.09.11 12:42:21 1: Including /var/InternerSpeicher/tools/fhem/fhem.cfg
2013.09.11 12:42:22 3: telnetPort: port 7072 opened
2013.09.11 12:42:23 3: WEB: port 8083 opened
2013.09.11 12:42:23 3: WEBphone: port 8084 opened
2013.09.11 12:42:23 3: WEBtablet: port 8085 opened
2013.09.11 12:42:23 2: HMLAN_Parse: HMLAN1 new condition disconnected
2013.09.11 12:42:23 3: Opening HMLAN1 device 192.168.2.222:1000
2013.09.11 12:42:23 3: HMLAN1 device opened
2013.09.11 12:42:23 2: HMLAN_Parse: HMLAN1 new condition init
2013.09.11 12:42:28 1: Including ./log/fhem.save
2013.09.11 12:42:28 1: usb create starting
2013.09.11 12:42:28 1: usb create end
2013.09.11 12:42:28 2: SecurityCheck:  WEB,WEBphone,WEBtablet has no basicAuth attribute. telnetPort has no password/globalpassword attribute.  Restart fhem for a new check if the problem is fixed, or set the global attribute motd to none to supress this message.
2013.09.11 12:42:28 0: Server started with 63 defined entities (version $Id: fhem.pl 3872 2013-09-07 11:58:33Z rudolfkoenig $, os linux, user fhem, pid 22010)
2013.09.11 12:42:33 3: Device Diff_Temp_Sensor added to ActionDetector with 000:10 time
2013.09.11 12:42:33 3: Device IR_Sensor added to ActionDetector with 000:10 time
2013.09.11 12:42:33 3: Device Schalter_Tuer added to ActionDetector with 028:00 time
2013.09.11 12:42:33 3: Device THSensor added to ActionDetector with 000:10 time
2013.09.11 12:46:21 2: HMLAN_Parse: HMLAN1 new condition ok
2013.09.11 12:47:05 1: 192.168.2.222:1000 disconnected, waiting to reappear
2013.09.11 12:47:05 1: 192.168.2.222:1000 reappeared (HMLAN1)
2013.09.11 12:47:05 2: HMLAN_Parse: HMLAN1 new condition init
2013.09.11 12:50:54 2: HMLAN_Parse: HMLAN1 new condition ok

Auszug aus der fhem.cfg:
#Herdlicht schalten
#
define HerdlichtOn notify DiffTemp {my $diff = ReadingsVal("Differenz_2_1","state","99");;\
$diff =~ m/T:\s*([\d\.]+)/;;\
Log 3, "$1";;\
if( $1>1 ) {\
  fhem( "set Herdlicht on" );;\
} else {\
  fhem( "set Herdlicht off" );;\
}}
#define HerdTmrOff at *10:30:00 {fhem ("delete Herd")}
#define HerdAUS at *12:00:30 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

dein notify ist falsch. die syntax ist define <name> notify <device>[:event]. dein device ist Differenz_2_1 und dein reading ist T.

du brauchst den genzen kram mit der regex überhaupt nicht. in %EVENT steht direkt dein temperatur wert.

also:define HerdlichtOn notify Differenz_2_1 {
if( %EVENT >1 ) {\
fhem( "set Herdlicht on" );;\
} else {\
fhem( "set Herdlicht off" );;\
}}

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

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

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...

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...