|
From: <pf...@us...> - 2012-10-04 07:59:13
|
Revision: 1027
http://openautomation.svn.sourceforge.net/openautomation/?rev=1027&view=rev
Author: pfry
Date: 2012-10-04 07:59:06 +0000 (Thu, 04 Oct 2012)
Log Message:
-----------
transmit_only_on_request im conf-File korrigiert und kommentiert
Neue Optionen transmit_on_startup (programmiert) und transmit_changes_only (in conf erwaehnt).
Modified Paths:
--------------
wiregate/plugin/generic/Logikprozessor.pl
wiregate/plugin/generic/conf.d/Logikprozessor.conf
Modified: wiregate/plugin/generic/Logikprozessor.pl
===================================================================
--- wiregate/plugin/generic/Logikprozessor.pl 2012-10-03 17:58:02 UTC (rev 1026)
+++ wiregate/plugin/generic/Logikprozessor.pl 2012-10-04 07:59:06 UTC (rev 1027)
@@ -170,6 +170,21 @@
plugin_log($plugname, "\$logic{$t}: Receive-GA $rec nicht in %eibgaconf gefunden") if $debug && !exists $eibgaconf{$rec};
}
}
+
+ if($logic{$t}{transmit_on_startup})
+ {
+ # Berechnung und Senden beim Startup des Logikprozessors
+ # Vorsicht: Logiken mit dieser Bedingung koennen durch knx_read-Requests den Logikprozessor deutlich (!)
+ # ueber die erlaubten 10s Ausfuehrungszeit eines Wiregate-Plugins bringen.
+ # In diesem Fall wird die Initialisierung des Logikprozessors unvollstaendig abgebrochen!
+ # Empfehlung: nur solche Logiken mit transmit_on_startup versehen, deren Read-Requests auf schnell
+ # antwortende externe KNX-Geraete gehen oder sowieso durch den EIB-Cache beantwortet werden,
+ # also bspw. nicht auf andere Plugins warten.
+ my $result=execute_logic($t, $receive, undef, undef);
+ my $ga=groupaddress($logic{$t}{transmit});
+ $retval.="\$logic{$t}{transmit}(Logik) -> $ga:$result " if $debug;
+ knx_write($ga, $result); # DPT aus eibga.conf
+ }
}
$retval.=$count." initialisiert";
@@ -214,7 +229,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 der Transmit-Adresse
if($transmit_ga)
{
# Ein Read-Request auf einer Transmit-GA wird mit dem letzten Ergebnis beantwortet
@@ -222,11 +237,21 @@
if($msg{apci} eq "A_GroupValue_Read")
{
my $result=$plugin_info{$plugname.'_'.$t.'_result'};
+
if(defined $result)
{
$retval.="$ga:Lesetelegramm -> \$logic{$t}{transmit}(memory) -> $ga:$result gesendet. " if $debug;
knx_write($ga, $result, undef, 0x40); # response, DPT aus eibga.conf
}
+ else
+ {
+ # falls gespeichertes Ergebnis ungueltig, neuer Berechnungsversuch
+ $result=execute_logic($t, groupaddress($logic{$t}{receive}), undef, undef);
+
+ $retval.="$ga:Lesetelegramm -> \$logic{$t}{transmit}(Logik) -> $ga:$result gesendet. " if $debug;
+ knx_write($ga, $result, undef, 0x40); # response, DPT aus eibga.conf
+ }
+
next;
}
elsif(!$receive_ga) # Receive geht vor - bei Timer-Logiken ist receive_ga immer 0
@@ -716,8 +741,8 @@
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};
+ # Debuggingflag gesetzt
+ my $debug = $logic{debug} || $logic{$t}{debug};
# als erstes definiere das Input-Array fuer die Logik
my $input=$in;
Modified: wiregate/plugin/generic/conf.d/Logikprozessor.conf
===================================================================
--- wiregate/plugin/generic/conf.d/Logikprozessor.conf 2012-10-03 17:58:02 UTC (rev 1026)
+++ wiregate/plugin/generic/conf.d/Logikprozessor.conf 2012-10-04 07:59:06 UTC (rev 1027)
@@ -58,8 +58,10 @@
# 5. Hier eine Logik, die den Input bei Eintreffen mit 2 multipliziert, das Resultat aber nur speichert und erst
# spaeter auf ein explizites Lesetelegramm hin auf der transmit-Adresse sendet.
- req => { receive=>'1/2/9', transmit=>'1/2/9', transmit_on_request=>1, translate => sub { 2*$input; }, },
+ req => { receive=>'1/2/9', transmit=>'1/2/9', transmit_only_on_request=>1, translate => sub { 2*$input; }, },
+ # Uebrigens gibt es neben transmit_only_on_request auch transmit_on_startup und transmit_changes_only.
+
# 6. Eine Logik, die einem Lichtanschalten gleich einen Dimmwert hinterherfeuert, und zwar tags und nachts einen verschiedenen:
dim => { receive=>'2/2/9', transmit=>'2/3/9', translate => sub { return unless $input; $day ? 80 : 3; } },
# Die Variablen $day_of_week (Mo...So), $calendar_week, $day_of_month (01-31), $month (01-12), $day_of_year (1-366),
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|