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