Neues Modul: Rolladensteuerung

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

Vorheriges Thema - Nächstes Thema

KernSani

und noch den von weini erwähnte fix eingefügt (ungetestet)

Btw.: Der Modulautor ist zeitlich eingeschränkt, arbeitet aber daran, ROLLO in die offizielle FHEM Distribution aufzunehmen.

RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Joe4630

Hallo Zusammen,

ich hatte mich vor ein paar Wochen schon einmal hier gemeldet da ich das Phänomen hatte das nach dem Abspeichern der fhem.cfg die Weboberfläche von FHEM für längere Zeit nicht reagierte.
Am Anfang habe ich gedacht das dies am ROLLO Modul liegen könnte, da nach dem Rausnehmen des Moduls FHEM wieder flott reagierte. Nun habe ich das Phänomen etwas näher bestimmen können. Ich steuere die ROLLO Module mit 3 Schaltern an. Auf- Stop - Ab. Das sind bei mir Hardwareschalter die in FHEM über I2C eingelesen werden. Die Schalter an sich funktionieren gut. Steuere auch das ganze Licht damit.
Wenn ich nun aber die Schalter wie folgt mit dem ROLLO-Modul verbinde hängt sich FHEM beim Speichern der fhem.cfg genau so lange auf wie das fahren der Rollos definiert ist.

#Hier die Eingänge lesen
define Rollotaster_GWC_Auf readingsProxy PCB1_DI3V_X5_X6:PortB3
attr Rollotaster_GWC_Auf room Gäste-WC
attr Rollotaster_GWC_Auf webCmd on:off
define Rollo_GWX_Auf_notify notify Rollotaster_GWC_Auf:off set Rollo_GWC open

define Rollotaster_GWC_Stop readingsProxy PCB1_DI3V_X5_X6:PortB4
attr Rollotaster_GWC_Stop room Gäste-WC
attr Rollotaster_GWC_Stop webCmd on:off
define Rollo_GWC_Stop_notify notify Rollotaster_GWC_Stop:off set Rollo_GWC stop

define Rollotaster_GWC_Zu readingsProxy PCB1_DI3V_X5_X6:PortB5
attr Rollotaster_GWC_Zu room Gäste-WC
attr Rollotaster_GWC_Zu webCmd on:off
define Rollo_GWC_Zu_notify notify Rollotaster_GWC_Zu:off set Rollo_GWC closed

define Rollo_GWC ROLLO
attr Rollo_GWC autoStop 0
attr Rollo_GWC commandDown set PCB1_DO24V_X3_X4 PortB0 on
attr Rollo_GWC commandStopDown set PCB1_DO24V_X3_X4 PortB0 off
attr Rollo_GWC commandStopUp set PCB1_DO24V_X3_X4 PortB1 off
attr Rollo_GWC commandUp set PCB1_DO24V_X3_X4 PortB1 on
attr Rollo_GWC devStateIcon open:fts_shutter_10:closed closed:fts_shutter_100:open half:fts_shutter_50:closed drive-up:fts_shutter_up@red:stop drive-down:fts_shutter_down@red:stop position-100:fts_shutter_100:open position-90:fts_shutter_80:closed position-80:fts_shutter_80:closed position-70:fts_shutter_70:closed position-60:fts_shutter_60:closed position-50:fts_shutter_50:closed position-40:fts_shutter_40:open position-30:fts_shutter_30:open position-20:fts_shutter_20:open position-10:fts_shutter_10:open position-0:fts_shutter_10:closed
attr Rollo_GWC excessBottom 4
attr Rollo_GWC excessTop 1
attr Rollo_GWC resetTime 0
attr Rollo_GWC room Gäste-WC
attr Rollo_GWC secondsDown 10
attr Rollo_GWC secondsUp 12
attr Rollo_GWC switchTime 1
attr Rollo_GWC type normal
attr Rollo_GWC webCmd open:closed:half:stop:position



Wenn ich entweder das notify oder das ROLLO-Modul entferne läuft alles wieder flott.

Hat einer eine Idee was dann das langsame Reagieren der FHEM-Seite verursachen könnte? Wie kann ich vielleicht eleganter die Schalter mit dem Modul verbinden?
Auch suche ich noch eine elegante Lösung die Rolladen mit nur einem Schalter zu bedienen.

Danke für Eure Hilfe!

lukasbastelpeter

Kurze Frage, ich habe folgendes DOIF:
DOIF ([office.shutter.controller:drivingUp] eq "on") (IF ([office.shutter] ne "drive-up")(set office.shutter extern open))
DOELSEIF ([office.shutter.controller:drivingUp] eq "off") (IF ([office.shutter] eq "drive-up" ) (set office.shutter extern stop))
DOELSEIF ([office.shutter.controller:drivingDown] eq "on") (IF ([office.shutter] ne "drive-down") (set office.shutter extern closed))
DOELSEIF ([office.shutter.controller:drivingDown] eq "off") (IF ([office.shutter] eq "drive-down") (set office.shutter extern stop))


Es tut leider nicht das was es soll, sieht jemand jemand den Fehler? :)
# Raspberry Pi
# Homematic, Z-Wave
# HUE, Tradfri
# Harmony
# ESP8266  Basteleien per MQTT

KernSani

Zitat von: lukasbastelpeter am 07 April 2017, 12:19:55
Es tut leider nicht das was es soll, sieht jemand jemand den Fehler? :)
Was soll es denn tun bzw. An welcher Stelle tut es nicht was es soll?
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

KernSani

Zitat von: Joe4630 am 05 April 2017, 23:20:56
Hat einer eine Idee was dann das langsame Reagieren der FHEM-Seite verursachen könnte? Wie kann ich vielleicht eleganter die Schalter mit dem Modul verbinden?
Auch suche ich noch eine elegante Lösung die Rolladen mit nur einem Schalter zu bedienen.

Danke für Eure Hilfe!

Mal abgesehen vom üblichen "nicht die fhem.cfg direkt editieren": Wenn ich das auf die Schnelle richtig überblicke hast du dir da einen kleinen Endlosloop gebastelt.
1. Readingsproxy bekommt event (möglicherweise beim initialisieren nach dem save?)
2. Notify reagiert auf Readingsproxy und triggert ROLLO
3. Rollo schaltet den physischen Rollo, dadurch gibt es ein event im Readingsproxy... Goto 1.
4. Vermutung: Beim ersten schalten von ROLLO wird ein internalTimer gesetzt, der nach Ablauf der Laufzeit ein stop-Kommando schickt, dieses unterbricht die Endlosschleife.



RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

lukasbastelpeter

Es sollte meinen Rolladenstatus (office.shutter <- Device) mit den tatsächlichen Bewegungen der Rollade synchronisieren.
office.shutter.interface ist ein ESP der mir sagt ob sich der Motor grade nach oben (driveUp = on) oder nach unten bewegt (driveDown=on), z.B. durch Tastendruck auf den Gurtwickler oder sonstige Verknüpfungen die nicht über das "office.shuter"-Device laufen
# Raspberry Pi
# Homematic, Z-Wave
# HUE, Tradfri
# Harmony
# ESP8266  Basteleien per MQTT

KernSani

Zitat von: lukasbastelpeter am 07 April 2017, 13:29:52
Es sollte meinen Rolladenstatus (office.shutter <- Device) mit den tatsächlichen Bewegungen der Rollade synchronisieren.
office.shutter.interface ist ein ESP der mir sagt ob sich der Motor grade nach oben (driveUp = on) oder nach unten bewegt (driveDown=on), z.B. durch Tastendruck auf den Gurtwickler oder sonstige Verknüpfungen die nicht über das "office.shuter"-Device laufen
Zunächst einmal finde ich die Kombination aus DOIF und IF recht interessant... so etwas sollte doch auch gehen:
([office.shutter.controller:drivingUp] eq "on" and [?office.shutter] ne "drive-up")
Kannst du bitte ein list des DOIF posten, während es das nicht tut, was es tun sollte? Schaltet denn das DOIF und der ROLLO macht nicht was er soll, oder schaltet der ROLLO erst garnicht? Anders fefragt, macht ROLLO das was es soll, wenn du (ohne DOIF) z.B. ein set office.shutter extern openabsetzt?
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Jackeson

Hallo,
habe mal eine frage ob es möglich ist mit dem Rollomodul eine feste Position anzugeben ausser die 10/20/usw Prozent (das ist ja klar)
aber wie kann ich zum Beispiel in meinen Reading position 3.84615384615385 anfahren und speichern, weil er Zählt dieses ja mit?
dann könnte man die Position von Rolladen und Jalousie auf auf den mm genau einstellen,einen Button drücken und fertig
oder ist dies nicht möglich?
meine list

Internals:
   CFGFN
   NAME       OG.BueroMichael_Rollo
   NR         921
   STATE      open
   TYPE       ROLLO
   stoptime   1491583058
   Readings:
     2017-04-07 18:37:32   command         stop
     2017-04-07 18:37:31   desired_position 0
     2017-04-07 18:37:31   drive-type      modul
     2017-04-07 18:37:31   last_drive      drive-up
     2017-04-07 18:37:32   position        3.84615384615385
     2017-04-07 18:37:32   state           open
Attributes:
   autoStop   0
   cmdIcon    half:remotecontrol/black_btn_MENUDroid open:remotecontrol/black_btn_CHUP closed:remotecontrol/black_btn_CHDOWN stop:remotecontrol/black_btn_STOP up2:fts_blade_arc_close_00@white down2:fts_blade_arc_close_100@white
   commandDown set OG.BueroMichael_Rolladen on
   commandStopDown set OG.BueroMichael_Rolladen on
   commandStopUp set OG.BueroMichael_Rolladen off
   commandUp  set OG.BueroMichael_Rolladen off
   devStateIcon open:fts_shutter_10:closed closed:fts_shutter_100:open half:fts_shutter_50:closed drive-up:fts_shutter_up@red:stop drive-down:fts_shutter_down@red:stop position-100:fts_shutter_100:open position-90:fts_shutter_80:closed position-80:fts_shutter_80:closed position-70:fts_shutter_70:closed position-60:fts_shutter_60:closed position-50:fts_shutter_50:closed position-40:fts_shutter_40:open position-30:fts_shutter_30:open position-20:fts_shutter_20:open position-10:fts_shutter_10:open position-0:fts_shutter_10:closed
   eventMap   up 2:up2/down 2:down2/
   excessBottom 2
   excessTop  4
   icon       fts_shutter@Violet
   resetTime  0
   secondsDown 24
   secondsUp  26
   switchTime 1
   type       normal
   webCmd     open:closed:half:stop:position:up2:down2


aller anfang ist schwer

KernSani

Nun, zum einen würde mich interessieren, wozu eine so präzise Steuerung notwendig. Zum Anderen hast du natürlich Verzögerungen bei der Ansteuerung, bis der Motor reagiert etc... Superpräzise wirst du das wohl nicht hinbekommen. Ansonsten kannst du zumindest jede ganzzahlige %Position anfahren.
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Jackeson

#489
Ja schon, aber ganzzahlige %Position ist da doch nur 10% oder 20%usw gemeint?
bring es aber nicht hin das er 1% oder 2% anfährt so das ich einen zusätzlichen Button anlege das er dann immer auf 2%fährt ist das möglich?
Hab es schon so versucht:
eventMap mit /up 2:up2/down 2:down2/
webCmd mit zusätzlich up2:down2
cmdIcon zusätzlich mit up2:fts_blade_arc_close_00@black down2:fts_blade_arc_close_100@black

geht aber nicht
aller anfang ist schwer

KernSani

Ein set myRollo position 2 sollte es eigentlich tun...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

lukasbastelpeter

ZitatAnders fefragt, macht ROLLO das was es soll, wenn du (ohne DOIF) z.B. ein
Code: [Auswählen]
set office.shutter extern open
absetzt?

Ja, das funktioniert soweit, das DOIF an sich wird auch ausgelöst und macht etwas

DOIF:
Internals:
   CFGFN
   DEF        ([office.shutter.controller:drivingUp] eq "on") (IF ([office.shutter] ne "drive-up")(set office.shutter extern open))
DOELSEIF ([office.shutter.controller:drivingUp] eq "off") (IF ([office.shutter] eq "drive-up" ) (set office.shutter extern stop))
DOELSEIF ([office.shutter.controller:drivingDown] eq "on") (IF ([office.shutter] ne "drive-down") (set office.shutter extern closed))
DOELSEIF ([office.shutter.controller:drivingDown] eq "off") (IF ([office.shutter] eq "drive-down") (set office.shutter extern stop))
   NAME       sync.office.shutter
   NR         66
   NTFY_ORDER 50-sync.office.shutter
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2017-04-07 20:55:52   Device          office.shutter.controller
     2017-04-07 12:36:07   cmd             2
     2017-04-07 12:36:07   cmd_event       office.shutter.controller
     2017-04-07 12:36:07   cmd_nr          2
     2017-04-07 20:55:52   e_office.shutter.controller_drivingDown off
     2017-04-07 20:55:52   e_office.shutter.controller_drivingUp off
     2017-04-07 12:36:07   state           cmd_2
   Condition:
     0          ReadingValDoIf($hash,'office.shutter.controller','drivingUp') eq "on"
     1          ReadingValDoIf($hash,'office.shutter.controller','drivingUp') eq "off"
     2          ReadingValDoIf($hash,'office.shutter.controller','drivingDown') eq "on"
     3          ReadingValDoIf($hash,'office.shutter.controller','drivingDown') eq "off"
   Devices:
     0           office.shutter.controller
     1           office.shutter.controller
     2           office.shutter.controller
     3           office.shutter.controller
     all         office.shutter.controller
   Do:
     0:
       0          IF ([office.shutter] ne "drive-up")(set office.shutter extern open)
     1:
       0          IF ([office.shutter] eq "drive-up" ) (set office.shutter extern stop)
     2:
       0          IF ([office.shutter] ne "drive-down") (set office.shutter extern closed)
     3:
       0          IF ([office.shutter] eq "drive-down") (set office.shutter extern stop)
     4:
   Helper:
     event      rssi: -56.00
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   office.shutter.controller
     timerevent rssi: -56.00
     triggerDev office.shutter.controller
     timerevents:
       rssi: -56.00
     timereventsState:
       rssi: -56.00
     triggerEvents:
       rssi: -56.00
     triggerEventsState:
       rssi: -56.00
   Internals:
   Itimer:
   Readings:
     0           office.shutter.controller:drivingUp
     1           office.shutter.controller:drivingUp
     2           office.shutter.controller:drivingDown
     3           office.shutter.controller:drivingDown
     all         office.shutter.controller:drivingUp office.shutter.controller:drivingDown
   Regexp:
     0:
     1:
     All:
   State:
   Trigger:
Attributes:
   group      setter
   room       hidden


EDIT:

Die "?"-Variante hatte ich vorher mal probiert und hat "noch weniger" funktioniert... Aber Grundsätzlich ist das "?" genau das was ich bezwecken will. Der Befehl soll nur ausgeführt werden, wenn die Bedingung von dem Controller getriggert wurde.
# Raspberry Pi
# Homematic, Z-Wave
# HUE, Tradfri
# Harmony
# ESP8266  Basteleien per MQTT

Jackeson

Hallo KernSani
macht er aber nicht was kann das sein ? haste eine idee wo ich suchen kann ?

das ist ist die fehlermeldung:

Unknown argument up2, choose one of  extern:open,closed,stop reset:open,closed closed:noArg open:noArg unblocked:noArg stop:noArg position:0,10,20,30,40,50,60,70,80,90,100 blocked:noArg half:noArg

meine eingaben sind:
commandDown2   #  set OG.BueroMichael_Rolladen position 2
commandUp2  #  set OG.BueroMichael_Rolladen position 2
eventMap # /up 2:up2/down 2:down2/
webCmd  # zusätzlich up2:down2
cmdIcon #   up2:fts_blade_arc_close_00@black down2:fts_blade_arc_close_100@black

kann es mit dem DOIF meiner Zeitsteuerung zusammenhängen?
define ZeitBueroRollo DOIF (
[{sunrise("REAL",600,"09:00","09:30")}-{sunset("REAL",600,"22:00","23:00")}|8] or
[{sunrise("REAL",12000,"09:40","10:00")}-{sunset("REAL",600,"21:00","22:00")}|7])
  (set OG.BueroMichael_Rolladen off)
DOELSE
  (set OG.BueroMichael_Rolladen on)
aller anfang ist schwer

KernSani

Zitat von: Jackeson am 07 April 2017, 22:19:46
Hallo KernSani
macht er aber nicht was kann das sein ? haste eine idee wo ich suchen kann ?
sorry, mein Fehler... ROLLO kann tatsächlich nur 10er-Schritte. Theoretisch lässt sich das relativ einfach erweitern... Wenn du nur eine bestimmte Position brauchst (bei mehr wird's 'ne Menge Tipparbeit). Du musst im Source Code nur die folgenden beiden Zeilen finden und deine gewünschte Position ergänzen:
etwa Zeile 42:
  "position" => "0,10,20,30,40,50,60,70,80,90,100",

etwa Zeile 135:
  my @positionsets = ("0","10","20","30","40","50","60","70","80","90","100");



RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

KernSani

@lukasbastelpeter: Ist wohl eher eine DOIF Frage und ich kann nicht erkennen, wo der Fehler liegt... Ich vermute dass die IF Bedingung aus irgendeinem Grund nicht zutrifft, was das aber genau ist...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...