DOIF mit externen Parametern (z.B Min/Max) füttern

Begonnen von zarfld, 12 Oktober 2018, 15:21:04

Vorheriges Thema - Nächstes Thema

zarfld

Hallo Forum!

Ich habe mir für den Keller eine Lüftungssystem gebaut, das bisher (den Sommer über) recht gut funktioniert hat.
define di_Keller
DOIF ([lc_Dachboden:dewpoint] < [lc_Keller1:dewpoint]-1 and [lc_Dachboden:temperature] < [lc_Keller1:temperature]-2) (set lf_Keller on)
DOELSEIF ([lc_Dachboden:dewpoint] < [lc_Keller1:dewpoint]-3 and [lc_Dachboden:temperature] < [lc_Keller1:temperature]-1) (set lf_Keller on)
DOELSEIF ( [lc_Dachboden:dewpoint] > [lc_Keller1:dewpoint] or [lc_Dachboden:temperature] > [lc_Keller1:temperature] ) (set lf_Keller off)


lc_Dachboden ... Lacorosse TempHum sensor der zuluft
lc_Keller1 ...  Lacorosse TempHum sensor im Keller Raum
lf_Keller ... Flag auf das Lüfter reagieren

(das lf_Keller = off haate ich zuvor als normales DOELSE eingebaut hatte aber in den übergangsPhasen ein Ein/Aus-Schalten zu folge daher hab ich da 1°Dew bzw 2°Temp sicherheitshalber eingebaut)

Soweit is alles gut.

Nur Überlege ich mir für die Kellerräume Limits zu setzen.
Zuerst hatte ich probiert den jeweiligen LaCrosse Sensor die UserAttribute "humidity_min" und "temperature_min" hinzuzufügen und diese dann einfach mit:

... [lc_Keller1:humidity_min] < [lc_Keller1:humidity] and [lc_Keller1:temperature_min] < [lc_Dachboden:temperature] ...

... im DOIF zu berücksichtigen - aber das funktioniert so scheinbar nur mit Readings.

Bevor ich mir dafür Userreadings Anlege wollte ich mal fragen ob es Bessere Alternativen gibt.
("hardcoded" in die DOIF find ichs ein wenig mühselig in der wartung)

Gruß
dominik




Damian

Irgendwo musst du die Limits ablegen, wenn du sie nicht direkt in der Bedingung angeben willst.

Readings stellen Speicherplätze dar, die auch nach dem Hochfahren noch vorhanden sind.

Du kannst in jedem Device zusätzliche Readings ablegen, die du abfragen kannst.

Ob du jetzt die Limits im DOIF als Reading ablegst oder bei den Sensoren, bleibt dir überlassen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Otto123

Hallo Dominik,

Readings sind der richtige Weg. UserReadings brauchst Du nicht - du machst einfach setreading lc_Keller1 temperature_min 15
Die Darstellung geht übrigens mit Codetags, siehe Anhang.
Nimm es bitte auch für deinen Code im Post.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

zarfld

Vielen Dank für die schnelle Hilfe! Funktioniert soweit - an der Logik muss ich noch tüfteln aber das ist ein andres Thema

Gruß
Dominik

Ellert

Zitat von: zarfld am 12 Oktober 2018, 15:21:04
Hallo Forum!

Ich habe mir für den Keller eine Lüftungssystem gebaut, das bisher (den Sommer über) recht gut funktioniert hat.
define di_Keller
DOIF ([lc_Dachboden:dewpoint] < [lc_Keller1:dewpoint]-1 and [lc_Dachboden:temperature] < [lc_Keller1:temperature]-2) (set lf_Keller on)
DOELSEIF ([lc_Dachboden:dewpoint] < [lc_Keller1:dewpoint]-3 and [lc_Dachboden:temperature] < [lc_Keller1:temperature]-1) (set lf_Keller on)
DOELSEIF ( [lc_Dachboden:dewpoint] > [lc_Keller1:dewpoint] or [lc_Dachboden:temperature] > [lc_Keller1:temperature] ) (set lf_Keller off)

lc_Dachboden ... Lacorosse TempHum sensor der zuluft
lc_Keller1 ...  Lacorosse TempHum sensor im Keller Raum
lf_Keller ... Flag auf das Lüfter reagieren

(das lf_Keller = off haate ich zuvor als normales DOELSE eingebaut hatte aber in den übergangsPhasen ein Ein/Aus-Schalten zu folge daher hab ich da 1°Dew bzw 2°Temp sicherheitshalber eingebaut)

Soweit is alles gut.

Nur Überlege ich mir für die Kellerräume Limits zu setzen.
Zuerst hatte ich probiert den jeweiligen LaCrosse Sensor die UserAttribute "humidity_min" und "temperature_min" hinzuzufügen und diese dann einfach mit:

... [lc_Keller1:humidity_min] < [lc_Keller1:humidity] and [lc_Keller1:temperature_min] < [lc_Dachboden:temperature] ...

... im DOIF zu berücksichtigen - aber das funktioniert so scheinbar nur mit Readings.

Bevor ich mir dafür Userreadings Anlege wollte ich mal fragen ob es Bessere Alternativen gibt.
("hardcoded" in die DOIF find ichs ein wenig mühselig in der wartung)

Gruß
dominik
Du kannst ein DOIF über die Attribute readingList, setList, webCmd und webCmdLabel parameterisieren.

Hier für Dein DOIF ein Beispiel zum Einspielen über "Raw definition"
attr di_Keller readingList humidity_min temperature_min
attr di_Keller setList humidity_min:selectnumbers,0,5,100,0,lin temperature_min:selectnumbers,0.0,0.5,20.0,1,lin
attr di_Keller webCmd humidity_min:temperature_min
attr di_Keller webCmdLabel Grenzwert Humidity<sub>min</sub>:Temperature<sub>min</sub>

Die Grenzwerte kannst Du in der Bedingung so angeben:
Zitat[$SELF:humidity_min] < [lc_Keller1:humidity]

readingList gibt die Readings an, die Du verwendest.
setList bindet Widgets an die Readings.
webCmd zeigt die Widgets an.
webCmdLabel beschriftet die Widgets.

siehe
https://fhem.de/commandref_DE.html#widgetOverride
https://wiki.fhem.de/wiki/FHEMWEB/Widgets
https://wiki.fhem.de/wiki/DOIF/Ein-_und_Ausgabe_in_FHEMWEB_und_Tablet-UI_am_Beispiel_einer_Schaltuhr

zarfld

Hi,
ich hatte deine Antwort erst jetzt bemerkt vielen Dank im Nachhinein.

(bzw entschuldige, dass meine Antwort erst jetzt kommt)

seitdem hat es mit einem "SetReading" gut funktioniert - ich muss mir deinen Vorschlag mal in Ruhe ansehen - inwieweit es mir mehr bringt.

Gruß
Dominik