Die Rollladenaktoren, die bei mir verbaut sind, können doch immerhin die Rollläden rauf und runter fahren. Das war's dann aber auch schon ziemlich. Funktionen, die ich vermisse:
Gruß
Martin
- Rückmelden der Position (für Visu)
- Oben verbleiben, wenn das Fenster bzw. die Tür offen ist
- In Lüftungsposition fahren, wenn der Rollladen geschlossen ist und das Fenster geöffnet wird, und umgekehrt

Gruß
Martin
Code:
# Plugin zur Statusmeldung von "einfachen" Rollladen-Aktoren (Berker) # Aktor kennt keine Statusmeldung -> wird hier generiert # Zusätzlich Lüftungs- und Sicherheitsfunktion: # - Rollladen bleibt oben, wenn Fenster offen # - Rollladen fährt in Lüftungsposition, wenn unten und Fenster geht auf # - Rollladen fährt nach unten, wenn in Lüftungsposition und Fenster geht zu ### Definitionen ### ### Sendewerte my $hoch = 0; my $runter = 1; ### Statuswerte my $oben = 0; my $unten = 255; my $lueftung = 204; ### my $laufzeit = 4; # Laufzeit nach oben für Lüften my $aktiv_lueftung = 0; # Plugin-Aufrufzeit, =2 wenn gerade Lüftungsposition angefahren wird # Jede Zeile ein Rollladen my @rollladen; # name wird derzeit nicht verwendet, hashname für permanentes Speichern # Langzeit-GA: 3 Stück, für einzelnen Rollladen, ganzes Zimmer und ganzes Haus # Kurzzeit-GA zum Stoppen # Positions-GA für die Rückmeldung Position # Fenster-GA: 1 = Fenster offen, 0 = Fenster zu push @rollladen, { name => "HWR Fenster", hashname => "HWRF", einzel_ga => "2/0/0", kurz_ga => "2/1/0", group_ga => "", global_ga => "0/3/0", position_ga => "2/3/0", fStatus_ga => "3/2/0" }; push @rollladen, { name => "Küche links", hashname => "KueL", einzel_ga => "2/0/1", kurz_ga => "2/1/1", group_ga => "2/0/4", global_ga => "0/3/0", position_ga => "2/3/1", fStatus_ga => "10/0/3" }; push @rollladen, { name => "Küche rechts", hashname => "KueR", einzel_ga => "2/0/2", kurz_ga => "2/1/2", group_ga => "2/0/4", global_ga => "0/3/0", position_ga => "2/3/2", fStatus_ga => "10/0/2" }; push @rollladen, { name => "Bad", hashname => "Bad", einzel_ga => "2/0/3", kurz_ga => "2/1/3", group_ga => "", global_ga => "0/3/0", position_ga => "2/3/3", fStatus_ga => "3/2/4" }; ### Ende Definitionen foreach my $roll (@rollladen) { # Plugin an Gruppenadressen "anmelden", sofern definiert if ($roll->{einzel_ga}) { $plugin_subscribe{$roll->{einzel_ga}}{$plugname} = 1; } if ($roll->{group_ga}) { $plugin_subscribe{$roll->{group_ga}}{$plugname} = 1; } if ($roll->{global_ga}) { $plugin_subscribe{$roll->{global_ga}}{$plugname} = 1; } if ($roll->{fStatus_ga}) { $plugin_subscribe{$roll->{fStatus_ga}}{$plugname} = 1; } # Verstell-Kommando vom Bus if ($msg{'apci'} eq "A_GroupValue_Write" and ($msg{'dst'} eq $roll->{einzel_ga} or $msg{'dst'} eq $roll->{group_ga} or $msg{'dst'} eq $roll->{global_ga})) { # vorherige Position zwischenspeichern my $previous = $plugin_info{$plugname.'_pos_'.$roll->{hashname}}; # hochfahren aus Position unten if ($msg{'data'} == $hoch and not ($plugin_info{$plugname.'_LS_'.$roll->{hashname}} > 0) ) { $plugin_info{$plugname.'_pos_'.$roll->{hashname}} = $oben; } # runterfahren aus nicht geschlossener Position -> Fensterstatus einbeziehen, ggfs. stoppen if ($msg{'data'} == $runter and $previous != $unten) { $plugin_info{$plugname.'_pos_'.$roll->{hashname}} = $unten; my $fenster = knx_read($roll->{fStatus_ga},0,1); if ($fenster) #Fenster geöffnet - Rolladen anhalten { $plugin_info{$plugname.'_pos_'.$roll->{hashname}} = $previous; knx_write($roll->{kurz_ga}, $hoch, 1); } } # Bei veränderter Position diese ausgeben if ($plugin_info{$plugname.'_pos_'.$roll->{hashname}} != $previous) { knx_write($roll->{position_ga},$plugin_info{$plugname.'_pos_'.$roll->{hashname}},'5.001'); } } # Position lesen if ($msg{'apci'} eq "A_GroupValue_Read" and $msg{'dst'} eq $roll->{position_ga}) { knx_write($roll->{position_ga},$plugin_info{$plugname.'_pos_'.$roll->{hashname}},'5.001'); } #Fenster geht auf, Rollladen geschlossen -> auf Lüftungsposition if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $roll->{fStatus_ga} and $plugin_info{$plugname.'_pos_'.$roll->{hashname}} == $unten and $msg{'data'} == 1) { $plugin_info{$plugname.'_LS_'.$roll->{hashname}} = time(); knx_write($roll->{einzel_ga}, $hoch, 1); } #Fenster geht zu, Rollladen auf Lüftung -> Rollladen zu if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $roll->{fStatus_ga} and $plugin_info{$plugname.'_pos_'.$roll->{hashname}} == $lueftung and $msg{'data'} == 0) { knx_write($roll->{einzel_ga}, $runter, 1); $plugin_info{$plugname.'_pos_'.$roll->{hashname}} = $unten; knx_write($roll->{position_ga},$unten,'5.001'); } if($plugin_info{$plugname.'_LS_'.$roll->{hashname}} > 0) # Fenster fährt gerade in Lüftungsposition { if (time()-$plugin_info{$plugname.'_LS_'.$roll->{hashname}} > $laufzeit) # Zeit abgelaufen { #Rollladen stoppen knx_write($roll->{kurz_ga}, $hoch, 1); $plugin_info{$plugname.'_LS_'.$roll->{hashname}} = 0; $plugin_info{$plugname.'_pos_'.$roll->{hashname}} = $lueftung; knx_write($roll->{position_ga}, $lueftung, '5.001'); } else { $aktiv_lueftung = 2; } } } # Zykluszeit auf 2, falls gerade Lüftungsposition angefahren wird, ansonsten auf 0 $plugin_info{$plugname.'_cycle'} = $aktiv_lueftung; return $msg{'dst'}." ".$msg{'data'};
Kommentar