FHEM Forum

FHEM - Hausautomations-Systeme => Unterstützende Dienste => Thema gestartet von: frankkaktus am 31 Dezember 2015, 18:51:55

Titel: Potentieller Fehler in Heating_Control: Parsing Perl-Ausdrücke für Zeitangaben
Beitrag von: frankkaktus am 31 Dezember 2015, 18:51:55
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
Titel: Antw:Potentieller Fehler in Heating_Control: Parsing Perl-Ausdrücke für Zeitangaben
Beitrag von: Dietmar63 am 01 Januar 2016, 08:12:14
Sehe ich mir an
Titel: Antw:Potentieller Fehler in Heating_Control: Parsing Perl-Ausdrücke für Zeitangaben
Beitrag von: Dietmar63 am 01 Januar 2016, 17:18:12
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.
Titel: Antw:Potentieller Fehler in Heating_Control: Parsing Perl-Ausdrücke für Zeitangaben
Beitrag von: Dietmar63 am 02 Januar 2016, 09:18:25
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.
Titel: Antw:Potentieller Fehler in Heating_Control: Parsing Perl-Ausdrücke für Zeitangaben
Beitrag von: Dietmar63 am 06 Januar 2016, 22:20:21
eingecheckt