Argument "" isn't numeric in

Begonnen von link611, 18 April 2017, 13:48:06

Vorheriges Thema - Nächstes Thema

link611

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?

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

link611

#2
$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.

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

link611

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.

CoolTux

Sicher das das at an der Meldung Schuld ist?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

automatisierer

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)

DeeSPe

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.
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

automatisierer

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")
}
}

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe