Rollladensteuerung

Begonnen von Votec, 14 August 2013, 15:54:14

Vorheriges Thema - Nächstes Thema

Votec

Problem der Rollladensteuerung ist es bislang, dass die Prozentangaben nicht die Position bewirken, die man will. Das liegt an der Tatsache, dass der Rollladenballen im Durchmesser zu- bzw. abnimmt und sich der Rollladen letztlich unterschiedlich schnell ab- bzw. aufwickelt.

Davon ausgehend, dass Motordrehzahl und Lamellendicke kosnstant sind und deshalb die
Rollladenballendicke konstant  zu-/abnimmt, ist jeder Punkt des Rollladens in der so genannten geradlinig gleichmäßig beschleunigten Bewegung. Die Formel dafür lautet: s = 1/2 a * t*t (t-Quadrat) (s =Weg, a=Beschleunigung, t = Zeit) Diese beachtet, kann der Rollladen über die Zeit oder den Weg dahin bewegt werden, wohin man ihn will, d.h. bspw. 50% bewirkt dann auch halb geschlossen/geöffnet:

Hier meine subroutine für die 99_MyUtils.pm

sub
partlyupdown($$$) {
# Rollladen exakt auf Position fahren
# mithilfe der geradlinig gleichmäßig beschleunigten Bewegung
# Grundformel s = 1/2*a*t*t -> t = sqrt(2s/(a*a))
# Parameter:
# $Laenge - Laenge des Rollladens in mm
# $Prozent (gibt an, wie weit geschlossen, geöffnet werden soll)
# $U (Anzahl der U/min des Motors)
my $Laenge = shift;
my $Prozent = shift;
my $U = shift;
# Korrektur Länge um die Licht-Lücken - bei mir ist eine Lamelle 37 mm, eine Lücke 3 mm breit
# andere Materialien und Größen
#Lamellenbreiten sind:
#-   Alu: 37, 39, 45, 52, 55 mm
#-   PVC: 37, 45, 52, 55 mm
#Lammellendicke in mm (bei mir 8 mm)
#   Aluminium: 8,5 -9 mm)
#   PVC: 8,0; 11,5; 14 mm)
# aus den Lamellendicken (ca. 20% Abzug, da die Lamellen konisch sind) kann man die Zunahme der Ballenstärke pro Umdrehung und mit
#pi*(2*Lamellendicke) den Umfang und aus der Umdrehungszahl des Motors - bei 14/U #pro min bedeutet das 1 Umdrehung in 60/14 s - dann letztlich den Weg/s2 für eine U, #das ist die Beschleunigung a (hier 14,5360 mm/s2 bzw. 17,6531 mm/s2) errechnen
$Laenge = $Laenge + ($Laenge/37-1)*3;
my $s = $Prozent*$Laenge/100;
if ($U==14) { $a = 14.5360 } elsif ($U==17) {$a = 17.6531};
my $t = sqrt(2*$s/($a*$a));
# return $t - für FS20-Aktoren ist on-for-timer <Zeit> möglich;
# für Homematic-Aktoren jetzt Berechnung des tatsächlichen Weges in der berechn.     # Zeit und Umrechnung
# in die Prozentangabe für den set up/down - Befehl
$s = 0.5*$a*$t*$t;
$Prozent = $s/$Laenge*100;
return $Prozent;
}

Der Aufruf für einen Rollladen, der 1195 mm lang ist und 40% geöffnet/ geschlossen werden soll, mit einem Motor mit 17 U/min erfolgt so: partlyupdown(1195,40,17)

Da ich mich erst sehr kurze Zeit mit fhem und Perl befasse, habe ich allerdings noch nicht den Aufruf in fhem.cfg geschafft - da ich immer nur Fehlermeldungen bekomme, muss ich auf die Erfahrung der Forumsteilnehmer hofen und vertrauen. Aus diesem Grund konnte ich die Routine auch noch nicht testen.

Ich gehe aber davon aus, dass ihr das Problem schnell löst und vielleicht sogar eine elegantere Lösung findet.





martinp876

Hi,

Hast du es schon probiert?
hier ein paar Gedanken von mir:
- zu berücksichtigen ist ob du eine neue position oder eine Aenderung um x% eingeben willst.
- Zu undersuchen ist, wie HM arbeitet. Arbeiten sie relativ oder absolut? Ich vermute ersteres.
- Beim Fahren sollte man immer der aktuellen Stand des Rollos berücksichtigen, besonders wenn HM relativ arbeitet.

Ich würde folgenden Parameter ausmessen
- Rollo auf 100% (komplett offen): hohe messen
- down 10 (10% zufahren): hohe messen
=> 10% wert bei "offen" errechnen in cm

- Rollo auf 0% (komplett zu): hohe messen
- up 10 (10% auffahren): hohe messen
=> 10% wert bei "zu" errechnen in cm

den Aenderungswert kann man nun linear einarbeiten. 10% "zu" sollte kleiner sein als 10% "offen" - sonst ist die Theorie falsch.



Gruss Martin