FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: heikoh81 am 14 Dezember 2014, 17:29:05

Titel: (gelöst) Perl: "15.0 W" numerisch verwenden für >=
Beitrag von: heikoh81 am 14 Dezember 2014, 17:29:05
Hallo zusammen,

mittels Fritz!Dect 200 habe ich bislang die aktuelle Anschlussleistung ausgelesen und mittels >= etc. verarbeitet.
Dies hat bis zum heutigen Update auch geklappt, nun läuft mein Log auf einen Perl-Fehler.
Problem ist, dass die Watt-Angabe wohl ein String ist, ich aber einen numerischen Vergleich mitttels >= durchführen will.

define FBDECT_01_Wasch_Betrieb_An notify FBDECT_01_Wasch {fhem ("set FBDECT_01_Wasch_Betrieb on") if (ReadingsVal("FBDECT_01_Wasch","power","") >= 15 && Value("FBDECT_01_Wasch_Betrieb") ne "on")}

Fehler im Log:
2014.12.14 17:27:28 1: PERL WARNING: Argument "0.00 W" isn't numeric in numeric le (<=) at (eval 2020) line 1.
2014.12.14 17:27:28 3: eval: {fhem ("set FBDECT_01_Wasch_Betrieb standby") if (ReadingsVal("FBDECT_01_Wasch","power","") <= 4 && Value("FBDECT_01_Wasch_Betrieb") eq "on")}


Die Fritz!Dect 200 erzeugt diese Daten im Log:
2014-12-14_17:24:22 FBDECT_02_Kueche power: 2.86 W
2014-12-14_17:26:22 FBDECT_02_Kueche power: 3.93 W


Wie bekomme ich die Watt-Zahl "3.96" aus dem String isoliert, so dass ich wieder einen numerischen Vergleich durchführen kann?

Viele Grüße,
Heiko
Titel: Antw:(gelöst) Perl: "15.0 W" numerisch verwenden für >=
Beitrag von: heikoh81 am 14 Dezember 2014, 18:03:43
Wurde bereits hier diskutiert:
http://forum.fhem.de/index.php?topic=25803.0 (http://forum.fhem.de/index.php?topic=25803.0)

Lösung:
Statt nur
ReadingsVal("FBDECT_02_Trockner","power","")
zu verwenden, muss man die Zahl aus diesem String extrahieren:
substr(ReadingsVal("FBDECT_02_Trockner","power",""), 0,length(ReadingsVal("FBDECT_02_Trockner","power",""))-2)

Somit funktioniert auch wieder mein notify:
FBDECT_02_Trockner {fhem ("set FBDECT_02_Trockner_Betrieb on") if (substr(ReadingsVal("FBDECT_02_Trockner","power",""), 0,length(ReadingsVal("FBDECT_02_Trockner","power",""))-2) >= 15 && Value("FBDECT_02_Trockner_Betrieb") ne "on")}

Alternativer Vorschlag im oben genannten Thread ist, statt "<=" den Begriff "le" (less equals) zu verwenden.
Die Fehlermeldung kam zwar nicht mehr, mangels Wäsche konnte ich aber nicht testen, ob die Logik auch wirklich funktioniert.

Viele Grüße,
Heiko
Titel: Antw:(gelöst) Perl: &quot;15.0 W&quot; numerisch verwenden für &gt;=
Beitrag von: volschin am 15 Dezember 2014, 07:23:38
Hallo Heiko, du hast alles richtig gemacht. Der Tipp mit "le" ist falsch. Das ist ein String Operator. Damit ist für den 9 W größer als 10 W, da das eine mit 9 und das andere mit 1 beginnt.
Gruß
Veit