([?00:00-23:59|[BeregnungTage]] and [?BeregnungNach] eq "Elevation" and [?Wetterstation:statRain_yearHour24] < 3 and [?Wetterstation:statRain_yearHour48] < 7 and [?Wetterstation:israining] eq "0"and ([?WetterProplanta:fc0_rain] < 4 and [?WetterProplanta:chOfRainDay] < 50) and ["BeregnungDOIF_NachSonneElevation:cmd_1"] and ($month >= [BeregnungStartmonat] and $month <= [BeregnungEndmonat]))
DOELSEIF ([?00:00-23:59|[BeregnungTage]] and [?BeregnungNach] eq "Zeit" and [?Wetterstation:statRain_yearHour24] < 3 and [?Wetterstation:statRain_yearHour48] < 7 and [?Wetterstation:israining] eq "0" and ([?WetterProplanta:fc0_rain] < 4 and [?WetterProplanta:chOfRainDay] < 50) and [[BeregnungNach:Uhrzeit]] and ($month >= [BeregnungStartmonat] and $month <= [BeregnungEndmonat]))
DOELSE
sorry, in code-tags kann man die farbe nicht ändern.
Also, der rote Teil ist neu und seitdem (wenn das DOIF ausgeführt wird, nicht beim initialisieren) bekomme ich folgende Fehlermeldung im log:
2018.06.04 07:11:40 1: PERL WARNING: Argument "" isn't numeric in numeric lt (<) at (eval 193770) line 1.
2018.06.04 07:11:40 3: eval: BeregnungDOIF_NachSonne: warning in condition c01
israining, fc0_rain und chOfRainDay kommt von Proplanta und liegt als Zahl vor, denke ich zumindest. Kann eine Zahl auch ein String sein den man dann mit "lt" und Anführungszeichen vergleichen muß? Glaube, ich habe da gerade ein bißchen Chrüsimüsi mit meinen Operatoren ???
Danke euch!
Hi,
Dein Problem ist nicht ob der Inhalt String oder numerisch ist, das Problem ist das der Inhalt leer -> "" ist!!!!
Was steht denn im Reading chOfRainDay ?
Bei mir gibt es dieses Reading nicht. :o
Gruß Otto
Moinsen Otto, mmh, verdammt, es heißt "fc0_chOfRainDay" ... wollte schon auftrumpfen und was a la "ätsch, mein Proplanta hat das" schreiben :D
ok, Fehler gefunden. VIELEN Dank. Trotzdem würde mich jetzt dann doch auch noch das Ding mit String und Numerisch in Perl interessieren.
Normalerweise konvertiert Perl Strings zu Zahlen und Zahlen zu Strings wenn es benötigt wird. Das bedeutet, man könnte schreiben:
"1" > 0
"1" > "0"
1 > 0
1 > "0"
1 eq "1"
usw.
Bedingung ist immer, das sich der String in eine Zahl umwandeln lässt.
"eins" > 1
wird deshalb zu einem Fehler führen.
http://pronix.linuxdelta.de/Perl_cgi/Perl/perl_kurs_kapitel5.shtml (http://pronix.linuxdelta.de/Perl_cgi/Perl/perl_kurs_kapitel5.shtml)
Top Mumpitzstuff, danke ... wenn doch alles so einfach wäre.
Bedeutet, der Lesbarkeit halber sollte man ><= usw bei Zahlen ohne Anführungszeichen
und lt, gt, eq usw bei Strings mit Anführungszeichen nutzen?
Ich dachte das "" (leer) im Fehler bezieht sich auf eine fehlerhafte, nicht lesbare Formatierung und deshalb leer.
Zitat von: mumpitzstuff am 04 Juni 2018, 22:49:50
"eins" > 1
wird deshalb zu einem Fehler führen.
Eigentlich ist es kein Fehler, sondern nur ein Warning... und dies ist immer falsch: Perl versteht Strings, die keine Zahl sind, als 0.
"eins" > 1 ist gleich 0 > 1 mit Warning und ist dann falsch
Okay wie man es nimmt. Für mich sind auch Warnungen Fehler. ;D
Aber um auf die Frage zurück zu kommen, man sollte Strings immer in Hochkomma packen und Zahlen halt nicht, vor allem wegen der Lesbarkeit. Strings dann mit eq und ne und Zahlen mit == und != vergleichen. Perl verzeiht an der Stelle aber wirklich viel, nur eben nicht alles.
DOIF ersetzt wahrscheinlich ein nicht vorhandenes Reading mit "", so das es dann zu deiner Warnung kommt.
Man kann bei DOIF auch Default-Werte angeben für den Fall, dass ein Reading nicht existiert: https://fhem.de/commandref_DE.html#DOIF_notexist
Für Strings kann man nach Zahlen filtern: https://fhem.de/commandref_DE.html#DOIF_Filtern_nach_Zahlen
Zitat von: mumpitzstuff am 04 Juni 2018, 22:49:50
Normalerweise konvertiert Perl Strings zu Zahlen und Zahlen zu Strings wenn es benötigt wird. Das bedeutet, man könnte schreiben:
"1" > 0
"1" > "0"
1 > 0
1 > "0"
1 eq "1"
usw.
Und ist
"00.2" == 0.2?
float auf Gleichheit zu prüfen sollte man möglichst vermeiden, da "0.02" unter Umständen auch zu 0.01999999999 konvertiert wird und dann nicht mehr gleich ist. Was bei "00.2" passiert bei der Konvertierung (falls es konvertiert wird), kann ich nicht genau sagen. Ich würde vermuten das 0.2 raus kommt.