Hauptmenü

DOIF Verständisproblem

Begonnen von maci, 30 August 2016, 15:29:52

Vorheriges Thema - Nächstes Thema

maci

Hallo,

Ich habe micht jetzt schon mehrere Stunde mit DOIF unterhalten, dass ich das in meine Anforderungen bringe.

Gesteuert wird die Poolpumpe in Abhängigkeit von der Pooltemperatur.
Derzeit habe ich etwas ähnliches nur mit einer Zeitschaltuhr. Hier muss ich nur die Laufzeit händisch umstellen, wenn die Pooltemperatrur höher ist.
Meine Anforderungen sind:
4 Zeitgesteuerte Phasen
   06:00 - 07:30   1,5 Std  - +30 min wenn > 26 Grad
   11:00 - 13:00   2 Std  - +30 min wenn > 29 Grad
   15:00 - 17:00   2 Std  - +30 min wenn > 29 Grad
   19.00 - 20:30   1,5 Std  - +30 min wenn > 26 Grad

meine Lösung schaut derzeit so aus, wobei nur der erste Teil, das Einschalten funktioniert.
Zitatdefine test_PoolRelay3Ein DOIF ([06:00] or [11:00] or [15:00] or [19:00] ) \
  ( set owsModulPool PIO.2 on )
define test_PoolRelay3Aus \
IF ( {ReadingsVal("Pooltemperatur","temperarture",0} > 29 ) ( \
   DOIF ([08:00] or [13:30] or [17:30] or [21:00])  \
    ( set owsModulPool PIO.2 off ) )
IF ( {ReadingsVal("Pooltemperatur","temperarture",0} > 26 ) ( \
   DOIF ([08:00] or [13:00] or [17:00] or [21:00])  \
    ( set owsModulPool PIO.2 off ) ) \
ELSE ( \
   DOIF ([07:30] or [13:00] or [17:00] or [20:30])  \
    ( set owsModulPool PIO.2 off ) )

Bei den DOELSEIF blinke ich einfach nicht durch, bzw bekomme ich das nicht hin.
Darum habe ich es so versucht.
Was ist daran falsch?
Im Prinzip sind es 2 verschachtelte IF schleifen
Einmal ein IF mit dem DOIF
Das zweite mail ein IF- ELSE mit den jeweiligen DOIF

Bitte um HIlfe

Danke
Fhem auf Dell Thinclient, Fhem auf Raspebrry Pi4,
UniPi Vers. 1.1 mit Raspberry Pi3, 1wire USB Adapter mit OWX
Netatmo Wetterstation + Regenmesser + Netatmo Thermostat
Homematic mit HMLan

Ellert

DOIF in einem IF funktioniert nicht. IF ist ein FHEM-Befehl und erfordert keine Definition.

DOIF erzeugt ein Gerät und benötigt daher eine Definition.

Daher kannst Du IF in einem DOIF verwenden, aber nicht umgekehrt.

Deine Struktur sieht dann etwa so aus:

([06:00] or [11:00] or [15:00] or [19:00])
   (set owsModulPool PIO.2 on)
DOELSEIF (([08:00] or [13:30] or [17:30] or [21:00]) and [Pooltemperatur:temperarture] > 29)
   (set owsModulPool PIO.2 off)
DOELSEIF (([08:00] or [13:00] or [17:00] or [21:00]) and [Pooltemperatur:temperarture] > 26)
   (set owsModulPool PIO.2 off)
DOELSEIF (([07:30] or [13:00] or [17:00] or [20:30]) and [Pooltemperatur:temperarture] <= 26)
   (set owsModulPool PIO.2 off)


Ungetestet.


rubbertail

#2
Hallo,

Ich habe deine Phasen und Temperaturabhängigkeiten noch nicht ganz verstanden...

Mal als Einzelfälle aufgeschrieben - soll das so?

1. Schalte um 6:00 die Pumpe ein.
Wenn es 7:30 ist und die Pooltemperatur ist kleiner gleich 26°C, schalte die Pumpe aus, sonst schalte die Pumpe um 8:00 aus.

2. Schalte um 11:00 die Pumpe ein.
Wenn es 13:00 ist und die Pooltemperatur kleiner gleich 29°C ist, schalte die Pumpe aus, sonst schalte die Pumpe um 13:30 aus.

3. Schalte um 15:00 die Pumpe ein.
Wenn es 17:00 ist und die Pooltemperatur kleiner gleich 29°C ist, schalte die Pumpe aus, sonst schalte die Pumpe um 17:30 aus.

4. Schalte um 19:00 die Pumpe ein.
Wenn es 20:30 ist und die Pooltemperatur kleiner gleich 26°C ist, schalte die Pumpe aus, sonst schalte die Pumpe um 21:00 aus.

Ist das so richtig verstanden, was du meinst?

Zusammengefasst:
Wenn es 6:00 oder 11:00 oder 15:00 oder 19:00 ist, schalte die Pumpe ein
Wenn (es 7:30 oder 20:30 ist) UND die Temperatur =<26°C, schalte die Pumpe aus
Wenn (es 13:00 oder 17:00 ist) UND die Temperatur =<29°C, schalte die Pumpe aus
Wenn es 8:00 oder 13:30 oder 17:30 oder 21:00 ist, schalte die Pumpe auf jeden Fall aus.

Korrekt?

Das könntest du genau so dann in deine DOIF bzw. DOELSEIF einbauen...

define test_PoolRelay DOIF ([06:00] or [11:00] or [15:00] or [19:00])
     (set owsModulPool PIO.2 on)
DOELSEIF (([07:30] or [20:30]) and [Pooltemperatur:temperature] =< 26)
     (set owsModulPool PIO.2 off)
DOELSEIF (([13:00] or [17:00]) and [Pooltemperatur:temperature] =< 29)
     (set owsModulPool PIO.2 off)
DOELSEIF ([08:00] or [13:30] or [17:30] or [21:00])
     (set owsModulPool PIO.2 off)




In deinem Code hattest du übrigens "temperarture" geschrieben? Und dein zweites "define" würde nochmal versuchen, ein Gerät vom Typ "IF" zu erzeugen - gibbet leider nicht, soweit ich weiß.
FHEM auf Raspi, CUL433, CUL868, RFXTRX433e, CULCuBE
FRITZ: Fritzbox7590AX, 6xFritzDECT301, 10xFritzDECT200, FritzRepeater 6000
MAX!: Fensterkontakte
netatmo: Wetterstation & Thermostat
Milights, IT, Withings, HUE

maci

#3
Zitat von: rubbertail am 30 August 2016, 16:40:06
Hallo,

Ich habe deine Phasen und Temperaturabhängigkeiten noch nicht ganz verstanden...

Mal als Einzelfälle aufgeschrieben - soll das so?

1. Schalte um 6:00 die Pumpe ein.
Wenn es 7:30 ist und die Pooltemperatur ist kleiner gleich 26°C, schalte die Pumpe aus, sonst schalte die Pumpe um 8:00 aus.

2. Schalte um 11:00 die Pumpe ein.
Wenn es 13:00 ist und die Pooltemperatur kleiner gleich 29°C ist, schalte die Pumpe aus, sonst schalte die Pumpe um 13:30 aus.

3. Schalte um 15:00 die Pumpe ein.
Wenn es 17:00 ist und die Pooltemperatur kleiner gleich 29°C ist, schalte die Pumpe aus, sonst schalte die Pumpe um 17:30 aus.

4. Schalte um 19:00 die Pumpe ein.
Wenn es 20:30 ist und die Pooltemperatur kleiner gleich 26°C ist, schalte die Pumpe aus, sonst schalte die Pumpe um 21:00 aus.

Ist das so richtig verstanden, was du meinst?
...
Ja das ist richtig so.

Ich werde mich mal dran machen und den Code dafür neu machen.
Danke mal für die Infos bzw. Antworten.

Wenn ich wieder Fragen habe, melde ich mich, ansonsten schließe ich den Beitrag als gelöst.

Edit: Es funktioniert mal ohne Fehler beim Laden von der fhem.cfg
Jetzt kann der test beginnen.

Gruß
Georg
Fhem auf Dell Thinclient, Fhem auf Raspebrry Pi4,
UniPi Vers. 1.1 mit Raspberry Pi3, 1wire USB Adapter mit OWX
Netatmo Wetterstation + Regenmesser + Netatmo Thermostat
Homematic mit HMLan