Zitat von ThorstenGehrig
Beitrag anzeigen
Code:
# Eigenen Aufruf-Zyklus auf 300 Sekunden setzen
$plugin_info{$plugname.'_cycle'} = 300;
my $knx_adresse = '4/0/122';
my $ergebnis_an_knx_adresse = '1/0/121';
#my $schwellwert = 35;
#my $luftfeuchte;
#my $statistik_aufrufart;
use Time::HiRes;
# Plugin an Gruppenadresse "anmelden"
$plugin_subscribe{$knx_adresse}{$plugname} = 1;
my $temperatur = knx_read($knx_adresse);
my $delta_temp = $temperatur - $plugin_info{$plugname.'_oldtemp'};
my $time = Time::HiRes::time();
my $delta_time = $time - $plugin_info{$plugname.'_oldtime'};
if( $delta_time < 0.001 ) { $delta_time = 0.001; } # protection
my $gradient = $delta_temp / $delta_time;
my $action = 'none';
if( ( $gradient > 4.0/60.0 ) || ( $temperatur > 26.0 ) )
{
$action = 'positive slope';
knx_write($ergebnis_an_knx_adresse,1,1);
} else {
$action = 'release';
}
$plugin_info{$plugname.'_oldtemp'} = $temperatur;
$plugin_info{$plugname.'_oldtime'} = $time;
return "dt: $delta_time, dT: $delta_temp, dT/dt: $gradient, T: $temperatur, action: $action";
Die Temperatur an 4/0/122 hat einen Sende-Zyklus von 60 Sekunden - oder (wichtig!) bei geringer Wertänderung (2% - wie ich das Plugin geschrieben hatte, gab's noch nicht die absolute Wertänderung und seit dem hab ich's noch nicht gebraucht).
In dieser Einstellung erkennt das Plugin, ob ich gerade bade (Sensor von unten an die Badewanne geklebt) - braucht aber schon mal gezählt 30 Sekunden (thermische Trägheiten, langsames 1wire auslesen)
Gegen das langsame 1wire Auslesen, ist auf meinen besonderen Wunsch hin, ein extra Modus implementiert worden, wo ich zwingen kann, dass ein Fühler besonders oft ausgelesen wird. Die Idee dahinter wäre dann, wenn der PM Anwesendheit meldet, diesen Modus anzuschalten, bis entweder der PM Entwarnung meldet oder ein Gradient erkannt wurde.
Asche über mein Haupt - die Implementierung dazu ist nur rudimentär begonnen, ich komme gerade nicht dazu...


Einen Kommentar schreiben: