ROLLO: Unterschied zwischen den Versionen

Aus FHEMWiki
 
(43 dazwischenliegende Versionen von 8 Benutzern werden nicht angezeigt)
Zeile 2: Zeile 2:
{{Infobox Modul
{{Infobox Modul
|ModPurpose=Rollo-Steuerung zur einfachen Anzeige/Programmierung
|ModPurpose=Rollo-Steuerung zur einfachen Anzeige/Programmierung
|ModType=x
|ModType=h
|ModFTopic=47202
|ModFTopic=95832
<!-- |ModCategory= (noch?) nicht verwendet -->
<!-- |ModCategory= (noch?) nicht verwendet -->
<!-- |ModCmdRef= ---- noch nicht Teil von FHEM ---->
<!-- |ModCmdRef= ---- noch nicht Teil von FHEM ---->
|ModForumArea=Codeschnipsel
|ModForumArea=Unterstützende Dienste
|ModTechName=44_ROLLO.pm
|ModTechName=44_ROLLO.pm
|ModOwner=ThomasRamm}}
|ModOwner=KernSani}}
Das Modul [[ROLLO]] bietet eine einfache Möglichkeit, mit ein bis zwei Relais den Hoch-/Runterlauf eines Rolladen zu steuern und punktgenau anzuhalten. Außerdem wird die aktuelle Position in fhem abgebildet.
Das Modul [[ROLLO]] bietet eine einfache Möglichkeit, mit ein bis zwei Relais den Hoch-/Runterlauf eines Rolladen zu steuern und punktgenau anzuhalten. Außerdem wird die aktuelle Position in fhem abgebildet.
Über welche Hardware/Module die Ausgänge angesprochen werden ist dabei egal.
Über welche Hardware/Module die Ausgänge angesprochen werden ist dabei egal.
__TOC__
__TOC__
Das Modul unterstützt verschiedenste Konfigurationen welche Befehle ausgeführt werden müssen um die Hardware des Rollos zu steuern.
Das Modul unterstützt beliebige Konfigurationen welche Befehle ausgeführt werden müssen um die Hardware des Rollos zu steuern.
Weitere Konfigurationen können im Forum angefragt werden.


Besonderheiten:
* Die Rollo-Position wird in 10%-Schritten von 0% (offen) bis 100% (geschlossen) zwischengespeichert um auf der Oberfläche für jede Position ein Icon festlegen zu können.  
* Wird in einer Konfiguration ein Kanal für die Richtung, der zweite für das Aktivieren des Rollos genutzt (z.B. Typ1), wird immer vor einem Rollo-Start die Richtung gesetzt. Bei einem Richtungswechsel während der Fahrt wird der Rollo für 1 sekunde gestoppt und dann in der Gegenrichtung gestartet.
 
* Fährt das Rollo zur Position offen oder geschlossen, wird der Motor noch 5 sec. länger auf on gelassen, um Positionsverschiebungen aufgrund ungenauer Parameter auszugleichen. Bei jedem vollständigen schließen/öffnen ist die Position damit wieder korrekt.
 
* Die Rollo-Position wird in 10%-Schritten von 0% (offen) bis 100% (geschlossen) zwischengespeichert um auf der Oberfläche für jede Position ein Icon festlegen zu können. Die Ungenauigkeiten die dadurch zwischen echter Position und gespeicherter Position entstehen, werden durch oben angeführte Korrektur ausgeglichen.


[[Datei:Rolladen Eintrag.PNG|right|thumb|400px|Verschiedene Ansichten des Rollo:offen, fährt gerade herunter, position 50, fährt gerade hoch, geschlossen]]
[[Datei:Rolladen Eintrag.PNG|right|thumb|400px|Verschiedene Ansichten des Rollo:offen, fährt gerade herunter, position 50, fährt gerade hoch, geschlossen]]
Zeile 26: Zeile 20:


Ist ein Rollo mit diesem Modul definiert kann man auf der Oberfläche per Klick das Rollo hoch/runter oder auf eine bestimmte Position fahren. Der aktuelle Status des Rollo (fährt hoch/runter,offen,geschlossen,etc.) wird angezeigt.
Ist ein Rollo mit diesem Modul definiert kann man auf der Oberfläche per Klick das Rollo hoch/runter oder auf eine bestimmte Position fahren. Der aktuelle Status des Rollo (fährt hoch/runter,offen,geschlossen,etc.) wird angezeigt.
Die Oberflächenicons werden per devStateIcon gesteuert, Icons und Farben können für jeden Status individuell formatiert werden, die Standard Kommandos auf der Oberfläche (hier: offen, geschlossen, schlitz, Position) können ebenfalls per Attribut angepasst werden.
Die Oberflächenicons werden per devStateIcon gesteuert, Icons und Farben können für jeden Status individuell formatiert werden, die Standard Kommandos auf der Oberfläche (hier: offen, geschlossen, schlitz, Position) können ebenfalls per Attribut angepasst werden. Das Status-Icon ist anklickbar.
Beim Anlegen des Moduls werden die Attribute zur Darstellung in fhem mit Standardwerten angelegt, so dass man sich einiges an Tipparbeit sparen kann, aber trotzdem die Möglichkeit hat die Darstellung individuell anzupassen.
Beim Anlegen des Moduls werden die Attribute zur Darstellung in fhem mit Standardwerten angelegt, so dass man sich einiges an Tipparbeit sparen kann, aber trotzdem die Möglichkeit hat die Darstellung individuell anzupassen.


== Voraussetzungen ==
Das eigentliche ansteuern des Rollo muss mit FHEM Befehlen ausführbar sein, diese Modul ist "nur" eine Oberfläche/Bedienmodul, kein Hardwaremodul.
Wenn ROLLO installiert wurde, bevor es Bestandteil von FHEM wurde und lange kein Update gemacht wurde, wirst du die "position" readings und das entsprechende set Kommando vermissen. "position" wurde durch "pct" ersetzt, um Kompatibilität mit anderen Modulen [https://fhem.de/commandref_DE.html#AutoShuttersControl Automatic Shutter Control - ASC] sicher zu stellen. Bitte passe deine NOTIFYs/DOIFs entsprechend an.


== Voraussetzungen ==
== Installation ==
Es müssen in fhem 2 Kanäle konfiguriert sein die mit on/off gesteuert werden können. Diese Kanäle können als Readings eines device oder als eigenständige definitionen in fhem existieren.
 
{{Hinweis|Dieses Modul ist in der offiziellen FHEM-Auslieferung enthalten.}}


== Anwendung ==
== Anwendung ==
=== Define ===
=== Define ===
  define <name> ROLLO <device> <ausgang1> <ausgang2> <Typ>
  define <name> ROLLO
 
=== Attribute ===
{|class="wikitable"
|-
! Name !! Datentyp/<BR/>Wertebereich !! Default-Wert !! Beschreibung
|-
|rl_type ||attr <Rollo-Device> rl_type [normal|HomeKit] ||||Typunterscheidung zur unterstützung verschiedener Hardware. Abhängig vom gewählten Typ wird die Richtung von der die pct gerechnet wird festgelegt:


'''Parameter:'''
    normal = pct 0 ist offen, pct 100 ist geschlossen
{|class="wikitable sortable"
    HomeKit = pct 100 ist offen, pct 0 ist geschlossen
|-
|-
!Parameter !! class="unsortable"|Beschreibung
|rl_secondsDown||attr <Rollo-Device> rl_secondsDown <number> ||||Sekunden zum Hochfahren
|-
|-
|<name>||Name des Modul
|rl_secondsUp ||attr <Rollo-Device> rl_secondsUp <number> ||||Sekunden zum Herunterfahren
|-
|-
|<device>||Name des Hardwaremoduls dessen Readings die Kanäle sind. Sollten die Kanäle eigene definitionen in fhem sein, dann hier ein "-" eingeben.
|rl_excessTop ||attr <Rollo-Device> rl_excessTop <number> ||||Zeit, die mein Rollo fahren muss, ohne dass sich die Rollo-pct ändert (bei mir fährt der Rollo noch in die Wand, ohne dass man es am Fenster sieht, die pct ist also schon bei 0%).
|-
|-
|<ausgang1>||Name des Device-Reading oder des fhem Geräts von Kanal 1
|rl_excessBottom ||attr <Rollo-Device> rl_excessBottom <number> ||||(siehe excessTop)
|-
|-
|<ausgang2>||Name des zweiten Device-Reading bzw. fhem Geräts für Kanal 2
|rl_switchTime ||attr <Rollo-Device> rl_switchTime <number> ||||Zeit, die zwischen 2 gegensätzlichen Laufbefehlen pausiert werden soll, also wenn der Rollo z.B. gerade runter fährt und ich den Befehl gebe hoch zu fahren, dann soll 1 Sekunde gewartet werden bis der Motor wirklich zum Stillstand kommt, bevor es wieder in die andere Richtung weiter geht. Dies ist die einzige Zeit, die nichts mit der eigentlichen Laufzeit des Motors zu tun hat, sondern ein Timer zwischen den Laufzeiten.
|-
|-
|<typ>||Art der Kanalsteuerung. Mögliche Werte sind:<BR/>
|rl_resetTime ||attr <Rollo-Device> rl_resetTime <number> ||||Zeit, die beim Anfahren von Endpositionen (offen,geschlossen) der Motor zusätzlich an bleiben soll, um sicherzustellen, dass die Endposition wirklich angefahren wurde. Dadurch können Differenzen in der Positionsberechnung korrigiert werden.
Typ1,Typ2,Typ3,FS20ru. Eine Auflistung der Funktionsweise enthält der nächste Bereich.
|-
|}
|rl_reactionTime ||attr <Rollo-Device> rl_reactionTime <number> ||||Zeit für den Motor zum Reagieren
 
|-
'''Typen'''
|rl_autoStop ||attr <Rollo-Device> rl_autoStop [0|1] ||||Es muss kein Stop-Befehl ausgeführt werden, das Rollo stoppt von selbst.
{|class="wikitable" style="float:left; margin-right:1em"
|-
|rl_commandUp ||attr <Rollo-Device> rl_commandUp <string> ||||Es werden bis zu 3 beliebige Befehle zum Hochfahren ausgeführt
|-
|-
!colspan=3|Typ1
|rl_commandDown ||attr <Rollo-Device> rl_commandDown <string> ||||Es werden bis zu 3 beliebige Befehle zum Runterfahren ausgeführt
|-
|-
!Kanal 1!!Kanal 2!!Status
|rl_commandStop ||attr <Rollo-Device> rl_commandStop <string> ||||Befehl der zum Stoppen ausgeführt wird, sofern nicht commandStopDown bzw. commandStopUp definiert sind
|-
|-
|On||Off||hoch
|rl_commandStopDown ||attr <Rollo-Device> rl_commandStopDown <string> ||||Befehl der zum Stoppen ausgeführt wird, wenn der Rollo gerade herunterfährt. Wenn nicht definiert wird commandStop ausgeführt
|-
|-
|On||On||runter
|rl_commandStopUp ||attr <Rollo-Device> rl_commandStopUp <string> ||||Befehl der zum Stoppen ausgeführt wird,wenn der Rollo gerade hochfährt. Wenn nicht definiert wird commandStop ausgeführt
|-
|-
|Off||Off||stop
|rl_blockMode ||attr <Rollo-Device> rl_blockMode [blocked|force-open|force-closed|only-up|only-down|half-up|half-down|none] ||||wenn ich den Befehl blocked ausführe, dann wird aufgrund der blockMode-Art festgelegt wie mein Rollo reagieren soll:
|}


{|class="wikitable" style="float:left; margin-right:1em"
    blocked = Rollo lässt sich nicht mehr bewegen
    force-open = bei einem beliebigen Fahrbefehl wird Rollo hochgefahren
    force-closed = bei einem beliebigen Fahrbefehl wird Rollo runtergefahren
    only-up = Befehle zum runterfahren werden ignoriert
    only-down = Befehle zum hochfahren werden ignoriert
    half-up = es werden nur die Positionen 50-100 angefahren, bei pct <50 wird pct 50% angefahren,
    half-down = es werden nur die Positionen 0-50 angefahren, bei pct >50 wird pct 50 angefahren
    none = block-Modus ist deaktiviert
|-
|-
!colspan=3|Typ2
|automatic-enabled ||attr <Rollo-Device> automatic-enabled [on|off] ||||Wenn auf off gestellt, haben Befehle über Modul ROLLO_Automatic keine Auswirkungen auf diesen Rollo
|-
|-
!Kanal 1!!Kanal 2!!Status
|automatic-delay ||attr <Rollo-Device> automatic-delay <number> ||||Dieses Attribut wird nur für die Modulerweiterung ROLLADEN_Automatic benötigt.
Hiermit kann einge Zeitverzögerung für den Rolladen eingestellt werden, werden die Rolladen per Automatic heruntergefahren, so wird dieser um die angegebenen Minuten später heruntergefahren.
|-
|-
|On||Off||hoch
|rl_forceDrive ||attr <Rollo-Device> rl_forceDrive [0|1] ||||open/closed wird ausgeführt, auch wenn das ROLLO bereits in der Zielposition ist
|-
|-
|Off||On||runter
|rl_noSetPosBlocked ||attr <Rollo-Device> rl_noSetPosBlocked [0|1] ||||Wenn deaktiviert, können Positionsn (pct) auch gesetzt werden, wenn der ROLLO geblockt ist. Nach dem unblocken wird die entsprechende Position angefahren.
|-
|-
|Off||Off||stop
|||disableattr <Rollo-Device> disable [0|1] ||||Wenn deaktiviert, können keine set oder get commandos für den ROLLO ausgeführt werden.
|-
|||||||
|-
|||||||
|-
|||||||
|}
|}


{|class="wikitable" style="float:left; margin-right:1em"
=== Set ===
 
{|class="wikitable"
|-
!Name !!set Befehl !!Beschreibung
|-
|open ||set <Rollo-Device> open ||Fährt das Rollo komplett auf (pct 0)
|-
|-
!colspan=3|Typ3
|closed ||set <Rollo-Device> closed||Fährt das Rollo komplett zu (pct 100)
|-
|-
!Kanal 1!!Kanal 2!!Status
|up ||set <Rollo-Device> up ||Fährt das Rollo um 10 auf (pct +10)
|-
|-
|Off||-||hoch
|down ||set <Rollo-Device> down ||Fährt das Rollo um 10 zu (pct -10)
|-
|-
|On||-||runter
|half || set <Rollo-Device> half ||Fährt das Rollo zur Hälfte runter bzw. hoch (pct 50)
|-
|-
| -||On||stoppt das hochfahren
|stop ||set <Rollo-Device> stop ||Stoppt das Rollo
|-
|-
| -||Off||stoppt das herunterfahren
|drive ||set <Rollo-Device> drive up 5||Fährt das Rollo in die angegebene Richtung für die angegebene Zeit (in Sekunden)
|}
|-
 
|blocked ||set <Rollo-Device> blocked ||wenn aktiviert, kann der ROLLO nur noch eingeschränkt gesteuert werden. Siehe Attribut block_mode für Details.
{|class="wikitable" style="float:left; margin-right:1em"
|-
|-
!colspan=3|FS20rsu
|unblocked ||set <Rollo-Device> unblocked ||Aktiviert einen geblockten ROLLO wieder für die normale Benutzung
|-
|-
!Kanal 1!!Status
|pct ||set <Rollo-Device> pct <value> ||Fährt das Rollo auf eine beliebige pct zwischen 0 (offen) - 100 (geschlossen)
|-
|-
|On||hoch
|reset ||set <Rollo-Device> reset <value> ||Sagt dem Modul in welcher pct sich der Rollo befindet
|-
|-
|Off||runter
|extern ||set <Rollo-Device> extern <value> ||Der Software mitteilen dass gerade Befehl X bereits ausgeführt wurde und nun z.B,. das berechnen der aktuellen pct gestartet werden soll
|}
 
=== Get ===
 
{|class="wikitable"
|-
|-
|On||stoppt das hochfahren
!Name !!set Befehl !!Beschreibung
|-
|-
|Off||stoppt das herunterfahren
|version ||get <Rollo-Device> version ||Gibt die version des Modul Rollos aus
|}
|}


<div style="clear:both;"></div>
=== Readings ===
=== Attribute ===
{|class="wikitable"
{|class="wikitable"
|-
|-
! Name !! Datentyp/<BR/>Wertebereich !! Default-Wert !! Beschreibung
!Name !!Wert !!Beschreibung
|-
|command||open,stop,closed||
|-
|desired_pct||0-100||Zielposition die angefahren werden soll (nur sinnvoll während das Rollo fährt)
|-
|-
|drive-down-time-to-100
|drive-type||modul,extern||bei dem Befehl "set rollo extern .." wird dieses attribut auf "extern" gestellt, sonst immer "modul"
|Ganzzahl
|20
|Zeit in Sekunden die das Rollo vom offenen zum geschlossenen Zustand benötigt.
|-
|-
|drive-up-time-to-100
|last_drive||drive-up,drive-down||die zuletzt benutzte Fahrtrichtung
|Ganzzahl
|20
|Zeit in Sekunden, die das Rollo vom geschlossenen zum offenen Zustand benötigt (meist geringfügig höher als drive-down-time-to-100).
|-
|-
|automatic-enabled
|pct||0-100||exakte Position des Rollo
| on,off
| on
|Dieses Attribut wird nur für die Modulerweiterung 44_ROLLADEN_Automatic benötigt.
Hiermit kann die automatische Szenariensteuerung für den Rolladen deaktiviert werden.
|-
|-
|automatic-delay
|state||open,closed,position-[0-100]||die Position gerundet auf ganze 10% Schritte, identisch mit dem Internal STATE
|0,5,10,15,<BR/>20,30,45,60
|0
|Dieses Attribut wird nur für die Modulerweiterung ROLLADEN_Automatic benötigt.
Hiermit kann einge Zeitverzögerund für den Rolladen eingestellt werden, werden die Rolladen per Automatic heruntergefahren, so wird dieser um die angegebenen minuten später heruntergefahren.
|}
|}
=== Settings ===
Es gibt mehrere Settings die das Rollo in eine bestimmte Position fahren:
<code>set <name> <geschlossen></code> Fährt das Rollo komplett herunter (Position 100)
<code>set <name> <offen></code> Fährt das Rollo komplett nach oben (Position 0)
<code>set <name> <schlitz></code> Fährt das Rollo soweit herunter das nur die Rolloschlitze offen sind (Position 90)
<code>set <name> <position> <value></code> Fährt das Rollo auf eine beliebige Position zwischen 0 (offen) - 100 (geschlossen)
Weitere Fahrbefehle für das Rollo:
<code>set <name> <stop></code>  Stopt ein fahrendes Rollo unabhängig davon ob die vorher angegebene Zielposition erreicht wurde.
<code>set <name> <toggle></code> Fährt das Rollo in die entgegengesetzte Richtung wie beim letzten mal bis zur jeweiligen Endposition.
Fährt das Rollo gerade, wird es zuerst gestoppt und danach ebenfalls in die entgegengesetzte Richtung gefahren.
Sonstige Set-Befehle
<code>set <name> extern <position:offen,geschlossen,schlitz,stop></code> Startet alle Berechnungen und internen Timer im Modul, aktiviert aber nicht die konfigurierte Hardware (nützlich wenn diese bereits aktiviert wurde, um den Status der Oberfläche mit dem Ist-Zustand synchron zu halten. siehe auch [[#Zusammenspiel mit externem Taster]])
<code>set <name> reset <position:offen,geschlossen> </code> Setzt den internen Status des Rollo auf offen bzw. geschlossen ohne irgendwelche weiteren Aktionen durchzuführen.


== Anwendungsbeispiele ==
== Anwendungsbeispiele ==
===Define===
define meinRollo ROLLO myMcp23017 PortA0 PortA1 Typ1
Die Rollo-Kanäle sind Readings des Mcp23017-Device
define meinRollo ROLLO - Rollo_KanalA Rollo_KanalB
Die Rollo-Kanäle sind in fhem Eigenständige Devices, der Parameter <device> wurde deshalb mit einem "-" deaktiviert
===Set===
===Set===
  set RolladenWohnzimmer position 50
  set RolladenWohnzimmer pct 50
  set RolladenWohnzimmer geschlossen
  set RolladenWohnzimmer geschlossen
  set RolladenWohnzimmer offen  
  set RolladenWohnzimmer offen  
Zeile 183: Zeile 169:
Das Rollo-Modul wird angewiesen den status auf "nicht fahren" zu setzen, die aktuelle Rollo-Position zu berechnen und als neue Position abzuspeichern. Der eigentliche Rollo-Stop-Befehl wird dabei aber nicht gesendet.
Das Rollo-Modul wird angewiesen den status auf "nicht fahren" zu setzen, die aktuelle Rollo-Position zu berechnen und als neue Position abzuspeichern. Der eigentliche Rollo-Stop-Befehl wird dabei aber nicht gesendet.


  set RolladenWohnzimmer reset geschlossen
  set RolladenWohnzimmer reset closed
In der Oberfläche von fhem wird für das Rollo die Position "geschlossen" gespeichert, ohne Berechnungen durchzuführen oder Hardware zu steuern. Wird eevtl. benötigt wenn der Ist-Status von den Soll-Werten aus fhem abweicht.
In der Oberfläche von fhem wird für das Rollo die Position "geschlossen" gespeichert, ohne Berechnungen durchzuführen oder Hardware zu steuern. Wird evtl. benötigt wenn der Ist-Status von den Soll-Werten aus fhem abweicht.


===Zusammenspiel mit externem Taster===
===Zusammenspiel mit externem Taster===
In einem Anwendungszenario hat ein Nutzer zusätzliche Taster an seinem Rollo-Motor über die er ihn ebenfalls steuern kann. Die Taster selber senden keine Events an fhem, nur der Rollo-Motor.
In einem Anwendungszenario hat ein Nutzer zusätzliche Taster an seinem Rollo-Motor über die er ihn ebenfalls steuern kann.  
Mit folgender Definition können diese Taster in das ROLLO-Modul integriert werden:
Die Taster selber senden keine Events an fhem, nur der Rollo-Motor.
Hier ein Beispiel wie das ganze für aussehen könnte und diese Taster in das ROLLO-Modul integriert werden:


  define rollo_manuell_auf DOIF ([meinRollo_Kanal1] eq "on" and [meinRolloModul] ne "drive-up") (set meinRolloModul extern offen) DOELSEIF ([meinRollo_Kanal1] eq "off" and [meinRolloModul] eq "drive-up") (set meinRolloModul extern stop)
  define rollo_manuell_auf DOIF ([meinRollo_Kanal1] eq "on" and [?meinRolloModul] ne "drive-up") (set meinRolloModul extern open) DOELSEIF ([meinRollo_Kanal1] eq "off" and [?meinRolloModul] eq "drive-up") (set meinRolloModul extern stop)
  define rollo_manuell_ab  DOIF ([meinRollo_Kanal2] eq "on" and [meinRolloModul] ne "drive-down") (set meinRolloModul extern geschlossen) DOELSEIF ([meinRollo_Kanal2] eq "off" and [meinRolloModul] eq "drive-down") (set meinRolloModul extern stop)
  define rollo_manuell_ab  DOIF ([meinRollo_Kanal2] eq "on" and [?meinRolloModul] ne "drive-down") (set meinRolloModul extern closed) DOELSEIF ([meinRollo_Kanal2] eq "off" and [?meinRolloModul] eq "drive-down") (set meinRolloModul extern stop)


meinRollo_Kanal1 und meinRollo_Kanal2 sind die Hardwarekanäle die in dem Rollo-Modul zum hochfahren/runterfahren benutzt werden. In diesem Beispiel ist das Rollo als Typ2 (ein Kanal hoch, zweiter Kanal runter) definiert.
meinRollo_Kanal1 und meinRollo_Kanal2 sind die Hardwarekanäle die in dem Rollo-Modul zum hochfahren/runterfahren benutzt werden.  
Das erste DOIF prüft ob das Rollo hoch fährt, ohne das das Rollo-Modul davon etwas weis. Ist dem so wird dem Rollo Modul mithilfe des set <extern> mitgeteilt das das Rollo bereits gestartet wurde. Das Modul fängt an die Zeit zu zählen und aktualisiert den Status der Oberfläche auf "fahre hoch".
Das erste DOIF prüft ob das Rollo hoch fährt, ohne das das Rollo-Modul davon etwas weis. Ist dem so wird dem Rollo Modul mithilfe des set <extern> mitgeteilt das das Rollo bereits gestartet wurde. Das Modul fängt an die Zeit zu zählen und aktualisiert den Status der Oberfläche auf "fahre hoch".
IM DOELSEIF wird abgefragt ob das Rollo steht, obwohl das Modul denkt das Rollo würde noch fahren. Ist dem so wird wieder mithilfe des set <extern> dem Modul mitgeteilt das das Rollo gestoppt wurde. Das Modul berechnet nun aufgrund der gefahrenen Zeit die aktuelle Position und aktualisiert den Status der Oberfläche auf die Position.
IM DOELSEIF wird abgefragt ob das Rollo steht, obwohl das Modul denkt das Rollo würde noch fahren. Ist dem so wird wieder mithilfe des set <extern> dem Modul mitgeteilt das das Rollo gestoppt wurde. Das Modul berechnet nun aufgrund der gefahrenen Zeit die aktuelle Position und aktualisiert den Status der Oberfläche auf die Position.
Zeile 199: Zeile 186:
Das gleiche wird dann im zweiten DOIF nochmal für das herunterfahren gemacht.
Das gleiche wird dann im zweiten DOIF nochmal für das herunterfahren gemacht.


Man kann nun das Rollo sowohl über die Oberfläche als auch per Taster bedienen und fhem und der reale Ist-Status sind synchron. Ach eine gleichzeitige Bedienung ist möglich, Das Rollo startet z.B. aufgrund einer Automatisierung morgens zum hochfahren und man klickt schnell auf den Taster neben dem Bett und stoppt das ganze wieder.
Man kann nun das Rollo sowohl über die Oberfläche als auch per Taster bedienen und fhem und der reale Ist-Status sind synchron. Auch eine gleichzeitige Bedienung ist möglich, Das Rollo startet z.B. aufgrund einer Automatisierung morgens zum hochfahren und man klickt schnell auf den Taster neben dem Bett und stoppt das ganze wieder.


== Links ==
== Links ==
Thread im {{Link2Forum|Topic=47202|LinkText=Forum}} mit der jeweils aktuellen Version des Moduls als Anhang im ersten Beitrag.
 
Thread im {{Link2Forum|Topic=95832|LinkText=Forum}} seit das Modul Bestandteil der offiziellen FHEM Auslieferung ist
 
Thread im {{Link2Forum|Topic=47202|LinkText=Forum}} bevor das Modul Bestandteil von FHEM war

Aktuelle Version vom 25. Mai 2023, 08:52 Uhr


ROLLO
Zweck / Funktion
Rollo-Steuerung zur einfachen Anzeige/Programmierung
Allgemein
Typ Hilfsmodul
Details
Dokumentation EN / DE
Thema
Support (Forum) Unterstützende Dienste
Modulname 44_ROLLO.pm
Ersteller KernSani
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!

Das Modul ROLLO bietet eine einfache Möglichkeit, mit ein bis zwei Relais den Hoch-/Runterlauf eines Rolladen zu steuern und punktgenau anzuhalten. Außerdem wird die aktuelle Position in fhem abgebildet. Über welche Hardware/Module die Ausgänge angesprochen werden ist dabei egal.

Das Modul unterstützt beliebige Konfigurationen welche Befehle ausgeführt werden müssen um die Hardware des Rollos zu steuern.

  • Die Rollo-Position wird in 10%-Schritten von 0% (offen) bis 100% (geschlossen) zwischengespeichert um auf der Oberfläche für jede Position ein Icon festlegen zu können.
Verschiedene Ansichten des Rollo:offen, fährt gerade herunter, position 50, fährt gerade hoch, geschlossen

Vorteil dieses Moduls:

Ist ein Rollo mit diesem Modul definiert kann man auf der Oberfläche per Klick das Rollo hoch/runter oder auf eine bestimmte Position fahren. Der aktuelle Status des Rollo (fährt hoch/runter,offen,geschlossen,etc.) wird angezeigt. Die Oberflächenicons werden per devStateIcon gesteuert, Icons und Farben können für jeden Status individuell formatiert werden, die Standard Kommandos auf der Oberfläche (hier: offen, geschlossen, schlitz, Position) können ebenfalls per Attribut angepasst werden. Das Status-Icon ist anklickbar. Beim Anlegen des Moduls werden die Attribute zur Darstellung in fhem mit Standardwerten angelegt, so dass man sich einiges an Tipparbeit sparen kann, aber trotzdem die Möglichkeit hat die Darstellung individuell anzupassen.

Voraussetzungen

Das eigentliche ansteuern des Rollo muss mit FHEM Befehlen ausführbar sein, diese Modul ist "nur" eine Oberfläche/Bedienmodul, kein Hardwaremodul.

Wenn ROLLO installiert wurde, bevor es Bestandteil von FHEM wurde und lange kein Update gemacht wurde, wirst du die "position" readings und das entsprechende set Kommando vermissen. "position" wurde durch "pct" ersetzt, um Kompatibilität mit anderen Modulen Automatic Shutter Control - ASC sicher zu stellen. Bitte passe deine NOTIFYs/DOIFs entsprechend an.

Installation

Info blue.png
Dieses Modul ist in der offiziellen FHEM-Auslieferung enthalten.


Anwendung

Define

define <name> ROLLO

Attribute

Name Datentyp/
Wertebereich
Default-Wert Beschreibung
rl_type HomeKit] Typunterscheidung zur unterstützung verschiedener Hardware. Abhängig vom gewählten Typ wird die Richtung von der die pct gerechnet wird festgelegt:
   normal = pct 0 ist offen, pct 100 ist geschlossen
   HomeKit = pct 100 ist offen, pct 0 ist geschlossen
rl_secondsDown attr <Rollo-Device> rl_secondsDown <number> Sekunden zum Hochfahren
rl_secondsUp attr <Rollo-Device> rl_secondsUp <number> Sekunden zum Herunterfahren
rl_excessTop attr <Rollo-Device> rl_excessTop <number> Zeit, die mein Rollo fahren muss, ohne dass sich die Rollo-pct ändert (bei mir fährt der Rollo noch in die Wand, ohne dass man es am Fenster sieht, die pct ist also schon bei 0%).
rl_excessBottom attr <Rollo-Device> rl_excessBottom <number> (siehe excessTop)
rl_switchTime attr <Rollo-Device> rl_switchTime <number> Zeit, die zwischen 2 gegensätzlichen Laufbefehlen pausiert werden soll, also wenn der Rollo z.B. gerade runter fährt und ich den Befehl gebe hoch zu fahren, dann soll 1 Sekunde gewartet werden bis der Motor wirklich zum Stillstand kommt, bevor es wieder in die andere Richtung weiter geht. Dies ist die einzige Zeit, die nichts mit der eigentlichen Laufzeit des Motors zu tun hat, sondern ein Timer zwischen den Laufzeiten.
rl_resetTime attr <Rollo-Device> rl_resetTime <number> Zeit, die beim Anfahren von Endpositionen (offen,geschlossen) der Motor zusätzlich an bleiben soll, um sicherzustellen, dass die Endposition wirklich angefahren wurde. Dadurch können Differenzen in der Positionsberechnung korrigiert werden.
rl_reactionTime attr <Rollo-Device> rl_reactionTime <number> Zeit für den Motor zum Reagieren
rl_autoStop 1] Es muss kein Stop-Befehl ausgeführt werden, das Rollo stoppt von selbst.
rl_commandUp attr <Rollo-Device> rl_commandUp <string> Es werden bis zu 3 beliebige Befehle zum Hochfahren ausgeführt
rl_commandDown attr <Rollo-Device> rl_commandDown <string> Es werden bis zu 3 beliebige Befehle zum Runterfahren ausgeführt
rl_commandStop attr <Rollo-Device> rl_commandStop <string> Befehl der zum Stoppen ausgeführt wird, sofern nicht commandStopDown bzw. commandStopUp definiert sind
rl_commandStopDown attr <Rollo-Device> rl_commandStopDown <string> Befehl der zum Stoppen ausgeführt wird, wenn der Rollo gerade herunterfährt. Wenn nicht definiert wird commandStop ausgeführt
rl_commandStopUp attr <Rollo-Device> rl_commandStopUp <string> Befehl der zum Stoppen ausgeführt wird,wenn der Rollo gerade hochfährt. Wenn nicht definiert wird commandStop ausgeführt
rl_blockMode force-open|force-closed|only-up|only-down|half-up|half-down|none] wenn ich den Befehl blocked ausführe, dann wird aufgrund der blockMode-Art festgelegt wie mein Rollo reagieren soll:
   blocked = Rollo lässt sich nicht mehr bewegen
   force-open = bei einem beliebigen Fahrbefehl wird Rollo hochgefahren
   force-closed = bei einem beliebigen Fahrbefehl wird Rollo runtergefahren
   only-up = Befehle zum runterfahren werden ignoriert
   only-down = Befehle zum hochfahren werden ignoriert
   half-up = es werden nur die Positionen 50-100 angefahren, bei pct <50 wird pct 50% angefahren,
   half-down = es werden nur die Positionen 0-50 angefahren, bei pct >50 wird pct 50 angefahren
   none = block-Modus ist deaktiviert
automatic-enabled off] Wenn auf off gestellt, haben Befehle über Modul ROLLO_Automatic keine Auswirkungen auf diesen Rollo
automatic-delay attr <Rollo-Device> automatic-delay <number> Dieses Attribut wird nur für die Modulerweiterung ROLLADEN_Automatic benötigt.

Hiermit kann einge Zeitverzögerung für den Rolladen eingestellt werden, werden die Rolladen per Automatic heruntergefahren, so wird dieser um die angegebenen Minuten später heruntergefahren.

rl_forceDrive 1] open/closed wird ausgeführt, auch wenn das ROLLO bereits in der Zielposition ist
rl_noSetPosBlocked 1] Wenn deaktiviert, können Positionsn (pct) auch gesetzt werden, wenn der ROLLO geblockt ist. Nach dem unblocken wird die entsprechende Position angefahren.
1] Wenn deaktiviert, können keine set oder get commandos für den ROLLO ausgeführt werden.

Set

Name set Befehl Beschreibung
open set <Rollo-Device> open Fährt das Rollo komplett auf (pct 0)
closed set <Rollo-Device> closed Fährt das Rollo komplett zu (pct 100)
up set <Rollo-Device> up Fährt das Rollo um 10 auf (pct +10)
down set <Rollo-Device> down Fährt das Rollo um 10 zu (pct -10)
half set <Rollo-Device> half Fährt das Rollo zur Hälfte runter bzw. hoch (pct 50)
stop set <Rollo-Device> stop Stoppt das Rollo
drive set <Rollo-Device> drive up 5 Fährt das Rollo in die angegebene Richtung für die angegebene Zeit (in Sekunden)
blocked set <Rollo-Device> blocked wenn aktiviert, kann der ROLLO nur noch eingeschränkt gesteuert werden. Siehe Attribut block_mode für Details.
unblocked set <Rollo-Device> unblocked Aktiviert einen geblockten ROLLO wieder für die normale Benutzung
pct set <Rollo-Device> pct <value> Fährt das Rollo auf eine beliebige pct zwischen 0 (offen) - 100 (geschlossen)
reset set <Rollo-Device> reset <value> Sagt dem Modul in welcher pct sich der Rollo befindet
extern set <Rollo-Device> extern <value> Der Software mitteilen dass gerade Befehl X bereits ausgeführt wurde und nun z.B,. das berechnen der aktuellen pct gestartet werden soll

Get

Name set Befehl Beschreibung
version get <Rollo-Device> version Gibt die version des Modul Rollos aus

Readings

Name Wert Beschreibung
command open,stop,closed
desired_pct 0-100 Zielposition die angefahren werden soll (nur sinnvoll während das Rollo fährt)
drive-type modul,extern bei dem Befehl "set rollo extern .." wird dieses attribut auf "extern" gestellt, sonst immer "modul"
last_drive drive-up,drive-down die zuletzt benutzte Fahrtrichtung
pct 0-100 exakte Position des Rollo
state open,closed,position-[0-100] die Position gerundet auf ganze 10% Schritte, identisch mit dem Internal STATE

Anwendungsbeispiele

Set

set RolladenWohnzimmer pct 50
set RolladenWohnzimmer geschlossen
set RolladenWohnzimmer offen 

Drei Beispiele das Rollo-Modul anzuweisen verschiedene Positionen anzufahren.

set RolladenWohnzimmer extern stop

Das Rollo-Modul wird angewiesen den status auf "nicht fahren" zu setzen, die aktuelle Rollo-Position zu berechnen und als neue Position abzuspeichern. Der eigentliche Rollo-Stop-Befehl wird dabei aber nicht gesendet.

set RolladenWohnzimmer reset closed

In der Oberfläche von fhem wird für das Rollo die Position "geschlossen" gespeichert, ohne Berechnungen durchzuführen oder Hardware zu steuern. Wird evtl. benötigt wenn der Ist-Status von den Soll-Werten aus fhem abweicht.

Zusammenspiel mit externem Taster

In einem Anwendungszenario hat ein Nutzer zusätzliche Taster an seinem Rollo-Motor über die er ihn ebenfalls steuern kann. Die Taster selber senden keine Events an fhem, nur der Rollo-Motor. Hier ein Beispiel wie das ganze für aussehen könnte und diese Taster in das ROLLO-Modul integriert werden:

define rollo_manuell_auf DOIF ([meinRollo_Kanal1] eq "on" and [?meinRolloModul] ne "drive-up") (set meinRolloModul extern open) DOELSEIF ([meinRollo_Kanal1] eq "off" and [?meinRolloModul] eq "drive-up") (set meinRolloModul extern stop)
define rollo_manuell_ab  DOIF ([meinRollo_Kanal2] eq "on" and [?meinRolloModul] ne "drive-down") (set meinRolloModul extern closed) DOELSEIF ([meinRollo_Kanal2] eq "off" and [?meinRolloModul] eq "drive-down") (set meinRolloModul extern stop)

meinRollo_Kanal1 und meinRollo_Kanal2 sind die Hardwarekanäle die in dem Rollo-Modul zum hochfahren/runterfahren benutzt werden. Das erste DOIF prüft ob das Rollo hoch fährt, ohne das das Rollo-Modul davon etwas weis. Ist dem so wird dem Rollo Modul mithilfe des set <extern> mitgeteilt das das Rollo bereits gestartet wurde. Das Modul fängt an die Zeit zu zählen und aktualisiert den Status der Oberfläche auf "fahre hoch". IM DOELSEIF wird abgefragt ob das Rollo steht, obwohl das Modul denkt das Rollo würde noch fahren. Ist dem so wird wieder mithilfe des set <extern> dem Modul mitgeteilt das das Rollo gestoppt wurde. Das Modul berechnet nun aufgrund der gefahrenen Zeit die aktuelle Position und aktualisiert den Status der Oberfläche auf die Position.

Das gleiche wird dann im zweiten DOIF nochmal für das herunterfahren gemacht.

Man kann nun das Rollo sowohl über die Oberfläche als auch per Taster bedienen und fhem und der reale Ist-Status sind synchron. Auch eine gleichzeitige Bedienung ist möglich, Das Rollo startet z.B. aufgrund einer Automatisierung morgens zum hochfahren und man klickt schnell auf den Taster neben dem Bett und stoppt das ganze wieder.

Links

Thread im Forum seit das Modul Bestandteil der offiziellen FHEM Auslieferung ist

Thread im Forum bevor das Modul Bestandteil von FHEM war