Neues Modul: Rolladensteuerung

Begonnen von ThomasRamm, 11 Januar 2016, 00:00:21

Vorheriges Thema - Nächstes Thema

ThomasRamm

Da gibt es mehrere Möglichkeiten.
z.B. mit einem DoIf oder du wertest beim Tastendruck aus ob dein Rollo gerade fährt, das Modul setzt dafür eine auslesbare Variable.
Das ganze könnte in etwa so aussehen:
{if (Value("RolladenBad") =~ /drive/) {fhem("set RolladenBad stop")} else {fhem("set RolladenBad open")}}

Bin unterwegs und kann Syntax nicht prüfen, kann also evtl. eine Klammer oder so falsch gesetzt sein. Vermutlich kann man das noch eleganter schreiben, ohne über System+fhem Aufruf zu gehen, fällt mir aber gerade nichts besseres ein.

Gruß Thomas

LaChris

Hallo Thomas,

wie kann ich das denn in das Modul einbauen? Ich habe mir das angesehen, bin aber in PERL nicht so bewandert, ich weiß also nicht wo ich das einzubauen ist.

Es könnte doch fest als Typ hinzugefügt werden oder kann es an der Stelle nicht definiert werden?

Gruß

ThomasRamm

Hallo LaChris,
das hat mit dem Modul eigentlich nichts zu tun, sondern ist ja der LogikTeil Wenn X dann Y (wobei Y der Rolladen ist und durch das Rollo-Modul abgedeckt ist).
Du musst jetzt also noch "X" und "dann" in FHEM einbauen.
Als ersten Test würde ich dir empfehlen einen dummy anzulegen der on:off als Status annimmt, dann kannst du einen Taster simmulieren (beachte das du dann in der weboberfläche immer 2x drücken musst, 1x = Taster gedrückt, 1x = Taster losgelasen). Mit mienem Code von oben sollte sich dann dein Rollo schon in Bewegung setzen.
Wie du deinen Taster in FHEM einbindest kann ich dir nicht sagen, hängt vom Taster-Modul der Hardware ab die du einsetzt. Im einfachsten Fall hast du pro Taster eine Geräteinstanz die analog des dummy arbeitet.

PS: als rollo solltest du evtl auch zuerst einen dummy anlegen, kannst ja den stand des rollo auf der oberfläche verfolgen.

Gruß
Thomas
Thomas

LaChris

Hallo Thomas,

ja das hab ich soweit schon verstanden, dann benötige ich aber für jeden Taster einen dummy, wenn es im Rollo-Modul hinterlegt wäre könnte ich mir diese Arbeit sparen und FHEM würde da übersichtlicher bleiben, zumal ich das mit dem gedrückt halten auf jeden Fall in FHEM direkt abbilden muss.

Gruß Chris

HoTi

Nur zu Info für euch. Bin diese und nächste Woche noch im Urlaub. Melde mich nach dem Urlaub zurück.

Thomas ist ja auch noch da :)
Viele Grüße aus  Oberbayern
Tim (RettungsTim)

Burny4600

Gibt es eine Möglichkeit damit die Rollläden die gleiche Position anfahren, sagen wir zb. 50%, egal ob diese Position von oben oder von untern angefahren werden.

Irgendwie könnte das vielleicht über den Abstand der einzelnen Lamellen der Rollläden ermittelbar sein, da dies ein varibaler nicht erfasster Bereich des Moduls ist.
Zumindest finde ich dazu nichts.

LG Chris

Raspberry Pi 2-5, Bullseye Lite, Bookworm Lite
Schnittstellen: 1-Wire, FHEM2FEHEM, HM-MOD-UART, LAN, Modbus, MQTT, nanoCUL, RFXtrx433E, SIGNALduino, ser2net
Devices: APC, Eastron, FS20, IT, Homematic, MQTT, PV-(DEYE, EPEVER, FRONIUS), Resol-VBUS, S.USV, TEK603, WMR200, YouLess

ThomasRamm

Hallo Burny4600,
über den Befehl set position 50 fährt der Rollo genau auf diese Position, egal wo er vorher war. Somit lässt sich dies mit dem Modul einfach umsetzen.
Aktuell gibt es noch kleine differenzen in der Positionsberechnung, da die meisten Rollo runter schneller sind als hoch, in der neuen Version lassen sich dafür aber extra attribute setzen, mit denen das ganze dann sehr genau wird. (Funktioniert bei mir seit längerem tadellos).
Aktuell warte ich noch auf Rückmeldung von Tim ob er noch irgendeinen Fehler gefunden hat, wenn nicht geben wir die neue Version demnächt online.
Alle die es nicht abwarten können, können sich die neue Version aber auch schon von github herunterladen: https://raw.githubusercontent.com/RettungsTim/fhem-rollo/DEV/FHEM/44_ROLLO.pm - Die definition und attribute haben sich hier jedoch komplett geändert, das updaten ist also eine etwas größere Aktion

Gruß
Thomas

weini

Hallo zusammen!

Beim mir läuft das "neue" ROLLO jetzt seit einem Tag und macht genau, was es soll. Ich nutze einen HM-MOD-Re-8 und steuere damit einen Rademacher 9700 Gurtwickler an. Da kommt es mir sehr entgegen, dass ich jetzt als Befehl "set <button> on-for-timer 0.25" direkt konfigurieren kann. Auch die Erkennung der direkten Schaltaktion am Rademacher via DOIF und "set <rollo> extern ..." funktioniert.

Ein Wunsch für künftige Versionen bleibt aber noch: Da ich die meisten meiner Rollos mit HM UP Aktoren (HM-LC-Bl1PBU-FM) steuere ist "bei mir" 100% eigentlich "auf". Es wäre super, wenn man über ein Attribut bei ROLLO die "positon" invertieren oder eine "inv_position" als weiteres Control bekommen könnte.

Vielen Dank, das ist ein Klasse Modul!

weini

Markus M.

Huch, den Code kenn ich doch  ;D

Ich bastle gerade selber noch und würde euch bitten, mit dem Checkin zu warten bis ich fertig bin.
Ich baue dann eine komplette Version mit Externer Steuerung, Automatik und Blockmodes.
100% ist dann auch auf, wie in allen anderen Implementierungen. Dann muss nur 1x rumgeändert werden.

Coole Doku übrigens!
resetTime hat allerdings nichts mit Richtungsänderungen zu tun, sondern ist die Zugabe an den Endpunkten, um diese auch absolut sicher zu erreichen.

Wenn sich jemand ein wenig den Kopf zerbrechen möchte: Aktuell stimmen die Prozentangaben nur auf die Zeit, nicht auf die absolute Rolloposition, was daran liegt dass oben der Wellendurchmesser um den bereits aufgewickelten Rollo grösser ist.
Vielleicht könnte man das noch irgendwie über eine Berechnung a la secondsHalfDown/Up lösen.

Markus
Aktuell weder Smarthome noch FHEM vorhanden

Thowe

#264
Hallo Modulersteller,
ich bin kürzlich auf Euer Rollo-Modul gestossen (Version 1008) und verwende es mit Typ 1 und Typ4. Typ 4 nutze ich, um bei einem Gurtwickler mit zwei Tasten (up, down) diese mit je einem parallel geschalteten Relais fernzusteuern. Dieser Gurtwickler hat eine programmierbare Endabschaltung, ein kurzes Drücken auf Up oder Down läßt den Rollladen in die jeweilige Endposition fahren. Kurzes Drücken am Gurtwickler auf Up oder Down stoppt die Fahrt. Langes Drücken auf die Gurtwicklertaste überfährt die Endabschaltung.
Als dritten Typ4-Kanal (Stop) nutze ich das Down-Relais, dass ja ebenfals auf Kanal 2 gelegt ist. Das funktioniert bis auf: Wenn der Rollladen über das Rollo-Modul Kommando "Up" erhält, fährt das Modul in die Endabschaltung, sendet dann jedoch nach einigen Sekunden "Stop" - und der Rolladen fährt herunter.
Diese modulinterne Endabschaltung habe ich bei Typ4 provisorisch entfernt. Besser wäre ein neuer Typ mit zwei Kanälen:
Kanal 1: hoch - on-for-timer 1, stop - on-for-timer 1, Kanal 2: runter - on-for-timer 1, stop - on-for-timer 1.
Ist im neuen Modul die Umsetzung dieses Typs möglich?

Viele Grüße, Thowe

HoTi

Zitat von: Markus M. am 04 Juli 2016, 08:57:36
Huch, den Code kenn ich doch  ;D

Ich bastle gerade selber noch und würde euch bitten, mit dem Checkin zu warten bis ich fertig bin.
Ich baue dann eine komplette Version mit Externer Steuerung, Automatik und Blockmodes.
100% ist dann auch auf, wie in allen anderen Implementierungen. Dann muss nur 1x rumgeändert werden.

Coole Doku übrigens!
resetTime hat allerdings nichts mit Richtungsänderungen zu tun, sondern ist die Zugabe an den Endpunkten, um diese auch absolut sicher zu erreichen.

Wenn sich jemand ein wenig den Kopf zerbrechen möchte: Aktuell stimmen die Prozentangaben nur auf die Zeit, nicht auf die absolute Rolloposition, was daran liegt dass oben der Wellendurchmesser um den bereits aufgewickelten Rollo grösser ist.
Vielleicht könnte man das noch irgendwie über eine Berechnung a la secondsHalfDown/Up lösen.

Markus


Hallo Markus,

wir brauchen das nicht Einchecken, du kannst das auch gerne übernehmen. Erstens  ist es dann dein Code und zweitens hast du damit schon die Erfahrung. Ich bin ich am Lernen.

Mich würde es aber freuen wenn du uns deine neuste Version zur Verfügung stellst, dann können Thomas und ich mit daran Arbeiten und ich auch lernen :-D

Ich kann die Doku für das neue Modul wieder machen wenn es von dir gewünscht ist.
Melde dich doch bitte kurz bei mir um das zu besprechen. Ich schicke dir mal per PN meine E-Mail Adresse.

Die jetzige DEV Version läuft bei mir seit 3Wochen einwandfrei, wen du aber noch viele Änderungen hast möchte ich diese nicht veröffentlichen  :'(

@Thowe
mit der neuen Version wirst du keine Probelme haben es umzusetzen. Es wird dann keine Typen mehr geben.
Viele Grüße aus  Oberbayern
Tim (RettungsTim)

Burny4600

@ThomasRamm

Gut dann warte ich erst einmal ab bis das Update verfügbar ist.
Danke für die Info noch.
LG Chris

Raspberry Pi 2-5, Bullseye Lite, Bookworm Lite
Schnittstellen: 1-Wire, FHEM2FEHEM, HM-MOD-UART, LAN, Modbus, MQTT, nanoCUL, RFXtrx433E, SIGNALduino, ser2net
Devices: APC, Eastron, FS20, IT, Homematic, MQTT, PV-(DEYE, EPEVER, FRONIUS), Resol-VBUS, S.USV, TEK603, WMR200, YouLess

HoTi

#267
Hallo zusammen,

so nun habe ich die DEV von Markus und Thomas noch mit Änderungen für die externe Steuerung versehen.
Für euch habe ich diese zum Testen online gestellt.

Ein Update kann hiermit gemacht werden.

https://raw.githubusercontent.com/RettungsTim/fhem-rollo/DEV/controls_fhemrollo.txt

ACHTUNG!!! Wir sind von 1.0.08 auf Version 1.110, da hier nicht kompatible Änderungen zur Vorgängerversion existieren müssen definition und attribute geändert werden. Also am alle alte Definitionen löschen!

Die Default-Positionen mit Namen sind:

  • open = 100%
  • closed = 0%
  • half = 50%

Die möglichen Befehle sind:

  • open,closed,half (anfahren von Position 0%,100%,50%)
  • stop (stoppen des Rollo)
  • blocked+unblocked (neu, habe ich selber nicht benutzt, Erklärung weiter unten)
  • position + [n] (10er Schritte von 0..100)
  • reset (dem rollo sagen er wäre in Position x)
  • extern (Der Software mitteilen das gerade Befehl X bereits ausgeführt wurde und nun z.B,. das berechnen der aktuellen Position gestartet werden soll)

Die Attribute lauten:

  • secondsDown = sekunden zum hochfahren
  • secondsUp = sekunden zum herunterfahren
  • excessTop = Zeit die mein Rollo Fahren muss ohne das sich die Rollo-Position ändert (bei mir fährt der Rollo noch in die Wand, ohne das man es am Fenster sieht, die Position ist also schon bei 0%)
  • excessBottom (siehe excessTop)
  • resetTime (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.
  • reactionTime (Zeit für den Motor zum reagieren)
  • blockMode + [art] wenn ich den Befehl blocked ausführe, dann wird aufgrund der blockMode-Art festgelegt wie mein Rollo reagieren soll:
    o   blocked = Rollo lässt sich nicht mehr bewegen
    o   force-open = bei einem beliebigen Fahrbefehl wird Rollo hochgefahren
    o   force-closed = bei einem beliebigen Fahrbefehl wird Rollo runtergefahren
    o   only-up = Befehle zum runterfahren werden ignoriert
    o   only-down = Befehle zum hochfahren werden ignoriert
    o   half-up = es werden nur die Positionen 50-100 angefahren, bei Position <50 wird Position 50% angefahren,
    o   half-down = es werden nur die Positionen 0-50 angefahren, bei Position >50 wird Position 50 angefahren
    o   none = block-Modus ist deaktiviert
  • commandUp commandUp2 commandUp3
    o   es werden bis zu 3 beliebige Befehle zum hochfahren ausgeführt
  • commandDown commandDown2 commandDown3
    o   es werden bis zu 3 beliebige Befehle zum runterfahren ausgeführt
  • commandStop
    o   Befehl der zum Stoppen ausgeführt wird, sofern nicht commandStopDown bzw. commandStopUp definiert sind
  • commandStopDown
    o   Befehl der zum stoppen ausgeführt wird, wenn der Rollo gerade herunterfährt. Wenn nicht definiert wird commandStop ausgeführt
  • commandStopUp
    o   Befehl der zum Stoppen ausgeführt wird,wenn der Rollo gerade hochfährt. Wenn nicht definiert wird commandStop ausgeführt
  • automatic-enabled:on,off
    o   wenn auf off gestellt, haben Befehle über Modul ROLLO_Automatic keine Auswirkungen auf diesen Rollo
  • automatic-delay
    o   für Modul Rollo-Automatic, alle automatisierten Befehle werden an diesem Rollo x-Minuten später ausgeführt

Readings gibt es folgende:

  • command = zuletzt gesendeter Befehl (z.B. closed)
  • desired_position = zielposition (z.B. 100 -> hier soll mein Rollo hin wenn er fährt, hier ist mein rollo wenn er gestoppt ist)
  • last_drive = letzte fahrrichtung für toggle-Auswertung (z.B. drive-down)
  • position = aktuelle Position (z.B. 15.345)
  • state = (z.B. position-20, closed, ...)
  • drive-type = intern (Über Modul fahren), extern (direkt fahren), na (es wird gerade nichts gemacht)

Bei der Position habe ich nun 2 Werte gespeichert, nicht mehr 1 Wert.

  • state = auf volle 10% Schritte gerundeter Positionswert, darüber wird das icon gesetzt, der Wert wurde auch bisher schon gespeichert.
  • position = "echte" ungerundete Position, die wird zur Berechnung genutzt. Dadurch kommt es theoretisch nicht mehr zu Abweichungen wenn die Fahrt unterbrochen wird (bisher wurde immer auf den vollen 10er-Schritt gerundet)

Hier meine Testumgebung für euch zum Orientieren und als Beispiel:

define TestRollo ROLLOneu
attr TestRollo autoStop 0
attr TestRollo blockMode none
attr TestRollo commandDown set TestRollo_RUNTER on
attr TestRollo commandStopDown set TestRollo_RUNTER off
attr TestRollo commandStopUp set TestRollo_HOCH off
attr TestRollo commandUp set TestRollo_HOCH on
attr TestRollo devStateIcon open:fts_shutter_10:closed closed:fts_shutter_100:open drive-up:fts_shutter_up@red:stop drive-down:fts_shutter_down@red:stop position-100:fts_shutter_10:open position-90:fts_shutter_10:closed position-80:fts_shutter_20:closed position-70:fts_shutter_30:closed position-60:fts_shutter_40:closed position-50:fts_shutter_50:closed position-40:fts_shutter_60:open position-30:fts_shutter_70:open position-20:fts_shutter_80:open position-10:fts_shutter_90:open position-0:fts_shutter_100:closed
attr TestRollo excessBottom 2
attr TestRollo excessTop 4
attr TestRollo resetTime 5
attr TestRollo room Test
attr TestRollo secondsDown 30
attr TestRollo secondsUp 30
attr TestRollo type Homekit
attr TestRollo verbose 5
attr TestRollo webCmd open:closed:half:stop:position


Die Definition für das Manuelle Fahren:

define TestRollo_manuell_auf DOIF ([TestRollo_HOCH] eq "on" and [TestRollo_RUNTER] eq "on" and [TestRollo] ne "drive-up") \
   (set TestRollo_RUNTER off) \
DOELSEIF ([TestRollo_HOCH] eq "on" and [TestRollo] ne "drive-up" and [TestRollo:drive-type] ne "intern") \
   (set TestRollo extern open) \
DOELSEIF ([TestRollo_HOCH] eq "off" and [TestRollo] eq "drive-up" and [TestRollo:drive-type] eq "extern") \
   (set TestRollo extern stop)
attr TestRollo_manuell_auf disable 0
attr TestRollo_manuell_auf room Test
define TestRollo_manuell_ab DOIF ([TestRollo_HOCH] eq "on" and [TestRollo_RUNTER] eq "on" and [TestRollo] ne "drive-down") \
     (set TestRollo_HOCH off) \
DOELSEIF ([TestRollo_RUNTER] eq "on" and [TestRollo] ne "drive-down" and [TestRollo:drive-type] ne "intern") \
     (set TestRollo extern closed) \
DOELSEIF ([TestRollo_RUNTER] eq "off" and [TestRollo] eq "drive-down"and [TestRollo:drive-type] eq "extern") \
     (set TestRollo extern stop)
attr TestRollo_manuell_ab disable 0
attr TestRollo_manuell_ab room Test


Und hier ein Bissel was zum Spielen, Uhrzeiten, Helligkeit, Modus usw...

define du_TestRollo_Master dummy
attr du_TestRollo_Master alias Automatik aktiv:
attr du_TestRollo_Master devStateIcon .*:rc_BLANK
attr du_TestRollo_Master group Rollos Settings
attr du_TestRollo_Master icon fts_shutter_automatic
attr du_TestRollo_Master room Test
attr du_TestRollo_Master setList state:an,aus
attr du_TestRollo_Master sortby 01
attr du_TestRollo_Master webCmd state

define du_TestRollo_Art dummy
attr du_TestRollo_Art alias Art:
attr du_TestRollo_Art devStateIcon .*:rc_BLANK
attr du_TestRollo_Art group Rollos Settings
attr du_TestRollo_Art icon fts_shutter_updown
attr du_TestRollo_Art room Test
attr du_TestRollo_Art setList state:Normal,Urlaub,Weihnachten
attr du_TestRollo_Art sortby 02
attr du_TestRollo_Art webCmd state

define du_TestRollo_Luminosity_ru dummy
attr du_TestRollo_Luminosity_ru alias Helligkeit RUNTER
attr du_TestRollo_Luminosity_ru devStateIcon .*:rc_BLANK
attr du_TestRollo_Luminosity_ru group Rollos Settings
attr du_TestRollo_Luminosity_ru icon fts_shutter_down
attr du_TestRollo_Luminosity_ru room Test
attr du_TestRollo_Luminosity_ru setList state:textField
attr du_TestRollo_Luminosity_ru sortby 03
attr du_TestRollo_Luminosity_ru webCmd state

define TestRollo_TK dummy
attr TestRollo_TK room Test
attr TestRollo_TK webCmd open:closed:tilted

define du_TestRollo_Zeit_ho dummy
attr du_TestRollo_Zeit_ho alias Zeit HOCH:
attr du_TestRollo_Zeit_ho devStateIcon .*:rc_BLANK
attr du_TestRollo_Zeit_ho group Rollos Settings
attr du_TestRollo_Zeit_ho icon icoUhr
attr du_TestRollo_Zeit_ho room Test
attr du_TestRollo_Zeit_ho setList state:time
attr du_TestRollo_Zeit_ho sortby 10
attr du_TestRollo_Zeit_ho webCmd state

define du_TestRollo_Zeit_ho_WE dummy
attr du_TestRollo_Zeit_ho_WE alias Zeit HOCH WE:
attr du_TestRollo_Zeit_ho_WE devStateIcon .*:rc_BLANK
attr du_TestRollo_Zeit_ho_WE group Rollos Settings
attr du_TestRollo_Zeit_ho_WE icon icoUhr
attr du_TestRollo_Zeit_ho_WE room Test
attr du_TestRollo_Zeit_ho_WE setList state:time
attr du_TestRollo_Zeit_ho_WE sortby 11
attr du_TestRollo_Zeit_ho_WE webCmd state

define du_TestRollo_Zeit_ru_start dummy
attr du_TestRollo_Zeit_ru_start alias Zeit RUNTER start:
attr du_TestRollo_Zeit_ru_start devStateIcon .*:rc_BLANK
attr du_TestRollo_Zeit_ru_start group Rollos Settings
attr du_TestRollo_Zeit_ru_start icon icoUhr
attr du_TestRollo_Zeit_ru_start room Test
attr du_TestRollo_Zeit_ru_start setList state:time
attr du_TestRollo_Zeit_ru_start sortby 21
attr du_TestRollo_Zeit_ru_start webCmd state

define du_TestRollo_Zeit_ru_ende dummy
attr du_TestRollo_Zeit_ru_ende alias Zeit RUNTER ende:
attr du_TestRollo_Zeit_ru_ende devStateIcon .*:rc_BLANK
attr du_TestRollo_Zeit_ru_ende group Rollos Settings
attr du_TestRollo_Zeit_ru_ende icon icoUhr
attr du_TestRollo_Zeit_ru_ende room Test
attr du_TestRollo_Zeit_ru_ende setList state:time
attr du_TestRollo_Zeit_ru_ende sortby 22
attr du_TestRollo_Zeit_ru_ende webCmd state

define GT_ga_BM_test dummy
attr GT_ga_BM_test room Test


Viele Grüße aus  Oberbayern
Tim (RettungsTim)

grappa24

Hallo,

ich würd gern die neue Version 1.110 mal ausprobieren, kenne mich mit DEV/github aber nicht aus; wie komme ich denn am einfachsten an die 44_ROLLO.pm ?

Danke, Dieter
Gebäudesicherheit/-komfort, PV-Prognose/Verbrauchssteuerung, Heizungssteuerung, Multimedia, ...
KNX, FS20, HM, HUE, Tradfri, Shellies, KLF200, Netatmo, Nuki, SolarForecast, HEOS, Alexa-FHEM, ...
FHEM 6.4, 2 x RasPi 3B+, Debian Bullseye

HoTi

update all https://raw.githubusercontent.com/RettungsTim/fhem-rollo/DEV/controls_fhemrollo.txt


Denke bitte dran Beta, Thomas hat auch schon Fehler gefunden, kann diese aber erst morgen beheben.
Viele Grüße aus  Oberbayern
Tim (RettungsTim)