FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: musicnrw am 14 April 2020, 14:13:33

Titel: Rolladen ansteuern durch in Variablen definierten Zeitvorgaben
Beitrag von: musicnrw am 14 April 2020, 14:13:33
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
Titel: Antw:Rolladen ansteuern durch in Variablen definierten Zeitvorgaben
Beitrag von: KernSani am 14 April 2020, 14:16:44
Hi,
Schau dir einfach die Beispiele in der (deutschen) commandref zu DOIF an.

Grüße,

Oli


Gesendet von iPhone mit Tapatalk
Titel: Antw:Rolladen ansteuern durch in Variablen definierten Zeitvorgaben
Beitrag von: musicnrw am 14 April 2020, 16:51:35
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
Titel: Antw:Rolladen ansteuern durch in Variablen definierten Zeitvorgaben
Beitrag von: KernSani am 14 April 2020, 17:01:13
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.
Titel: Antw:Rolladen ansteuern durch in Variablen definierten Zeitvorgaben
Beitrag von: musicnrw am 15 April 2020, 09:22:32
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
Titel: Antw:Rolladen ansteuern durch in Variablen definierten Zeitvorgaben
Beitrag von: KernSani am 15 April 2020, 09:33:30
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.
Titel: Antw:Rolladen ansteuern durch in Variablen definierten Zeitvorgaben
Beitrag von: musicnrw am 15 April 2020, 11:16:57
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