[gelöst] rechnet FHEM falsch??

Begonnen von tbals, 01 Oktober 2015, 00:02:44

Vorheriges Thema - Nächstes Thema

tbals

Ich kann es ja nicht wirklich glauben, aber ich habe hier ein einfaches script, bei dem FHEM fast immer die falschen Werte liefert.
Es geht darum aufgrund des Taupunktes im Keller und Aussen anzuzeigen, ob nun gerade gelüftet werden sollte, oder eher nicht.
Hier mein script:

define WK.Lueften dummy
attr WK.Lueften room Wohnkeller
attr WK.Lueften group Lueften
attr WK.Lueften alias Fenster Wohnkeller
attr WK.Lueften devStateIcon lueften:fts_window_1w_open@green Schimmelgefahr:fts_window_1w_tilt@red schliessen:fts_window_1w@orange

define WK.Lueften_log FileLog ./log/Lueften-%Y.log WK.Lueften
attr WK.Lueften_log logtype text



define LueftungSkript at +*00:15:00 {\
my $temp_WK=ReadingsVal("TH2","temperature", "0")-3;;\
my $dewp_WK=ReadingsVal("TH2","dewpoint", "0");;\
my $temp_GT=ReadingsVal("WetterGT","temperature", "0");;\
my $dewp_GT=ReadingsVal("WetterGT","dewpoint", "0");;\
fhem("setreading WK.Lueften Temperatur_Keller $temp_WK");;\
fhem("setreading WK.Lueften Taupunkt_Keller $dewp_WK");;\
fhem("setreading WK.Lueften Temperatur_Aussen $temp_GT");;\
fhem("setreading WK.Lueften Taupunkt_Aussen $dewp_GT");;\
if ($dewp_WK gt $dewp_GT) {\
fhem("set WK.Lueften lueften");;\
}\
else {\
fhem("set WK.Lueften schliessen");;\
}\
if ($dewp_WK ge $temp_WK) {\
fhem("set WK.Lueften Schimmelgefahr");;\
}\
}



Das geht vielleicht etwas cleverer, aber die Syntax und Logik sollte korrekt sein.
Wenn der Taupunkt aussen niedrieger ist als im Keller, soll FHEM anzeigen das man lüften kann, und anders herum. Und die Temperatur im Keller unter oder gleich dem Taupunkt liegt, soll Schimmelgefahr angezeigt werden. Mehr nicht, eigentlich ganz einfach.

Tut aber nicht, FHEM rechnet ganz oft anders.
Ein Blick ins Logfile verrät schon komische Dinge:


2015-09-30_20:24:53 WK.Lueften Temperatur_Keller: 14.5
2015-09-30_20:24:53 WK.Lueften Taupunkt_Keller: 11.1
2015-09-30_20:24:53 WK.Lueften Temperatur_Aussen: 12
2015-09-30_20:24:53 WK.Lueften Taupunkt_Aussen: 7.3
2015-09-30_20:24:53 WK.Lueften schliessen
:
2015-09-30_23:24:53 WK.Lueften Temperatur_Keller: 14.3
2015-09-30_23:24:53 WK.Lueften Taupunkt_Keller: 9.7
2015-09-30_23:24:53 WK.Lueften Temperatur_Aussen: 10
2015-09-30_23:24:53 WK.Lueften Taupunkt_Aussen: 6.5
2015-09-30_23:24:53 WK.Lueften lueften
2015-09-30_23:24:53 WK.Lueften Schimmelgefahr


Warum meldet das script um 20:24h "schliessen" obwohl Taupunkt_Keller greater then Taupunkt_Aussen?
Warum meldet das script um 23:24h "Schimmelgefahr" obwohl der Taupunkt niedriger als die Temperatur ist?

Ich verstehe das nicht.

Gruss
  Thomas
1x JeeLink am ODROID C1 (FHEM2FHEM) für diverse LaCrosse Sensoren,  HMLAN für diverse Homematic Aktoren,
Haupt-FHEM auf Asus EeeBox und als DBlog-Server

rapster

Ohne es genauer zu lesen...

"gt" ne ">="

Gruß
  Claudiu

viegener

Eigentlich ist Dein Problem, dass eigentlich gar nicht gerechnet wird, weil Du nur Textvergleiche machst und damit schon gar nicht falsch gerechnet wird.

Du machst Textvergleiche und nicht Zahlenvergleiche, damit werden die Anfangszeichen verglichen. Für numerische Vergleiche müssen auch die Operatoren >, <, >=,  <= bzw == vernwedet werden (statt gt und Konsorten). Perl wandelt wenn nötig auch Texte implizit in Zahlen um.

Im Beispiel sollte also bereits:

if ($dewp_WK > $dewp_GT) {\

Dein Problem lösen und Perl/FHEM rechnet dann (und zwar richtig)

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

betateilchen

...und das alles hat überhaupt nichts mit fhem zu tun, sondern das sind eigentlich allersimpelste perl-Grundlagen. Vielleicht einfach mal ein gutes Buch über perl lesen, das könnte enorm helfen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

tbals

Danke für die Hinweise, mit "<, > und Co." klappt es dann natürlich fehlerfrei. Da hätte ich in der Tat auch selber drauf kommen können *patsch*

Ein Perl-Buch wäre aber nur die halbe Wahrheit. Ich schreibe gelegentlich mal ein paar Zeilen in Perl, aber im FHEM sieht es doch oft noch anders aus.

1x JeeLink am ODROID C1 (FHEM2FHEM) für diverse LaCrosse Sensoren,  HMLAN für diverse Homematic Aktoren,
Haupt-FHEM auf Asus EeeBox und als DBlog-Server