Neues Modul: Rolladensteuerung

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

Vorheriges Thema - Nächstes Thema

max333

Hallo,

danke ersteinmal für das tolle Modul. Ich benutze das Modul, um meine Rollläden zu steuern. Dabei ist mir aufgefallen, dass bei der Position 50 die Rollläden schon zu ca. 80% geschlossen sind. Bei meinen Rollläden ändert sich die Geschwindigkeit des Rollos auf Grund, des sich ändernden Umfangs des aufgerolltem Rollladenpanzers. Bei einer Markise, bei der nur Stoff aufgerollt wird spielt das wahrscheinlich keine Rolle.

Lässt sich das irgendwie einstellen, damit die Positionen halbwegs stimmen?

Burny4600

#316
Leider lässt sich das bei diesem Modul nicht einstellen.
Es gibt zwar bei irgendeiner anderen Rollladensteuerung eine Definition für diese Abweichung.
Weis aber leider nicht mehr wo ich das gelesen hatte.

Dort ist zusätzlich eine Definitionsmöglichkeit gegeben, wie hoch ein Rollladensegment ist, wie dick und wie hoch der Abstand zwischen den Rollladensegmenten ist wenn das Rollo noch nicht geschlossen ist.
Die hatten eine ziemlich komplexe Formel dafür hinterlegt.

Diese Definitionen wären bei diesem ROLLO Modul auch nicht schlecht um ein exakteres Anfahren der Position zu erreichen.
Aber so geht es auch.

Habe die Berechnung wieder entdeckt.
https://forum.fhem.de/index.php/topic,14262.msg90163.html#msg90163
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

ThomasRamm

@Burny4600: konnte deinen Fehler auf meinem Testsystem bisher nicht nachstellen.
Was mir aber aufgefallen ist, ist das der SET ROLLO Befehl mehrfach abgesetzt wurde.
Anbei der Auszug aus deinem Log:
2016.08.30 11:45:59 5: ROLLO (M_OG1_BAL_P) >> Set (position,100)
2016.08.30 11:46:00 5: ROLLO (M_OG1_BAL_P) >> Set (position,100)
2016.08.30 11:46:00 5: ROLLO (M_OG1_BAL_P) >> Set (position,100)

Hast du evtl. noch einen DOIF oder ein anderen Trigger der einen SET ROLLO ausführt in deiner config?

Gruß
Thomas

Burny4600

Set Trigger habe ich in den DOIF Steuerungen, aber ein ausgelöster Trigger in diesen DOIF's ist dann für die Laufzeit des Rollos gesperrt und nur durch das ROLLO Modul auf Position geführt.
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

Daniel_D

Hallo,
erstmal Danke für das tolle Modul.
Habe das Modul (Version => 1.201)  bei mir ganz Easy zum Laufen gebracht.

Aber ich habe ein Problem mit der Manuellen Steuerung.

Ich habe eine selbst gebaute Arduino Steuerung (Markisensteuerung von Stefan Thesen) die auf 433 Mhz läuft. Denke sie ist aber mit der FS20 gleichzusetzen.

Ab          =on \ down
Stop Ab  =on \ down
Auf          =off \ up
Stop auf  =off\ up

Das läuft auch alles wunderbar bis ich die Manuelle Steuerüberwachung in Betrieb nehme.

In Hand am Taster fährt es Hoch und Runter aber es wird nach der Zeit nicht abgeschaltet.
In dem Rollo Modul auf open/closed  macht das Rolle ganz komische Dinge. Fährt nicht sofort, erst nach nochmaligen Drücken dann nur kurz und so weiter.
So ist sie dann nicht mehr zu benutzen. Bis ich die Manuelle Überwachung wieder entferne.

Kann mal jemand darüberschauen, habe schon 2 Nächte um die Ohren geschlagen. Und jetzt blicke ich jetzt gar nicht mehr durch.


define Rollo_1 ROLLO
attr Rollo_1 alias Balkontür
attr Rollo_1 autoStop 0
attr Rollo_1 automatic-enabled on
attr Rollo_1 commandDown set Rollo1 down
attr Rollo_1 commandStopDown set Rollo1 down
attr Rollo_1 commandStopUp set Rollo1 up
attr Rollo_1 commandUp set Rollo1 up
attr Rollo_1 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_1 excessBottom 1
attr Rollo_1 excessTop 1
attr Rollo_1 resetTime 0
attr Rollo_1 room 1.2 Wohnzimmer
attr Rollo_1 secondsDown 23
attr Rollo_1 secondsUp 29
attr Rollo_1 switchTime 1
attr Rollo_1 type normal
attr Rollo_1 webCmd open:closed:half:stop:position


Manuelle Überwachung

define Rollo_1_manuell_auf DOIF ([Rollo1] eq "up" and [Rollo1] eq "down" and [Rollo_1] ne "drive-up") (set Rollo1 off) DOELSEIF ([Rollo1] eq "up" and [Rollo_1] ne "drive-up" and [Rollo_1:drive-type] ne "system") (set Rollo_1 extern open) DOELSEIF ([Rollo1] eq "up" and [Rollo_1] eq "drive-up" and [Rollo_1:drive-type] eq "extern") (set Rollo_1 extern stop)
attr Rollo_1_manuell_auf disable 0
attr Rollo_1_manuell_auf do always
attr Rollo_1_manuell_auf room Test
define Rollo_1_manuell_ab DOIF ([Rollo1] eq "up" and [Rollo1] eq "down" and [Rollo_1] ne "drive-down") (set Rollo1 on) DOELSEIF ([Rollo1] eq "down" and [Rollo_1] ne "drive-down" and [Rollo_1:drive-type] ne "system") (set Rollo_1 extern closed) DOELSEIF ([Rollo1] eq "down" and [Rollo_1] eq "drive-down" and [Rollo_1:drive-type] eq "extern")(set Rollo_1 extern stop)
attr Rollo_1_manuell_ab do always
attr Rollo_1_manuell_ab room Test


Gruß und Danke
Daniel
FHEM auf Raspberry PI
5x HM-CC-RT-DN
1x HM-CFG-LAN
8x HM-Sec-SCo
1x myJeeLink

Burny4600

Ergänzend zu den Zwischenstops des ROLLO Moduls.

Es kam auch schon vor, dass das ROLLO Modul kurz nach unten fuhr obwohl es öffnen sollte, anhielt, kurz wartete und dann in die richtige Richtung bis zum oberen Anschlag fuhr.
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

Frank_Huber

#321
Hi,

kurze Frage, hat bestimmt schon jemand realisiert, ich steh nur grad aufm Schlauch.

Rollo Typ 1 mit zwei Relais.
Die Steuerung über Browser und Telnet Befehle an FHEm geht einwandfrei.
jetzt möchte ich aber noch "klassische" Rollotaster installieren. (AUF/AB)
diese sollen an GPIO Eingänge gehen und sind damit in FHEM verfügbar.
kurz drücken -> ganz hoch bzw. runter fahren.
lang drücken -> hoch/runter fahren solange der Taster gedrückt ist.

Hat das schon jemand gebaut und kann mir hier den richtigen Schubbs geben?

Danke schonmal!

Grüße
Frank


Burny4600

#322
@ThomasRamm

Anbei ein Logauszug wo das ROLLO Modul eigenständig einen Stop wieder durchführte.
2016.09.12 21:10:02 5: ROLLO (M_OG1_BAL_P) >> Attr

2016.09.13 08:43:02 5: ROLLO (M_OG1_BAL_P) >> Set (position,60)
2016.09.13 08:43:02 5: ROLLO (M_OG1_BAL_P) >> Start
2016.09.13 08:43:02 4: ROLLO (M_OG1_BAL_P) drive from 0 to 60. command: position-60. state: open
2016.09.13 08:43:03 4: ROLLO (M_OG1_BAL_P) position: 0 -> 60 / direction: down
2016.09.13 08:43:03 5: ROLLO (M_OG1_BAL_P) >> calculateDriveTime | going down: from 0 to 60
2016.09.13 08:43:03 4: ROLLO (M_OG1_BAL_P) calculateDriveTime: oldpos=0,newpos=60,direction=down,time=30,steps=60,drivetime=19
2016.09.13 08:43:03 4: ROLLO (M_OG1_BAL_P) execute following commands: set M_OG1_BAL off; ;
2016.09.13 08:43:03 3: FS20 set M_OG1_BAL off
2016.09.13 08:43:03 4: ROLLO (M_OG1_BAL_P) stop in 19 seconds.
2016.09.13 08:43:22 5: ROLLO (M_OG1_BAL_P) >> Timer
2016.09.13 08:43:22 5: ROLLO (M_OG1_BAL_P) >> Stop
2016.09.13 08:43:22 4: ROLLO (M_OG1_BAL_P): stops from drive-down at position 60
2016.09.13 08:43:22 3: FS20 set M_OG1_BAL off
2016.09.13 08:43:22 4: ROLLO (M_OG1_BAL_P) stopped by excute the command: set M_OG1_BAL off

2016.09.13 10:34:17 5: ROLLO (M_OG1_BAL_P) >> Set (position,100)
2016.09.13 10:34:17 5: ROLLO (M_OG1_BAL_P) >> Start
2016.09.13 10:34:17 4: ROLLO (M_OG1_BAL_P) drive from 60 to 100. command: position-100. state: position-60
2016.09.13 10:34:17 4: ROLLO (M_OG1_BAL_P) position: 60 -> 100 / direction: down
2016.09.13 10:34:17 5: ROLLO (M_OG1_BAL_P) >> calculateDriveTime | going down: from 60 to 100
2016.09.13 10:34:17 4: ROLLO (M_OG1_BAL_P) calculateDriveTime: oldpos=60,newpos=100,direction=down,time=30,steps=40,drivetime=14
2016.09.13 10:34:17 4: ROLLO (M_OG1_BAL_P) execute following commands: set M_OG1_BAL off; ;
2016.09.13 10:34:17 3: FS20 set M_OG1_BAL off
2016.09.13 10:34:17 4: ROLLO (M_OG1_BAL_P) stop in 14 seconds.
2016.09.13 10:34:19 5: ROLLO (M_OG1_BAL_P) >> Set (position,100)
2016.09.13 10:34:19 5: ROLLO (M_OG1_BAL_P) >> calculatePosition
2016.09.13 10:34:19 4: ROLLO (M_OG1_BAL_P) calculated Position is 66.6666666666667; rest drivetime is 10
2016.09.13 10:34:19 5: ROLLO (M_OG1_BAL_P) >> Start
2016.09.13 10:34:19 4: ROLLO (M_OG1_BAL_P) drive from 66.6666666666667 to 100. command: position-100. state: drive-down
2016.09.13 10:34:19 4: ROLLO (M_OG1_BAL_P) position: 66.6666666666667 -> 100 / direction: down
2016.09.13 10:34:19 5: ROLLO (M_OG1_BAL_P) >> calculateDriveTime | going down: from 66.6666666666667 to 100
2016.09.13 10:34:19 4: ROLLO (M_OG1_BAL_P) calculateDriveTime: oldpos=66.6666666666667,newpos=100,direction=down,time=30,steps=33.3333333333333,drivetime=12
2016.09.13 10:34:19 4: ROLLO (M_OG1_BAL_P) execute following commands: set M_OG1_BAL off; ;
2016.09.13 10:34:19 3: FS20 set M_OG1_BAL off
2016.09.13 10:34:19 4: ROLLO (M_OG1_BAL_P) stop in 12 seconds.
2016.09.13 10:34:20 5: ROLLO (M_OG1_BAL_P) >> Set (position,100)
2016.09.13 10:34:20 5: ROLLO (M_OG1_BAL_P) >> calculatePosition
2016.09.13 10:34:20 4: ROLLO (M_OG1_BAL_P) calculated Position is 70; rest drivetime is 9
2016.09.13 10:34:20 5: ROLLO (M_OG1_BAL_P) >> Start
2016.09.13 10:34:20 4: ROLLO (M_OG1_BAL_P) drive from 70 to 100. command: position-100. state: drive-down
2016.09.13 10:34:20 4: ROLLO (M_OG1_BAL_P) position: 70 -> 100 / direction: down
2016.09.13 10:34:20 5: ROLLO (M_OG1_BAL_P) >> calculateDriveTime | going down: from 70 to 100
2016.09.13 10:34:20 4: ROLLO (M_OG1_BAL_P) calculateDriveTime: oldpos=70,newpos=100,direction=down,time=30,steps=30,drivetime=11
2016.09.13 10:34:20 4: ROLLO (M_OG1_BAL_P) execute following commands: set M_OG1_BAL off; ;
2016.09.13 10:34:20 3: FS20 set M_OG1_BAL off
2016.09.13 10:34:20 4: ROLLO (M_OG1_BAL_P) stop in 11 seconds.
2016.09.13 10:34:31 5: ROLLO (M_OG1_BAL_P) >> Timer
2016.09.13 10:34:31 5: ROLLO (M_OG1_BAL_P) >> Stop
2016.09.13 10:34:31 4: ROLLO (M_OG1_BAL_P): stops from drive-down at position 100
2016.09.13 10:34:31 3: FS20 set M_OG1_BAL off
2016.09.13 10:34:31 4: ROLLO (M_OG1_BAL_P) stopped by excute the command: set M_OG1_BAL off

2016.09.13 14:44:32 5: ROLLO (M_OG1_BAL_P) >> Set (position,0)
2016.09.13 14:44:32 5: ROLLO (M_OG1_BAL_P) >> Start
2016.09.13 14:44:32 4: ROLLO (M_OG1_BAL_P) drive from 100 to 0. command: position-0. state: closed
2016.09.13 14:44:32 4: ROLLO (M_OG1_BAL_P) position: 100 -> 0 / direction: up
2016.09.13 14:44:32 5: ROLLO (M_OG1_BAL_P) >> calculateDriveTime | going up: from 100 to 0
2016.09.13 14:44:32 4: ROLLO (M_OG1_BAL_P) calculateDriveTime: oldpos=100,newpos=0,direction=up,time=30,steps=100,drivetime=32
2016.09.13 14:44:32 4: ROLLO (M_OG1_BAL_P) execute following commands: set M_OG1_BAL on; ;
2016.09.13 14:44:32 3: FS20 set M_OG1_BAL on
2016.09.13 14:44:32 4: ROLLO (M_OG1_BAL_P) stop in 32 seconds.
2016.09.13 14:45:04 5: ROLLO (M_OG1_BAL_P) >> Timer
2016.09.13 14:45:04 5: ROLLO (M_OG1_BAL_P) >> Stop
2016.09.13 14:45:04 4: ROLLO (M_OG1_BAL_P): stops from drive-up at position 0
2016.09.13 14:45:04 3: FS20 set M_OG1_BAL on
2016.09.13 14:45:04 4: ROLLO (M_OG1_BAL_P) stopped by excute the command: set M_OG1_BAL on


Zugehörige ROLLO Definition
define M_OG1_BAL_P ROLLO
attr M_OG1_BAL_P alias OG1 Balkon - Markise
attr M_OG1_BAL_P autoStop 0
attr M_OG1_BAL_P automatic-enabled off
attr M_OG1_BAL_P blockMode none
attr M_OG1_BAL_P cmdIcon half:remotecontrol/black_btn_MENUDroid open:remotecontrol/black_btn_CHUP closed:remotecontrol/black_btn_CHDOWN stop:remotecontrol/black_btn_STOP
attr M_OG1_BAL_P commandDown set M_OG1_BAL off
attr M_OG1_BAL_P commandStopDown set M_OG1_BAL off
attr M_OG1_BAL_P commandStopUp set M_OG1_BAL on
attr M_OG1_BAL_P commandUp set M_OG1_BAL on
attr M_OG1_BAL_P devStateIcon open:fts_sunblind_10:closed closed:fts_sunblind:open half:fts_sunblind_50:closed drive-up:control_arrow_up@yellow:stop drive-down:control_arrow_down@yellow:stop position-100:fts_sunblind:open position-90:fts_sunblind_90:closed position-80:fts_sunblind_80:closed position-70:fts_sunblind_70:closed position-60:fts_sunblind_60:closed position-50:fts_sunblind_50:closed position-40:fts_sunblind_40:open position-30:fts_sunblind_30:open position-20:fts_sunblind_20:open position-10:fts_sunblind_10:open position-0:fts_sunblind_0:closed
attr M_OG1_BAL_P excessBottom 0
attr M_OG1_BAL_P excessTop 0
attr M_OG1_BAL_P group Steuerung
attr M_OG1_BAL_P icon fts_sunblind
attr M_OG1_BAL_P reactionTime 1
attr M_OG1_BAL_P resetTime 1
attr M_OG1_BAL_P room OG1,OG1-Balkon,OG1-Kueche,Rolllaeden
attr M_OG1_BAL_P secondsDown 30
attr M_OG1_BAL_P secondsUp 30
attr M_OG1_BAL_P switchTime 1
attr M_OG1_BAL_P type normal
attr M_OG1_BAL_P verbose 5
attr M_OG1_BAL_P webCmd position:half:open:closed:stop


Und die zugehörige DIOF Konfiguration
###  Steuerung Markise
define MKST DOIF ([{sunrise(+3600)}-11:20] and\
[ZOBLMD] eq "HELL" and [ZOBRMD] eq "TROCKEN" and [ZOBWM50D] eq "WINDSTILL" and [bmp180:temperatureof] < 15)\
(set M_OG1_BAL_P:FILTER=position!=50 position 50)\
DOELSEIF\
([{sunrise(+3600)}-12:50] and $yday => 90 and $yday <= 270 and\
[ZOBLMD] eq "HELL" and [ZOBRMD] eq "TROCKEN" and [ZOBWM50D] eq "WINDSTILL" and [bmp180:temperatureof] > 15 and [bmp180:temperatureof] < 21)\
(set M_OG1_BAL_P:FILTER=position!=60 position 60)\
DOELSEIF\
([{sunrise(+3600)}-16:35] and $yday => 90 and $yday <= 270 and\
[ZOBLMD] eq "HELL" and [ZOBRMD] eq "TROCKEN" and [ZOBWM100D] eq "WINDSTILL" and [bmp180:temperatureof] > 21)\
(set M_OG1_BAL_P:FILTER=position!=100 position 100)\
DOELSEIF\
([ZOBLMD] eq "HELL" and (([ZOBWM100D] eq "WIND" and [M_OG1_BAL_P:position] == 100) or\
                         ([ZOBWM50D] eq "WIND" and ([M_OG1_BAL_P:position] == 50 or [M_OG1_BAL_P:position] == 60)) or\
                         (([11:30] and [M_OG1_BAL_P:position] == 50) or\
                          ([13:00] and [M_OG1_BAL_P:position] == 60) or\
                          ([16:45] and [M_OG1_BAL_P:position] == 100))))\
(set M_OG1_BAL_P:FILTER=position!=0 position 0)\
DOELSEIF\
([ZOBLMD] eq "DUNKEL" or [ZOBRMD] eq "REGEN")\
(set M_OG1_BAL_P:FILTER=position!=0 position 0)
attr MKST alias Steuerung Markise - OG1 Balkon
attr MKST cmdpause 35
attr MKST devStateIcon initialize.*:control_minus P60:fts_sunblind_60 P50:fts_sunblind_50 P100:fts_sunblind P0:fts_sunblind_0
attr MKST do always
attr MKST eventMap cmd_1:P60 cmd_2:P50 cmd_3:P100 cmd_4:P0 cmd_5:P0
attr MKST group Steuerung
attr MKST icon fts_sunblind
attr MKST room OG1,OG1-Balkon,Rolllaeden
attr MKST verbose 5

Ich hoffe es hilft bei den Erkenntnissen weiter.

@Frank_Huber
Gib unter such dies ein: rollladen taster
Da dürfte sicher etwas dabei sein.
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

Frank_Huber

Zitat von: Burny4600 am 13 September 2016, 16:45:48
@Frank_Huber
Gib unter such dies ein: rollladen taster
Da dürfte sicher etwas dabei sein.

da findet man Seitenweise Treffer, aber ohne Bezug zum Modul und zumeist Funktaster. Hab mich da schon durchgewühlt, bin aber auf keinen grünen zweig gekommen.

Grüße
Frank

Frank_Huber

So, habs hinbekommen, bestimmt nicht die beste Lösung aber es geht.

Die Taster toggeln nen dummy. dieser fährt an oder macht stop.
hab also jetzt tasten für auf / zu und kann mit zweitem mal tasten überall stoppen.

zwei dummys und 4 notify pro Rollo.

könnt gerne kommentieren falls das einfacher geht. :-)

define Rollo1_Tast_AUF notify GPIO_IN_04:on.* \
{if (Value("Rollo1_AUF_dummy") eq "on") {fhem ("set Rollo1_AUF_dummy off ;;;;set Rollo1_Gast stop")}\
else {fhem ("set Rollo1_ZU_dummy off ;;;;set Rollo1_AUF_dummy on")}}

define Rollo1_Tast_ZU notify GPIO_IN_05:on.* \
{if (Value("Rollo1_ZU_dummy") eq "on") {fhem ("set Rollo1_ZU_dummy off ;;;; set Rollo1_Gast stop")}\
else {fhem ("set Rollo1_AUF_dummy off ;;;;set Rollo1_ZU_dummy on")}}\

define Rollo1_ZU_dummy dummy
attr Rollo1_ZU_dummy webCmd on:off

define Rollo1_AUF_dummy dummy
attr Rollo1_AUF_dummy webCmd on:off

define Rollo1_dummy_AUF notify Rollo1_AUF_dummy:on.* set Rollo1_Gast offen

define Rollo1_dummy_ZU notify Rollo1_ZU_dummy:on.* set Rollo1_Gast geschlossen

Burny4600

Erfahrungen mit dem altuellen ROLLO V1.201

Die Rechenbelastung ist seit der Änderung auf das neue ROLLO Modul sehr hoch gegenüber dem Uhrmodul.
Zumindest wurden früher die gewünschten Positione erreicht.
Ich verwende einen Raspberry 3 für die Steuerungen der Rollläden.

Morgens und Abends ist die Rechenlast am höchsten, da alle Rollläden geschlossen oder geöffnet werden.
Hier werden alle auf Position 0 bzw. Position 100 gefahren.
Insgesamt sind es 14 Rollläden.
Kommt noch irgend etwas anders hinzu, werden die Zeiten nicht mehr richtig berechnet und die Rollläden stehen nicht auf der vorgegeben Position sondern irgendwo. Laut ROLLO Modul wurden aber die Position 0 oder Position 100 erreicht.

Ich hatte früher die EZControl XS1 im Einsatz, die bei weitem nicht diese Rechenleistung des Raspberry 3 hatte. Diese konnte aber immer die gewünschte Position erreichen bei gleichzeitigem öffnen oder schließen und irgend etwas anderem im Hintergrund.
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

MacHilli

#326
Hallo,
auch ich möchte mich bei Thomas für diese tolle Modul bedanken.
Es ist genau das, was ich in FHEM bisher vermisst habe.

Ich steuere meine Rolläden mit einem FS20 8x Empfangsmodul.
Dabei ist jeweils ein Kanal für öffnen und ein weiterer Kanal für das schließen der Rolläden.
Die Konfiguration in FHEM war einfach und es funktioniert alles sehr gut.

Wie viele andere wahrscheinlich auch, experimentiere ich momentan ein bisschen mit Homebridge-FHEM um mit HomeKit in iOS die Funktionen von FHEM zu steuern.
Thermostate, Dimmer und Schalter funktionieren gut und laufen auch wirklich sehr zuverlässig.

Meine nächste Baustelle sind nun die Rolläden, die ich auch gern über HomeKit steuern würde.
Ich habe bei dem fertigen Rollo die Attribute GenericDeviceType auf blinds und Room auf HomeKit gesetzt.
Hat schon irgendjemand Erfahrungen gesammelt und das Modul für Homebridge zum laufen bekommen?

Das Hauptproblem ist wohl das Attribut HomebridgeMapping.
Dieses Mapping habe ich mit Hilfe von Google gefunden und getestet:

attr HomebridgeMapping clear CurrentPosition=position,minValue=0,maxValue=100
TargetPosition=position,minValue=0,maxValue=100,minStep=10,delay=400,faktor=5,cmd=position,
PositionState=state,values=/^drive-up/:INCREASING;/^drive-down/:DECREASING;/.*/:STOPPED

Mit diesem Mapping funktionieren schon ein paar Dinge aber vieles halt auch nicht.
Bevor ich mit größeren Erklärungen loslege was mit diesem Mapping geht und wo es noch hakt,
wollte ich einfach mal fragen ob vielleicht irgendjemand das schon lauffähig hinbekommen hat?

Gruß
Dirk

MacHilli

#327
Hallo nochmal an alle,

bezüglich der Homebridge Anbindung von dem neuen 44_ROLLO.pm Modul habe ich neue Erkenntnisse gewonnen.
Ich habe sehr viel probiert und nachgelesen in verschiedenen Foren.

Ich möchte diese Erkenntnisse gleich mal weitergeben und weitere Informationen dazu geben, zumal
sich in dem Modul auch noch kleinere Fehler verstecken.
Sollte ich mit diesem Statement falsch liegen, bitte ich mir das schon mal zu verzeihen.

Das Homebridge Mapping, welches ich im vorherigen Beitrag gepostet habe, scheint eigentlich ziemlich richtig zu sein.
Bei dem "factor" Parameter bin ich noch nicht ganz sicher. In den Dokumentationen zu Homebridge sollte er eigentlich mit "c" geschrieben werden.
Ausserdem habe ich noch nicht begriffen, für was er genau bewirkt.

Der Fehler warum er die Funktionen nicht korrekt umsetzt liegt, nach meiner Einschätzung, im Modul selber.
Wie ich schon geschrieben habe, funktioniert das Modul in der "normalen" Betriebsart sehr gut.
Schaltet man allerdings in den "HomeKit" Modus um die Rollläden über Homebridge mit iOS zu steuern,
gibt es noch Fehlfunktionen im Modul.

Mein Homebridge Server läuft über einen Raspberry A. Mit dem habe ich im Terminal und dem Befehl "Homebridge" mal in die Befehle die
zwischen FHEM und HomeKit nachgeschaut was übertragen wird und was nicht.
Die Motorsteuerung über die Values "drive-up" und "drive-down" und "Stopped" scheint zu gehen. Homebridge erkennt das jedenfalls.

Wenn die Rollläden stoppen werden in dem ROLLO Modul ziemlich alle Readings aktualisiert, nur das Reading "position" nicht.
Ist das ein Feature oder ein Bug?

Ich habe im Modul in Zeile 415 mal ein: "readingsSingleUpdate($hash,"position",$newpos,1);" eingefügt und schon funktioniert es besser.
Das Reading "position" wird nun beim Stop aktualisiert und gibt dieses Reading an Homebridge weiter.
Homekit läuft sich mit "wird geöffnet" und "wird geschlossen" keinen Wolf mehr und zeigt die korrekte Position auf dem Icon an.
So weit so gut.

Ein weiteres Problem betrifft die webcmd's und die Positionpresets:
von 10 - 90 funktioniert alles. Die Befehle werden von dem Rollo Modul invertiert und aus Position 10 wird 90 usw.
Wenn man im "Homekit" Modus die Position "0" anwählt sollte er somit eigentlich zu Position 100 gehen.
Das macht er aber nicht sondern geht zu 0 was im Homekit Modus falsch ist.
Mit 100 ist das genauso. Da sollte er eigentlich auf 0 gehen was im Homekit Modus "geschlossen" bedeutet.

Der Fehler lässt sich mit den webcmd's "open" und "closed" auch reproduzieren.

Ich vermute, dass hier noch einige IF Abfragen fehlen die prüfen ob der Modus Homekit oder Normal ist.
Ein paar wenige Perl Kenntnisse habe ich mir durch "Try and Error" und viel ausprobieren erarbeitet.
Leider fehlen mir die tieferen Perl Kenntnisse um zu erkennen, wo im Modul der Fehler ist.

Ich glaube, wenn das behoben ist, sollten sich die Rollos auch über Homekit fehlerfrei steuern lassen.

Gruß Dirk

ReggY

#328
Hi Dirk,

ich habe deine Änderungen mal versucht zu übernehmen und zu schauen ob es jetzt besser klappt mit HomeKit und diesem Modul. Leider ist es nichts geworden und ich biete mich hier an weiter zu testen und zu diskutieren, um zu einer Lösung beitragen zu können.

Also mein "homebridgeMapping" sieht jetzt mit deiner Hilfe so aus:
CurrentPosition=position,minValue=0,maxValue=100 TargetPosition=desired_position,minValue=0,maxValue=100,minStep=10 PositionState=state,values=/^drive-up/:INCREASING;/^drive-down/:DECREASING;/.*/:STOPPED

Also die aktuelle Position des Rollos liegt im Reading "position" und wird auf die Werte von 0-100 begrenzt.
Die Ziel Position liegt im Reading "desired_position" und wird auch auf 0 - 100 begrenzt und eine Schrittweite von mindestens 10 wird definiert.
Der Status des Rollos aus dem Reading "state" wird bei "drive_up" auf "INCREASING" bei "drive-down" auf "DECREASING" gesetzt beim rest ist es STOPPED.

Weiterhin habe ich das senden der aktuellen Position auch in Zeile 415 hinzugefügt:
readingsSingleUpdate($hash,"position",$state,1);

Leider bleibt es wie hier zu sehen ohne Erfolg, die aktuelle Position "CurrentPosition" (kein caching CurrentPosition nach dem ausführen des FHEM Befehls) wird nicht richtig übergeben und in HomeKit dreht sich das Rollo nen Wolf:
[10/3/2016, 1:30:27 PM] [FHEM] query: TargetPosition for BZ.Rollo-desired_position
[10/3/2016, 1:30:27 PM] [FHEM]   cached: 100 (as number')
[10/3/2016, 1:30:27 PM] [FHEM] query: CurrentPosition for BZ.Rollo-position
[10/3/2016, 1:30:27 PM] [FHEM]   cached: 28 (as number')
[10/3/2016, 1:30:47 PM] [FHEM] BZ.Rollo delaying command TargetPosition with value 0
[10/3/2016, 1:30:48 PM] [FHEM] BZ.Rollo: executing set cmd for TargetPosition with value 0
[10/3/2016, 1:30:48 PM] [FHEM]   executing: https://127.0.0.1:8083/fhem?cmd=set%20BZ.Rollo%20position%200&XHR=1
  2016-10-03 13:30:48 caching: BZ.Rollo-state: drive-down
[10/3/2016, 1:30:48 PM] [FHEM] BZ.Rollo-state values: value drive-down mapped to 0
[10/3/2016, 1:30:48 PM] [FHEM]     caching: PositionState: 0 (as number; means DECREASING; from 'drive-down')
  2016-10-03 13:30:50 caching: BZ.Rollo-state: closed
[10/3/2016, 1:30:50 PM] [FHEM] BZ.Rollo-state values: value closed mapped to 2
[10/3/2016, 1:30:50 PM] [FHEM]     caching: PositionState: 2 (as number; means STOPPED; from 'closed')


MfG Patrick

MacHilli

#329
Hallo Patrick,

vielen Dank für deine Antwort.
Ich habe noch ein wenig überlegt und gebastelt und die ersten Tests verliefen erfolgreich.
Ich glaube es funktioniert!

Wie ich schon in den ersten Posts von mir erwähnt habe, glaube ich, dass wenn man den Typ "Homekit" im Modul
einstellt, es noch nicht so richtig funktioniert mit der Rückgabe der richtigen Werte.
In der Einstellung "Normal" läuft das Modul ja wirklich gut.

Mir kam also folgende Idee:
Man lässt das Modul auf "Normal" stehen. Dann funktioniert das Modul innerhalb von FHEM perfekt und die Parameter mit
0%-offen und 100%-geschlossen gefällt mir persönlich auch besser.

Was braucht man nun für Werte für Homekit?
Leider genau invers. FHEM sagt 90% geschlossen und bei Homekit heißt es 10% geöffnet.
Irgendwie blöd, aber ist nun mal so.
Man braucht eigentlich nur ein spezielles "Homekit-Reading" welches die FHEM-Position invers darstellt.
Also FHEM sagt 90% geschlossen, für Homekit wäre es dann der Wert 10 für 10% geöffnet.

Dann braucht man noch ein spezielles "Homekit-Command" welches den angeforderten Wert von Homekit nach FHEM umwandelt.
In Homekit stelle ich die Rollläden auf 90% geöffnet und dieses spezielle Command setzt halt im Rollo Modul den Wert 10 für FHEM ab.
Und es funktioniert tatsächlich!

Diese Änderungen habe ich am Modul vorgenommen:
die Daten einfügen nach Zeile 42:
"position_homekit" => "0,10,20,30,40,50,60,70,80,90,100",

Das sind die Parameter von dem neuen Command welches Homekit benutzen wird.

Nach Zeile 191 kommt dann:
    } elsif ($cmd eq "position_homekit") {
      $arg = 100-$arg;
     $cmd = "position-". $arg;
      $desiredPos = $arg;

und noch die Reading Aktualisierung bei dem Stop Befehl:
nach Zeile 420:
    readingsSingleUpdate($hash,"position",$newpos,1);
    readingsSingleUpdate($hash,"homekit_pos",100-$newpos,1);

Das Homebridge Mapping müsste dann so aussehen:

clear
CurrentPosition=homekit_pos,minValue=0,maxValue=100
TargetPosition=homekit_pos,minValue=0,maxValue=100,minStep=10,delay=400,cmd=position_homekit,
PositionState=state,values=/^drive-up/:INCREASING;/^drive-down/:DECREASING;/.*/:STOPPED

Die Position des Rollos bekommt Homekit nun aus dem neuen Reading "homekit_pos"
und das spezielle Homekit Command "position_homekit" sorgt für den angepassten FHEM Befehl.

Wie ich schon sagte, das ist eigentlich nur ein Workaround der aber funktioniert.
Vielleicht können die Entwickler diese Änderungen übernehmen oder aber die Einstellung "Homekit" im Modul nochmal überprüfen

Im Anhang das von mir geänderte Modul, auf Basis der aktuellen Version 1.201

@Patrick
Vielleicht kannst du es mal probieren und mir Rückmeldung geben, ob es bei dir auch funktioniert.

Gruß
Dirk