Autor Thema: Rolladenlogik  (Gelesen 25552 mal)

Offline chq

  • Full Member
  • ***
  • Beiträge: 449
Rolladenlogik
« 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
« Letzte Änderung: 12 März 2019, 10:07:47 von chq »
So einfach wie möglich, so kompliziert wie nötig

Online Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 6403
Antw:Rolladenlogik
« Antwort #1 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.
Programmierte FHEM-Module: DOIF mit uiTable, DOIF-Perl, THRESHOLD, FHEM-Befehl: IF
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline chq

  • Full Member
  • ***
  • Beiträge: 449
Antw:Rolladenlogik
« Antwort #2 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
« Letzte Änderung: 12 März 2019, 12:15:45 von chq »
So einfach wie möglich, so kompliziert wie nötig

Offline connormcl

  • Full Member
  • ***
  • Beiträge: 325
Antw:Rolladenlogik
« Antwort #3 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).

Offline chq

  • Full Member
  • ***
  • Beiträge: 449
Antw:Rolladenlogik
« Antwort #4 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
So einfach wie möglich, so kompliziert wie nötig

Offline chq

  • Full Member
  • ***
  • Beiträge: 449
Antw:Rolladenlogik
« Antwort #5 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
So einfach wie möglich, so kompliziert wie nötig

Online Sany

  • New Member
  • *
  • Beiträge: 46
Antw:Rolladenlogik
« Antwort #6 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
« Letzte Änderung: 28 März 2019, 12:05:35 von Sany »
fhem auf Zotac ZBox nano, Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly,   ....

Offline chq

  • Full Member
  • ***
  • Beiträge: 449
Antw:Rolladenlogik
« Antwort #7 am: 28 März 2019, 15:06:14 »
Ja, der Umbau funktioniert einwandfrei.

Gruß Chris
So einfach wie möglich, so kompliziert wie nötig