Hallo
ich bin nicht so der programmierer und mit pearl kenn ich mich auch leider viel zu wenig aus, deshalb diese frage...
kann man meinen so aus der notwendigkeit zusammengestöpselten DOIF vereinfachen bzw. besser leserlich abbilden?
define di_FBHPumpe DOIF (([FBH] == "auto") and ([MYSENSOR_160:temperature] < [Kueche:state] or [MYSENSOR_120:temperature] < [Wohnzimmer:state])) (set A1 on) DOELSEIF ([FBH] == "on" or [NOTAUF] == "on") (set A1 on) DOELSEIF ([FBHPid] == "stopped") (set A1 off) DOELSEIF (([FBH] == "auto") and ([MYSENSOR_160:temperature] >= [Kueche:state] or [MYSENSOR_120:temperature] >= [Wohnzimmer:state])) (set A1 off) DOELSE (set A1 off)
Danke
Zunächst solltest du wenn du Strings vergleichst "eq" statt "==" verwenden
Beim Erstellen von DOIF im Webfrontend in der Geräteübersicht kannst Du Kommentare einfügen und Zeilenumbrüche an beliebiger Stelle.
Siehe hier DOIF: Tips leichtere Bedienung Syntaxhervorhebung Klammerprüfung Suchen&Ersetzen (https://forum.fhem.de/index.php/topic,45373.0.html) und schau Dir die Beispiele in der Befehlsreferenz (http://fhem.de/commandref_DE.html#DOIF_Lesbarkeit_der_Definitionen) an oder den Vorschlag von hier: Strukturierung der Definition (https://forum.fhem.de/index.php/topic,58237.msg496560.html#msg496560)
Zitat von: Ellert am 30 September 2016, 12:30:26Zeilenumbrüche
Die lassen sich auch nachträglich in der Antwortmaske vom Forum eintragen:
define di_FBHPumpe
DOIF (([FBH] == "auto") and ([MYSENSOR_160:temperature] < [Kueche:state] or [MYSENSOR_120:temperature] < [Wohnzimmer:state])) (set A1 on)
DOELSEIF ([FBH] == "on" or [NOTAUF] == "on") (set A1 on)
DOELSEIF ([FBHPid] == "stopped") (set A1 off)
DOELSEIF (([FBH] == "auto") and ([MYSENSOR_160:temperature] >= [Kueche:state] or [MYSENSOR_120:temperature] >= [Wohnzimmer:state])) (set A1 off)
DOELSE (set A1 off)
oder
define di_FBHPumpe
DOIF (([FBH] == "auto") and ([MYSENSOR_160:temperature] < [Kueche:state] or [MYSENSOR_120:temperature] < [Wohnzimmer:state]))
(set A1 on)
DOELSEIF ([FBH] == "on" or [NOTAUF] == "on")
(set A1 on)
DOELSEIF ([FBHPid] == "stopped")
(set A1 off)
DOELSEIF (([FBH] == "auto") and ([MYSENSOR_160:temperature] >= [Kueche:state] or [MYSENSOR_120:temperature] >= [Wohnzimmer:state]))
(set A1 off)
DOELSE
(set A1 off)
Den <tab> zum Einrücken habe ich dabei aus dem Notepad (oder einem anderen Editor) kopiert, im Browser selbst geht das leider nicht.
Zur Frage nach der Vereinfachung:
Wenn du den Status des DOIF selbst nicht brachst, kannst du die ersten beiden Abfragen zusammenfassen und die letzten beiden ganz weglassen (da das Ergebnis mit dem von DOELSE identisch ist).
define di_FBHPumpe
DOIF ((([FBH] == "auto") and ([MYSENSOR_160:temperature] < [Kueche:state] or [MYSENSOR_120:temperature] < [Wohnzimmer:state])) or [FBH] == "on" or [NOTAUF] == "on")
(set A1 on)
DOELSE
(set A1 off)