FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Fistandantilus am 21 Juni 2016, 22:11:17

Titel: Taster zur Jalousie-Steuerung
Beitrag von: Fistandantilus am 21 Juni 2016, 22:11:17
Hallo,

ich habe einen Hoch-/Runtertaster zur Jalousie-Steuerung. Funktionieren soll er wie folgt:
- einmal nach unten drücken -> Jalousie fährt runter
- nochmal nach unten drücken -> Jalousie hält an
- wieder nach unten drücken -> Jalousie fährt weiter runter

Beim nach oben drücken analog.

Da mein Aktor (Eltako FSB14) die aktuelle Position nicht zurückmeldet, steht der beim Kommando schließen sofort auf closed, beim öffnen auf open. Somit kann ich mit dem Status allein nicht viel anfangen. Gelöst habe ich es aktuell über 2 Toggle dummies und ein doif.
- wenn der dummy 0 ist, wird beim Klick runter das close geschickt und danach der dummy auf 1 gesetzt
- wenn der dummy 1 ist, wird beim Klick runter ein Stop geschickt und danach der dummy auf 0 gesetzt
- hoch wieder analog mit dem anderen dummy

Grundsätzlich funktioniert das auch, ist aber nicht sonderlich elegant. Habt ihr eine einfachere oder bessere Lösung?


([EnO_00107EC6:state] eq "AI" && [EnO_00107EC6:buttons] eq "pressed")
  (IF ([EG.Wohnzimmer.Wandtaster2.downA.toggle:state] eq "0") (set FSB14_1_2 closes,set EG.Wohnzimmer.Wandtaster2.downA.toggle 1,set EG.Wohnzimmer.Wandtaster2.upA.toggle 0)
  ELSE (set FSB14_1_2 stop,set EG.Wohnzimmer.Wandtaster2.downA.toggle 0,set EG.Wohnzimmer.Wandtaster2.upA.toggle 0))
DOELSEIF ([EnO_00107EC6:state] eq "A0" && [EnO_00107EC6:buttons] eq "pressed")
  (IF ([EG.Wohnzimmer.Wandtaster2.upA.toggle:state] eq "0") (set FSB14_1_2 opens,set EG.Wohnzimmer.Wandtaster2.upA.toggle 1,set EG.Wohnzimmer.Wandtaster2.downA.toggle 0)
  ELSE (set FSB14_1_2 stop,set EG.Wohnzimmer.Wandtaster2.upA.toggle 0,set EG.Wohnzimmer.Wandtaster2.downA.toggle 0))
DOELSEIF ([EnO_00107EC6:state] eq "BI" && [EnO_00107EC6:buttons] eq "pressed")
  (IF ([EG.Wohnzimmer.Wandtaster2.downB.toggle:state] eq "0") (set FSB14_1_1 closes,set EG.Wohnzimmer.Wandtaster2.downB.toggle 1,set EG.Wohnzimmer.Wandtaster2.upB.toggle 0)
  ELSE (set FSB14_1_1 stop,set EG.Wohnzimmer.Wandtaster2.downB.toggle 0,set EG.Wohnzimmer.Wandtaster2.upB.toggle 0))
DOELSEIF ([EnO_00107EC6:state] eq "B0" && [EnO_00107EC6:buttons] eq "pressed")
  (IF ([EG.Wohnzimmer.Wandtaster2.upB.toggle:state] eq "0") (set FSB14_1_1 opens,set EG.Wohnzimmer.Wandtaster2.upB.toggle 1,set EG.Wohnzimmer.Wandtaster2.downB.toggle 0)
  ELSE (set FSB14_1_1 stop,set EG.Wohnzimmer.Wandtaster2.upB.toggle 0,set EG.Wohnzimmer.Wandtaster2.downB.toggle 0))


VG
F.
Titel: Antw:Taster zur Jalousie-Steuerung
Beitrag von: Ellert am 22 Juni 2016, 18:24:05
Mit DOIF etwa so:

(["Taster:unten"] and $cmd eq "0|3") (set Jalousie runter)
DOELSEIF (["Taster:oben"] and $cmd eq "0|3") (set Jalousie rauf)
DOELSEIF (["Taster:unten|oben"] and $cmd eq "1|2") (set Jalousie stop)
Titel: Antw:Taster zur Jalousie-Steuerung
Beitrag von: Damian am 22 Juni 2016, 22:25:30
Zitat von: Ellert am 22 Juni 2016, 18:24:05
Mit DOIF etwa so:

(["Taster:unten"] and $cmd eq "0|3") (set Jalousie runter)
DOELSEIF (["Taster:oben"] and $cmd eq "0|3") (set Jalousie rauf)
DOELSEIF (["Taster:unten|oben"] and $cmd eq "1|2") (set Jalousie stop)


Regex ist bei eq nicht möglich,  stattdessen sollte man =~ verwenden:

(["Taster:unten"] and $cmd =~ "0|3") (set Jalousie runter)
DOELSEIF (["Taster:oben"] and $cmd =~ "0|3") (set Jalousie rauf)
DOELSEIF (["Taster:unten|oben"] and $cmd =~ "1|2") (set Jalousie stop)


Gruß

Damian
Titel: Antw:Taster zur Jalousie-Steuerung
Beitrag von: Fistandantilus am 24 Juni 2016, 00:54:30
Was prüft $cmd =~ "0|3") bzw.$cmd =~ "1|2") ?
Titel: Antw:Taster zur Jalousie-Steuerung
Beitrag von: Ellert am 24 Juni 2016, 04:13:41
Aus der deutschsprachigen Befehlsreferenz:
Zitat$cmd
Perl-Variable mit der Bedeutung [$SELF:cmd]

Mehr siehe hier http://fhem.de/commandref_DE.html#DOIF_selftrigger
Titel: Antw:Taster zur Jalousie-Steuerung
Beitrag von: Fistandantilus am 24 Juni 2016, 13:55:55
Danke, wieder was gelernt  :)
Die Lösung ist auf jeden Fall eleganter.
Titel: Antw:Taster zur Jalousie-Steuerung
Beitrag von: Fistandantilus am 27 Juni 2016, 09:47:20
Hi,

ich habe das Ganze jetzt umgesetzt, was grundsätzlich auch funktioniert, allerdings muss ich beim runterfahren erst immer zweimal drücken bevor es losgeht. Fährt die Jalousie los, funktioniert die Logik ohne Probleme. Habt Ihr eine Idee?

([EnO_00107EC6:state] eq "AI" and [EnO_00107EC6:buttons] eq "pressed" and $cmd =~ "0|3")
(set FSB14_1_2 closes)
DOELSEIF ([EnO_00107EC6:state] eq "A0" and [EnO_00107EC6:buttons] eq "pressed" and $cmd =~ "0|3")
(set FSB14_1_2 opens)
DOELSEIF (([EnO_00107EC6:state] eq "AI" or [EnO_00107EC6:state] eq "A0") and [EnO_00107EC6:buttons] eq "pressed" and $cmd =~ "1|2")
(set FSB14_1_2 stop)


VG
F.
Titel: Antw:Taster zur Jalousie-Steuerung
Beitrag von: Ellert am 27 Juni 2016, 13:12:10
Ich kenne das Eltako-Gerät nicht. Da Du  2 Vergleiche hast AI und pressed vermute ich, dass AI dem pressed folgt und die Bedingung erst beim 2. Tastendruck wahr wird. Mit einem Dummy Taster und dem state unten/oben dürfte das Problen nicht bestehen.

Dann müsstest nach einem Event des Tasters suchen das eindeutig zu "oben" oder "unten" passt und nur damit triggern.
Titel: Antw:Taster zur Jalousie-Steuerung
Beitrag von: Fistandantilus am 27 Juni 2016, 21:56:20
Der Taster ist ein normaler Enocean Funktaster. Mehr Events gibt es da scheinbar nicht. Das was Du geschrieben hast, könnte aber durchaus stimmen. Die Readings der Channels oder vom state stehen immer auf dem letzten Wert. Wirklich weiter hilft mir das aber nicht  :(
Titel: Antw:Taster zur Jalousie-Steuerung
Beitrag von: Ellert am 27 Juni 2016, 23:32:00
Vertausch doch mal AI und A0.
Titel: Antw:Taster zur Jalousie-Steuerung
Beitrag von: Fistandantilus am 29 Juni 2016, 14:25:22
Das Tauschen macht keinen Unterschied. Das Selbe Verhalten habe ich an einem Taster, der mit Draht angebunden ist (an einem Eltako FTS14EM).
Titel: Antw:Taster zur Jalousie-Steuerung
Beitrag von: Ellert am 29 Juni 2016, 14:37:58
Wie gesagt, ich kenne mich in der Enocean-Welt nicht aus. Meine Idee war: Wenn AI erst nach dem 1. pressed gesetzt wird, dann ist vorher noch A0 vorhanden, das war halt falsch geraten.

Warum werden die beiden Readings zum triggern benötigt?
Gibt es andere Events die eindeutiger sind, was sagt der Eventmonitor dazu?
Titel: Antw:Taster zur Jalousie-Steuerung
Beitrag von: Fistandantilus am 30 Juni 2016, 22:01:43
Wirklich viele Optionen gibt es nicht. Im Event Log steht sowas in der Art:

2016-06-30 21:02:34 EnOcean EnO_00001011 buttons: pressed
2016-06-30 21:02:34 EnOcean EnO_00001011 channelB: B0
2016-06-30 21:02:34 EnOcean EnO_00001011 B0
2016-06-30 21:02:34 EnOcean EnO_00001011 buttons: released


Bei dem wired Eltako reicht es, wenn ich nur auf pressed prüfe, da jeder Taster seine eigene ID hat (gerade getestet und umgestellt - passt). Bei dem Enocean Funktaster (Doppelwippe) hat der Taster eine ID und jede Wippe kommt über einen separaten Channel mit AI/A0 bzw. BI/B0, hier kann ich wahrscheinlich nicht wirklich was tun.
Titel: Antw:Taster zur Jalousie-Steuerung
Beitrag von: Ellert am 30 Juni 2016, 22:38:31
Reicht es dann nicht, nur auf den Channel zu triggern, oder auf released statt pressed?
Vor released müsste der Channel schon gesetzt sein, so wie es aussieht.
Titel: Antw:Taster zur Jalousie-Steuerung
Beitrag von: Fistandantilus am 30 Juni 2016, 22:47:53
Nur Channel wird nicht gehen, da mir dann der Trigger beim 2. Tastendruck für das Stop fehlt. Das mit dem released probier ich morgen mal aus.
Vielleicht hab ich aber auch nur einen Denkfehler?
Titel: Antw:Taster zur Jalousie-Steuerung
Beitrag von: Fistandantilus am 01 Juli 2016, 11:02:14
So, ich hab jetzt mal alles umgebaut. Bei dem Funktaster prüfe ich auf state und released und bei dem wired reicht pressed ohne den state, da anders als bei der Doppelwippe jeder Taster eine eigene ID hat. Danke für die Hilfe!
Titel: Antw:Taster zur Jalousie-Steuerung
Beitrag von: Johnnyflash am 03 Juli 2016, 07:38:59
Warum meldet dein FSB14 die Position nicht zurück? Der Aktor ist doch bidirektional!
Titel: Antw:Taster zur Jalousie-Steuerung
Beitrag von: Fistandantilus am 03 Juli 2016, 23:11:33
Es wird aber nur open, closed oder stop zurückgemeldet. Wenn ich dem Aktor close schicke, geht der im Status auch direkt auf closed, auch wenn der vielleicht 50 Sekunden braucht, um überhaupt die Jalousie komplett zu schließen. Die prozentuale Position wird nicht gemeldet, das unterstützen nur wenige Aktoren, die intern anhand der Fahrzeit die Pos. berechnen.
Titel: Antw:Taster zur Jalousie-Steuerung
Beitrag von: Johnnyflash am 04 Juli 2016, 14:40:22
Ich vermute eher, dass du die Fahrezeiten nicht korrekt definiert hast. Wenn du shutTime und shutTimeCloses korrekt definiert hast, errechnet FHEM aus der zurückgemeldeten Fahrzeit des Aktors die Position.
Titel: Antw:Taster zur Jalousie-Steuerung
Beitrag von: Fistandantilus am 07 Juli 2016, 13:22:06
Die Zeiten sind korrekt hinterlegt. Wenn ich die Position konkret anfahre über das Frontend funktioniert das auch und FHEM zeigt einen prozentualen Wert an. Schließe ich die Jalousien mit "set ... closes" springt auch die Position direkt auf 100, das Reading wird während des Fahrens nicht permanent anktualisiert.