Mal ein kleines Plugin, um den Taupunkt zu berechnen..
Code:
# Plugin zur Taupunktberechnung
# Details zur Näherungsformel unter http://www.wettermail.de/wetter/feuchte.html
# Das Plugin geht davon aus, das Temperatur&Luftfeuchte zyklisch
# auf den Bus geschrieben werden und/oder lesbar sind (Lese-Flag gesetzt)
# Der Versand erfolgt zyklisch und beim eintreffen eines neuen Temperaturwertes
# WICHTIG: Falls Werte vom WireGate verwendet werden, muss der Sendezyklus des
# Wertes < dem Aufrufzyklus dieses Plugins sein.
# Version: 0.1 2010-07-14
##################
### DEFINITION ###
##################
# Eigenen Aufruf-Zyklus / Versand auf 900 Sekunden setzen
$plugin_info{$plugname.'_cycle'} = 900;
my $luftfeuchte_ga = "5/2/79"; # Gruppenadresse Luftfeuchte (DPT5)
my $temperatur_ga = "3/1/46"; # Gruppenadresse Temperatur (DPT9)
my $taupunkt_ga = "14/6/11"; # Gruppenadresse für Ausgabe Taupunkt
#######################
### ENDE DEFINITION ###
#######################
# Plugin an Gruppenadresse "anmelden"
# könnte man sich natürlich auch sparen und einfach zyklisch senden
$plugin_subscribe{$temperatur_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.
my $temperatur;
if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $temperatur_ga) {
#oder nur falls die Gruppenadressen importiert wurden reicht auch:
#$temperatur = $msg{'value'};
$temperatur = decode_dpt9($msg{'data'});
} else { # zyklischer Aufruf
# Wert max. eine Stunde (3600s) im cache
# "9" (DPT) kann entfallen falls richtig importiert!
$temperatur = knx_read($temperatur_ga,3600,9);
}
# dito: "5" (DPT) kann entfallen falls richtig importiert!
my $luftfeuchte = knx_read($luftfeuchte_ga,3600,5);
my ($a,$b);
if ($temperatur >= 0) {
($a,$b) = (7.5,237.3);
} else { # für T < 0 über Wasser (Taupunkt)
($a,$b) = (7.6,240.7);
}
my $SDD = 6.1078 * 10**(($a*$temperatur)/($b+$temperatur));
my $DD = $luftfeuchte/100 * $SDD;
my $v = log($DD/6.1078)/log(10);
my $taupunkt = $b*$v/($a-$v);
knx_write($taupunkt_ga,$taupunkt,9);
#return "T: $temperatur H: $luftfeuchte Taupunkt: $taupunkt a $a b $b v $v DD $DD SDD $SDD ";
return;






Kommentar