Hauptmenü

Scriptvereinfachung

Begonnen von MichlB, 30 September 2016, 09:42:46

Vorheriges Thema - Nächstes Thema

MichlB

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
1x PI 2B+ FHEM - Heizung
1x Pi 3b+ - FHEM - Haussteuerung
1x Pi 3 - MagicMirror
2x Pi B - Musicbox

KernSani

Zunächst solltest du wenn du Strings vergleichst "eq" statt "==" verwenden
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Ellert

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 und schau Dir die Beispiele in der Befehlsreferenz an oder den Vorschlag von hier: Strukturierung der Definition

Per

#3
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)