Hallo zusammen,
habe mir ein Plugin für die Steuerung unserer Zirkulationspumpe geschrieben. Leider funktioniert das Plugin nur mit auskommentierter Aktorsperrung.
Hier der Quellcode:
Wenn ich das Plugin wie oben gepostet teste, läuft alles wie gewünscht. Wenn ich nun allerdings die Aktorsperrung wieder mit rein nehme, schaltet der Aktor nicht mehr. Es wird ein Schreibbefehl für "3/0/250" auf den Bus geschickt, dieser aber nicht vom Aktor angenommen. Eine Umkehr der Polarität für die Aktorsperrung habe ich probiert, keine Besserung.
Einen anderen DPT (1.003 gem. Beschreibung) habe ich auch probiert, wieder keine Reaktion des Aktorkanals. Woran kann das liegen?
Grüße,
Moe
habe mir ein Plugin für die Steuerung unserer Zirkulationspumpe geschrieben. Leider funktioniert das Plugin nur mit auskommentierter Aktorsperrung.
Hier der Quellcode:
Code:
# Skript zur zyklischen Ansteuerung der Zirkulationspumpe mittels Präsenzmelder. # Logik wie folgt: # Bei Präsenz im Bad -> Pumpe für xx Minuten an # Nach einmaligem Laufen der Pumpe wird der Aktorkanal für yy Min gesperrt my @ga = ("5/2/25", "5/3/65"); # GA der Präsenzmeldung Bäder my $ga_pumpe = "3/0/250"; # GA zum Ein/Ausschalten der Pumpe my $ga_pumpe_status = "3/0/251"; # GA zur Statusmeldung des Aktors my $ga_pumpe_lock = "3/0/252"; # GA zum Sperren des Aktorausgangs my $delay = 2; # Laufzeit der Pumpe in Minuten my $locktime = 30; # Sperrzeit nach Lauf in Minuten # return; # Auskommentieren, um Plugin zu aktivieren. for $_ (@ga) {$plugin_subscribe{$_}{$plugname} = 1;} # Hat ein PM Bewegung gemeldet und ist die Sperrzeit noch nicht abgelaufen? if ($msg{'apci'} eq "A_GroupValue_Write" && (grep /^$msg{'dst'}$/, @ga) && $msg{'data'} == "01" && ($plugin_info{$plugname.'_laststart'} + $locktime*60) <= time) { $plugin_info{$plugname.'_laststart'} = time; # Aufrufzeitpunkt merken knx_write($ga_pumpe,1,1); # Pumpe einschalten # knx_write($ga_pumpe_lock,1,1); # Aktorsperrung aktivieren $plugin_info{$plugname.'_cycle'} = 55; # Aufrufzyklus ändern # plugin_log($plugname,"Pumpe gestartet von GA\n".$msg{'dst'}."\nSperrung aktiv"); return; } # Prüfen, ob nach zyklischem Aufruf Pumpe ausgeschaltet werden kann elsif (($plugin_info{$plugname.'_laststart'} + $delay*60) <= time && knx_read($ga_pumpe_status,300,1) == 1) { # knx_write($ga_pumpe_lock,0,1); # Aktorsperrung deaktivieren knx_write($ga_pumpe,0,1); # Pumpe aus # knx_write($ga_pumpe_lock,1,1.003); # Aktorsperrung aktivieren # plugin_log($plugname,"Pumpe ausgeschaltet, Sperrung aktiv"); # $plugin_info{$plugname.'_cycle'} = 300; # Aufrufzyklus ändern; return; } # Prüfen, ob nach zyklischem Aufruf Sperrung ausgeschaltet werden kann if (($plugin_info{$plugname.'_laststart'} + $locktime*60) < time) { # knx_write($ga_pumpe_lock,0,1); # Aktorsperrung deaktivieren $plugin_info{$plugname.'_cycle'} = 0; # Aufrufzyklus deaktivieren # plugin_log($plugname,"Sperrung deaktiviert"); } return;
Einen anderen DPT (1.003 gem. Beschreibung) habe ich auch probiert, wieder keine Reaktion des Aktorkanals. Woran kann das liegen?
Grüße,
Moe
Kommentar