FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Billy am 10 Juni 2019, 16:05:14

Titel: FHEM - IF seltsames Verhalten
Beitrag von: Billy am 10 Juni 2019, 16:05:14
@Damian

Nachdem FHEM - IF auch von Damian programmiert wurde, erlaube ich mir mein kleines Problem hier reinzustellen.

Worum geht es?

Meine seit langem funktionierende Zisternen Zulaufsteuerung sieht so aus.

myZisterne:FstD.*
IF ([myZisterne:FstD] < 5000 and [Zulauf_Strg2] eq "deactivated") (
attr Zulauf_Strg2 disable 0, ,set Broker_Syn publish retain:1 fhem/status/alarm/Zisterne_Zulauf_Strg2 on
) ELSE ...........................


Im Klartext wenn der Füllstand "FstD" unter 5000 Liter fällt soll eine Nachfüllpumpe eingeschaltet werden.
Das klappt im Normalfall problemlos.

Nun zum Problem:
Den Füllstand berechne ich für die liegende Zisterne mit einem user reading wie folgt:
FstD:ANALOG_A0.* {sprintf("%.0f",0.207*((10000*acos((100-ReadingsNum($NAME,"WstD",0))/100))
+(sqrt(10000-(ReadingsNum($NAME,"WstD",0)-100)*(ReadingsNum($NAME,"WstD",0)-100)))*(ReadingsNum($NAME,"WstD",0)-100)));;}


Ab und zu kommt es jedoch vor, dass mein Drucksensor Werte liefert, die bei der Berechnung des Füllstandes zu Fehlern führt.
Im Log sieht das dann so aus.
2019-06-10_14:27:18 myZisterne Time: 2019-06-10T14:27:18
2019-06-10_14:27:18 myZisterne ANALOG_A0: 438
2019-06-10_14:27:18 myZisterne WstD: 146
2019-06-10_14:27:18 myZisterne FstD: 5086
2019-06-10_14:27:18 myZisterne Switch1: OFF
2019-06-10_14:47:18 myZisterne Time: 2019-06-10T14:47:18
2019-06-10_14:47:18 myZisterne ANALOG_A0: 653 --> falscher Wert führt zu einem Error bei FstD-Berechnung
2019-06-10_14:47:18 myZisterne WstD: 218
2019-06-10_14:47:18 myZisterne FstD: Error evaluating myZisterne userReading FstD: Can't take sqrt of -3924 at (eval 813898) line 1. 


Die IF Bedingung von oben interpretiert den FstD: Error evaluating ... Wert jedoch als Wert < 5000 und startet somit die Nachlaufsteuerung.  :'(
Was ist die Erklärung hierfür und wie kann man erreichen,dass FHEM IF in diesem Fall nur numerische Werte beachtet?

Billy


Titel: Antw:FHEM - IF seltsames Verhalten
Beitrag von: Damian am 10 Juni 2019, 16:22:25
Am besten die Ursache eliminieren, vermutlich versuchst du im userReading eine negative Wurzel zu ziehen.
Titel: Antw:FHEM - IF seltsames Verhalten
Beitrag von: Billy am 10 Juni 2019, 16:40:26
Du hast insofern recht, dass durch den falschen Sensorwert ein negativer Wert entsteht der die Fehlermedung ergibt.
Trotzdem hätte ich erwartet, dass das IF mit <> nur auf numerische Werte anspricht.

Dann muss ich halt falsche Sensorwerte im Vorfeld abfangen.
Titel: Antw:FHEM - IF seltsames Verhalten
Beitrag von: Damian am 10 Juni 2019, 17:33:52
Zitat von: Billy am 10 Juni 2019, 16:40:26
Du hast insofern recht, dass durch den falschen Sensorwert ein negativer Wert entsteht der die Fehlermedung ergibt.
Trotzdem hätte ich erwartet, dass das IF mit <> nur auf numerische Werte anspricht.

Dann muss ich halt falsche Sensorwerte im Vorfeld abfangen.

IF ist nichts anders als ein Präprozessor für einen Perl-if - und der kann es auch nicht :)

Du kannst auch im IF nach Zahlen filtern, bringt dir aber auch nicht sehr viel, da in deiner Fehlermeldung auch (falsche) Zahlen vorkommen.

Titel: Antw:FHEM - IF seltsames Verhalten
Beitrag von: Per am 11 Juni 2019, 13:17:11
Du kannst mittels davorliegendem (DO)IF die Fehlermeldung abfangen und die eigentliche Prozedur nur im Gut-Fall starten.