Potentieller Fehler in Heating_Control: Parsing Perl-Ausdrücke für Zeitangaben

Begonnen von frankkaktus, 31 Dezember 2015, 18:51:55

Vorheriges Thema - Nächstes Thema

frankkaktus

Hallo,

ich betreibe ein frisch upgedatetes FHEM-System auf einem RasPi und wollte die Funktion Heating_Control zur Steuerung der Weihnachtsbaumbeleuchtung mit zwei festen Schaltzeiten sowie zwei über Sonnenaufgang bzw. -untergang (Twilight) gesteuerten Zeiten einsetzen. Dabei scheint die Angabe von Perl-Ausdrücken für die Schaltzeiten nur solange zu funktionieren, wie die keine Leerzeichen enthalten. Die folgende Definition zeigt das Problem:

define ChristCntr Heating_Control ga_Strom de 05:45|on Mo-Sa|{sunset()}|off Mo-Sa|{fhem("get Tageslicht ss_weather")}|on 23:00|off {fhem "set @ %" }

Tageslicht ist hierbei eine Twilight-Instanz.

Die Internals zeigen daraufhin das Folgenden:


COMMAND             Tageslicht ss_weather")}|on 23:00|off {fhem "set @ %" }
DEF                 ga_Strom de So-Sa|05:45|on So-Sa|{sunset()}|off So-Sa|{fhem("get Tageslicht ss_weather")}|on 23:00|off {fhem "set @ %" }
DEVICE              ga_Strom
...
LANGUAGE            de
NAME                ChristCntr
...
Profil 0: Sonntag   00:00:00 {fhem("get, 05:45:00 on
...


Soweit ich das überblicke, wird bei beim Parsing davon ausgegangen, dass ein Profile kein Leerzeichen enthalten kann, so dass das dritte Profile nach "get" endet. Da der folgende Abschnitt weder mit einem als Tag noch mit einem als Zeit interpretierbaren Ausdruck beginnt, wird er als COMMAND interpretiert. Allerdings sollten Leerzeichen innerhalb des FHEM-Ausdrucks bei der Zerlegung ignoriert werden.

Natürlich kann man als Workaround die "Tageslicht"-Abfrage in eine externe Funktion auslagern. Es geht mir daher hier eher um die Korrektur des Parsers.

Gruß Frank

Dietmar63

Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Dietmar63

Ich sehe keine einfache Möglichkeit den Parser wasserdicht zu verändern.
Du kannst aber auch gleich die Funktion
ReadingsVal("Tageslicht","ss_weather","notfound")
verwenden, die liefert ohne Leerzeichen den Wert den du benötigst.

Der Aufwand für einen Umbau und dem geringen Nutzen sehe ich für zu hoch an.
Ich werde die Dokumentation anpassen.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Dietmar63

Entgegen meiner ursprünglichen Meinung, habe ich HC, WD doch soweit verändert, dass deine konkrete Definition nun funktioniert. Das Modul befindet sich allerdings noch einige Tage in Test.

Kannst du selbst Module in fhem austauschen, dann würde ich es dir vorab zukommen lassen.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Dietmar63

Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm