FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: link611 am 18 April 2017, 13:48:06

Titel: Argument "" isn't numeric in
Beitrag von: link611 am 18 April 2017, 13:48:06
Hiho,

ich wollte ein notify bauen, dass mich informiert, wenn im Badezimmer die Temperatur unter X Grad fällt.

Nun will mir Perl aber sagen, dass ein Wert 18.4 nicht nummerisch ist. (es werden keine Einheiten mitgeliefert) Ich weiß leider nicht, wo es hier hakt?!

define test at +00:00:01 {my $temp = ReadingsVal("BZ.Heizung_Clima","measured-temp",0);;if (Value $temp > 17){fhem("set Pushover msg 'Temperatur groesser 17' 'blubb'");;}}

Ergebnis: 18.4


Wollte den "String" auch mal verkürzen, weil ich dachte der . wäre das Problem, aber das selbe Ergebnis:

define test at +00:00:01 {my $temp = ReadingsVal("BZ.Heizung_Clima","measured-temp",0);;my $temp2=substr($temp, 0,length($temp)-2);;;;if (Value $temp2 > 17){fhem("set Pushover msg 'Temperatur groesser 18' 'blubb'");;}}

Ergebnis: 18

Logeintrag lautet immer:

2017.04.18 13:38:09 1: PERL WARNING: Argument "" isn't numeric in numeric gt (>) at (eval 1593) line 1.



Kann mir jemand helfen?
Titel: Antw:Argument "" isn't numeric in
Beitrag von: DeeSPe am 18 April 2017, 13:51:49
Was soll "Value $temp" sein?

So sollte ein Schuh draus werden:
define test at +00:00:01 {fhem "set Pushover msg 'Temperatur groesser 17' 'blubb'" if (ReadingsNum("BZ.Heizung_Clima","measured-temp",0) > 17)}

Gruß
Dan
Titel: Antw:Argument "" isn't numeric in
Beitrag von: link611 am 18 April 2017, 13:56:17
$temp ist die Variable in der ich das ReadingsVal gespeichert hatte, siehe Anfang des Codes.

dein Code funktioniert, ja... den Unterschied den ich jetzt erkenne ist anstatt ReadingsVal - ReadingsNum, aber wo ist es denn bei mir faslch? Wenn ich ReadingsNum nutze bekomme ich noch immer den selben Fehler.
Titel: Antw:Argument "" isn't numeric in
Beitrag von: DeeSPe am 18 April 2017, 14:07:05
Und wofür dann "Value $temp" wenn Du doch schon die Temperatur in $temp hast?
Value wird benötigt um auf den Inhalt von STATE zuzugreifen.

Deine erste Variante dürfte auch so funktionieren:
define test at +00:00:01 {my $temp = ReadingsVal("BZ.Heizung_Clima","measured-temp",0);;if ($temp > 17){fhem("set Pushover msg 'Temperatur groesser 17' 'blubb'");;}}
Also einfach Value weglassen.

Gruß
Dan
Titel: Antw:Argument "" isn't numeric in
Beitrag von: link611 am 19 April 2017, 10:31:29
Habe jetzt das at wie folgt angelegt:

+*00:00:20 {
if (ReadingsNum("BZ.Heizung_Clima","measured-temp",0) < 13) {
set HF.Gong_Mp3 press;; set HF.Gong_red press;; set BZ.timer off;;
}
}



jedoch die selbe Meldung.
Titel: Antw:Argument "" isn't numeric in
Beitrag von: CoolTux am 19 April 2017, 10:46:41
Sicher das das at an der Meldung Schuld ist?
Titel: Antw:Argument "" isn't numeric in
Beitrag von: automatisierer am 19 April 2017, 10:52:45
diff {fhem("set Pushover msg 'Temperatur groesser 17' 'blubb'");;}} {   set HF.Gong_Mp3 press;; set HF.Gong_red press;; set BZ.timer off;;}

> fhem("

8)
Titel: Antw:Argument "" isn't numeric in
Beitrag von: DeeSPe am 19 April 2017, 10:55:58
Zitat von: link611 am 19 April 2017, 10:31:29
Habe jetzt das at wie folgt angelegt:

+*00:00:20 {
if (ReadingsNum("BZ.Heizung_Clima","measured-temp",0) < 13) {
set HF.Gong_Mp3 press;; set HF.Gong_red press;; set BZ.timer off;;
}
}



jedoch die selbe Meldung.

Da fehlt der fhem Aufruf drum herum und es geht auch kürzer:
+*00:00:20 { fhem "set HF.Gong_Mp3,HF.Gong_red press; set BZ.timer off" if (ReadingsNum("BZ.Heizung_Clima","measured-temp",0) < 13)}

Gruß
Dan

P.S. Der Code ist für die DEF nicht für die fhem.cfg.
Titel: Antw:Argument "" isn't numeric in
Beitrag von: automatisierer am 19 April 2017, 11:07:45
Zitat von: link611 am 19 April 2017, 10:31:29
Habe jetzt das at wie folgt angelegt:

+*00:00:20 {
if (ReadingsNum("BZ.Heizung_Clima","measured-temp",0) < 13) {
set HF.Gong_Mp3 press;; set HF.Gong_red press;; set BZ.timer off;;
}
}



jedoch die selbe Meldung.

wobei das doch auch funzen sollte, lediglich der fhem aufruf fehlt doch... oder?

+*00:00:20 {
if (ReadingsNum("BZ.Heizung_Clima","measured-temp",0) < 13) {
fhem("set HF.Gong_Mp3 press;; set HF.Gong_red press;; set BZ.timer off")
}
}
Titel: Antw:Argument "" isn't numeric in
Beitrag von: DeeSPe am 19 April 2017, 11:30:00
Zitat von: automatisierer am 19 April 2017, 11:07:45
wobei das doch auch funzen sollte, lediglich der fhem aufruf fehlt doch... oder?

+*00:00:20 {
if (ReadingsNum("BZ.Heizung_Clima","measured-temp",0) < 13) {
fhem("set HF.Gong_Mp3 press;; set HF.Gong_red press;; set BZ.timer off")
}
}


Hätte, würde, sollte...

Ja, sollte!

Probieren macht klug! 8)

In der DEF müssen die ; nicht verdoppelt werden. Darum kümmert sich FHEM beim übernehmen selbst.

Gruß
Dan