intelligente Jalousiesteuerung/Rollosteuerung

Begonnen von kurvenfeile, 18 Mai 2014, 16:45:43

Vorheriges Thema - Nächstes Thema

kurvenfeile

Hallo Forum!

Ich hänge hier bei einem Problem wo ich mal Hilfe benötige.
Ich habe für meine Rolläden mehrere UP-Jalousieaktoren (HM-LC-Bl1PBU-FM) von Homematic im Einsatz. Geschaltet wird bisher über den integrierten Taster oder wahlweise mit Smartphone.

Folgendes möchte ich nun realisieren:
Alle Rolläden sollen hochgefahren werden, wenn ich den Taster (aufwärts) eines
  a) bereits hochgefahrenen Rolladens
  b) gerade hochfahrenden Rolladens
erneut drücke. Zu beachten ist außerdem, dass der Rolladen auch mal aus der Mitte starten kann ohne das es die anderen Rolläden beeinflusst.

Das Log (verbose 5) der Jalousieaktoren liefert folgende Info:
-->Rollo hochgefahren + Tastendruck aufwärts
2014-05-18_08:54:26 Flur_Rollo level: 100
2014-05-18_08:54:26 Flur_Rollo pct: 100
2014-05-18_08:54:26 Flur_Rollo deviceMsg: hoch (to HMLAN1)
2014-05-18_08:54:26 Flur_Rollo hoch
2014-05-18_08:54:26 Flur_Rollo timedOn: runter
2014-05-18_08:54:26 Flur_Rollo motor: stop:hoch

-->Rollo runtergefahren + Tastendruck aufwärts + erneuter Tastendruck aufwärts bei 76%
2014-05-18_16:14:40 Flur_Rollo level: 17
2014-05-18_16:14:40 Flur_Rollo pct: 17
2014-05-18_16:14:40 Flur_Rollo deviceMsg: 17 (to HMLAN1)
2014-05-18_16:14:40 Flur_Rollo 17
2014-05-18_16:14:40 Flur_Rollo timedOn: runter
2014-05-18_16:14:40 Flur_Rollo motor: up:17
2014-05-18_16:14:50 Flur_Rollo level: 76
2014-05-18_16:14:50 Flur_Rollo pct: 76
2014-05-18_16:14:50 Flur_Rollo deviceMsg: 76 (to HMLAN1)
2014-05-18_16:14:50 Flur_Rollo 76
2014-05-18_16:14:50 Flur_Rollo timedOn: runter
2014-05-18_16:14:50 Flur_Rollo motor: up:76
2014-05-18_16:14:58 Flur_Rollo level: 100
2014-05-18_16:14:58 Flur_Rollo pct: 100
2014-05-18_16:14:58 Flur_Rollo deviceMsg: hoch (to HMLAN1)
2014-05-18_16:14:58 Flur_Rollo hoch
2014-05-18_16:14:58 Flur_Rollo timedOn: runter
2014-05-18_16:14:58 Flur_Rollo motor: stop:hoch

Mein bisheriger Ansatz für a) geht über einen dummy und notify (und dich simuliere erstmal nur).
Der Umweg über den Dummy und lastState ist notwendig, da das letzte Event sonst immer "alle Rolläden hoch" ausführen würde.
Das funktioniert soweit auch. Dumm ist nur, dass z.B. beim Speichern der fhem.cfg in der Weboberfläche offensichtlich ein rereadcfg ausgelöst wird, welches mir alle Rolläden hoch fährt.

define Flur_Rollo_Status dummy
attr Flur_Rollo_Status room Status
define FileLog_Flur_Rollo_Status FileLog ./log/Flur_Rollo_Status-%Y.log Flur_Rollo_Status
attr FileLog_Flur_Rollo_Status logtype text
attr FileLog_Flur_Rollo_Status room Log

define notify_Flur_Rollo notify Flur_Rollo:deviceMsg.* {\
  my $lastState = Value("Flur_Rollo_Status");;\
  my $motor = fhem ("get Flur_Rollo param motor");;\
  if ($lastState eq "stop:on"){\
    if($motor eq "stop:on"){fhem ("set Test [Flur_Rollo] alle Rollos hochfahren [lastState=$lastState motor=$motor]")}\
    else{fhem ("set Test [Flur_Rollo] keine Veraenderung [lastState=$lastState motor=$motor]")}\
  }\
  else{fhem ("set Test [Flur_Rollo] keine Veraenderung [lastState=$lastState motor=$motor]")};;\
  fhem ("set Flur_Rollo_Status $motor");;\
}


Da a) nicht richtig und b) gar nicht funktioniert bin ich erstmal für alles offen!

Gibt es denn ein Event welches nur beim Tastendruck ausgelöst wird?



Bennemannc

Hallo,

ich habe gerade mal in die EventTypes.txt geschaut. Der Taster kennt Short und Long Press - also kurzen und langen Tastendruck.
Ich würde versuchen, das darüber zu lösen. Kurzer Tastendruck fährt nur Rollo vor Ort (direkt auf Endposition) - länger Tastendruck fährt alle. Dann musst Du als erstes die Register umstellen und dann ein notify auf lgActionType legen. Keine Ahnung ob man dort mit Strukturen oder Gruppen arbeiten kann. Eine Struktur oder Gruppe wäre schöner, da man Mur einen notify braucht und nicht für jedes Rollo einen.

Gruß Christoph
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF

kurvenfeile

Hallo Christoph,

danke für den Tip mit dem langen Tastendruck, das könnte ich mir so gut vorstellen. Bevor ich anfange Register zu verbiegen würde ich gerne erstmal das notify auf ActionType zum laufen bringen. Und hier klemmt die Säge gerade.
Hab folgende Varianten erfolglos durchprobiert:

define notify_Flur_Rollo notify Flur_Rollo:shActionType.* {fhem ("set Test [Flur_Rollo] ActionType erkannt")}
define notify_Flur_Rollo notify Flur_Rollo:lgActionType.* {fhem ("set Test [Flur_Rollo] ActionType erkannt")}
define notify_Flur_Rollo notify Flur_Rollo:R-self01-lgActionType.* {fhem ("set Test [Flur_Rollo] ActionType erkannt")}
define notify_Flur_Rollo notify Flur_Rollo:R-self01-shActionType.* {fhem ("set Test [Flur_Rollo] ActionType erkannt")}
define notify_Flur_Rollo notify Flur_Rollo:R-self02-shActionType.* {fhem ("set Test [Flur_Rollo] ActionType erkannt")}
define notify_Flur_Rollo notify Flur_Rollo:R-self02-shActionType.* {fhem ("set Test [Flur_Rollo] ActionType erkannt")}


Das notify funzt einfach nicht!

Grüße
Dirk

Bennemannc

Hallo Dirk,

ich würde mit einem Dummy arbeiten oder eine Lampe als Testobjekt nehmen.
define notify_Flur_Rollo notify Flur_Rollo:R-self01-lgActionType:.* { fhem (" set Lampe... On")}
und das gleiche mit self02 und Lampe off. Dann sollte bei einem entsprechenden langen Tastendruck nicht nur das Rollo fahren, sondern auch die Lampe an und aus gehen.

Gruß Christoph
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF

kurvenfeile

Mein "Test" ist ja ein Dummy:

define Test dummy
define FileLog_Test FileLog ./log/Test-%Y.log Test
attr FileLog_Test logtype text
attr FileLog_Test room Log


Mit dem Befehl

{fhem ("set Test [Flur_Rollo] ActionType erkannt")}

weise ich dem Dummy einfach nur einen Wert zu den ich dann im Log sehen müsste. An anderer Stelle (siehe ersten Post) funzt das auch, so dass ich davon ausgehe, dass das notify die Ursache ist.
Irgendwas passt da nicht!