FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: chq am 12 März 2019, 08:53:16

Titel: Rolladenlogik
Beitrag von: chq am 12 März 2019, 08:53:16
Hallo,

ein Rolladen soll morgens in Abhängigkeit von der Helligkeit innerhalb eines bestimmten Zeitraums einmalig gefahren werden. Wurde die definierte Helligkeit jedoch einmalig überschritten, während andere Bedingungen nicht erfüllt wurden, soll der Rolladen jedoch in keinem Fall zu einem späteren Zeitpunkt gefahren werden.

Mein bisheriger Code bewirkt, dass der Rolladen aufgrund luminosity und UVR auch dann noch angetriggert wird, wenn es bereits viel heller ist.

([06:30-09:00] and !$we and ([Wetterstation:luminosity] > 0 or [Wetterstation:UVR:d1] >= 2.5) and [?wettervorhersage:fc1_apparentTempHigh] < 17 and [?Wetterstation:temperature] > 1) (set HM_rolloWohnzimmer pct 100)
Wäre hierbei die Verwendung von setreading aus Eurer Sicht sinnvoll, oder würdet Ihr das anders lösen? setreading erzeugt meines wissens Events, was hier jedoch eigentlich nicht sein müsste.

Gruß Chris

Hier der nicht wunschgemäß laufende Code:

([00:00]) () ## idle

## Unter der Woche:

## Kein Frost, Höchsttemperatur unter 17° Grad:
DOELSEIF ([06:30-09:00] and !$we and ([Wetterstation:luminosity] > 0 or [Wetterstation:UVR:d1] >= 2.5) and [?wettervorhersage:fc1_apparentTempHigh] < 17 and [?Wetterstation:temperature] > 1) (set HM_rolloWohnzimmer pct 100)
## Kein Frost, Höchsttemperatur zwischen 17 und 24° Grad:
DOELSEIF ([06:30-09:00] and !$we and ([Wetterstation:luminosity] > 0 or [Wetterstation:UVR:d1] >= 2.5) and [?wettervorhersage:fc1_apparentTempHigh] >= 17 and [?wettervorhersage:fc1_apparentTempHigh] < 24 and [?Wetterstation:temperature] > 1) (set HM_rolloWohnzimmer pct 77)
## Kein Frost, Höchsttemperatur mind. 24° Grad:
DOELSEIF ([06:30-09:00] and !$we and ([Wetterstation:luminosity] > 0 or [Wetterstation:UVR:d1] >= 2.5) and [?wettervorhersage:fc1_apparentTempHigh] >= 24 and [?Wetterstation:temperature] > 1) (set HM_rolloWohnzimmer pct 27)

## Am Wochenende:

## Kein Frost, Höchsttemperatur unter 17° Grad:
DOELSEIF ([07:30-09:00] and $we and ([Wetterstation:luminosity] > 0 or [Wetterstation:UVR:d1] >= 2.5) and [?wettervorhersage:fc1_apparentTempHigh] < 17 and [?Wetterstation:temperature] > 1) (set HM_rolloWohnzimmer pct 100)
## Kein Frost, Höchsttemperatur zwischen 17 und 24° Grad:
DOELSEIF ([07:30-09:00] and $we and ([Wetterstation:luminosity] > 0 or [Wetterstation:UVR:d1] >= 2.5) and [?wettervorhersage:fc1_apparentTempHigh] >= 17 and [?wettervorhersage:fc1_apparentTempHigh] < 24 and [?Wetterstation:temperature] > 1) (set HM_rolloWohnzimmer pct 77)
## Kein Frost, Höchsttemperatur mind. 24° Grad:
DOELSEIF ([07:30-09:00] and $we and ([Wetterstation:luminosity] > 0 or [Wetterstation:UVR:d1] >= 2.5) and [?wettervorhersage:fc1_apparentTempHigh] >= 24 and [?Wetterstation:temperature] > 1) (set HM_rolloWohnzimmer pct 27)

## Abends Rollo runterfahren:
DOELSEIF ([{sunset("HORIZON=-2.2",0,"16:00","23:59")}-24:00] and [Wetterstation:luminosity] == 0 and [Wetterstation:UVR:d1] <= 2.6 and [HM_rolloWohnzimmer:control] > 0) (set HM_rolloWohnzimmer pct 0)
## Abends, wenn Rollo bereits runterfahren:
DOELSEIF ([{sunset("HORIZON=-2.2",0,"16:00","23:59")}-24:00] and [Wetterstation:luminosity] == 0 and [Wetterstation:UVR:d1] <= 2.6 and [HM_rolloWohnzimmer:control] == 0) () ## closed

Habs jetzt mal umgebaut. Mal gucken, obs funzt:

([00:00]) (setreading $SELF rolloMove enable) ## Morgens via internem Reading das fahren des Rollos ermöglichen

## Unter der Woche:

## Kein Frost, Höchsttemperatur unter 17° Grad:
DOELSEIF ([06:30-09:00] and !$we and ([Wetterstation:luminosity] > 0 or [Wetterstation:UVR:d1] >= 2.5) and [$SELF:rolloMove] eq "enable" and [?wettervorhersage:fc1_apparentTempHigh] < 17 and [?Wetterstation:temperature] > 1) (set HM_rolloWohnzimmer pct 100) (setreading $SELF rolloMove disable)
## Kein Frost, Höchsttemperatur zwischen 17 und 24° Grad:
DOELSEIF ([06:30-09:00] and !$we and ([Wetterstation:luminosity] > 0 or [Wetterstation:UVR:d1] >= 2.5) and [$SELF:rolloMove] eq "enable" and [?wettervorhersage:fc1_apparentTempHigh] >= 17 and [?wettervorhersage:fc1_apparentTempHigh] < 24 and [?Wetterstation:temperature] > 1) (set HM_rolloWohnzimmer pct 77) (setreading $SELF rolloMove disable)
## Kein Frost, Höchsttemperatur mind. 24° Grad:
DOELSEIF ([06:30-09:00] and !$we and ([Wetterstation:luminosity] > 0 or [Wetterstation:UVR:d1] >= 2.5) and [$SELF:rolloMove] eq "enable" and [?wettervorhersage:fc1_apparentTempHigh] >= 24 and [?Wetterstation:temperature] > 1) (set HM_rolloWohnzimmer pct 27) (setreading $SELF rolloMove disable)
## Ansonsten:
DOELSEIF ([06:30-09:00] and !$we and ([Wetterstation:luminosity] > 0 or [Wetterstation:UVR:d1] >= 2.5)) (setreading $SELF rolloMove disable)

## Am Wochenende:

## Kein Frost, Höchsttemperatur unter 17° Grad:
DOELSEIF ([07:30-09:00] and $we and ([Wetterstation:luminosity] > 0 or [Wetterstation:UVR:d1] >= 2.5) and [$SELF:rolloMove] eq "enable" and [?wettervorhersage:fc1_apparentTempHigh] < 17 and [?Wetterstation:temperature] > 1) (set HM_rolloWohnzimmer pct 100) (setreading $SELF rolloMove disable)
## Kein Frost, Höchsttemperatur zwischen 17 und 24° Grad:
DOELSEIF ([07:30-09:00] and $we and ([Wetterstation:luminosity] > 0 or [Wetterstation:UVR:d1] >= 2.5) and [$SELF:rolloMove] eq "enable" and [?wettervorhersage:fc1_apparentTempHigh] >= 17 and [?wettervorhersage:fc1_apparentTempHigh] < 24 and [?Wetterstation:temperature] > 1) (set HM_rolloWohnzimmer pct 77) (setreading $SELF rolloMove disable)
## Kein Frost, Höchsttemperatur mind. 24° Grad:
DOELSEIF ([07:30-09:00] and $we and ([Wetterstation:luminosity] > 0 or [Wetterstation:UVR:d1] >= 2.5) and [$SELF:rolloMove] eq "enable" and [?wettervorhersage:fc1_apparentTempHigh] >= 24 and [?Wetterstation:temperature] > 1) (set HM_rolloWohnzimmer pct 27) (setreading $SELF rolloMove disable)
## Ansonsten:
DOELSEIF ([07:30-09:00] and $we and ([Wetterstation:luminosity] > 0 or [Wetterstation:UVR:d1] >= 2.5)) (setreading $SELF rolloMove disable)

## Abends Rollo runterfahren:
DOELSEIF ([{sunset("HORIZON=-2.2",0,"16:00","23:59")}-24:00] and [Wetterstation:luminosity] == 0 and [Wetterstation:UVR:d1] <= 2.6 and [HM_rolloWohnzimmer:control] > 0) (set HM_rolloWohnzimmer pct 0)
## Abends, wenn Rollo bereits runterfahren:
DOELSEIF ([{sunset("HORIZON=-2.2",0,"16:00","23:59")}-24:00] and [Wetterstation:luminosity] == 0 and [Wetterstation:UVR:d1] <= 2.6 and [HM_rolloWohnzimmer:control] == 0) () ## closed
Titel: Antw:Rolladenlogik
Beitrag von: Damian am 12 März 2019, 11:53:59
Wenn etwas nur einmalig am Tag passieren soll, dann kann man grundsätzlich wie folgt vorgehen:

- kein do always
- keine DOELSE
- ein separater Zweig mit ([00:00]) ohne Ausführungsteil

Damit wird erreicht, dass um 00:00 Uhr der Zustand des Moduls wechselt und das Modul dadurch wieder für eine Ausführung eines Zweiges scharfgestellt ist.
Titel: Antw:Rolladenlogik
Beitrag von: chq am 12 März 2019, 12:09:47
So in der Art hatte ich es ja bereits gemacht. Das ich kein doalways gesetzt habe geht aus meinem Text nicht hervor, i know. Die Fragestellung ist jedoch eine etwas andere. Mit "während andere Bedingungen nicht erfüllt wurden" (siehe Eröffnugsposting) meine ich Bedingungen im Rahmen dieses einen Ausführungszweiges.

Gruß Chris
Titel: Antw:Rolladenlogik
Beitrag von: connormcl am 12 März 2019, 12:55:04
Nicht zum eigentlichen Problem, sondern als gedanklicher Einwurf:

Warum bindest du die Rolläden nicht an den Sonnenaufgang evtl. mit Versatz +x Minuten, so wie es euch angenehm ist?

Der Vorteil wäre, dass die Sonnenaufgangs-/untergangs-berechnung rein in FHEM stattfindet und das Ganze dann auch nicht auf Sensoren angewiesen ist. (einem Sensor können die Batterien ausgehen und dann bleiben die Rolläden unten).
Titel: Antw:Rolladenlogik
Beitrag von: chq am 12 März 2019, 13:10:49
Weil es aus meiner Sicht via Sensor besser funktioniert. Hatte hierfür in der Vergangenheit twilight hinzugezogen.

Gruß Chris
Titel: Antw:Rolladenlogik
Beitrag von: chq am 17 März 2019, 19:14:37
Wenn etwas nur einmalig am Tag passieren soll, dann kann man grundsätzlich wie folgt vorgehen:

- kein do always
- keine DOELSE
- ein separater Zweig mit ([00:00]) ohne Ausführungsteil

In meinem Fall:

- kein do always: Kein Problem. Hab ich nicht gesetzt.
- keine DOELSE: Hab ich auch nicht. Dafür jedoch einen Haufen DOELSEIFs, die über den Tag verteilt ebenfalls auslösen und den o.a. Zweig immer wieder erneut auslösen lassen.
- ein separater Zweig mit ([00:00]) ohne Ausführungsteil: Bringt in meinem Fall nichts, da ja die ganzen anderen DOELSEIFs auslösen.

Jmd. noch ne Idee außer setreading?

Gruß Chris
Titel: Antw:Rolladenlogik
Beitrag von: Sany am 27 März 2019, 23:20:36
Zitat
Mein bisheriger Code bewirkt, dass der Rolladen aufgrund luminosity und UVR auch dann noch angetriggert wird, wenn es bereits viel heller ist.

kann es sein, dass dein Rolladen dann um 6:30 oder um 9:00 fährt? Denn die "Grenzen" deines Zeitraums triggern auch. Wenn du [?06:30-09:00] schreibst dann triggern die Grenzen nicht, nur die Helligkeitsbedingungen.
(siehe Trigger verhindern ind der commandref DOIF)
Edit: wobei eigentlich nur 6:30 triggern kann, da dann der Zeitraum wahr ist, 9:00 setzt den Zeitraum auf false/falsch.

Evtl. beschreibst Du nochmals genauer, wann die Rolladen fahren wenn sie es eigentlich nicht mehr sollen.
([Wetterstation:luminosity] > 0 or [Wetterstation:UVR:d1] >= 2.5)wenn hier luminosity schon eine Weile >0 ist und dann erst UVR:d1 >= 2.5 ist wird ein 2tes mal getriggert. Da kommt es also drauf an, was die beiden Sensoren für Werte liefern (UVR sagt mir jetzt nix). Dein Umbau mit rolloMove sollte das allerdings verhindern. Klappt es denn?
Gruß
Sany
Titel: Antw:Rolladenlogik
Beitrag von: chq am 28 März 2019, 15:06:14
Ja, der Umbau funktioniert einwandfrei.

Gruß Chris