FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: MichlB am 30 September 2016, 09:42:46

Titel: Scriptvereinfachung
Beitrag von: MichlB am 30 September 2016, 09:42:46
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
Titel: Antw:Scriptvereinfachung
Beitrag von: KernSani am 30 September 2016, 10:39:45
Zunächst solltest du wenn du Strings vergleichst "eq" statt "==" verwenden
Titel: Antw:Scriptvereinfachung
Beitrag von: Ellert am 30 September 2016, 12:30:26
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)
Titel: Antw:Scriptvereinfachung
Beitrag von: Per am 11 Oktober 2016, 13:55:54
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)