Beispiel Schwellwertschalter
Code:
# Demo-Plugin Schwellwertschalter # V1.0 2010-03-19 ### Definitionen # Eigenen Aufruf-Zyklus auf 300 Sekunden setzen $plugin_info{$plugname.'_cycle'} = 300; my $wert_ga = "5/2/79"; # Gruppenadresse mit dem Wert my $schwellwert = 35; # Schwellwert my $ziel_ga = "14/6/10"; # Adresse an die Wert bei Unter/überschreitung gesendet wird ### Ende Definitionen my $luftfeuchte; # Plugin an Gruppenadresse "anmelden" $plugin_subscribe{$wert_ga}{$plugname} = 1; # Nun kommt es darauf an, ob das Plugin aufgrund eines eintreffenden Telegramms # oder zyklisch aufgerufen wird! Wir wollen beides.. # Bei eintreffenden Telegrammen reagieren wir gezielt auf "Write" (gibt ja auch Read/Response) # und die spezifische Gruppenadresse, das Plugin könnte ja bei mehreren "angemeldet" sein. if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $wert_ga) { $luftfeuchte = $msg{'value'}; #oder nur falls nicht importiert: $msg{'data'} ist dann leer/undef! #$luftfeuchte = decode_dpt9($msg{'data'}); } else { # zyklischer Aufruf # "9" (DPT) kann entfallen falls richtig importiert! $luftfeuchte = knx_read($wert_ga,300,9); } if ($luftfeuchte >= $schwellwert and $plugin_info{$plugname.'_merker_schwellwert1'} ne 1) { # Sende an ZielGA den Wert "1" als 1bit-Wert (DPT1) # "1" (DPT) kann entfallen falls richtig importiert! knx_write($ziel_ga,1,1); # und merken $plugin_info{$plugname.'_merker_schwellwert1'} = 1; } elsif ($luftfeuchte < $schwellwert and $plugin_info{$plugname.'_merker_schwellwert1'} eq 1) { # unter Schwellwert,vorher aktiv -> sende 0 knx_write($ziel_ga,0,1); # und merken $plugin_info{$plugname.'_merker_schwellwert1'} = 0; } return; # verfügbare Daten in %msg: # $msg{'repeated'} 0/1 # $msg{'sequence'} 0-xxx # $msg{'buf'} Rohdaten LPDU # $msg{'src'} Quelladresse # $msg{'tpdu_type'} T_DATA_XXX_REQ # $msg{'data'} rohe Telegrammdaten # $msg{'rcount'} Routing-Zähler # $msg{'apci'} A_GroupValue_Write,A_GroupValue_Read,A_GroupValue_Response (u.v.m) # $msg{'class'} low/alarm/high/system # $msg{'dst'} Zieladresse x/y/z # $msg{'datalen'} Datenlänge # $msg{'value'} Dekodierter Klartext-Wert (nur falls ESF importiert!)
Kommentar