Hallo,
bereits seit einiger Zeit ahbe ich das Wiregate mit ca. 20 Sensoren vollkommen stabil am laufen. Nun habe ich mich an ein neues Plug-in gewagt.
Ich habe mir aus der Plug-in-Datenbank das Plug.in Schwellwerte heruntergeladen und leicht angepasst, um aus Werten eines Helligkeitssensors am Wiregate eine Wahr-/Falsch-Aussage zu erzeugen.
Wenn die Helligkeit unter 5 Lux fällt, soll eine 1 an eine Gruppenadresse gesendet werden, bei mehr als 5 Lux eine 0.
Das Plug-in ist folgendes:
Das Plug-in läuft stabil und tut eigentlich, was es soll (vor allem wenn die Helligkeit unter 5 Lux liegt, dann wird die 0 an die Gruppenadresse gesendet.
Ist die Helligkeit über 5 Lux, so wird abwechselnd (in viel zu geringen Abständen, das Plug-in soll nur alle 5 Minuten laufen oder bei neuem Wert) abwechselnd eine 0 oder 1 gesendet.
Wenn ich dann das ganze im Bus-Monitor vergleiche, sieht es so aus:
Sobald die Helligkeit unter die 5 Lux fällt, verhält sich das Plug in, wie es soll.
Wo ist mein Fehler im Plug-in?
Viele Grüße
Jürgen
bereits seit einiger Zeit ahbe ich das Wiregate mit ca. 20 Sensoren vollkommen stabil am laufen. Nun habe ich mich an ein neues Plug-in gewagt.
Ich habe mir aus der Plug-in-Datenbank das Plug.in Schwellwerte heruntergeladen und leicht angepasst, um aus Werten eines Helligkeitssensors am Wiregate eine Wahr-/Falsch-Aussage zu erzeugen.
Wenn die Helligkeit unter 5 Lux fällt, soll eine 1 an eine Gruppenadresse gesendet werden, bei mehr als 5 Lux eine 0.
Das Plug-in ist folgendes:
### Definitionen
# Eigenen Aufruf-Zyklus auf 300 Sekunden setzen
$plugin_info{$plugname.'_cycle'} = 300;
my $helligkeit_dach_ost = '10/1/20';
my $schwellwert_ost = 5;
my $daemmerungsgrenze_ost = '10/1/25';
### Ende Definitionen
my $daemmerung_ost;
# Plugin an Gruppenadresse "anmelden"
$plugin_subscribe{$helligkeit_dach_ost}{$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 $helligkeit_dach_ost) {
$schwellwert_ost = $msg{'value'};
#oder nur falls nicht importiert: $msg{'data'} ist dann leer/undef!
#$daemmerung_ost = decode_dpt9($msg{'data'});
} else { # zyklischer Aufruf
# "9" (DPT) kann entfallen falls richtig importiert!
$daemmerung_ost = knx_read($helligkeit_dach_ost,300,);
}
if ($daemmerung_ost >= $schwellwert_ost and $plugin_info{$plugname.'_merker_schwellwert_ost'} ne 1) {
# Sende an ZielGA den Wert "1" als 1bit-Wert (DPT1)
# "1" (DPT) kann entfallen falls richtig importiert!
knx_write($daemmerungsgrenze_ost,1,1);
# und merken
$plugin_info{$plugname.'_merker_schwellwert_ost'} = 1;
} elsif ($daemmerung_ost < $schwellwert_ost and $plugin_info{$plugname.'_merker_schwellwert_ost'} eq 1) {
# unter Schwellwert,vorher aktiv -> sende 0
knx_write($daemmerungsgrenze_ost,0,1);
# und merken
$plugin_info{$plugname.'_merker_schwellwert_ost'} = 0;
}
return "Schwellwerte ausgeführt";
return 0;
# Eigenen Aufruf-Zyklus auf 300 Sekunden setzen
$plugin_info{$plugname.'_cycle'} = 300;
my $helligkeit_dach_ost = '10/1/20';
my $schwellwert_ost = 5;
my $daemmerungsgrenze_ost = '10/1/25';
### Ende Definitionen
my $daemmerung_ost;
# Plugin an Gruppenadresse "anmelden"
$plugin_subscribe{$helligkeit_dach_ost}{$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 $helligkeit_dach_ost) {
$schwellwert_ost = $msg{'value'};
#oder nur falls nicht importiert: $msg{'data'} ist dann leer/undef!
#$daemmerung_ost = decode_dpt9($msg{'data'});
} else { # zyklischer Aufruf
# "9" (DPT) kann entfallen falls richtig importiert!
$daemmerung_ost = knx_read($helligkeit_dach_ost,300,);
}
if ($daemmerung_ost >= $schwellwert_ost and $plugin_info{$plugname.'_merker_schwellwert_ost'} ne 1) {
# Sende an ZielGA den Wert "1" als 1bit-Wert (DPT1)
# "1" (DPT) kann entfallen falls richtig importiert!
knx_write($daemmerungsgrenze_ost,1,1);
# und merken
$plugin_info{$plugname.'_merker_schwellwert_ost'} = 1;
} elsif ($daemmerung_ost < $schwellwert_ost and $plugin_info{$plugname.'_merker_schwellwert_ost'} eq 1) {
# unter Schwellwert,vorher aktiv -> sende 0
knx_write($daemmerungsgrenze_ost,0,1);
# und merken
$plugin_info{$plugname.'_merker_schwellwert_ost'} = 0;
}
return "Schwellwerte ausgeführt";
return 0;
Ist die Helligkeit über 5 Lux, so wird abwechselnd (in viel zu geringen Abständen, das Plug-in soll nur alle 5 Minuten laufen oder bei neuem Wert) abwechselnd eine 0 oder 1 gesendet.
Wenn ich dann das ganze im Bus-Monitor vergleiche, sieht es so aus:
Code:
[COLOR=#333333]2015-11-30 15:27:20.147,A_GroupValue_Write,0.0.0,10/1/25,00,,,,0,low,7,T_DATA_XXX_REQ,0[/COLOR] 2015-11-30 15:28:42.156,A_GroupValue_Write,0.0.0,10/1/25,01,,,,0,low,7,T_DATA_XXX_REQ,0 2015-11-30 15:31:05.740,A_GroupValue_Write,0.0.0,10/1/25,00,,,,0,low,7,T_DATA_XXX_REQ,0 2015-11-30 15:33:44.279,A_GroupValue_Write,0.0.0,10/1/25,01,,,,0,low,7,T_DATA_XXX_REQ,0 2015-11-30 15:36:06.819,A_GroupValue_Write,0.0.0,10/1/25,00,,,,0,low,7,T_DATA_XXX_REQ,0 2015-11-30 15:38:46.986,A_GroupValue_Write,0.0.0,10/1/25,01,,,,0,low,7,T_DATA_XXX_REQ,0 2015-11-30 15:41:07.716,A_GroupValue_Write,0.0.0,10/1/25,00,,,,0,low,7,T_DATA_XXX_REQ,0 2015-11-30 15:43:48.921,A_GroupValue_Write,0.0.0,10/1/25,01,,,,0,low,7,T_DATA_XXX_REQ,0 2015-11-30 15:46:09.512,A_GroupValue_Write,0.0.0,10/1/25,00,,,,0,low,7,T_DATA_XXX_REQ,0 2015-11-30 15:48:50.481,A_GroupValue_Write,0.0.0,10/1/25,01,,,,0,low,7,T_DATA_XXX_REQ,0 2015-11-30 15:51:10.419,A_GroupValue_Write,0.0.0,10/1/25,00,,,,0,low,7,T_DATA_XXX_REQ,0 2015-11-30 15:53:51.030,A_GroupValue_Write,0.0.0,10/1/25,01,,,,0,low,7,T_DATA_XXX_REQ,0 2015-11-30 15:54:56.188,A_GroupValue_Write,0.0.0,10/1/25,00,,,,0,low,7,T_DATA_XXX_REQ,0 2015-11-30 15:58:52.155,A_GroupValue_Write,0.0.0,10/1/25,01,,,,0,low,7,T_DATA_XXX_REQ,0 2015-11-30 15:59:57.244,A_GroupValue_Write,0.0.0,10/1/25,00,,,,0,low,7,T_DATA_XXX_REQ,0 2015-11-30 16:03:53.733,A_GroupValue_Write,0.0.0,10/1/25,01,,,,0,low,7,T_DATA_XXX_REQ,0 2015-11-30 16:04:57.909,A_GroupValue_Write,0.0.0,10/1/25,00,,,,0,low,7,T_DATA_XXX_REQ,0 2015-11-30 16:08:56.243,A_GroupValue_Write,0.0.0,10/1/25,01,,,,0,low,7,T_DATA_XXX_REQ,0 2015-11-30 16:11:14.466,A_GroupValue_Write,0.0.0,10/1/25,00,,,,0,low,7,T_DATA_XXX_REQ,0 2015-11-30 16:13:57.609,A_GroupValue_Write,0.0.0,10/1/25,01,,,,0,low,7,T_DATA_XXX_REQ,0 2015-11-30 16:14:59.824,A_GroupValue_Write,0.0.0,10/1/25,00,,,,0,low,7,T_DATA_XXX_REQ,0 2015-11-30 16:18:59.812,A_GroupValue_Write,0.0.0,10/1/25,01,,,,0,low,7,T_DATA_XXX_REQ,0 2015-11-30 16:22:30.880,A_GroupValue_Write,0.0.0,10/1/25,00,,,,0,low,7,T_DATA_XXX_REQ,0 2015-11-30 16:24:00.559,A_GroupValue_Write,0.0.0,10/1/25,01,,,,0,low,7,T_DATA_XXX_REQ,0 2015-11-30 16:26:16.256,A_GroupValue_Write,0.0.0,10/1/25,00,,,,0,low,7,T_DATA_XXX_REQ,0 2015-11-30 16:29:05.394,A_GroupValue_Write,0.0.0,10/1/25,01,,,,0,low,7,T_DATA_XXX_REQ,0 2015-11-30 16:30:01.885,A_GroupValue_Write,0.0.0,10/1/25,00,,,,0,low,7,T_DATA_XXX_REQ,0 2015-11-30 16:34:07.630,A_GroupValue_Write,0.0.0,10/1/25,01,,,,0,low,7,T_DATA_XXX_REQ,0 2015-11-30 16:35:03.144,A_GroupValue_Write,0.0.0,10/1/25,00,,,,0,low,7,T_DATA_XXX_REQ,0
Wo ist mein Fehler im Plug-in?
Viele Grüße
Jürgen
Kommentar