|
From: <pf...@us...> - 2012-05-09 20:26:45
|
Revision: 801
http://openautomation.svn.sourceforge.net/openautomation/?rev=801&view=rev
Author: pfry
Date: 2012-05-09 20:26:38 +0000 (Wed, 09 May 2012)
Log Message:
-----------
Debuggingflag hinzugefuegt. (debug=>1 in %logic oder auch in einzelnen Logikdefinitionen)
Modified Paths:
--------------
wiregate/plugin/generic/Logikprozessor.pl
Modified: wiregate/plugin/generic/Logikprozessor.pl
===================================================================
--- wiregate/plugin/generic/Logikprozessor.pl 2012-05-08 20:18:22 UTC (rev 800)
+++ wiregate/plugin/generic/Logikprozessor.pl 2012-05-09 20:26:38 UTC (rev 801)
@@ -7,7 +7,7 @@
#$plugin_info{$plugname.'_cycle'}=0; return 'deaktiviert';
-my $use_short_names=0; # 1 fuer GA-Kuerzel (erstes Wort des GA-Namens), 0 fuer die "nackte" Gruppenadresse
+my $use_short_names=1; # 1 fuer GA-Kuerzel (erstes Wort des GA-Namens), 0 fuer die "nackte" Gruppenadresse
# eibgaconf fixen falls nicht komplett indiziert
if($use_short_names && !exists $eibgaconf{ZV_Uhrzeit})
@@ -89,6 +89,9 @@
for my $t (keys %logic)
{
+ # Debuggingflag gesetzt
+ my $debug = $logic{debug} || $logic{$t}{debug};
+
# Eintrag pruefen
if(defined $logic{$t}{receive} && ref $logic{$t}{receive} && ref $logic{$t}{receive} ne 'ARRAY')
{
@@ -116,14 +119,16 @@
# transmit-Adresse abonnieren
my $transmit=groupaddress($logic{$t}{transmit});
$plugin_subscribe{$transmit}{$plugname}=1;
+ plugin_log($plugname, "\$logic{$t}: Transmit-GA $transmit abonniert") if $debug;
+ # Zaehlen und Logeintrag
$count++;
# Timer-Logiken reagieren nicht auf Bustraffic auf den receive-Adressen
# fuer Timer-Logiken: ersten Call berechnen
if($logic{$t}{timer})
{
- set_next_call($t);
+ set_next_call($t, $debug);
next;
}
@@ -135,6 +140,7 @@
unless(ref $receive)
{
$plugin_subscribe{$receive}{$plugname}=1;
+ plugin_log($plugname, "\$logic{$t}: Receive-GA $receive abonniert") if $debug;
}
else
{
@@ -142,6 +148,7 @@
{
$plugin_subscribe{$rec}{$plugname}=1;
}
+ plugin_log($plugname, "\$logic{$t}: Receive-GAs (".join(",",@{$receive}).") abonniert") if $debug;
}
}
@@ -182,6 +189,9 @@
$keep_subscription=1;
+ # Debuggingflag gesetzt
+ my $debug = $logic{debug} || $logic{$t}{debug};
+
# Sonderfall: Read- und Write-Telegramme auf der Transmit-Adresse?
if($transmit_ga)
{
@@ -192,6 +202,7 @@
my $result=$plugin_info{$plugname.'_'.$t.'_result'};
if(defined $result)
{
+ plugin_log($plugname, "$ga:Lesetelegramm -> \$logic{$t}{transmit}(memory) -> $ga:$result gesendet") if $debug;
knx_write($ga, $result);
}
next;
@@ -222,8 +233,11 @@
my $result=execute_logic($t, $receive, $ga, $in);
# In bestimmten Sonderfaellen nichts schicken
- next unless defined $result; # Resultat undef => nichts senden
- next if $logic{$t}{transmit_only_on_request};
+ unless(defined $result) # Resultat undef => nichts senden
+ {
+ plugin_log($plugname, "$ga:$in -> \$logic{$t}{receive}(Logik) -> nichts zu senden");
+ next;
+ }
# Zirkelaufruf ausschliessen
if($sender_is_wiregate && $in eq $result)
@@ -235,14 +249,23 @@
next if ref $receive && grep /^$transmit$/, @{$receive};
}
+ if($logic{$t}{transmit_only_on_request})
+ {
+ plugin_log($plugname, "$ga:$in -> \$logic{$t}{receive}(Logik) -> $transmit:$result, wird erst auf spaeteres Lesetelegramm versendet")
+ if $debug;
+ next;
+ }
+
# Falls delay spezifiziert, wird ein "Wecker" gestellt, um in einem spaeteren Aufruf den Wert zu senden
if($logic{$t}{delay})
{
$plugin_info{$plugname.'__'.$t.'_timer'}=$systemtime+$logic{$t}{delay};
+ plugin_log($plugname, "$ga:$in -> \$logic{$t}{receive}(Logik) -> $transmit:$result, zu senden in ".$logic{$t}{delay}."s");
}
else
{
knx_write($transmit, $result);
+ plugin_log($plugname, "$ga:$in -> \$logic{$t}{receive}(Logik) -> $transmit:$result gesendet") if $debug;
}
}
@@ -261,25 +284,36 @@
# Relevanten Eintrag von %logic ermitteln
$timer=~/$plugname\__(.*)_timer/;
my $t=$1;
+
+ # Debuggingflag gesetzt
+ my $debug = $logic{debug} || $logic{$t}{debug};
- # Timer loeschen bzw. neu setzen
- set_next_call($t);
+ # Transmit-GA
+ my $transmit=groupaddress($logic{$t}{transmit});
+ my $toor=$logic{$t}{transmit_only_on_request};
+ my $result=undef;
- # zu sendendes Resultat = zuletzt berechnetes Ergebnis der Logik
- my $result=$plugin_info{$plugname.'_'.$t.'_result'};
-
- # ...es sei denn, es ist eine timer-Logik. Die muss jetzt ausgefuehrt werden
- if($logic{$t}{timer})
+ unless($logic{$t}{timer})
{
+ # zu sendendes Resultat = zuletzt berechnetes Ergebnis der Logik
+ $result=$plugin_info{$plugname.'_'.$t.'_result'};
+ plugin_log($plugname, "\$logic{$t} -> $transmit:".
+ (defined $result?$result.($toor?" gespeichert":" gesendet"):"nichts zu senden")." (delayed)") if $debug;
+ }
+ else
+ {
+ # ...es sei denn, es ist eine timer-Logik. Die muss jetzt ausgefuehrt werden
# Aufruf der Logik-Engine
$result=execute_logic($t, groupaddress($logic{$t}{receive}), undef, undef);
+ plugin_log($plugname, "\$logic{$t} -> $transmit:".
+ (defined $result?$result.($toor?" gespeichert":" gesendet"):"nichts zu senden")." (Timer)") if $debug;
}
- # Transmit-GA
- my $transmit=groupaddress($logic{$t}{transmit});
-
+ # Timer loeschen bzw. neu setzen
+ set_next_call($t, $debug);
+
next unless defined $result;
- next if $logic{$t}{transmit_only_on_request};
+ next if $toor;
knx_write($transmit, $result);
}
@@ -292,13 +326,14 @@
# Cycle auf naechsten Aufruf setzen
unless(defined $nexttimer)
{
- $plugin_info{$plugname."_cycle"}=0; # kein Aufruf noetig
+ $plugin_info{$plugname."_cycle"}=0; # kein Aufruf noetig
}
else
{
my $cycle=$nexttimer-time();
$cycle=1 if $cycle<1;
$plugin_info{$plugname."_cycle"}=$cycle;
+ plugin_log($plugname, "Cycle (Timer) gestellt auf ".$cycle."s") if $logic{debug};
}
return unless $retval;
@@ -347,7 +382,7 @@
sub set_next_call
{
- my $t=shift; # der relevante Eintrag in %logic
+ my ($t,$debug)=@_; # der relevante Eintrag in %logic, und das Debugflag
my $nextcall=undef;
my $days_until_nextcall=0;
@@ -431,7 +466,8 @@
if(defined $nextcall)
{
- plugin_log($plugname, "Naechster Aufruf der Logik '$t' um $nextcall".($days_until_nextcall?" in $days_until_nextcall Tagen.":"."));
+ plugin_log($plugname, "Naechster Aufruf der Logik '$t' um $nextcall".($days_until_nextcall?" in $days_until_nextcall Tagen.":"."))
+ if $debug;
# Zeitdelta zu jetzt berechnen
my $seconds=3600*(substr($nextcall,0,2)-substr($time_of_day,0,2))
@@ -441,7 +477,8 @@
}
else
{
- plugin_log($plugname, "Logik '$t' wird nicht mehr aufgerufen (alle in time=>... festgelegten Termine sind verstrichen).");
+ plugin_log($plugname, "Logik '$t' wird nicht mehr aufgerufen (alle in time=>... festgelegten Termine sind verstrichen).")
+ if $debug && $logic{$t}{timer};
delete $plugin_info{$plugname.'__'.$t.'_timer'};
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|