FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: devien am 04 Juli 2017, 14:44:58

Titel: Perl Fehlermeldung wie nummerisches Argument mit "eq" nutzen
Beitrag von: devien am 04 Juli 2017, 14:44:58
Hallo,

ich habe inzwischen eine regelmäßige Meldung im Log
2017.07.04 07:00:01 1: PERL WARNING: Argument "48.7M-BM-0C" isn't numeric in numeric gt (>) at (eval 1086285) line 1, <GEN20826> line 2233.
ich bin noch nicht annähernd firm in perl, aber mir ist schon klar das die Meldung besagt das es sich nicht um einen Numerischen Wert handelt und ich dies entsprechend umgehen ("eq") bzw parsen muss.
wenn ich in der dazugehörigen doif abfrage
([21:00-07:00])(set Relay2:FILTER=STATE=on off)(set Pumpe_02 dim 0)(set Relay3:FILTER=STATE=on off)(set Pumpe_03 dim 0)(set SR01CADO_Heat_bot message Solar cmd1) DOELSEIF([07:00-21:00] and ([Solar_temp_01] > 40.0 or [Solar_temp_04] > 40.0 or [Solar_temp_05] > 40.0 or [Solar_temp_06] > 40.0 or [Solar_temp_07] > 40.0 or [Solar_temp_08] > 40.0) and [DS18B20_Vorlauf_S:temperature] < 35.0)(set Pumpe_02 dim 26)(set Relay2:FILTER=STATE=off on)(set Pumpe_03 dim 91)(set Relay3:FILTER=STATE=off on)(set SR01CADO_Heat_bot message Solar cmd2) DOELSEIF([07:00-21:00] and [DS18B20_Vorlauf_S:temperature] >65.0)(set Relay2:FILTER=STATE=off on)(set Relay3:FILTER=STATE=off on)(set Pumpe_03 dim {([Pumpe_03:dim]-2)})(set SR01CADO_Heat_bot message Solar cmd3) DOELSEIF([07:00-21:00] and ([Solar_temp_01] > 40.0 or [Solar_temp_04] > 40.0 or [Solar_temp_05] > 40.0 or [Solar_temp_06] > 40.0 or [Solar_temp_07] > 40.0 or [Solar_temp_08] > 40.0) and [DS18B20_Vorlauf_S:temperature] <=65.0 and [DS18B20_Vorlauf_S:temperature] >35.0)(set Pumpe_02 dim 26)(set Relay2:FILTER=STATE=off on)(set Pumpe_03 dim 73)(set SR01CADO_Heat_bot message Solar cmd4)
jedoch anstelle ">" ein "eq" einfügen würde und der Wert weit über 40 liegt passt es wohl nicht mehr.

kann mir jemand sagen wie ich das umgangen bekommen bzw. wo ich nachlesen kann?

Gruß devien
Titel: Antw:Perl Fehlermeldung wie nummerisches Argument mit "eq" nutzen
Beitrag von: Otto123 am 04 Juli 2017, 14:54:21
Hi,

Ich nehme ja an [Solar_temp_01] liefert "48.7M-BM-0C" und nicht 48.7 - oder?
Gib mal ein list Solar_temp_01 oder versuche selbst ein Reading zu finden welches nur die Zahl liefert. Dann nimmst Du [Solar_temp_01:<reading>]

Gruß Otto
Titel: Antw:Perl Fehlermeldung wie nummerisches Argument mit "eq" nutzen
Beitrag von: devien am 04 Juli 2017, 15:02:09
na klar, da ist dem ja ein reading vorgeschaltet, das dürfte es schon rausreißen, danke dir.
Titel: Antw:Perl Fehlermeldung wie nummerisches Argument mit "eq" nutzen
Beitrag von: Fixel2012 am 04 Juli 2017, 15:06:50
Zitat von: Otto123 am 04 Juli 2017, 14:54:21
Hi,

Ich nehme ja an [Solar_temp_01] liefert "48.7M-BM-0C" und nicht 48.7 - oder?
Gib mal ein list Solar_temp_01 oder versuche selbst ein Reading zu finden welches nur die Zahl liefert. Dann nimmst Du [Solar_temp_01:<reading>]

Gruß Otto

[Solar_temp_01:<reading>:d]
ein ":d" blendet meines Wissens nach alle nicht nummerischen Werte des angegebenen Readings aus.
Titel: Antw:Perl Fehlermeldung wie nummerisches Argument mit "eq" nutzen
Beitrag von: nils_ am 04 Juli 2017, 15:09:48
Zitat von: devien am 04 Juli 2017, 14:44:58
jedoch anstelle ">" ein "eq" einfügen würde und der Wert weit über 40 liegt passt es wohl nicht mehr.

guck mal da:
http://perldoc.perl.org/perlop.html#Relational-Operators