Zwei IF Bedingungen in der CFG

Begonnen von Smile99, 16 Dezember 2014, 23:50:24

Vorheriges Thema - Nächstes Thema

Smile99

Hallo zusammen, habe gerade mein Bad begonnen zu Steuern.... ABER
Hätte gerne eine Lüftersteuerung die ab 70% rel. Feuchtigkeit beginnen soll. soweit so gut mit:

define check at +*00:10 IF ([TH_Bad:humidity] > 70) (set Luefter on) ELSE (set Luefter off)

Das Funktioniert

Jetzt hätte ich aber gerne einen Dummy in der Abfrage eingbaut... einen Ruhemodus  dass die Lüftung nicht anfängt wenn dieser Aktiviert ist.
dachte mir daher: der Dummy wird per FHEMobile mit einem state versorgt.

define Ruhemodus dummy
attr Ruhemodus room Bad
define check at +*00:10 IF ([Ruhemodus:state] = off) && ([TH_Bad:humidity] > 70) (set Luefter on) ELSE (set Luefter off)

Aber das geht nicht... hmm.. offenbar doch nicht so gescheit wie gedacht...

HILFE ? TIPPS ?
danke schon mal im Voraus!

JensS

Hallo,

wie wärs, wenn du deinem dummy die Möglichkeit gibst, einen State zu definieren?
webcmd, setlist z.B.

Gruß Jens
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

Bennemannc

Hallo,

schau mal in die Commandref und suche nach THRESHOLD. Dieses Modul ist genau für solche Steuerungen gemacht. Man kann einen Schwellwert und eine Hysterese eingeben. Das Modul prüft in regelmäßigen Abständen ob es eine Überschreitung gibt, oder ob der Wert unter die Schwelle (+Hysterese) gesunken ist.
Achtung nicht die fhem.conf von Hand ändern - der Threshold darf erst kommen, wenn das Gerät bereits definiert ist - sonst gibt es Fehlermeldungen. Mit "define NAME THRESHOLD GERÄT" in der Befehlszeile anlegen und dann editieren. Dann wird es automatisch an der richtigen Stelle in die Conf eingefügt.

Gruß Christoph
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF

Smile99

Habe mir den TRESHOLD angesehen, bin aber ganz ehrlich... ich verstehs nicht wirklich

Hier das Beispiel

define TH_hum THRESHOLD sens:humidity:10:70||||on:off|_sc  - Bei 70 dreht er auf und bei 60 wieder ab... soweit so klar... was ist das _sc am Ende?
define dewpoint dewpoint indoor - Taupunkt wir bei mir mit dem Dummy ersetzt ?
define dewpoint dewpoint outdoor - dito
define TH_room THRESHOLD indoor:dewpoint:0:outdoor:dewpoint AND TH_hum:state:on ventilator|set @ on|set @ off|2 - Zweiter Wert wäre dann die Dummyabfrage ABER WIE ist das bei meinem Bsp?


der-Lolo

im IF müsste das meiner meinung nach so ausschauen...
IF ([Ruhemodus] eq "off") and ([TH_Bad:humidity] > 70) (set Luefter on) ELSE

IF und if sollte man nicht mischen...

Bennemannc

Hallo,

also fangen wir mit Taupunkt an.
define dew_all dewpoint dewpoint .* temperature humidity dewpoint
Erzeugt an allen Geräten die Temperatur und Feuchtigkeit messen ein zusätzliches Reading mit dem Taupunkt.
THRESHOLD
define Standby_off_Handy THRESHOLD Schaltsteckdose_1_Pwr:power:0.1:1.6 Schaltsteckdose_1_Sw | | set @ off |1
attr Standby_off_Handy devStateIcon disabled:rc_RED:active active:rc_GREEN:deactivated

define Name THRESHOLD Gerät_reading:Hysterese:Wert Actor || ein_bei_Überschreitung |1
Die letzte Zahl gibt an, welcher Zustand beim deaktivieren des THRESHOLD eingenommen werden soll. Man kann so eine Automatik ja auch abschalten. Ich habe Dir deswegen die zweite Zeile dazu kopiert.
Eine Hysterese von 10 bei der Feuchtigkeit halte ich für sehr hoch. Die Feuchtigkeit ändert sich nur langsam, zudem muss die Raumluft entsprechend zirkulieren. Ich würde es mit 1 oder 2 für den Anfang versuchen, sonst läuft der sehr lange bis dauernd.
Es ist schwierig, eine vernünftige Steuerung zu bauen, weil weder relative Feuchte noch der Taupunkt wirklich aussagekräftig sind. Wird der Taupunkt an den Wänden (Wandtemperatur) nicht unterschritten, fällt auch keine Feuchtigkeit aus. Auch eine Relative Feuchtigkeit von über 70 ist nicht unbedingt kritisch, wenn an den Wänden die Taupunkttemperatur nicht überschritten wird.
Eigentlich muss man den Taupunkt noch mit der Außentemperatur vergleichen. Liegt die Außentemperatur über dem Taupunkt, kann kein Wasser an den Innenseiten der Wände entstehen. Liegt sie darunter, kommt es auf die "Isolierfähigkeit" der Wand sowie eventuell vorhandener Kältebrücken an.

Gruß Christoph
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF

Smile99

Bennemannc: Danke, aber den Taupunkt lasse ich absichtlich nicht berechnen, da das Badezimmer an keine Aussenwand grenzt - WOHNUNG
Verstehe nun den TRESHOLD, danke! Werde ihn wohl dann in den anderen Zimmern einsetzen.

der-Lolo: DAS war gesucht, leider funktioniert es noch immer nicht... habe ich noch einen logischen Fehler drinnen?

define Ruhemodus dummy
attr Ruhemodus room Bad

define check at +*00:01 IF ([Ruhemodus] eq "off") and ([TH_Bad:humidity] > 70) (set Luefter on) ELSE (set Luefter off)
attr check room Bad


den state hat der dummy bekommen, steht in den Resadings drinnen...

hmmm

Smile99

Ok, bin gerade selbst draufgekommen:
Der gesamte IF Ausdruck wird nur einfach in Klammer gesetzt

also
IF (WENN and WENN) ELSE
anstelle von
IF (WENN) and (WENN) ELSE


der-Lolo

eigentlich müsste es dann aber

define check at *+00:01 IF (([Ruhemodus] eq "off") and ([TH_Bad:humidity] > 70)) (set Luefter on) ELSE (set Luefter off)


sein...

JensS

In der Reference steht ein ähnliches Beispiel, bei dem zwei IFs geschachtelt sind.
define test notify lamp
IF ([lampe] eq "on") (

    IF ([outdoor:humidity] < 70)
        (set lamp off) ELSE
        (set lamp on)

) ELSE

    (set switch on)


Gruß Jens
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

Smile99

Es funktioniert wie gewünscht mit


define check at *+00:01 IF ([Ruhemodus] eq "off" and [TH_Bad:humidity] > 70) (set Luefter on) ELSE (set Luefter off)



Brockmann

Zitat von: Smile99 am 17 Dezember 2014, 17:46:51
Es funktioniert wie gewünscht mit


define check at *+00:01 IF ([Ruhemodus] eq "off" and [TH_Bad:humidity] > 70) (set Luefter on) ELSE (set Luefter off)


Vielleicht schaust Du Dir mal DOIF an. Das funktioniert im Prinzip ganz ähnlich, nur kannst Du es Dir sparen, das alle x Sekunden ausführen zu lassen. DOIF reagiert automatisch, wenn sich die Werte ändern.

Und generell wirst Du mit einer Steuerung, die sich an fixen Werten orientiert, vermutlich nicht glücklich werden. Kann leicht passieren, dass der Lüfter mit solchen Vorgaben im Sommer gar nicht mehr ausgeht.
Es gibt hier im Forum einen längeren Thread zum Thema Badlüftung, die stehen einige Lösungen drin. Einfach mal suchen.