Rolladen ansteuern durch in Variablen definierten Zeitvorgaben

Begonnen von musicnrw, 14 April 2020, 14:13:33

Vorheriges Thema - Nächstes Thema

musicnrw

Hallo zusammen,
ich habe folgende Idee:
Ich möchte die Ansteuerung (Hochfahrzeit morgens) meiner Rolladen über eine Dropdown-Liste in gewissen Grenzen variabel einstellbar machen.
Die Zeit, wann die Rolladen morgens hochfahren möchte ich so auswählen, dass ich in einer Drop-Downliste vordefinierte Werte angezeigt bekomme, von denen ich einen auswähle, der dann in einer Dummy-Variablen (im Beispiel unten "RolloUpWT") abgespeichert wird.
<li data-row="2" data-col="5" data-sizex="1" data-sizey="1">
<header><div data-type="label" class="large">RolloUp Werktag</div></header>
<div>
<div data-type="select"
data-device="RolloUpWT"
data-set=""
data-alias='["06:00:00","06:15:00","06:30:00","06:45:00","07:00:00","07:15:00","07:30:00","07:45:00","08:00:00","08:15:00","08:30:00"]'
data-items='["06:00:00","06:15:00","06:30:00","06:45:00","07:00:00","07:15:00","07:30:00","07:45:00","08:00:00","08:15:00","08:30:00"]'
</div>
</div>
</li>



Jetzt frage ich mich, wie ich diese Varaible heranziehe in einem DOIF, um folgende Logik aufzubauen:
Wenn die Uhrzeit, die in dem Dummy abgespeichert ist, also z.B. "08:00:00", erreicht ist, dann sollen die Rolladen hochfahren, also "set Rollade1 100".

Wie bilde ich diese vergleichende Logik mit dem in der Dummy-Variable abgelegten Uhrzeit ab?

Vielen Dank,
Thomas

KernSani

Hi,
Schau dir einfach die Beispiele in der (deutschen) commandref zu DOIF an.

Grüße,

Oli


Gesendet von iPhone mit Tapatalk
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

musicnrw

Hallo,
ich hab so etwas versucht wie
define 1_Rollo_buero_auto DOIF ([HomeStatus:state] eq "home_work" and [RolloUpWT:state]) (set 1_Rollo_buero 100)
wobei ich zuvor aus dem Drop-Down einen Wert ausgewählt habe. Die Dummy-Variable RolloUpWT hat dann auch für das Reading "state" den entsprechenden Wert, z.B. "08:00:00",
aber das löst um 8 Uhr dann keine Aktion aus, heißt, der Rolladen fährt nicht hoch. Ich hatte vor dieser geplanten variablen Programmierung an der Stelle von [RolloUpWT:state] die Uhrzeit im Klartext angegeben, also z.B. [08:00:00]. Damit fährt der Rolladen um 8 Uhr hoch.
Muss ich das Reading "state" noch vom Datenformat her irgendwie umwandeln oder mit der aktuellen Uhrzeit in FHEM vergleichen, damit es die gewünschte Aktion triggert?
Für die Steuerung der Rollos abhängig von der Sonnenintensität habe ich etwas ähnliches gebaut, hier der entsprechende Vergleich, der, wenn er wahr ist, eine Aktion triggert:
[Sonnensensor1:brightness] > [Helligkeitswert:state]
Wenn das Reading "brightness" vom Helligkeitssensor das Reading "state" der Dummy-Variablen "Helligkeitswert" übersteigt, fahren die Rolladen ganz zu.
Muss ich so einen Vergleich noch machen? Wenn ja, wie?

Gruß,
Thomas

KernSani

In der commandref gibt es dazu Beispiele (sorry dass ich mich wiederhole ;): https://fhem.de/commandref_DE.html#DOIF_Indirekten_Zeitangaben

Du kannst dir auch mal das Autoshutters Modul (ASC) ansehen, vielleicht kannst du damit deinen Anwendungsfall komfortabler und ohne komplexe DOIF-Logik abbilden.
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

musicnrw

Hi Oli,
danke für den Hinweis auf die commandref. Hab da jetzt gelernt, dass der Dummy, der die gewählte Zeit beinhaltet, in doppelte eckige Klammern gesetzt werden muss.
Ich hab aber immer noch ein Problem, was ich trotz vieler Versuche nicht lösen konnte.

Mein DOIF für ein Rolladenaktor sieht heute so aus:
define 1_Rollo_buero_auto DOIF ([HomeStatus:state] eq "home_work" and [06:00:00]) (set 1_Rollo_buero 100) DOELSEIF ([HomeStatus:state] eq "home_home" and ($wday == 1 || $wday == 2 || $wday == 3 || $wday == 4 || $wday == 5) and [08:00:00]) (set 1_Rollo_buero 100) DOELSEIF ([HomeStatus:state] eq "home_home" and [09:00:00] and ($wday == 6 || $wday == 0 ))  (set 1_Rollo_buero 100) DOELSEIF ([HomeStatus:state] eq "away" and [08:00:00])  (set 1_Rollo_buero 100) DOELSEIF ([22:00:00]) (set 1_Rollo_buero 0)
Es gibt also vier verschiedene Szenarien. Mit dem Homestatus definiere ich, ob ich zuhause (home_home) bin oder zur Arbeit (home_work) oder ob ich z.B. wegen Urlaub ganz weg bin (away). Bei "home_home", also "zuhause" unterscheide ich noch, ob es ein Wochentag oder ein Wochenende ist. Und schließlich wird grundsätzlich um 22 Uhr der Rolladen runtergefahren.

Das DOIF funktioniert super. Jetzt will ich die Zeiten für das Hochfahren der Rolladen eben über eine Variable per Dropdown-Liste festlegen. Ich habe die Zeit, also z.B. [6:00:00] mit [[RolloUpWT]] ersetzt und den Dummy RolloUpWT mit einem entsprechenden Wert beschrieben. Es passiert leider nichts.

Dann habe ich ein Test-DOIF angelegt, welches ganz einfach ist:
define 1_Rollo_buero_test DOIF [[RolloUpWT]] (set 1_Rollo_buero 100)

Und da funktioniert das Ganze! Auch wenn ich noch die logische Verknüpfung für den Homestatus einbaue, funktioniert es. Also:
define 1_Rollo_buero_test DOIF ([HomeStatus:state] eq "home_work" and [[RolloUpWT]]) (set 1_Rollo_buero 100)

Sobald ich aber die dritte Bedingung, also den Wochentag ...and ($wday == 1 || $wday == 2 || $wday == 3 || $wday == 4 || $wday == 5)...mit hinzunehme, passiert nichts mehr.

Was mache ich falsch??? Sind drei logische Bedingungen zuviel?

Danke für Deine / Eure Hilfe!

Gruß,
Thomas

KernSani

Auch da nochmal der Hinweis auf die Commandref ;-) https://fhem.de/commandref_DE.html#DOIF_Wochentagsteuerung du kannst hinter der Uhrzeit bzw. dem Uhrzeitdummy durch Pipe (|) getrennt die Wochentage mit angeben. In deinem Fall vermutlich die 8.
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

musicnrw

Hallo Oli,
und nochmals Danke!
Ich konnte durch den Hinweis mit dem Pipe die Sache was die Übersichtlichkeit angeht deutlich vereinfachen.
Jedoch ging es zunächst wieder nicht, bis ich dann durch puren Zufall herausgefunden habe, dass zwischen der runden Klammer, in der die Logikverknüpfung steht und der runden Klammer in der der "set-Befehl zum Ansteuern des Rolladenaktors steht ein doppeltes (!) Leerzeichen stehen muss. Dann funktioniert es. Ist das so beabsichtigt oder ein Bug?

Gruß,
Thomas