Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit Aktorsperrung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [WireGate-Plugin] Problem mit Aktorsperrung

    Hallo zusammen,

    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;
    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

    #2
    Hallo Moe!

    Ist das Problem nicht vorhanden?
    Auf den ersten Blick würde ich sagen, die Reihenfolge deiner Telegramme stimmt nicht, d.h.:
    - beim Einschalten => Sperre aufheben, dann ein senden
    - beim Ausschalten => aus, dann Sperre, wobei beim ausschalten das aus entfallen kann, wenn die Sperre den Kanal ohnehin ausschaltet.

    Auch seht beim knx_write beidemale 1 als Wert, d.h. falls die Sperre bei 1 parametriert ist, dann passt hier was nicht.

    Falls du noch Hilfe brauchst, bitte melden, sollte eine Kleinigkeit sein, aber bitte gleich mit den Parametern vom Aktor (Sperre bei..., Verhalten bei Aufhaben der Sperre,...)

    lg
    Robert M.

    Kommentar

    Lädt...
    X