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