Autor Thema: Übersteuerung des DOIF für Jalousien durch Taster erkennen  (Gelesen 299 mal)

Offline bmwfan

  • Full Member
  • ***
  • Beiträge: 471
Hallo,

ich verwende zur Beschattungssteuerung meiner Jalousien eine Logik aus mehreren DOIF. Grundsätzlich wird über ein DOIF eine Beschattung für Morgens (Ostseite) und für Mittags (Süd- und Westseite) ermittelt und in einem Dummy als ja/nein abgelegt. Dieser Dummy in Verbindung mit der Tageszeit bestimmt die Ansteuerung der Jalousien (Level und Winkelstellung). Die Visualisierung erfolgt über die entsprechenden Einträge über cmdstate z.B. auf einem Tablet.
([du_Rollo_Master] ne "aus" and [du_Tageslicht] eq "dunkel" and [?Jal_WZ_Fest_West_03:level] > 3) (set Jal_WZ_Fest_West_03 level 3) ## Abends schliessen wenn dunkel und nicht schon zu
DOELSEIF ([du_Rollo_Master] ne "aus" and [du_Beschattung_Haus_Mittag] eq "ja" and [Jal_WZ_Fest_West_03:level] == 3) (set Jal_WZ_West winkel 45) ##2 Oeffnungswinkel einstellen wenn Beschattung
DOELSEIF ([du_Rollo_Master] eq "an" and [du_Beschattung_Haus_Mittag] eq "nein" and [?Jal_WZ_Fest_West_03:level] <= 5 and ([du_Tageslicht] eq "hell" and (([07:05-09:00|1234] and !$we) or [08:55-11:30|57]))) (set Jal_WZ_Fest_West_03 level 100) ##3 Oeffnen morgens wenn Jalousie nicht manuell eingestellt wurde und Automatik auf an steht. Damit nicht im Urlaub
DOELSEIF ([du_Rollo_Master] ne "aus" and [du_Beschattung_Haus_Mittag] eq "ja" and [?Jal_WZ_Fest_West_03:level] > 5 and ([du_Tageslicht] eq "hell" and (([09:01-18:00,+[1]:00|1234] and !$we) or [09:01-18:00,+[1]:00|57]))) (set Jal_WZ_Fest_West_03 level 3) ##4 Jalousie auf Beschattungslevel setzen

cmdState   unten | Beschattung_Winkel | oben | Beschattung

Das funktioniert auch solange einwandfrei, bis der Jalousietaster (HMW_LC_BL1_DR) manuell betätigt wird. Steht die Jalousie z.B. auf Beschattung in einer Winkelstellung (cmdstate: Beschattung_Winkel) und wird manuell geöffnet, ist die Jalousie oben (Level 100), der cmdstate aber immer noch auf Beschattung_Winkel.

Ich könnte jetzt mehrere DOELSEIF-Zweige für die verschiedenen Level, die in cmdstate verwendet werden ( 100, <5...) einführen und daraufhin mit setstate den state korrigieren, das dünkt mich aber sehr umständlich. Gibt es dafür eine einfachere Lösung?

Alternativ: Es gibt ja im HMW_LC_BL1_DR das reading "working". Grundsätzlich könnte man doch auswerten, wenn das reading auf "on" geht aber nicht vom DOIF angesteuert worden ist. Dann hätte man zumindest die Information, dass der Taster manuell betätigt worden ist und müßte noch ca. 70 Sekunden warten (maximale Fahrzeit der Jalousie) und dann den Level nehmen. Somit wüßte man zumindest, ob die Jalousie manuell auf Oben / unten / Beschattung gefahren wurde. Doch wie ermittele ich den Zustand "working on" UND DOIF nicht Verursacher und frage dan den Zustand nach X Sekunden ab?

Grüße Jürgen
CUL auf Raspi 2 B, HW-LAN, HMW_LC_Bl1_DR für Jalousien, HM_LC_Bl1_DR für Rolläden, Umweltsensoren

Offline Gisbert

  • Hero Member
  • *****
  • Beiträge: 2313
  • Das Ziel ist das Ziel !
Antw:Übersteuerung des DOIF für Jalousien durch Taster erkennen
« Antwort #1 am: 23 August 2021, 20:46:55 »
Hallo Jürgen,

also BMW-Fan geht gar nicht ;D, dann will ich mal als Fahrer eines Sternenkreuzers nicht so sein ;D.

Ich habe das ganze (= Automatik, die durch Handbetrieb überstimmt werden kann; Handbetrieb heißt tatsächlich per Hand) für mich gelöst, und das schon vor einigen Jahren als mein Handwerkszeug in Richtung Fhem noch bescheidener als heute war.
Es waren dafür mehrere Devices nötig, um die Automatik zum Schweigen zu bringen, aber es funktioniert so wunderbar bei mir.

## Markisensteuerung

define TreppenhausMarkisenBefehl DOIF ([?Treppenhaus.Markise.hoch.dum] eq "off" and ($md ge "03-21" and $md le "10-15") \
and [?Treppenhaus.Markise:level] != 0 and [TH.Kuhlmannweg8:temperature] >= 20 and [?Temp.OG:OG.Flur] >= 21 \
and [?Lichtstaerke.West:MAX44009_Illuminance] > 15000 and [Lichtstaerke.West:quot] > 2 \
and [?Lichtstaerke.West:MAX44009_Illuminance:sec] < 600 and [?Lichtstaerke:BH1750_Illuminance:sec] < 600 \
and [?Buienradar:maxrain] <= 1 and [?myTwilight:azimuth] >= 185 and sunset_abs(-9000) gt $hms) \
(set Treppenhaus.Markise off) \
(set Treppenhaus.Markise.runter.dum on-for-timer 1800) \
(IF ([RollladenWohnzimmerWest:cmd] =~ "Up|Stop") (set RollladenWohnzimmerWest DriveSlit)) \
DOELSEIF ([?Treppenhaus.Markise.runter.dum] =~ "on" and [?Treppenhaus.Markise:level] < 10 \
and ([Wetter.Proplanta:wind] > 30 or [Buienradar:maxrain] > 1 \
or ([Lichtstaerke.West:MAX44009_Illuminance] < 5000 and [Lichtstaerke.West:quot] < 0.6) \
or [Lichtstaerke.West:MAX44009_Illuminance:sec] >= 600 or [Lichtstaerke:BH1750_Illuminance:sec] >= 600)) \
(set Treppenhaus.Markise on) \
(set Treppenhaus.Markise.hoch.dum on-for-timer 1800) \
(set RollladenWohnzimmerWest DriveUp) \
DOELSEIF ([?Treppenhaus.Markise.runter.dum] eq "off" and [?Treppenhaus.Markise:level] < 10 \
and ([Wetter.Proplanta:wind] > 30 or [Buienradar:maxrain] > 1 or [TH.Kuhlmannweg8:temperature] <= 19 \
or ([Lichtstaerke.West:MAX44009_Illuminance] < 8000 and [Lichtstaerke.West:quot] < 1) \
or [Lichtstaerke.West:MAX44009_Illuminance:sec] >= 600 or [Lichtstaerke:BH1750_Illuminance:sec] >= 600 \
or [myTwilight:azimuth] < 185 or sunset_abs(-6600) le $hms)) \
(set Treppenhaus.Markise on) \
(set Treppenhaus.Markise.hoch.dum on-for-timer 1800) \
(set RollladenWohnzimmerWest DriveUp) \
DOELSEIF ([Treppenhaus.Markise:level] == 100 and [+600]) (setreading Treppenhaus.Markise level 100) \
DOELSEIF ([Treppenhaus.Markise:level] == 0 and [+600]) (setreading Treppenhaus.Markise level 0)
setuuid TreppenhausMarkisenBefehl 5c430dca-f33f-b139-5d56-f01028b2c34286f2
attr TreppenhausMarkisenBefehl alias Markise im Treppenhaus
attr TreppenhausMarkisenBefehl comment Wegen Umstellung auf eigene Helligkeitsmessung werden die folgenden Definitionen nicht mehr benötigt. \
Umlaut in bewölkt durch einen Punkt (.) ersetzt. \
Der Punkt kann alles mögliche sein, ein normales Zeichen, ein Umlaut oder auch ein Leerzeichen. \
Das scheint aber bei "stark bewölkt" nicht gut zu funktionieren. \
Deshalb wurde eine weiteres Reading bei Wetter.Proplanta (weather2) erzeugt, welches "starkbewoelkt" zurückliefert. \
Das Reading maxrain des Devices Buienradar/Proplanta ist der Maximalwert der Regenmenge aus folgenden Devices: \
- Buienradar \
- Leverkusen.DarkSky - wegen fehlerhaften Daten (Werte ~ 0.01 mm/qm) rausgenommen  \
- verschiedene Netatmo-Geräte in der Umgebung\
Nicht mehr genutzte Wetterabfragen:\
[?Wetter.Proplanta:weather] =~ /^(sonnig|klar|heiter|wolkig)$/\
[?Wetter.Proplanta:weather2] =~ /^(starkbewoelkt)$/\
Abfragen mit mehreren Werte:\
[Device:Reading] =~ "Input1|Input2"\
siehe: https://forum.fhem.de/index.php/topic,111552.msg1057864.html#msg1057864
attr TreppenhausMarkisenBefehl devStateIcon (cmd_1|cmd_5):fts_shutter_down@red (cmd_2|cmd_3|cmd_4):fts_sunblind_0@gray
attr TreppenhausMarkisenBefehl disable 1
attr TreppenhausMarkisenBefehl icon fts_sunblind
attr TreppenhausMarkisenBefehl repeatsame 1:1:1:35000:60
attr TreppenhausMarkisenBefehl room HomeHM,Rollladen
attr TreppenhausMarkisenBefehl sortby 8
attr TreppenhausMarkisenBefehl wait 15,5:5,5,5:5,5,5:1:1

define Treppenhaus.Markise.hoch.dum dummy
setuuid Treppenhaus.Markise.hoch.dum 5c430dca-f33f-b139-b8b2-c8873cb1b0a752e2
attr Treppenhaus.Markise.hoch.dum devStateIcon on-for-timer.*:fts_shutter_up@red off:fts_shutter_automatic@gray
attr Treppenhaus.Markise.hoch.dum icon fts_sunblind
attr Treppenhaus.Markise.hoch.dum room HomeHM
attr Treppenhaus.Markise.hoch.dum setExtensionsEvent 1
attr Treppenhaus.Markise.hoch.dum setList on off
attr Treppenhaus.Markise.hoch.dum useSetExtensions 1

define Treppenhaus.Markise.runter.dum dummy
setuuid Treppenhaus.Markise.runter.dum 5c430dca-f33f-b139-f7cb-5a29d08a5cc9b5cd
attr Treppenhaus.Markise.runter.dum devStateIcon on-for-timer.*:fts_shutter_down@red off:fts_shutter_automatic@gray
attr Treppenhaus.Markise.runter.dum icon fts_sunblind
attr Treppenhaus.Markise.runter.dum room HomeHM
attr Treppenhaus.Markise.runter.dum setExtensionsEvent 1
attr Treppenhaus.Markise.runter.dum setList on off
attr Treppenhaus.Markise.runter.dum useSetExtensions 1

define Treppenhaus.Markise.manhoch sequence Treppenhaus.Markise:off 6 :off 6 :off 6 :off
setuuid Treppenhaus.Markise.manhoch 5c430dca-f33f-b139-7629-03e9de553c426e38
attr Treppenhaus.Markise.manhoch room HomeHM

define Treppenhaus.Markise.hoch.notify notify Treppenhaus.Markise.manhoch:trigger \
{fhem ("set Treppenhaus.Markise.hoch.dum on-for-timer 7200;; \
set Treppenhaus.Markise on;; \
set RollladenWohnzimmerWest DriveUp")}
setuuid Treppenhaus.Markise.hoch.notify 5c430dca-f33f-b139-823e-6cf56a00d0f49018
attr Treppenhaus.Markise.hoch.notify alias Treppenhaus hoch
attr Treppenhaus.Markise.hoch.notify room HomeHM,Rollladen

define Treppenhaus.Markise.manrunter sequence Treppenhaus.Markise:on 6 :on 6 :on 6 :on
setuuid Treppenhaus.Markise.manrunter 5c430dca-f33f-b139-f04d-702fd7a22f735666
attr Treppenhaus.Markise.manrunter room HomeHM

define Treppenhaus.Markise.runter.notify notify Treppenhaus.Markise.manrunter:trigger \
{fhem ("set Treppenhaus.Markise.runter.dum on-for-timer 3600;; set Treppenhaus.Markise off;;")} \
{if (ReadingsVal('RollladenWohnzimmerWest','Event','') eq "Up") {fhem ("set RollladenWohnzimmerWest DriveSlit;;")}}
setuuid Treppenhaus.Markise.runter.notify 5c430dca-f33f-b139-f106-a4def274e9b5d12a
attr Treppenhaus.Markise.runter.notify alias Treppenhaus runter
attr Treppenhaus.Markise.runter.notify room HomeHM,Rollladen

Zur Erklärung:
Wenn die Markise (es handelt sich um eine Senkrechtmarkise) per Automatik unten ist, wird der manuelle Schalter 3mal hintereinander auf runter gestellt. Das Module sequence erkennt diese Aktion, und ein notify darauf fährt die Markise hoch. Dazu ist es natürlich nötig das Bedienpersonal entsprechend zu schulen 8): 3mal runter = 1mal manuell hoch - ah ja, gelle. Mithilfe eines dummies wird dafür gesorgt, dass dieser Zustand in meinem Fall 2 Stunden anhält, dann übernimmt die Automatik wieder.

  • Fall noch Fragen zu Details vorhanden sind, dann gerne nach ausführlichem Studium des Codes
  • An diejenigen, die bildlich oder tatsächlich ihre Hände über dem Kopf zusammenschlagen ob solcher einfältigen Bemühungen, dann würde ich die gerne bitten, einen eleganten Weg vorzuschlagen

Viele Grüße Gisbert
Aktuelles Fhem auf HP ThinClient T610 | Debian11 | UniFi-Controller, AP, USG-3 | Homematic, VCCU, HMUART | ESP8266, Platinen von Papa Romeo | Gas-, Wasser-, Stromzähler | Sonoff | 1-Wire-Temperatursensoren | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21RF