|
From: <pf...@us...> - 2012-05-07 21:12:31
|
Revision: 796
http://openautomation.svn.sourceforge.net/openautomation/?rev=796&view=rev
Author: pfry
Date: 2012-05-07 21:12:24 +0000 (Mon, 07 May 2012)
Log Message:
-----------
Modified Paths:
--------------
wiregate/plugin/generic/Logikprozessor.pl
Modified: wiregate/plugin/generic/Logikprozessor.pl
===================================================================
--- wiregate/plugin/generic/Logikprozessor.pl 2012-05-07 20:46:56 UTC (rev 795)
+++ wiregate/plugin/generic/Logikprozessor.pl 2012-05-07 21:12:24 UTC (rev 796)
@@ -7,7 +7,7 @@
#$plugin_info{$plugname.'_cycle'}=0; return 'deaktiviert';
-my $use_short_names=1; # 1 fuer GA-Kuerzel (erstes Wort des GA-Namens), 0 fuer die "nackte" Gruppenadresse
+my $use_short_names=0; # 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})
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
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.
|
|
From: <pf...@us...> - 2012-05-09 20:59:58
|
Revision: 802
http://openautomation.svn.sourceforge.net/openautomation/?rev=802&view=rev
Author: pfry
Date: 2012-05-09 20:59:51 +0000 (Wed, 09 May 2012)
Log Message:
-----------
Logeintrag minimal gekuerzt
Modified Paths:
--------------
wiregate/plugin/generic/Logikprozessor.pl
Modified: wiregate/plugin/generic/Logikprozessor.pl
===================================================================
--- wiregate/plugin/generic/Logikprozessor.pl 2012-05-09 20:26:38 UTC (rev 801)
+++ wiregate/plugin/generic/Logikprozessor.pl 2012-05-09 20:59:51 UTC (rev 802)
@@ -235,7 +235,7 @@
# In bestimmten Sonderfaellen nichts schicken
unless(defined $result) # Resultat undef => nichts senden
{
- plugin_log($plugname, "$ga:$in -> \$logic{$t}{receive}(Logik) -> nichts zu senden");
+ plugin_log($plugname, "$ga:$in -> \$logic{$t}{receive}(Logik) -> nichts zu senden") if $debug;
next;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pf...@us...> - 2012-05-10 07:49:29
|
Revision: 803
http://openautomation.svn.sourceforge.net/openautomation/?rev=803&view=rev
Author: pfry
Date: 2012-05-10 07:49:18 +0000 (Thu, 10 May 2012)
Log Message:
-----------
Mini-Patch, betrifft m?\195?\182gliche Zirkellogiken (Logiken, die sich selbst wieder aufrufen und damit zu Endlosschleifen f?\195?\188hren)
Modified Paths:
--------------
wiregate/plugin/generic/Logikprozessor.pl
Modified: wiregate/plugin/generic/Logikprozessor.pl
===================================================================
--- wiregate/plugin/generic/Logikprozessor.pl 2012-05-09 20:59:51 UTC (rev 802)
+++ wiregate/plugin/generic/Logikprozessor.pl 2012-05-10 07:49:18 UTC (rev 803)
@@ -232,15 +232,8 @@
# Aufruf der Logik-Engine
my $result=execute_logic($t, $receive, $ga, $in);
- # In bestimmten Sonderfaellen nichts schicken
- unless(defined $result) # Resultat undef => nichts senden
- {
- plugin_log($plugname, "$ga:$in -> \$logic{$t}{receive}(Logik) -> nichts zu senden") if $debug;
- next;
- }
-
# Zirkelaufruf ausschliessen
- if($sender_is_wiregate && $in eq $result)
+ if($sender_is_wiregate && $in == $result)
{
# kommt transmit-GA unter den receive-GAs vor?
# Wenn transmit_ga gesetzt ist, ist das schon mal der Fall
@@ -249,9 +242,16 @@
next if ref $receive && grep /^$transmit$/, @{$receive};
}
+ # In bestimmten Sonderfaellen nichts schicken
+ unless(defined $result) # Resultat undef => nichts senden
+ {
+ plugin_log($plugname, "$ga:$in -> \$logic{$t}{receive}(Logik) -> nichts zu senden") if $debug;
+ next;
+ }
+
if($logic{$t}{transmit_only_on_request})
{
- plugin_log($plugname, "$ga:$in -> \$logic{$t}{receive}(Logik) -> $transmit:$result, wird erst auf spaeteres Lesetelegramm versendet")
+ plugin_log($plugname, "$ga:$in -> \$logic{$t}{receive}(Logik) -> $transmit:$result gespeichert")
if $debug;
next;
}
@@ -312,10 +312,10 @@
# Timer loeschen bzw. neu setzen
set_next_call($t, $debug);
- next unless defined $result;
- next if $toor;
-
- knx_write($transmit, $result);
+ if(defined $result && !$toor)
+ {
+ knx_write($transmit, $result);
+ }
}
else # noch nicht faelliger Timer
{
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pf...@us...> - 2012-05-10 08:54:34
|
Revision: 804
http://openautomation.svn.sourceforge.net/openautomation/?rev=804&view=rev
Author: pfry
Date: 2012-05-10 08:54:24 +0000 (Thu, 10 May 2012)
Log Message:
-----------
KLeinerer Bugfix betr. debug-Flag und Name des Konfigfiles, wenn ".pl" im Skriptnamen fehlt
Modified Paths:
--------------
wiregate/plugin/generic/Logikprozessor.pl
Modified: wiregate/plugin/generic/Logikprozessor.pl
===================================================================
--- wiregate/plugin/generic/Logikprozessor.pl 2012-05-10 07:49:18 UTC (rev 803)
+++ wiregate/plugin/generic/Logikprozessor.pl 2012-05-10 08:54:24 UTC (rev 804)
@@ -49,7 +49,8 @@
# Konfigurationsfile einlesen
my %logic=();
-my $conf="/etc/wiregate/plugin/generic/conf.d/$plugname"; $conf=~s/\.pl$/.conf/;
+my $conf="/etc/wiregate/plugin/generic/conf.d/$plugname";
+$conf.='.conf' unless $conf=~s/\.pl$/.conf/;
open FILE, "<$conf" || return "no config found";
$/=undef;
my $lines = <FILE>;
@@ -92,6 +93,8 @@
# Debuggingflag gesetzt
my $debug = $logic{debug} || $logic{$t}{debug};
+ next if $t eq 'debug';
+
# Eintrag pruefen
if(defined $logic{$t}{receive} && ref $logic{$t}{receive} && ref $logic{$t}{receive} ne 'ARRAY')
{
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pf...@us...> - 2012-05-17 20:57:02
|
Revision: 827
http://openautomation.svn.sourceforge.net/openautomation/?rev=827&view=rev
Author: pfry
Date: 2012-05-17 20:56:56 +0000 (Thu, 17 May 2012)
Log Message:
-----------
kleiner Bugfix betr. Bereiche von Wochentagen
Modified Paths:
--------------
wiregate/plugin/generic/Logikprozessor.pl
Modified: wiregate/plugin/generic/Logikprozessor.pl
===================================================================
--- wiregate/plugin/generic/Logikprozessor.pl 2012-05-17 20:48:03 UTC (rev 826)
+++ wiregate/plugin/generic/Logikprozessor.pl 2012-05-17 20:56:56 UTC (rev 827)
@@ -501,8 +501,15 @@
}
$s->{$k}=[$s->{$k}] unless ref $s->{$k} eq 'ARRAY'; # alle Kategorien in Listenform
- map $_=$weekday{$_}, @{$s->{$k}} if $k eq 'day_of_week'; # Wochentage in Zahlenform
+ if($k eq 'day_of_week')
+ {
+ for my $wd (sort { length($b) cmp length($a) } keys %weekday)
+ {
+ foreach (@{$s->{$k}}) { s/$wd/$weekday{$wd}/gie } # Wochentage in Zahlenform
+ }
+ }
+
# Expandieren von Bereichen, z.B. month=>'3-5'
if($k ne 'time' && grep /\-/, @{$s->{$k}})
{
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pf...@us...> - 2012-05-28 07:13:37
|
Revision: 842
http://openautomation.svn.sourceforge.net/openautomation/?rev=842&view=rev
Author: pfry
Date: 2012-05-28 07:13:31 +0000 (Mon, 28 May 2012)
Log Message:
-----------
kleiner Bug sorgte leider daf?\195?\188r, dass ?\195?\132nderungen am configfile nicht richtig erkannt wurden
Modified Paths:
--------------
wiregate/plugin/generic/Logikprozessor.pl
Modified: wiregate/plugin/generic/Logikprozessor.pl
===================================================================
--- wiregate/plugin/generic/Logikprozessor.pl 2012-05-27 20:30:45 UTC (rev 841)
+++ wiregate/plugin/generic/Logikprozessor.pl 2012-05-28 07:13:31 UTC (rev 842)
@@ -81,14 +81,14 @@
if($event=~/restart|modified/ || $config_modified)
{
- $plugin_info{$plugname.'_configtime'}=(24*60*60*(-M $conf)-time());
-
# alle Variablen loeschen
for my $k (grep /^$plugname\_/, keys %plugin_info)
{
delete $plugin_info{$k};
}
+ $plugin_info{$plugname.'_configtime'}=(24*60*60*(-M $conf)-time());
+
my $count=0;
my $err=0;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pf...@us...> - 2012-09-27 08:56:56
|
Revision: 1020
http://openautomation.svn.sourceforge.net/openautomation/?rev=1020&view=rev
Author: pfry
Date: 2012-09-27 08:56:47 +0000 (Thu, 27 Sep 2012)
Log Message:
-----------
Umlaute raus, bei date statt %X nun %T
Modified Paths:
--------------
wiregate/plugin/generic/Logikprozessor.pl
Modified: wiregate/plugin/generic/Logikprozessor.pl
===================================================================
--- wiregate/plugin/generic/Logikprozessor.pl 2012-09-25 14:30:37 UTC (rev 1019)
+++ wiregate/plugin/generic/Logikprozessor.pl 2012-09-27 08:56:47 UTC (rev 1020)
@@ -27,9 +27,9 @@
# }
#}
-# Tools und vorbesetzte Variablen fur die Logiken
+# Tools und vorbesetzte Variablen fuer die Logiken
sub limit { my ($lo,$x,$hi)=@_; return $x<$lo?$lo:($x>$hi?$hi:$x); }
-my $date=`/bin/date +"%W,%a,%u,%m,%d,%Y,%j,%H,%M,%X"`;
+my $date=`/bin/date +"%W,%a,%u,%m,%d,%Y,%j,%H,%M,%T"`;
plugin_log($plugname, "Datum/Uhrzeit konnte nicht lesbar.") unless $date=~/^(.+),(.+),(.+),(.+),(.+),(.+),(.+),(.+),(.+),(.+)$/;
my $calendar_week=$1;
my $day_of_week=$2;
@@ -640,7 +640,7 @@
calendar_week=>$calendar_week,day_of_week=>$day_of_week_no};
add_day_info($today);
- my $time_of_day=`/bin/date +"%X"`;
+ my $time_of_day=`/bin/date +"%T"`;
# Schedule-Form standardisieren (alle Eintraege in Listenform setzen und Wochentage durch Zahlen ersetzen)
# dabei gleich schauen, ob HEUTE noch ein Termin ansteht
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dpe...@us...> - 2012-11-10 10:16:46
|
Revision: 1114
http://openautomation.svn.sourceforge.net/openautomation/?rev=1114&view=rev
Author: dpesch01
Date: 2012-11-10 10:16:40 +0000 (Sat, 10 Nov 2012)
Log Message:
-----------
Vertipper in Fehlermeldung Datum/Uhrzeit korrigiert + Angabe des falschen Werts im Logfile
Modified Paths:
--------------
wiregate/plugin/generic/Logikprozessor.pl
Modified: wiregate/plugin/generic/Logikprozessor.pl
===================================================================
--- wiregate/plugin/generic/Logikprozessor.pl 2012-11-10 10:14:56 UTC (rev 1113)
+++ wiregate/plugin/generic/Logikprozessor.pl 2012-11-10 10:16:40 UTC (rev 1114)
@@ -30,7 +30,7 @@
# Tools und vorbesetzte Variablen fuer die Logiken
sub limit { my ($lo,$x,$hi)=@_; return $x<$lo?$lo:($x>$hi?$hi:$x); }
my $date=`/bin/date +"%W,%a,%u,%m,%d,%Y,%j,%H,%M,%T"`;
-plugin_log($plugname, "Datum/Uhrzeit konnte nicht lesbar.") unless $date=~/^(.+),(.+),(.+),(.+),(.+),(.+),(.+),(.+),(.+),(.+)$/;
+plugin_log($plugname, "Datum/Uhrzeit nicht lesbar: '$date'") unless $date=~/^(.+),(.+),(.+),(.+),(.+),(.+),(.+),(.+),(.+),(.+)$/;
my $calendar_week=$1;
my $day_of_week=$2;
my $day_of_week_no=$3;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dpe...@us...> - 2012-11-10 10:54:17
|
Revision: 1115
http://openautomation.svn.sourceforge.net/openautomation/?rev=1115&view=rev
Author: dpesch01
Date: 2012-11-10 10:54:10 +0000 (Sat, 10 Nov 2012)
Log Message:
-----------
UTF8-Encoding f?\195?\188r prowl
Damit sind jetzt auch Umlaute und Sonderzeichen erlaubt.
Modified Paths:
--------------
wiregate/plugin/generic/Logikprozessor.pl
Modified: wiregate/plugin/generic/Logikprozessor.pl
===================================================================
--- wiregate/plugin/generic/Logikprozessor.pl 2012-11-10 10:16:40 UTC (rev 1114)
+++ wiregate/plugin/generic/Logikprozessor.pl 2012-11-10 10:54:10 UTC (rev 1115)
@@ -951,6 +951,7 @@
use LWP::UserAgent;
use URI::Escape;
+ use Encode;
# Falls nur ein einziger skalarer API key geliefert wurde, muss dieser in
# ein Array geh\xFCllt werden
@@ -967,9 +968,9 @@
$requestURL = sprintf("https://prowl.weks.net/publicapi/add?apikey=%s&application=%s&event=%s&description=%s&priority=%d&url=%s",
uri_escape($singleApikey),
- uri_escape($application),
- uri_escape($event),
- uri_escape($description),
+ uri_escape(encode("utf8", $application)),
+ uri_escape(encode("utf8", $event)),
+ uri_escape(encode("utf8", $description)),
uri_escape($priority),
uri_escape($url));
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dpe...@us...> - 2012-11-13 08:41:44
|
Revision: 1136
http://openautomation.svn.sourceforge.net/openautomation/?rev=1136&view=rev
Author: dpesch01
Date: 2012-11-13 08:41:32 +0000 (Tue, 13 Nov 2012)
Log Message:
-----------
Fix: verhindert Aufruf von knx_write() mit leerer GA
- trat auf bei Regeln ohne: transmit-Eintrag
- der Fix verhindert Logfile-Spam mit "WARN - None or unsupported DPT: sent to value 0" von knx_write()
Modified Paths:
--------------
wiregate/plugin/generic/Logikprozessor.pl
Modified: wiregate/plugin/generic/Logikprozessor.pl
===================================================================
--- wiregate/plugin/generic/Logikprozessor.pl 2012-11-13 07:14:04 UTC (rev 1135)
+++ wiregate/plugin/generic/Logikprozessor.pl 2012-11-13 08:41:32 UTC (rev 1136)
@@ -187,7 +187,7 @@
# Berechnung und Senden beim Startup des Logikprozessors
my $result=execute_logic($t, undef, undef);
- if(defined $result)
+ if(defined $result && defined $logic{$t}{transmit} && length($logic{$t}{transmit}))
{
my $ga=groupaddress $logic{$t}{transmit};
knx_write($ga, $result); # DPT aus eibga.conf
@@ -329,7 +329,7 @@
}
else
{
- if(defined $result)
+ if(defined $result && defined $transmit && length($transmit))
{
knx_write($transmit, $result);
$retval.="$msg{src} $ga:$in -> \$logic{$t}{receive}(Logik) -> $transmit:$result gesendet " if $debug;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pf...@us...> - 2012-11-24 18:00:47
|
Revision: 1167
http://openautomation.svn.sourceforge.net/openautomation/?rev=1167&view=rev
Author: pfry
Date: 2012-11-24 18:00:41 +0000 (Sat, 24 Nov 2012)
Log Message:
-----------
Mini-Fix betr. Logiken mit wiederkehrenden Zeiten (time=>'00:00+15min-20:00')
Modified Paths:
--------------
wiregate/plugin/generic/Logikprozessor.pl
Modified: wiregate/plugin/generic/Logikprozessor.pl
===================================================================
--- wiregate/plugin/generic/Logikprozessor.pl 2012-11-24 14:15:33 UTC (rev 1166)
+++ wiregate/plugin/generic/Logikprozessor.pl 2012-11-24 18:00:41 UTC (rev 1167)
@@ -634,7 +634,7 @@
my $newtime=[];
for my $ts (@{$s->{time}})
{
- unless($ts=~/^(.*?)([0-9][0-9]):([0-9][0-9])\+([1-9][0-9]*)(m|h)(?:\-([0-9][0-9]):([0-9][0-9]))?$/)
+ unless($ts=~/^(.*?)([0-9][0-9]):([0-9][0-9])\+([1-9][0-9]*)(m|h|min)(?:\-([0-9][0-9]):([0-9][0-9]))?$/)
{
if($ts=~/^(.*?)([0-9][0-9]):([0-9][0-9])$/)
{
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pf...@us...> - 2012-12-15 02:49:47
|
Revision: 1214
http://openautomation.svn.sourceforge.net/openautomation/?rev=1214&view=rev
Author: pfry
Date: 2012-12-15 02:49:40 +0000 (Sat, 15 Dec 2012)
Log Message:
-----------
Effizientere Berechnung des naechsten Aufrufzeitpunktes bei Timer-Schedules mit kurzer Periode (zB '00:00+5min') reduziert Timeouts erheblich
Modified Paths:
--------------
wiregate/plugin/generic/Logikprozessor.pl
Modified: wiregate/plugin/generic/Logikprozessor.pl
===================================================================
--- wiregate/plugin/generic/Logikprozessor.pl 2012-12-14 18:03:28 UTC (rev 1213)
+++ wiregate/plugin/generic/Logikprozessor.pl 2012-12-15 02:49:40 UTC (rev 1214)
@@ -7,25 +7,7 @@
#$plugin_info{$plugname.'_cycle'}=0; return 'deaktiviert';
-# eibgaconf fixen falls nicht komplett indiziert
-# Kann ab Wiregate PL32 entfallen
-#if(!exists $eibgaconf{ZV_Uhrzeit})
-#{
-# for my $ga (grep /^[0-9\/]+$/, keys %eibgaconf)
-# {
-# $eibgaconf{$ga}{ga}=$ga;
-# my $name=$eibgaconf{$ga}{name};
-# next unless defined $name;
-# $eibgaconf{$name}=$eibgaconf{$ga};
-#
-# next unless $name=~/^\s*(\S+)/;
-# my $short=$1;
-# $short='ZV_'.$1 if $eibgaconf{$ga}{name}=~/^Zeitversand.*(Uhrzeit|Datum)/;
-#
-# $eibgaconf{$ga}{short}=$short;
-# $eibgaconf{$short}=$eibgaconf{$ga};
-# }
-#}
+use POSIX qw(floor);
# Tools und vorbesetzte Variablen fuer die Logiken
sub limit { my ($lo,$x,$hi)=@_; return $x<$lo?$lo:($x>$hi?$hi:$x); }
@@ -84,6 +66,10 @@
# Plugin-Code
my $retval='';
+# Im Falle eines Timeouts soll der Logikprozessor in 10s neu gestartet werden
+$plugin_info{$plugname."_cycle"}=10;
+
+# Unterscheidung Aufrufgrund
if($event=~/restart|modified/ || $config_modified)
{
# alle Variablen loeschen
@@ -626,9 +612,9 @@
}
}
- # Expandieren periodischer Zeitangaben, das sind Zeitangaben der Form
- # time=>'08:00+30min' - ab 08:00 alle 30min
- # time=>'08:00+5min-09:00' - ab 08:00 alle 5min mit Ende 09:00
+ # Zeitangabe im Tag
+ # Um Rechenzeit zu sparen - am Ende interessiert uns nur der erste Zeitpunkt am Tag und der erste nach der aktuellen Tageszeit
+ # - errechnen wir auch nur diese beiden Zeitpunkte
if(grep /\+/, @{$s->{time}})
{
my $newtime=[];
@@ -636,6 +622,7 @@
{
unless($ts=~/^(.*?)([0-9][0-9]):([0-9][0-9])\+([1-9][0-9]*)(m|h|min)(?:\-([0-9][0-9]):([0-9][0-9]))?$/)
{
+ # Einzelne Zeitangaben wie '07:30'
if($ts=~/^(.*?)([0-9][0-9]):([0-9][0-9])$/)
{
push @{$newtime}, sprintf("%02d:%02d",$2, $3);
@@ -648,12 +635,28 @@
}
else
{
+ # Expandieren periodischer Zeitangaben, das sind Zeitangaben der Form
+ # time=>'08:00+30min' - ab 08:00 alle 30min
+ # time=>'08:00+5min-09:00' - ab 08:00 alle 5min mit Ende 09:00
my ($head,$t1,$period,$t2)=($1,$2*60+$3,$4*($5 eq 'h' ? 60 : 1),(defined $6 ? ($6*60+$7) : 24*60));
-
- for(my $tm=$t1; $tm<=$t2; $tm+=$period)
+ my $now=$hour*60+$minute;
+
+ # erster Zeitpunkt am Tag
+ push @{$newtime}, sprintf("%02d:%02d",$t1/60,$t1%60);
+
+ # erster Zeitpunkt nach aktueller Tageszeit
+ if($t1<$now && $t2>$now)
{
- push @{$newtime}, sprintf("%02d:%02d",$tm/60,$tm%60);
+ $t1+=floor(($now-$t1)/$period+1)*$period;
+ $t1+=$period if $t1<$now; # darf eigentlich gar nicht sein, aber zur Sicherheit...
+ push @{$newtime}, sprintf("%02d:%02d",$t1/60,$t1%60) if $t1<$t2;
}
+
+# alter Code: hier wurde noch jede Zeitangabe expandiert (rechenzeitintensiv bei Schedules mit kurzem Intervall)
+# for(my $tm=$t1; $tm<=$t2; $tm+=$period)
+# {
+# push @{$newtime}, sprintf("%02d:%02d",$tm/60,$tm%60);
+# }
}
}
@{$s->{time}} = sort @{$newtime};
@@ -737,7 +740,7 @@
if($nextcall=~/^([0-9]+)\:([0-9]+)/)
{
my $seconds=3600*($1-substr($time_of_day,0,2))+60*($2-substr($time_of_day,3,2))-substr($time_of_day,6,2);
- plugin_log($plugname, "Naechster Aufruf der Timer-Logik '$t'$daytext um $nextcall.");# if $debug;
+ plugin_log($plugname, "Naechster Aufruf der Timer-Logik '$t'$daytext um $nextcall.") if $debug;
my $timer=$systemtime+$seconds+3600*24*$days_until_nextcall;
$plugin_info{$plugname.'__'.$t.'_timer'}=$timer;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pf...@us...> - 2012-12-25 09:53:04
|
Revision: 1246
http://openautomation.svn.sourceforge.net/openautomation/?rev=1246&view=rev
Author: pfry
Date: 2012-12-25 09:52:55 +0000 (Tue, 25 Dec 2012)
Log Message:
-----------
Verhalten mit Option debug=>1 (globale Option) veraendert - Return Value gibt nun den naechsten faelligen Timer an
Modified Paths:
--------------
wiregate/plugin/generic/Logikprozessor.pl
Modified: wiregate/plugin/generic/Logikprozessor.pl
===================================================================
--- wiregate/plugin/generic/Logikprozessor.pl 2012-12-24 09:00:32 UTC (rev 1245)
+++ wiregate/plugin/generic/Logikprozessor.pl 2012-12-25 09:52:55 UTC (rev 1246)
@@ -5,7 +5,7 @@
# Wiregate-Plugin
# (c) 2012 Fry under the GNU Public License
-#$plugin_info{$plugname.'_cycle'}=0; return 'deaktiviert';
+# $plugin_info{$plugname.'_cycle'}=0; return 'deaktiviert';
use POSIX qw(floor);
@@ -27,7 +27,7 @@
my $weekday=!$weekend;
my $holiday=is_holiday($year,$day_of_year);
my $workingday=(!$weekend && !$holiday);
-my $day=($hour>7 && $hour<23);
+my $day=($hour>=7 && $hour<23);
my $night=!$day;
my $systemtime=time();
my $date=sprintf("%02d/%02d",$month,$day_of_month);
@@ -386,7 +386,7 @@
}
else # noch nicht faelliger Timer
{
- $nexttimer=$plugin_info{$timer} if !defined $nexttimer || $plugin_info{$timer}<$nexttimer;
+ $nexttimer=$timer if !defined $nexttimer || $plugin_info{$timer}<$plugin_info{$nexttimer};
}
}
@@ -415,10 +415,12 @@
}
else
{
- my $cycle=int($nexttimer-time());
+ my $cycle=int($plugin_info{$nexttimer}-time());
$cycle=1 if $cycle<1;
$plugin_info{$plugname."_cycle"}=$cycle;
- $retval.="Cycle (Timer) gestellt auf ".$cycle."s" if $logic{debug};
+ $nexttimer=~s/^$plugname\__//;
+ $nexttimer=~s/_timer$//;
+ $retval.="Naechster Timer: $nexttimer" if $logic{debug};
}
# experimentell - wir helfen der Garbage Collection etwas nach...
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pf...@us...> - 2013-01-02 10:17:46
|
Revision: 1282
http://openautomation.svn.sourceforge.net/openautomation/?rev=1282&view=rev
Author: pfry
Date: 2013-01-02 10:17:39 +0000 (Wed, 02 Jan 2013)
Log Message:
-----------
Mehrfach-GAs bei transmit erlaubt
Modified Paths:
--------------
wiregate/plugin/generic/Logikprozessor.pl
Modified: wiregate/plugin/generic/Logikprozessor.pl
===================================================================
--- wiregate/plugin/generic/Logikprozessor.pl 2013-01-01 23:03:02 UTC (rev 1281)
+++ wiregate/plugin/generic/Logikprozessor.pl 2013-01-02 10:17:39 UTC (rev 1282)
@@ -45,12 +45,26 @@
sub groupaddress;
+# Konfigfile seit dem letzten Mal geaendert?
+my $conf="/etc/wiregate/plugin/generic/conf.d/$plugname";
+$conf.='.conf' unless $conf=~s/\.pl$/.conf/;
+my $configtime=24*60*60*(-M $conf);
+my $config_modified = ($configtime < $plugin_info{$plugname.'_configtime'}-1);
+
+# Aufrufgrund ermitteln
+my $event=undef;
+if (!$plugin_initflag)
+{ $event='restart'; } # Restart des daemons / Reboot
+elsif ($plugin_info{$plugname.'_lastsaved'} > $plugin_info{$plugname.'_last'})
+{ $event='modified'; } # Plugin modifiziert
+elsif (%msg) { $event='bus'; return if !$config_modified && $msg{apci} eq "A_GroupValue_Response"; } # Bustraffic
+elsif ($fh) { $event='socket'; } # Netzwerktraffic
+else { $event='cycle'; } # Zyklus
+
# Konfigurationsfile einlesen
my $eibd_backend_address='1.1.254';
my %logic=();
my %settings=();
-my $conf="/etc/wiregate/plugin/generic/conf.d/$plugname";
-$conf.='.conf' unless $conf=~s/\.pl$/.conf/;
open FILE, "<$conf" || return "no config found";
$/=undef;
my $lines = <FILE>;
@@ -60,20 +74,6 @@
eval($lines);
return "config error: $@" if $@;
-# Aufrufgrund ermitteln
-my $event=undef;
-if (!$plugin_initflag)
-{ $event='restart'; } # Restart des daemons / Reboot
-elsif ($plugin_info{$plugname.'_lastsaved'} > $plugin_info{$plugname.'_last'})
-{ $event='modified'; } # Plugin modifiziert
-elsif (%msg) { $event='bus'; } # Bustraffic
-elsif ($fh) { $event='socket'; } # Netzwerktraffic
-else { $event='cycle'; } # Zyklus
-
-# Konfigfile seit dem letzten Mal geaendert?
-my $configtime=24*60*60*(-M $conf);
-my $config_modified = ($configtime < $plugin_info{$plugname.'_configtime'}-1);
-
# Plugin-Code
my $retval='';
@@ -140,12 +140,21 @@
plugin_log($plugname, "Config err: \$logic{$t}: delay und timer festgelegt, ignoriere delay");
}
- # transmit-Adresse abonnieren
- if (defined $logic{$t}{transmit})
+ # transmit-Adresse(n) abonnieren
+ if(defined $logic{$t}{transmit})
{
my $transmit=groupaddress $logic{$t}{transmit};
- $plugin_subscribe{$transmit}{$plugname}=1;
- plugin_log($plugname, "\$logic{$t}: Transmit-GA $transmit nicht in %eibgaconf gefunden") if $debug && !exists $eibgaconf{$transmit};
+
+ if($transmit)
+ {
+ $transmit=[$transmit] unless ref $transmit;
+
+ for my $trm (@${transmit})
+ {
+ $plugin_subscribe{$trm}{$plugname}=1;
+ plugin_log($plugname, "\$logic{$t}: Transmit-GA $trm nicht in %eibgaconf gefunden") if $debug && !exists $eibgaconf{$trm};
+ }
+ }
}
# Timer-Logiken reagieren nicht auf Bustraffic auf den receive-Adressen
@@ -188,11 +197,21 @@
# Berechnung und Senden beim Startup des Logikprozessors
my $result=execute_logic($t, undef, undef);
+
if(defined $result && defined $logic{$t}{transmit})
{
- my $ga=groupaddress $logic{$t}{transmit};
- knx_write($ga, $result); # DPT aus eibga.conf
- plugin_log($plugname, "\$logic{$t}{transmit}(Logik) -> $ga:$result") if $debug;
+ my $transmit=groupaddress $logic{$t}{transmit};
+
+ if($transmit)
+ {
+ $transmit=[$transmit] unless ref $transmit;
+
+ for my $trm (@${transmit})
+ {
+ knx_write($trm, $result); # DPT aus eibga.conf
+ plugin_log($plugname, "\$logic{$t}{transmit}(Logik) -> $trm:$result") if $debug;
+ }
+ }
}
}
@@ -201,7 +220,7 @@
if($event=~/bus/)
{
- return if $msg{apci} eq "A_GroupValue_Response";
+ return $retval if $msg{apci} eq "A_GroupValue_Response";
my $ga=$msg{dst};
my $in=$msg{value};
@@ -213,8 +232,21 @@
next if $t eq 'debug' || $t=~/^_/;
my $transmit=groupaddress($logic{$t}{transmit});
- my $transmit_ga = ($ga eq $transmit);
+ my $transmit_ga=0;
+ if(defined $transmit)
+ {
+ unless(ref $logic{$t}{transmit})
+ {
+ $transmit_ga=1 if $ga eq $transmit;
+ $transmit=[$transmit];
+ }
+ else
+ {
+ $transmit_ga=1 if grep /^$ga$/, @{$transmit};
+ }
+ }
+
my $receive=groupaddress($logic{$t}{receive});
my $receive_ga=0;
@@ -237,7 +269,7 @@
# Debuggingflag gesetzt
my $debug = $logic{debug} || $logic{$t}{debug};
- # Sonderfall: Read- und Write-Telegramme auf der Transmit-Adresse
+ # Sonderfall: Read- und Write-Telegramme auf einer Transmit-Adresse
if($transmit_ga)
{
# Ein Read-Request auf einer Transmit-GA wird mit dem letzten Ergebnis beantwortet
@@ -334,8 +366,11 @@
{
if(defined $result && defined $transmit)
{
- knx_write($transmit, $result);
- $retval.="$msg{src} $ga:$in -> \$logic{$t}{receive}(Logik) -> $transmit:$result gesendet " if $debug;
+ for my $trm (@${transmit})
+ {
+ knx_write($trm, $result); # DPT aus eibga.conf
+ $retval.="$msg{src} $ga:$in -> \$logic{$t}{receive}(Logik) -> $trm:$result gesendet " if $debug;
+ }
}
# Cool-Periode starten
@@ -363,7 +398,6 @@
my $debug = $logic{debug} || $logic{$t}{debug};
# Transmit-GA
- my $transmit=groupaddress($logic{$t}{transmit});
my $toor=$logic{$t}{transmit_only_on_request};
my $result=undef;
@@ -371,7 +405,7 @@
{
# zu sendendes Resultat = zuletzt berechnetes Ergebnis der Logik
$result=$plugin_info{$plugname.'_'.$t.'_result'};
- $retval.="\$logic{$t} -> $transmit:".
+ $retval.="\$logic{$t}{transmit}(memory):".
(defined $result?$result.($toor?" gespeichert":" gesendet"):"nichts zu senden")." (delayed) " if $debug;
}
else
@@ -379,7 +413,7 @@
# ...es sei denn, es ist eine timer-Logik. Die muss jetzt ausgefuehrt werden
# Aufruf der Logik-Engine
$result=execute_logic($t, undef, undef);
- $retval.="\$logic{$t} -> $transmit:".
+ $retval.="\$logic{$t}{transmit}(Logik):".
(defined $result?$result.($toor?" gespeichert":" gesendet"):"nichts zu senden")." (Timer) " if $debug;
}
@@ -387,10 +421,21 @@
# Timer loeschen bzw. neu setzen
set_next_call($t, $debug);
- if(defined $result && !$toor)
+ if(defined $result && !$toor && defined $logic{$t}{transmit})
{
- knx_write($transmit, $result);
+ my $transmit=groupaddress $logic{$t}{transmit};
+ if($transmit)
+ {
+ $transmit=[$transmit] unless ref $transmit;
+
+ for my $trm (@${transmit})
+ {
+ knx_write($trm, $result); # DPT aus eibga.conf
+ plugin_log($plugname, "\$logic{$t}{transmit}(Logik) -> $trm:$result") if $debug;
+ }
+ }
+
# Cool-Periode starten
$plugin_info{$plugname.'__'.$t.'_cool'}=time()+$logic{$t}{cool} if defined $logic{$t}{cool};
}
@@ -408,15 +453,13 @@
next if $t eq 'debug' || $t=~/^_/;
next unless defined $logic{$t}{timer};
- my $timer=$plugin_info{$plugname.'__'.$t.'_timer'};
+ my $ttime=$plugin_info{$plugname.'__'.$t.'_timer'};
- next if defined $timer && $timer>time();
+ next if defined $ttime && $ttime>$systemtime;
- plugin_log($plugname, "\$logic{$t}: Timer nicht korrekt gesetzt ($plugin_info{$plugname.'__'.$t.'_timer'}), berechne erneut");
+ plugin_log($plugname, "\$logic{$t}: Timer in der Vergangenheit (".strftime("%D %X",$ttime)."<".strftime("%D %X",time()).", Delta ".($ttime-time())."), berechne erneut");
- # Debuggingflag gesetzt
- my $debug = $logic{debug} || $logic{$t}{debug};
- set_next_call($t, $debug);
+ set_next_call($t, $logic{debug} || $logic{$t}{debug});
}
# Cycle auf naechsten Aufruf setzen
@@ -429,9 +472,12 @@
my $cycle=int($plugin_info{$nexttimer}-time());
$cycle=1 if $cycle<1;
$plugin_info{$plugname."_cycle"}=$cycle;
- $nexttimer=~s/^$plugname\__//;
- $nexttimer=~s/_timer$//;
- $retval.="Naechster Timer: $nexttimer" if $logic{debug};
+ if($logic{debug})
+ {
+ $nexttimer=~s/^$plugname\__//;
+ $nexttimer=~s/_timer$//;
+ $retval.="Naechster Timer: $nexttimer";
+ }
}
# experimentell - wir helfen der Garbage Collection etwas nach...
@@ -756,9 +802,8 @@
my $seconds=3600*($1-substr($time_of_day,0,2))+60*($2-substr($time_of_day,3,2))-substr($time_of_day,6,2);
plugin_log($plugname, "Naechster Aufruf der Timer-Logik '$t'$daytext um $nextcall.") if $debug;
- my $timer=$systemtime+$seconds+3600*24*$days_until_nextcall;
- $plugin_info{$plugname.'__'.$t.'_timer'}=$timer;
-# plugin_log($plugname, "\$plugin_info{$plugname.'__'.$t.'_timer'}=$plugin_info{$plugname.'__'.$t.'_timer'}=$timer ?");# if $debug;
+ my $ttime=$systemtime+$seconds+3600*24*$days_until_nextcall;
+ $plugin_info{$plugname.'__'.$t.'_timer'}=$ttime;
}
else
{
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pf...@us...> - 2013-01-07 06:55:58
|
Revision: 1310
http://openautomation.svn.sourceforge.net/openautomation/?rev=1310&view=rev
Author: pfry
Date: 2013-01-07 06:55:46 +0000 (Mon, 07 Jan 2013)
Log Message:
-----------
Mini-Bugfix
Modified Paths:
--------------
wiregate/plugin/generic/Logikprozessor.pl
Modified: wiregate/plugin/generic/Logikprozessor.pl
===================================================================
--- wiregate/plugin/generic/Logikprozessor.pl 2013-01-06 18:40:21 UTC (rev 1309)
+++ wiregate/plugin/generic/Logikprozessor.pl 2013-01-07 06:55:46 UTC (rev 1310)
@@ -295,7 +295,7 @@
my $ignore_read_requests=$logic{$t}{ignore_read_requests};
# bei mehreren transmit-Adressen per Default Read-Requests ignorieren (wird idR so erwuenscht sein)
- $ignore_read_requests = ref !$logic{$t}{transmit} && !$logic{$t}{recalc_on_request} && !$logic{$t}{transmit_only_on_request}
+ $ignore_read_requests = ref $logic{$t}{transmit} && !$logic{$t}{recalc_on_request} && !$logic{$t}{transmit_only_on_request}
unless defined $ignore_read_requests;
# Sonderfall: Read- und Write-Telegramme auf einer Transmit-Adresse
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pf...@us...> - 2013-04-21 19:10:23
|
Revision: 1693
http://openautomation.svn.sourceforge.net/openautomation/?rev=1693&view=rev
Author: pfry
Date: 2013-04-21 19:10:16 +0000 (Sun, 21 Apr 2013)
Log Message:
-----------
my_knx_write erlaubt das Absetzen von Lesetelegrammen, ohne auf die Antwort zu warten
Modified Paths:
--------------
wiregate/plugin/generic/Logikprozessor.pl
Modified: wiregate/plugin/generic/Logikprozessor.pl
===================================================================
--- wiregate/plugin/generic/Logikprozessor.pl 2013-04-20 21:47:04 UTC (rev 1692)
+++ wiregate/plugin/generic/Logikprozessor.pl 2013-04-21 19:10:16 UTC (rev 1693)
@@ -44,6 +44,7 @@
my $date=sprintf("%02d/%02d",$month,$day_of_month);
sub groupaddress;
+sub my_knx_write;
# Konfigfile seit dem letzten Mal geaendert?
my $conf="/etc/wiregate/plugin/generic/conf.d/$plugname";
@@ -948,7 +949,7 @@
}
else
{
- $input=[];
+ $input=();
for my $rec (@{$receive})
{
if($ga eq $rec)
@@ -957,7 +958,8 @@
}
else
{
- push @{$input}, knx_read($rec, (defined $logic{$t}{eibd_cache}?$logic{$t}{eibd_cache}:300));
+ $in=knx_read($rec, (defined $logic{$t}{eibd_cache}?$logic{$t}{eibd_cache}:300));
+ push @{$input}, $in;
}
}
}
@@ -1158,3 +1160,55 @@
return undef;
}
+# das folgende ist eine modifizierte Version von knx_write fuer Logiken
+# dieses knx_write erlaubt es, Lesetelegramme abzusetzen, ohne auf die Antwort zu warten
+sub my_knx_write {
+ my ($dst,$value,$dpt,$acpi,$dbgmsg) = @_;
+ my $bytes;
+ my $apci = 0x80 unless defined $acpi; # 0x00=read, 0x40=response, 0x80=write
+ $dpt = $eibgaconf{$dst}{'DPTSubId'} unless $dpt; # read dpt from eibgaconf if existing
+ given ($dpt) {
+ when (/^10/) {
+ my %wd=(Mo=>1, Di=>2, Mi=>3, Do=>4, Fr=>5, Sa=>6, So=>7);
+ my $wdpat=join('|',keys %wd);
+ my ($w,$h,$m,$s);
+ return unless ($w,$h,$m,$s)=($value=~/^($wdpat)?\s*([0-2][0-9])\:([0-5][0-9])\:?([0-5][0-9])?\s*/si);
+ return unless defined $h && defined $m;
+ $w=$wd{$w} if defined $wd{$w};
+ $h+=($w<<5) if $w;
+ $s=0 unless $s;
+ $bytes=pack("CCCCC",0,$apci,$h,$m,$s);
+ }
+ when (/^11/) {
+ my ($y,$m,$d);
+ return unless ($y,$m,$d)=($value=~/^([1-2][0-9][0-9][0-9])\-([0-1][0-9])\-([0-3][0-9])\s*/si);
+ return if $y<1990 || $y>=2090;
+ $y%=100;
+ $bytes=pack("CCCCC",0,$apci,$d,$m,$y);
+ }
+ when (/^12/) { $bytes = pack ("CCL>", 0, $apci, $value); } #EIS11.000/DPT12 (4 byte unsigned)
+ when (/^13/) { $bytes = pack ("CCl>", 0, $apci, $value); }
+ when (/^14/) { $bytes = pack ("CCf>", 0, $apci, $value); }
+ when (/^16/) { $bytes = pack ("CCa14", 0, $apci, $value); }
+ when (/^17/) { $bytes = pack ("CCC", 0, $apci, $value & 0x3F); }
+ when (/^20/) { $bytes = pack ("CCC", 0, $apci, $value); }
+ when (/^\d\d/) { return; } # other DPT XX 15 are unhandled
+ when (/^[1,2,3]/) { $bytes = pack ("CC", 0, $apci | ($value & 0x3f)); } #send 6bit small
+ when (/^4/) { $bytes = pack ("CCc", 0, $apci, ord($value)); }
+ when ([5,5.001]) { $bytes = pack ("CCC", 0, $apci, encode_dpt5($value)); } #EIS 6/DPT5.001 1byte
+ when ([5.004,5.005,5.010]) { $bytes = pack ("CCC", 0, $apci, $value); }
+ when (/^5/) { $bytes = pack ("CCC", 0, $apci, $value); }
+ when (/^6/) { $bytes = pack ("CCc", 0, $apci, $value); }
+ when (/^7/) { $bytes = pack ("CCS>", 0, $apci, $value); }
+ when (/^8/) { $bytes = pack ("CCs>", 0, $apci, $value); }
+ when (/^9/) { $bytes = pack ("CCCC", 0, $apci, encode_dpt9($value)); } #EIS5/DPT9 2byte float
+ default { LOGGER('WARN',"None or unsupported DPT: $dpt sent to $dst value $value"); return; }
+ }
+ plugin_log("knx_write","KNX write DPT $dpt: $value ($bytes) to $dst ($dbgmsg)") if ($knxdebug);
+ my $leibcon = EIBConnection->EIBSocketURL($eib_url) or return("Error opening con: $!");
+ if ($leibcon->EIBOpenT_Group(str2addr($dst),1) == -1) { return("Error opening group: $!"); }
+ my $res=$leibcon->EIBSendAPDU($bytes);
+ $leibcon->EIBClose();
+ return $res;
+}
+
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pf...@us...> - 2012-07-02 08:33:54
|
Revision: 898
http://openautomation.svn.sourceforge.net/openautomation/?rev=898&view=rev
Author: pfry
Date: 2012-07-02 08:33:43 +0000 (Mon, 02 Jul 2012)
Log Message:
-----------
Ungueltige Uhrzeiten in timer-Spezifikationen werden nun mit ordentlicher Fehlermeldung quittiert.
Modified Paths:
--------------
wiregate/plugin/generic/Logikprozessor.pl
Modified: wiregate/plugin/generic/Logikprozessor.pl
===================================================================
--- wiregate/plugin/generic/Logikprozessor.pl 2012-06-29 19:36:04 UTC (rev 897)
+++ wiregate/plugin/generic/Logikprozessor.pl 2012-07-02 08:33:43 UTC (rev 898)
@@ -669,13 +669,20 @@
my $daytext='';
my $datum="$today->{day_of_month}\.$today->{month}\.$today->{year}";
$daytext = ($days_until_nextcall==1 ? " morgen" : " in $days_until_nextcall Tagen, am $datum,") if $days_until_nextcall;
- plugin_log($plugname, "Naechster Aufruf der Timer-Logik '$t'$daytext um $nextcall."); # if $debug;
# Zeitdelta zu jetzt berechnen
- my $seconds=3600*(substr($nextcall,0,2)-substr($time_of_day,0,2))
- +60*(substr($nextcall,3,2)-substr($time_of_day,3,2))-substr($time_of_day,6,2);
- $nextcall=$systemtime+$seconds+3600*24*$days_until_nextcall;
- $plugin_info{$plugname.'__'.$t.'_timer'}=$nextcall;
+ if($nextcall=~/^([0-9]+)\:([0-9]+)/)
+ {
+ my $seconds=3600*($1-substr($time_of_day,0,2))+60*($2-substr($time_of_day,3,2))-substr($time_of_day,6,2);
+ plugin_log($plugname, "Naechster Aufruf der Timer-Logik '$t'$daytext um $nextcall."); # if $debug;
+
+ my $timer=$systemtime+$seconds+3600*24*$days_until_nextcall;
+ $plugin_info{$plugname.'__'.$t.'_timer'}=$timer;
+ }
+ else
+ {
+ plugin_log($plugname, "Ungueltige Uhrzeit des naechsten Aufrufs der Timer-Logik '$t'$daytext."); # if $debug;
+ }
}
else
{
@@ -687,7 +694,7 @@
}
# Es folgt die eigentliche Logik-Engine
-# Im wesentlichen Vorbesetzen von input und state, Aufrufen der Logik, Zurueckschreiben von state
+# Im wesentlichen Vorbesetzen von input und state, Aufrufen der Logik, knx_write, Zurueckschreiben von state
sub execute_logic
{
my ($t, $receive, $ga, $in)=@_; # Logikindex $t, Bustelegramm erhalten auf $ga mit Inhalt $in
@@ -720,7 +727,7 @@
}
# ab hier liegt $input komplett vor, und nun muss die Logik ausgewertet
- # und das Resultat auf der Transmit-GA uebertragen
+ # und das Resultat auf der Transmit-GA uebertragen werden
my $result=undef;
unless(ref $logic{$t}{translate})
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sic...@us...> - 2012-08-09 16:40:16
|
Revision: 929
http://openautomation.svn.sourceforge.net/openautomation/?rev=929&view=rev
Author: sicariusx
Date: 2012-08-09 16:40:09 +0000 (Thu, 09 Aug 2012)
Log Message:
-----------
Erweiterung um den Prowl-Versand.
Modified Paths:
--------------
wiregate/plugin/generic/Logikprozessor.pl
Modified: wiregate/plugin/generic/Logikprozessor.pl
===================================================================
--- wiregate/plugin/generic/Logikprozessor.pl 2012-08-08 20:10:42 UTC (rev 928)
+++ wiregate/plugin/generic/Logikprozessor.pl 2012-08-09 16:40:09 UTC (rev 929)
@@ -27,7 +27,7 @@
# }
#}
-# Tools und vorbesetzte Variablen fue die Logiken
+# Tools und vorbesetzte Variablen fur die Logiken
sub limit { my ($lo,$x,$hi)=@_; return $x<$lo?$lo:($x>$hi?$hi:$x); }
my $date=`/bin/date +"%W,%a,%u,%m,%d,%Y,%j,%H,%M,%X"`;
plugin_log($plugname, "Datum/Uhrzeit konnte nicht lesbar.") unless $date=~/^(.+),(.+),(.+),(.+),(.+),(.+),(.+),(.+),(.+),(.+)$/;
@@ -53,6 +53,7 @@
# Konfigurationsfile einlesen
my $eibd_backend_address='1.1.254';
my %logic=();
+my %settings=();
my $conf="/etc/wiregate/plugin/generic/conf.d/$plugname";
$conf.='.conf' unless $conf=~s/\.pl$/.conf/;
open FILE, "<$conf" || return "no config found";
@@ -121,6 +122,14 @@
next;
}
+ if(defined $logic{$t}{prowl} && ref $logic{$t}{prowl}
+ && ! ((ref $logic{$t}{prowl} eq 'HASH') || (ref $logic{$t}{prowl} eq 'CODE')))
+ {
+ plugin_log($plugname, "Config err: \$logic{$t}{prowl} ist weder Skalar noch "
+ . "HASH-Referenz ({...}) noch CODE-Referenz (sub {...})." . (ref $logic{$t}{prowl}));
+ next;
+ }
+
if(defined $logic{$t}{timer} && defined $logic{$t}{delay})
{
plugin_log($plugname, "Config err: \$logic{$t}: delay und timer festgelegt, ignoriere delay");
@@ -700,6 +709,9 @@
my ($t, $receive, $ga, $in)=@_; # Logikindex $t, Bustelegramm erhalten auf $ga mit Inhalt $in
# $receive muss die direkten Gruppenadressen enthalten - Decodierung von Kuerzeln wird nicht vorgenommen
+ # Debuggingflag gesetzt
+ my $debug = $logic{debug} || $logic{$t}{debug};
+
# als erstes definiere das Input-Array fuer die Logik
my $input=$in;
@@ -729,11 +741,15 @@
# ab hier liegt $input komplett vor, und nun muss die Logik ausgewertet
# und das Resultat auf der Transmit-GA uebertragen werden
my $result=undef;
+ my %prowlContext=();
unless(ref $logic{$t}{translate})
{
# Trivialer Fall: translate enthaelt einen fixen Rueckgabewert
$plugin_info{$plugname.'_'.$t.'_result'}=$result=$logic{$t}{translate};
+ # prowlContext bef\xFCllen
+ $prowlContext{result}=$result;
+ $prowlContext{input}=$input;
}
elsif(!ref $logic{$t}{state})
{
@@ -744,6 +760,11 @@
# Funktionsaufruf, das Ergebnis vom letzten Mal steht in $state
$result=$logic{$t}{translate}($state,$input);
+ # prowlContext bef\xFCllen
+ $prowlContext{result}=$result;
+ $prowlContext{state}=$state;
+ $prowlContext{input}=$input;
+
# Ergebnis des letzten Aufrufs zurueckschreiben
if(defined $result)
{
@@ -769,6 +790,11 @@
# Funktionsaufruf, das Ergebnis vom letzten Mal steht in $state->{result}
$result=$state->{result}=$logic{$t}{translate}($state,$input);
+
+ # prowlContext bef\xFCllen
+ $prowlContext{result}=$result;
+ $prowlContext{state}=$state;
+ $prowlContext{input}=$input;
# Alle dynamischen Variablen wieder nach plugin_info schreiben
# Damit plugin_info nicht durch Konfigurationsfehler vollgemuellt wird,
@@ -787,6 +813,30 @@
}
}
}
+
+ # Prowl-Nachrichten senden, falls definiert
+ if(defined $logic{$t}{prowl})
+ {
+ my %prowlParametersSource;
+ if (ref $logic{$t}{prowl}) {
+ %prowlParametersSource = %{$logic{$t}{prowl}} if (ref $logic{$t}{prowl} eq 'HASH');
+ %prowlParametersSource = $logic{$t}{prowl}(%prowlContext) if (ref $logic{$t}{prowl} eq 'CODE');
+ }
+ else
+ {
+ %prowlParametersSource = ( event => $logic{$t}{prowl} );
+ }
+
+ sendProwl((
+ debug => $debug,
+ priority => $prowlParametersSource{priority} || $settings{prowl}{priority},
+ event => $prowlParametersSource{event} || $settings{prowl}{event},
+ description => $prowlParametersSource{description} || $settings{prowl}{description},
+ application => $prowlParametersSource{application} || $settings{prowl}{application},
+ url => $prowlParametersSource{url} || $settings{prowl}{url},
+ apikey => $prowlParametersSource{url} || $settings{prowl}{apikey}
+ ));
+ }
return $result;
}
@@ -828,3 +878,55 @@
}
}
+sub sendProwl {
+ my (%parameters)=@_;
+ my ($priority, $event, $description, $application, $url, $apikey);
+
+ # Parameter ermitteln
+ $priority = $parameters{priority} || 0;
+ $event = $parameters{event} || '[unbenanntes Ereignis]';
+ $description = $parameters{description} || '';
+ $application = $parameters{application} || 'WireGate KNX';
+ $url = $parameters{url} || '';
+ $apikey = $parameters{apikey} || '';
+
+ use LWP::UserAgent;
+ use URI::Escape;
+
+ # Falls nur ein einziger skalarer API key geliefert wurde, muss dieser in
+ # ein Array geh\xFCllt werden
+ if(ref $apikey ne 'ARRAY') {
+ $apikey = [$apikey];
+ }
+
+ # Nachricht senden an jeden API key
+ for my $singleApikey (@{$apikey}) {
+ # HTTP Request aufsetzen
+ my ($userAgent, $request, $response, $requestURL);
+ $userAgent = LWP::UserAgent->new;
+ $userAgent->agent("WireGatePlugin/1.0");
+
+ $requestURL = sprintf("https://prowl.weks.net/publicapi/add?apikey=%s&application=%s&event=%s&description=%s&priority=%d&url=%s",
+ uri_escape($singleApikey),
+ uri_escape($application),
+ uri_escape($event),
+ uri_escape($description),
+ uri_escape($priority),
+ uri_escape($url));
+
+ $request = HTTP::Request->new(GET => $requestURL);
+ #$request->timeout(5);
+
+ $response = $userAgent->request($request);
+
+ if ($response->is_success) {
+ plugin_log($plugname, "Prowl-Nachricht erfolgreich abgesetzt: $priority, $event, $description, $application") if $parameters{debug};
+ } elsif ($response->code == 401) {
+ plugin_log($plugname, "Prowl-Nachricht nicht abgesetzt: API key g\xFCltig?");
+ } else {
+ plugin_log($plugname, "Prowl-Nachricht nicht abgesetzt: " . $response->content);
+ }
+ }
+ return undef;
+}
+
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sic...@us...> - 2012-08-13 13:16:29
|
Revision: 951
http://openautomation.svn.sourceforge.net/openautomation/?rev=951&view=rev
Author: sicariusx
Date: 2012-08-13 13:16:19 +0000 (Mon, 13 Aug 2012)
Log Message:
-----------
Logikprozessor: Verwendung von prowl subs vereinfacht
Modified Paths:
--------------
wiregate/plugin/generic/Logikprozessor.pl
Modified: wiregate/plugin/generic/Logikprozessor.pl
===================================================================
--- wiregate/plugin/generic/Logikprozessor.pl 2012-08-13 12:55:20 UTC (rev 950)
+++ wiregate/plugin/generic/Logikprozessor.pl 2012-08-13 13:16:19 UTC (rev 951)
@@ -60,6 +60,7 @@
$/=undef;
my $lines = <FILE>;
$lines =~ s/((?:translate|\'translate\'|\"translate\")\s*=>\s*sub\s*\{)/$1 my \(\$state,\$input\)=\@\_;/sg;
+$lines =~ s/((?:prowl|\'prowl\'|\"prowl\")\s*=>\s*sub\s*\{)/$1 my \(\%context\)=\@\_;my \(\$input,\$state,\$result\)=\(\$context{input},\$context{state},\$context{result}\);/sg;
close FILE;
eval($lines);
return "config error: $@" if $@;
@@ -67,7 +68,7 @@
# Aufrufgrund ermitteln
my $event=undef;
if (!$plugin_initflag)
-{ $event='restart'; } # Restart des daemons / Reboot
+{ $event='restart'; } # Restart des daemons / Reboot
elsif ($plugin_info{$plugname.'_lastsaved'} > $plugin_info{$plugname.'_last'})
{ $event='modified'; } # Plugin modifiziert
elsif (%msg) { $event='bus'; } # Bustraffic
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sic...@us...> - 2012-08-27 19:18:39
|
Revision: 986
http://openautomation.svn.sourceforge.net/openautomation/?rev=986&view=rev
Author: sicariusx
Date: 2012-08-27 19:18:33 +0000 (Mon, 27 Aug 2012)
Log Message:
-----------
transmit_changes_only als Parameter erg?\195?\164nzt.
Modified Paths:
--------------
wiregate/plugin/generic/Logikprozessor.pl
Modified: wiregate/plugin/generic/Logikprozessor.pl
===================================================================
--- wiregate/plugin/generic/Logikprozessor.pl 2012-08-25 10:21:27 UTC (rev 985)
+++ wiregate/plugin/generic/Logikprozessor.pl 2012-08-27 19:18:33 UTC (rev 986)
@@ -257,6 +257,7 @@
}
# Aufruf der Logik-Engine
+ my $prevResult=$plugin_info{$plugname.'_'.$t.'_result'};
my $result=execute_logic($t, $receive, $ga, $in);
# war Wiregate der Sender des Telegramms?
@@ -277,6 +278,11 @@
next;
}
+ if($logic{$t}{transmit_changes_only} && ($result eq $prevResult)) {
+ $retval.="$ga:$in -> \$logic{$t}{receive}(Logik) -> $transmit:$result unver\xE4ndert -> nichts zu senden " if $debug;
+ next;
+ }
+
# Falls delay spezifiziert, wird ein "Wecker" gestellt, um in einem spaeteren Aufruf den Wert zu senden
if($logic{$t}{delay})
{
@@ -828,15 +834,17 @@
%prowlParametersSource = ( event => $logic{$t}{prowl} );
}
- sendProwl((
- debug => $debug,
- priority => $prowlParametersSource{priority} || $settings{prowl}{priority},
- event => $prowlParametersSource{event} || $settings{prowl}{event},
- description => $prowlParametersSource{description} || $settings{prowl}{description},
- application => $prowlParametersSource{application} || $settings{prowl}{application},
- url => $prowlParametersSource{url} || $settings{prowl}{url},
- apikey => $prowlParametersSource{url} || $settings{prowl}{apikey}
- ));
+ if (defined %prowlParametersSource) {
+ sendProwl((
+ debug => $debug,
+ priority => $prowlParametersSource{priority} || $settings{prowl}{priority},
+ event => $prowlParametersSource{event} || $settings{prowl}{event},
+ description => $prowlParametersSource{description} || $settings{prowl}{description},
+ application => $prowlParametersSource{application} || $settings{prowl}{application},
+ url => $prowlParametersSource{url} || $settings{prowl}{url},
+ apikey => $prowlParametersSource{url} || $settings{prowl}{apikey}
+ ));
+ }
}
return $result;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dpe...@us...> - 2012-11-10 10:15:05
|
Revision: 1113
http://openautomation.svn.sourceforge.net/openautomation/?rev=1113&view=rev
Author: dpesch01
Date: 2012-11-10 10:14:56 +0000 (Sat, 10 Nov 2012)
Log Message:
-----------
sendProwl um Zugrif auf %settings erweitert
Modified Paths:
--------------
wiregate/plugin/generic/Logikprozessor.pl
Modified: wiregate/plugin/generic/Logikprozessor.pl
===================================================================
--- wiregate/plugin/generic/Logikprozessor.pl 2012-11-10 05:45:58 UTC (rev 1112)
+++ wiregate/plugin/generic/Logikprozessor.pl 2012-11-10 10:14:56 UTC (rev 1113)
@@ -939,14 +939,15 @@
sub sendProwl {
my (%parameters)=@_;
my ($priority, $event, $description, $application, $url, $apikey);
-
+
# Parameter ermitteln
- $priority = $parameters{priority} || 0;
- $event = $parameters{event} || '[unbenanntes Ereignis]';
- $description = $parameters{description} || '';
- $application = $parameters{application} || 'WireGate KNX';
- $url = $parameters{url} || '';
- $apikey = $parameters{apikey} || '';
+ # dom, 2012-11-05: $settings auch hier auswerten. Damit kann sendProwl() direkt aus der Logik aufgerufen werden!
+ $priority = $parameters{priority} || $settings{prowl}{priority} || 0;
+ $event = $parameters{event} || $settings{prowl}{event} || '[unbenanntes Ereignis]';
+ $description = $parameters{description} || $settings{prowl}{description} || '';
+ $application = $parameters{application} || $settings{prowl}{application} || 'WireGate KNX';
+ $url = $parameters{url} || $settings{prowl}{url} || '';
+ $apikey = $parameters{apikey} || $settings{prowl}{apikey} || '';
use LWP::UserAgent;
use URI::Escape;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dpe...@us...> - 2012-11-10 17:35:51
|
Revision: 1119
http://openautomation.svn.sourceforge.net/openautomation/?rev=1119&view=rev
Author: dpesch01
Date: 2012-11-10 17:35:45 +0000 (Sat, 10 Nov 2012)
Log Message:
-----------
Fixes: bei allen Aufrufen von groupaddress() die Klammern hinzugef?\195?\188gt (Perl meldete sonst syntax Fehler), translate ga nur noch anmelden, falls translate definiert wurde
Modified Paths:
--------------
wiregate/plugin/generic/Logikprozessor.pl
Modified: wiregate/plugin/generic/Logikprozessor.pl
===================================================================
--- wiregate/plugin/generic/Logikprozessor.pl 2012-11-10 13:46:40 UTC (rev 1118)
+++ wiregate/plugin/generic/Logikprozessor.pl 2012-11-10 17:35:45 UTC (rev 1119)
@@ -142,9 +142,12 @@
}
# transmit-Adresse abonnieren
- my $transmit=groupaddress $logic{$t}{transmit};
- $plugin_subscribe{$transmit}{$plugname}=1;
- plugin_log($plugname, "\$logic{$t}: Transmit-GA $transmit nicht in %eibgaconf gefunden") if $debug && !exists $eibgaconf{$transmit};
+ if (defined $logic{$t}{transmit})
+ {
+ my $transmit=groupaddress($logic{$t}{transmit});
+ $plugin_subscribe{$transmit}{$plugname}=1;
+ plugin_log($plugname, "\$logic{$t}: Transmit-GA $transmit nicht in %eibgaconf gefunden") if $debug && !exists $eibgaconf{$transmit};
+ }
# Zaehlen und Logeintrag
$count++;
@@ -157,7 +160,7 @@
}
# Nun alle receive-Adressen abonnieren (eine oder mehrere)
- my $receive=groupaddress $logic{$t}{receive};
+ my $receive=groupaddress($logic{$t}{receive});
next unless $receive;
@@ -182,7 +185,7 @@
# Berechnung und Senden beim Startup des Logikprozessors
my $result=execute_logic($t, undef, undef);
- my $ga=groupaddress $logic{$t}{transmit};
+ my $ga=groupaddress($logic{$t}{transmit});
plugin_log($plugname, "\$logic{$t}{transmit}(Logik) -> $ga:$result") if $debug;
knx_write($ga, $result); # DPT aus eibga.conf
}
@@ -752,8 +755,8 @@
my $input=$in;
# alle receive-GAs
- my $receive=groupaddress $logic{$t}{receive};
- my $fetch=groupaddress $logic{$t}{fetch};
+ my $receive=groupaddress($logic{$t}{receive});
+ my $fetch=groupaddress($logic{$t}{fetch});
if(defined $fetch)
{
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pf...@us...> - 2012-11-10 22:19:33
|
Revision: 1122
http://openautomation.svn.sourceforge.net/openautomation/?rev=1122&view=rev
Author: pfry
Date: 2012-11-10 22:19:24 +0000 (Sat, 10 Nov 2012)
Log Message:
-----------
Konfliktaufloesung
Modified Paths:
--------------
wiregate/plugin/generic/Logikprozessor.pl
Modified: wiregate/plugin/generic/Logikprozessor.pl
===================================================================
--- wiregate/plugin/generic/Logikprozessor.pl 2012-11-10 21:27:49 UTC (rev 1121)
+++ wiregate/plugin/generic/Logikprozessor.pl 2012-11-10 22:19:24 UTC (rev 1122)
@@ -30,7 +30,7 @@
# Tools und vorbesetzte Variablen fuer die Logiken
sub limit { my ($lo,$x,$hi)=@_; return $x<$lo?$lo:($x>$hi?$hi:$x); }
my $date=`/bin/date +"%W,%a,%u,%m,%d,%Y,%j,%H,%M,%T"`;
-plugin_log($plugname, "Datum/Uhrzeit nicht lesbar: '$date'") unless $date=~/^(.+),(.+),(.+),(.+),(.+),(.+),(.+),(.+),(.+),(.+)$/;
+plugin_log($plugname, "Datum/Uhrzeit nicht lesbar: '$date'.") unless $date=~/^(.+),(.+),(.+),(.+),(.+),(.+),(.+),(.+),(.+),(.+)$/;
my $calendar_week=$1;
my $day_of_week=$2;
my $day_of_week_no=$3;
@@ -142,12 +142,9 @@
}
# transmit-Adresse abonnieren
- if (defined $logic{$t}{transmit})
- {
- my $transmit=groupaddress($logic{$t}{transmit});
- $plugin_subscribe{$transmit}{$plugname}=1;
- plugin_log($plugname, "\$logic{$t}: Transmit-GA $transmit nicht in %eibgaconf gefunden") if $debug && !exists $eibgaconf{$transmit};
- }
+ my $transmit=groupaddress $logic{$t}{transmit};
+ $plugin_subscribe{$transmit}{$plugname}=1;
+ plugin_log($plugname, "\$logic{$t}: Transmit-GA $transmit nicht in %eibgaconf gefunden") if $debug && !exists $eibgaconf{$transmit};
# Zaehlen und Logeintrag
$count++;
@@ -160,7 +157,7 @@
}
# Nun alle receive-Adressen abonnieren (eine oder mehrere)
- my $receive=groupaddress($logic{$t}{receive});
+ my $receive=groupaddress $logic{$t}{receive};
next unless $receive;
@@ -185,12 +182,15 @@
# Berechnung und Senden beim Startup des Logikprozessors
my $result=execute_logic($t, undef, undef);
- my $ga=groupaddress($logic{$t}{transmit});
- plugin_log($plugname, "\$logic{$t}{transmit}(Logik) -> $ga:$result") if $debug;
- knx_write($ga, $result); # DPT aus eibga.conf
+ if(defined $result)
+ {
+ my $ga=groupaddress $logic{$t}{transmit};
+ knx_write($ga, $result); # DPT aus eibga.conf
+ plugin_log($plugname, "\$logic{$t}{transmit}(Logik) -> $ga:$result") if $debug;
+ }
}
- $retval.=$count." initialisiert";
+ $retval.=$count." initialisiert, ";
}
if($event=~/bus/)
@@ -247,8 +247,11 @@
$result=execute_logic($t, undef, undef)
unless defined $logic{$t}{recalc_on_request} && $logic{$t}{recalc_on_request}==0;
- $retval.="$ga:Lesetelegramm -> \$logic{$t}{transmit}(Logik) -> $ga:$result gesendet. " if $debug && defined $result;
- knx_write($ga, $result, undef, 0x40) if defined $result; # response, DPT aus eibga.conf
+ if(defined $result)
+ {
+ $retval.="$ga:Lesetelegramm -> \$logic{$t}{transmit}(Logik) -> $ga:$result gesendet. " if $debug;
+ knx_write($ga, $result, undef, 0x40) if defined $result; # response, DPT aus eibga.conf
+ }
}
else
{
@@ -321,8 +324,11 @@
}
else
{
- knx_write($transmit, $result);
- $retval.="$msg{src} $ga:$in -> \$logic{$t}{receive}(Logik) -> $transmit:$result gesendet " if $debug;
+ if(defined $result)
+ {
+ knx_write($transmit, $result);
+ $retval.="$msg{src} $ga:$in -> \$logic{$t}{receive}(Logik) -> $transmit:$result gesendet " if $debug;
+ }
# Cool-Periode starten
$plugin_info{$plugname.'__'.$t.'_cool'}=time()+$logic{$t}{cool} if defined $logic{$t}{cool};
@@ -755,8 +761,8 @@
my $input=$in;
# alle receive-GAs
- my $receive=groupaddress($logic{$t}{receive});
- my $fetch=groupaddress($logic{$t}{fetch});
+ my $receive=groupaddress $logic{$t}{receive};
+ my $fetch=groupaddress $logic{$t}{fetch};
if(defined $fetch)
{
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dpe...@us...> - 2012-11-11 10:44:16
|
Revision: 1123
http://openautomation.svn.sourceforge.net/openautomation/?rev=1123&view=rev
Author: dpesch01
Date: 2012-11-11 10:44:10 +0000 (Sun, 11 Nov 2012)
Log Message:
-----------
forward deklaration f?\195?\188r groupaddress als alternative zur Klammerschreibweise + defined Pr?\195?\188fung f?\195?\188r transmit
Modified Paths:
--------------
wiregate/plugin/generic/Logikprozessor.pl
Modified: wiregate/plugin/generic/Logikprozessor.pl
===================================================================
--- wiregate/plugin/generic/Logikprozessor.pl 2012-11-10 22:19:24 UTC (rev 1122)
+++ wiregate/plugin/generic/Logikprozessor.pl 2012-11-11 10:44:10 UTC (rev 1123)
@@ -50,6 +50,8 @@
my $systemtime=time();
my $date=sprintf("%02d/%02d",$month,$day_of_month);
+sub groupaddress;
+
# Konfigurationsfile einlesen
my $eibd_backend_address='1.1.254';
my %logic=();
@@ -142,9 +144,12 @@
}
# transmit-Adresse abonnieren
- my $transmit=groupaddress $logic{$t}{transmit};
- $plugin_subscribe{$transmit}{$plugname}=1;
- plugin_log($plugname, "\$logic{$t}: Transmit-GA $transmit nicht in %eibgaconf gefunden") if $debug && !exists $eibgaconf{$transmit};
+ if (defined($logic{$t}{transmit}))
+ {
+ my $transmit=groupaddress $logic{$t}{transmit};
+ $plugin_subscribe{$transmit}{$plugname}=1;
+ plugin_log($plugname, "\$logic{$t}: Transmit-GA $transmit nicht in %eibgaconf gefunden") if $debug && !exists $eibgaconf{$transmit};
+ }
# Zaehlen und Logeintrag
$count++;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|