|
From: <e....@us...> - 2011-07-09 07:43:24
|
Revision: 384
http://openautomation.svn.sourceforge.net/openautomation/?rev=384&view=rev
Author: e.max
Date: 2011-07-09 07:43:17 +0000 (Sat, 09 Jul 2011)
Log Message:
-----------
Schaltuhr, emax' Variante, Version 1
Added Paths:
-----------
wiregate/plugin/generic/emx_uhr.pl
Added: wiregate/plugin/generic/emx_uhr.pl
===================================================================
--- wiregate/plugin/generic/emx_uhr.pl (rev 0)
+++ wiregate/plugin/generic/emx_uhr.pl 2011-07-09 07:43:17 UTC (rev 384)
@@ -0,0 +1,123 @@
+# Plugin zum Zeitabhängigen Schalten von GA's (Schaltuhr)
+# License: GPL (v2)
+# version von emax
+# Version 1, 8.7.2011
+# Copyright: Edgar (emax) Hermanns, emax at berlios Punkt de
+
+####################
+###Einstellungen:###
+####################
+
+my @Zeiten =
+ (
+ { Name=>'Test', Aktiv=>'1', Std=>undef, Min=>undef, MTag=>undef, Mon=>undef, WTag=>undef, Wert=>'1', DPT=>'1', GA=>'1/1/30', Log=>'1' },
+ { Name=>'Bewaesserung', Aktiv=>'1', Std=>'7', Min=> '0', MTag=>'3', Mon=>'4-9', WTag=>'1-5', Wert=>'1', DPT=>'1', GA=>'1/1/30' },
+ { Name=>'AussenlichtEin', Aktiv=>'1', Std=>'19', Min=>'30', MTag=>'4', Mon=>undef, WTag=>'1,3,5', Wert=>'1', DPT=>'1', GA=>'1/2/40' },
+ { Name=>'AussenlichtAus', Aktiv=>'1', Std=>'7', Min=> '0', MTag=>undef, Mon=>undef, WTag=>'2,4,6', Wert=>'0', DPT=>'1', GA=>'1/2/40' }
+ );
+
+######################
+##ENDE Einstellungen##
+######################
+
+use POSIX;
+
+############################################################
+# Eigenen Aufruf-Zyklus setzen
+# Das script verarbeitet keine Sekunden, weshalb die kleinste
+# Granulaität ohne zusätzlioche Statusverarbeitung eine Minute ist.
+############################################################
+my $cycleTime = 60;
+
+############################################################
+# definiert die Sekunde, ab der neu synchronisiert wird #
+############################################################
+my $slotEnd = 10;
+
+############################################################
+# Die Versionsnummer ist Teil des plugin_info hashes und dient
+# dazu, dass das script definierte Anfangskonditionen findet
+# auch ohne alles neu starten zu müssen. Die Nummer
+# einfach nach einer Änderung des scripts um eins erhöhen.
+############################################################
+my $version = 1;
+
+###################################################################
+# Auswertung von Bereichs und Listenvergleichen #
+# Prüft, ob ein Wert zu einer Liste oder in einen Bereich passt #
+###################################################################
+sub matches
+{
+ my ($value, $def) = @_; # Zu prüfender Wert, Bereichsdefinition
+ (!$def) and return 1;
+ foreach (split(/,/, $def))
+ {
+ s/\s+//g;
+ (/^$value$/) and return 1;
+ (/^([\d]+)-(\d+)/) and return ($value >= $1 && $value <= $2);
+ }
+ return 0;
+}
+
+##########
+# main() #
+##########
+
+# kontrollierte Startkonditionen setzen
+if (!defined $plugin_info{$plugname.$version.'firstRun'})
+{
+ $plugin_info{$plugname.$version.'firstRun'} = 1;
+ plugin_log($plugname, "Started plugin version $version, first have to sync with time slot.");
+ # die Anpassungs der Zyklyzweit erfolgt dynamisch, s.u.
+ $plugin_info{$plugname.'_cycle'} = 1;
+}
+
+my ($curSec,$curMin,$curStu,$curMTag,$curMon,$curJahr,$curWTag,$curJTag,$isdst) = localtime(time);
+$curJahr += 1900;
+
+#######################################################################
+# Es ist sinnvoll, dafür zu sorgen, dass die Startzeit dieses Plugins
+# mit der Zeit nicht "abdriftet", da sonst über lange Laufzeiten ein
+# Minutenüberlauf entstehen könnte, und so Ereignisse verloren gingen.
+# Aus diesem Grund prüft das script, ob es innerhalb der ersten 10 Sekunden
+# einer Minute läuft, Wenn das nicht der Fall ist, wird so lange eine
+# verkürzte Zykluszeit verwendet, bis die Ausführung wieder im vorgesehenen
+# Zeitraum abläuft.
+#
+# Bei der Erstausführung des Plugins nimmt dieses erst nach Erreichen
+# des vorgesehenen Zeitfensters die eigentliche Arbeit auf, weil der
+# Abstand zwischen zwei sonst zu klein werden könnte.
+#######################################################################
+
+if ($curSec >= $slotEnd)
+{
+ if ($plugin_info{$plugname.'_cycle'} != 1)
+ {
+ plugin_log($plugname, "lost time-slot due to time drift, reducing cycle time to 1 second");
+ $plugin_info{$plugname.'_cycle'} = 1;
+ }
+
+ # bei Erstausführung auf Zeitfenster warten
+ ($plugin_info{$plugname.$version.'firstRun'} == 1) and return;
+}
+
+# prüfen, ob in dieser Minute bereits ausgeführt
+(defined $plugin_info{$plugname.$version.'lastMinute'} && $plugin_info{$plugname.$version.'lastMinute'} == $curMin) and return;
+
+foreach my $Zeit (@Zeiten)
+{
+ (defined $Zeit->{Aktiv} && !$Zeit->{Aktiv}) and next;
+
+ (defined $Zeit->{Min} && !&matches($curMin, $Zeit->{Min})) and next;
+ (defined $Zeit->{Std} && !&matches($curStu, $Zeit->{Std})) and next;
+ (defined $Zeit->{MTag} && !&matches($curMTag, $Zeit->{MTag})) and next;
+ (defined $Zeit->{Mon} && !&matches($curMon, $Zeit->{Mon})) and next;
+ (defined $Zeit->{WTag} && !&matches($curWTag, $Zeit->{WTag})) and next;
+ (defined $Zeit->{Log} && $Zeit->{Log} eq '1') and
+ plugin_log($plugname, "Sending $Zeit->{Name}, GA[$Zeit->{GA}], Value[$Zeit->{Wert}]");
+
+ knx_write($Zeit->{GA},$Zeit->{Wert}, $Zeit->{DPT});
+}
+
+$plugin_info{$plugname.$version.'lastMinute'} = $curMin;
+$plugin_info{$plugname.$version.'firstRun'} = 0;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <e....@us...> - 2011-08-07 08:55:37
|
Revision: 395
http://openautomation.svn.sourceforge.net/openautomation/?rev=395&view=rev
Author: e.max
Date: 2011-08-07 08:55:30 +0000 (Sun, 07 Aug 2011)
Log Message:
-----------
umlaute durch ae/ue/oe ersetzt (utf-8 problem)
Modified Paths:
--------------
wiregate/plugin/generic/emx_uhr.pl
Property Changed:
----------------
wiregate/plugin/generic/emx_uhr.pl
Modified: wiregate/plugin/generic/emx_uhr.pl
===================================================================
--- wiregate/plugin/generic/emx_uhr.pl 2011-08-06 12:32:32 UTC (rev 394)
+++ wiregate/plugin/generic/emx_uhr.pl 2011-08-07 08:55:30 UTC (rev 395)
@@ -1,12 +1,20 @@
-# Plugin zum Zeitabhängigen Schalten von GA's (Schaltuhr)
+# Plugin zum Zeitabhaengigen Schalten von GA's (Schaltuhr)
# License: GPL (v2)
# version von emax
-# Version 1, 8.7.2011
+# $Id$
# Copyright: Edgar (emax) Hermanns, emax at berlios Punkt de
+#--------------------------------------------------------------------
+# CHANGE LOG:
+# ## who yyyymmdd bug# description
+# -- --- -------- ----- ----------------------------------------
+# . ... ........ ..... vorlage
+# 1 edh 20110807 ----- wg. utf-8 Zirkus Umlaute in ae/ue/oe geaendert
+# 0 edh 20110708 ----- erste Version
+
-####################
-###Einstellungen:###
-####################
+#---------------
+# Einstellungen:
+#---------------
my @Zeiten =
(
@@ -16,39 +24,39 @@
{ Name=>'AussenlichtAus', Aktiv=>'1', Std=>'7', Min=> '0', MTag=>undef, Mon=>undef, WTag=>'2,4,6', Wert=>'0', DPT=>'1', GA=>'1/2/40' }
);
-######################
-##ENDE Einstellungen##
-######################
+#-------------------
+# ENDE Einstellungen
+#-------------------
use POSIX;
-############################################################
+#--------------------------------------------------------------------
# Eigenen Aufruf-Zyklus setzen
# Das script verarbeitet keine Sekunden, weshalb die kleinste
-# Granulaität ohne zusätzlioche Statusverarbeitung eine Minute ist.
-############################################################
+# Granulaitaet ohne zusaetzlioche Statusverarbeitung eine Minute ist.
+#--------------------------------------------------------------------
my $cycleTime = 60;
-############################################################
-# definiert die Sekunde, ab der neu synchronisiert wird #
-############################################################
+#--------------------------------------------------------------------
+# definiert die Sekunde, ab der neu synchronisiert wird
+#--------------------------------------------------------------------
my $slotEnd = 10;
-############################################################
+#--------------------------------------------------------------------
# Die Versionsnummer ist Teil des plugin_info hashes und dient
# dazu, dass das script definierte Anfangskonditionen findet
-# auch ohne alles neu starten zu müssen. Die Nummer
-# einfach nach einer Änderung des scripts um eins erhöhen.
-############################################################
+# auch ohne alles neu starten zu muessen. Die Nummer
+# einfach nach einer AEnderung des scripts um eins erhoehen.
+#--------------------------------------------------------------------
my $version = 1;
-###################################################################
-# Auswertung von Bereichs und Listenvergleichen #
-# Prüft, ob ein Wert zu einer Liste oder in einen Bereich passt #
-###################################################################
+#--------------------------------------------------------------------
+# Auswertung von Bereichs und Listenvergleichen
+# Prueft, ob ein Wert zu einer Liste oder in einen Bereich passt
+#--------------------------------------------------------------------
sub matches
{
- my ($value, $def) = @_; # Zu prüfender Wert, Bereichsdefinition
+ my ($value, $def) = @_; # Zu pruefender Wert, Bereichsdefinition
(!$def) and return 1;
foreach (split(/,/, $def))
{
@@ -59,9 +67,9 @@
return 0;
}
-##########
-# main() #
-##########
+#====================================================================
+# main()
+#====================================================================
# kontrollierte Startkonditionen setzen
if (!defined $plugin_info{$plugname.$version.'firstRun'})
@@ -75,19 +83,19 @@
my ($curSec,$curMin,$curStu,$curMTag,$curMon,$curJahr,$curWTag,$curJTag,$isdst) = localtime(time);
$curJahr += 1900;
-#######################################################################
-# Es ist sinnvoll, dafür zu sorgen, dass die Startzeit dieses Plugins
-# mit der Zeit nicht "abdriftet", da sonst über lange Laufzeiten ein
-# Minutenüberlauf entstehen könnte, und so Ereignisse verloren gingen.
-# Aus diesem Grund prüft das script, ob es innerhalb der ersten 10 Sekunden
-# einer Minute läuft, Wenn das nicht der Fall ist, wird so lange eine
-# verkürzte Zykluszeit verwendet, bis die Ausführung wieder im vorgesehenen
-# Zeitraum abläuft.
+#--------------------------------------------------------------------
+# Es ist sinnvoll, dafuer zu sorgen, dass die Startzeit dieses Plugins
+# mit der Zeit nicht "abdriftet", da sonst ueber lange Laufzeiten ein
+# Minutenueberlauf entstehen koennte, und so Ereignisse verloren gingen.
+# Aus diesem Grund prueft das script, ob es innerhalb der ersten 10 Sekunden
+# einer Minute laeuft, Wenn das nicht der Fall ist, wird so lange eine
+# verkuerzte Zykluszeit verwendet, bis die Ausfuehrung wieder im vorgesehenen
+# Zeitraum ablaeuft.
#
-# Bei der Erstausführung des Plugins nimmt dieses erst nach Erreichen
+# Bei der Erstausfuehrung des Plugins nimmt dieses erst nach Erreichen
# des vorgesehenen Zeitfensters die eigentliche Arbeit auf, weil der
-# Abstand zwischen zwei sonst zu klein werden könnte.
-#######################################################################
+# Abstand zwischen zwei sonst zu klein werden koennte.
+#--------------------------------------------------------------------
if ($curSec >= $slotEnd)
{
@@ -97,11 +105,11 @@
$plugin_info{$plugname.'_cycle'} = 1;
}
- # bei Erstausführung auf Zeitfenster warten
+ # bei Erstausfuehrung auf Zeitfenster warten
($plugin_info{$plugname.$version.'firstRun'} == 1) and return;
}
-# prüfen, ob in dieser Minute bereits ausgeführt
+# pruefen, ob in dieser Minute bereits ausgefuehrt
(defined $plugin_info{$plugname.$version.'lastMinute'} && $plugin_info{$plugname.$version.'lastMinute'} == $curMin) and return;
foreach my $Zeit (@Zeiten)
Property changes on: wiregate/plugin/generic/emx_uhr.pl
___________________________________________________________________
Added: svn::keywords
+ Id
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <e....@us...> - 2011-08-07 08:59:43
|
Revision: 396
http://openautomation.svn.sourceforge.net/openautomation/?rev=396&view=rev
Author: e.max
Date: 2011-08-07 08:59:37 +0000 (Sun, 07 Aug 2011)
Log Message:
-----------
svn property Id gesetzt
Modified Paths:
--------------
wiregate/plugin/generic/emx_uhr.pl
Modified: wiregate/plugin/generic/emx_uhr.pl
===================================================================
--- wiregate/plugin/generic/emx_uhr.pl 2011-08-07 08:55:30 UTC (rev 395)
+++ wiregate/plugin/generic/emx_uhr.pl 2011-08-07 08:59:37 UTC (rev 396)
@@ -1,7 +1,9 @@
# Plugin zum Zeitabhaengigen Schalten von GA's (Schaltuhr)
# License: GPL (v2)
# version von emax
+#
# $Id$
+#
# Copyright: Edgar (emax) Hermanns, emax at berlios Punkt de
#--------------------------------------------------------------------
# CHANGE LOG:
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <e....@us...> - 2011-09-10 08:29:12
|
Revision: 414
http://openautomation.svn.sourceforge.net/openautomation/?rev=414&view=rev
Author: e.max
Date: 2011-09-10 08:29:05 +0000 (Sat, 10 Sep 2011)
Log Message:
-----------
Bug im Vergleich in 'sub matches' gefixt: Da dieser Vergleich zur Vermeidung von Laufzeitfehlern auf Alphabasis gemacht wird, wurden numerische Werte mit f?\195?\188hrenden Nullen nicht korrekt verglichen, wenn der Vergleichswert auf der anderen Seite keine fuehrenden Nullen hatte.
Modified Paths:
--------------
wiregate/plugin/generic/emx_uhr.pl
Modified: wiregate/plugin/generic/emx_uhr.pl
===================================================================
--- wiregate/plugin/generic/emx_uhr.pl 2011-09-07 18:11:25 UTC (rev 413)
+++ wiregate/plugin/generic/emx_uhr.pl 2011-09-10 08:29:05 UTC (rev 414)
@@ -10,6 +10,7 @@
# ## who yyyymmdd bug# description
# -- --- -------- ----- ----------------------------------------
# . ... ........ ..... vorlage
+# 2 edh 20110910 ----- Bug im Wertevergleich in 'matches()' gefixt
# 1 edh 20110807 ----- wg. utf-8 Zirkus Umlaute in ae/ue/oe geaendert
# 0 edh 20110708 ----- erste Version
@@ -58,12 +59,13 @@
#--------------------------------------------------------------------
sub matches
{
- my ($value, $def) = @_; # Zu pruefender Wert, Bereichsdefinition
+ my ($value, $def) = @_; # Zu pruefender Wert, Bereichsdefinition
(!$def) and return 1;
foreach (split(/,/, $def))
{
- s/\s+//g;
- (/^$value$/) and return 1;
+ s/\s+//g; # Blanks entfernen
+ s/^0+//g; # fuehrende Nullen entfernen
+ (/^$value$/) and return 1; # Alpha-Vergleich (vermeidet Laufzeitfehler)
(/^([\d]+)-(\d+)/) and return ($value >= $1 && $value <= $2);
}
return 0;
@@ -96,7 +98,7 @@
#
# Bei der Erstausfuehrung des Plugins nimmt dieses erst nach Erreichen
# des vorgesehenen Zeitfensters die eigentliche Arbeit auf, weil der
-# Abstand zwischen zwei sonst zu klein werden koennte.
+# Abstand zwischen zwei Triggern sonst zu klein werden koennte.
#--------------------------------------------------------------------
if ($curSec >= $slotEnd)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <e....@us...> - 2011-09-10 15:15:29
|
Revision: 415
http://openautomation.svn.sourceforge.net/openautomation/?rev=415&view=rev
Author: e.max
Date: 2011-09-10 15:15:22 +0000 (Sat, 10 Sep 2011)
Log Message:
-----------
Zykluszeit wurde nicht korrekt verarbeitet, Zyklus-Anpassung nun exakt in Sekunden, dadurch keine 1-Sekunden leer-Zyklen mehr, weniger Systemlast. Alte plugin_info eintr?\195?\164ge werden bei neuer Versionsnummer nun bereinigt.
Modified Paths:
--------------
wiregate/plugin/generic/emx_uhr.pl
Modified: wiregate/plugin/generic/emx_uhr.pl
===================================================================
--- wiregate/plugin/generic/emx_uhr.pl 2011-09-10 08:29:05 UTC (rev 414)
+++ wiregate/plugin/generic/emx_uhr.pl 2011-09-10 15:15:22 UTC (rev 415)
@@ -1,6 +1,10 @@
# Plugin zum Zeitabhaengigen Schalten von GA's (Schaltuhr)
# License: GPL (v2)
# version von emax
+
+# Plugin zum Zeitabhaengigen Schalten von GA's (Schaltuhr)
+# License: GPL (v2)
+# version von emax
#
# $Id$
#
@@ -10,111 +14,125 @@
# ## who yyyymmdd bug# description
# -- --- -------- ----- ----------------------------------------
# . ... ........ ..... vorlage
+# 3 edh 20110910 ..... Zykluszeit wurde nicht korrekt verarbeitet,
+# Zyklus-Anpassung nun exakt in Sekunden,
+# - dadurch keine 1-Sekunden leer-Zyklen mehr,
+# - weniger Systemlast.
+# Alte plugin_info einträge werden bei neuer
+# versionsnummer nun bereinigt.
# 2 edh 20110910 ----- Bug im Wertevergleich in 'matches()' gefixt
# 1 edh 20110807 ----- wg. utf-8 Zirkus Umlaute in ae/ue/oe geaendert
# 0 edh 20110708 ----- erste Version
-
-#---------------
-# Einstellungen:
-#---------------
+#-----------------------------------------------------------------------------
+# Einstellungen
+#-----------------------------------------------------------------------------
+
my @Zeiten =
- (
- { Name=>'Test', Aktiv=>'1', Std=>undef, Min=>undef, MTag=>undef, Mon=>undef, WTag=>undef, Wert=>'1', DPT=>'1', GA=>'1/1/30', Log=>'1' },
- { Name=>'Bewaesserung', Aktiv=>'1', Std=>'7', Min=> '0', MTag=>'3', Mon=>'4-9', WTag=>'1-5', Wert=>'1', DPT=>'1', GA=>'1/1/30' },
- { Name=>'AussenlichtEin', Aktiv=>'1', Std=>'19', Min=>'30', MTag=>'4', Mon=>undef, WTag=>'1,3,5', Wert=>'1', DPT=>'1', GA=>'1/2/40' },
- { Name=>'AussenlichtAus', Aktiv=>'1', Std=>'7', Min=> '0', MTag=>undef, Mon=>undef, WTag=>'2,4,6', Wert=>'0', DPT=>'1', GA=>'1/2/40' }
+ (
+ # Beispiele
+ { Name=>'Test', Aktiv=>'0', Std=>undef, Min=>undef, MTag=>undef, Mon=>undef, WTag=>undef, Wert=>'1', DPT=>'1', GA=>'1/1/30', Log=>'1' },
+ { Name=>'Bewaesserung', Aktiv=>'0', Std=>'7', Min=> '0', MTag=>'3', Mon=>'4-9', WTag=>'1-5', Wert=>'1', DPT=>'1', GA=>'1/1/30' },
+ { Name=>'AussenlichtEin', Aktiv=>'0', Std=>'19', Min=>'30', MTag=>'4', Mon=>undef, WTag=>'1,3,5', Wert=>'1', DPT=>'1', GA=>'1/2/40' },
+ { Name=>'AussenlichtAus', Aktiv=>'0', Std=>'7', Min=> '0', MTag=>undef, Mon=>undef, WTag=>'2,4,6', Wert=>'0', DPT=>'1', GA=>'1/2/40' }
);
-#-------------------
-# ENDE Einstellungen
-#-------------------
+#-----------------------------------------------------------------------------
+# ENDE Einstellungen
+#-----------------------------------------------------------------------------
use POSIX;
-#--------------------------------------------------------------------
+#-----------------------------------------------------------------------------
# Eigenen Aufruf-Zyklus setzen
# Das script verarbeitet keine Sekunden, weshalb die kleinste
# Granulaitaet ohne zusaetzlioche Statusverarbeitung eine Minute ist.
-#--------------------------------------------------------------------
+#-----------------------------------------------------------------------------
my $cycleTime = 60;
-#--------------------------------------------------------------------
-# definiert die Sekunde, ab der neu synchronisiert wird
-#--------------------------------------------------------------------
-my $slotEnd = 10;
+#-----------------------------------------------------------------------------
+# definiert die Sekunde, ab der neu synchronisiert wird
+# ACHTUNG: Sollte nicht kleiner als 1 Sekunde sein.
+#-----------------------------------------------------------------------------
+my $slotEnd = 1;
-#--------------------------------------------------------------------
-# Die Versionsnummer ist Teil des plugin_info hashes und dient
-# dazu, dass das script definierte Anfangskonditionen findet
-# auch ohne alles neu starten zu muessen. Die Nummer
-# einfach nach einer AEnderung des scripts um eins erhoehen.
-#--------------------------------------------------------------------
-my $version = 1;
+#-----------------------------------------------------------------------------
+# Die Versionsnummer is Teil des plugin_info hashes und dient
+# dazu, dass das script definierte anfangskonditionen findet
+# auch ohne den wiregated neu starten zu muessen. Die Nummer
+# einfach nach einer Aenderung des scripts um eins erhoehen.
+#-----------------------------------------------------------------------------
+my $version = 8;
-#--------------------------------------------------------------------
-# Auswertung von Bereichs und Listenvergleichen
+#-----------------------------------------------------------------------------
+# Auswertung von Bereichs und Listenvergleichen
# Prueft, ob ein Wert zu einer Liste oder in einen Bereich passt
-#--------------------------------------------------------------------
+#-----------------------------------------------------------------------------
sub matches
{
- my ($value, $def) = @_; # Zu pruefender Wert, Bereichsdefinition
+ my ($value, $def) = @_; # Zu pruefender Wert, Bereichsdefinition
(!$def) and return 1;
+
foreach (split(/,/, $def))
- {
- s/\s+//g; # Blanks entfernen
- s/^0+//g; # fuehrende Nullen entfernen
- (/^$value$/) and return 1; # Alpha-Vergleich (vermeidet Laufzeitfehler)
+ {
+ s/\s+//g;
+ s/^0+//g; # fuehrende Nullen entfernen
+ # Vergleich auf Alpha-Basis (vermeidet Laufzeit-Fehler)
+ (/^$value$/) and return 1;
(/^([\d]+)-(\d+)/) and return ($value >= $1 && $value <= $2);
}
return 0;
}
-#====================================================================
-# main()
-#====================================================================
-
-# kontrollierte Startkonditionen setzen
-if (!defined $plugin_info{$plugname.$version.'firstRun'})
+#-----------------------------------------------------------------------------
+# Zykluszeit setzen
+#-----------------------------------------------------------------------------
+sub setCycle
{
- $plugin_info{$plugname.$version.'firstRun'} = 1;
- plugin_log($plugname, "Started plugin version $version, first have to sync with time slot.");
- # die Anpassungs der Zyklyzweit erfolgt dynamisch, s.u.
- $plugin_info{$plugname.'_cycle'} = 1;
+ my ($seconds,$uSec) = gettimeofday();
+ my $curSec = $seconds%60;
+ if ( $curSec >= $slotEnd)
+ {
+ $plugin_info{$plugname.'_cycle'} = $cycleTime - $curSec - $uSec/1000000;
+ plugin_log($plugname, "cycle time set to $plugin_info{$plugname.'_cycle'} second");
+ }
+ else
+ {
+ $plugin_info{$plugname.'_cycle'} = $cycleTime;
+ }
}
+
+#=============================================================================
+# main()
+#=============================================================================
+
my ($curSec,$curMin,$curStu,$curMTag,$curMon,$curJahr,$curWTag,$curJTag,$isdst) = localtime(time);
$curJahr += 1900;
-#--------------------------------------------------------------------
-# Es ist sinnvoll, dafuer zu sorgen, dass die Startzeit dieses Plugins
-# mit der Zeit nicht "abdriftet", da sonst ueber lange Laufzeiten ein
-# Minutenueberlauf entstehen koennte, und so Ereignisse verloren gingen.
-# Aus diesem Grund prueft das script, ob es innerhalb der ersten 10 Sekunden
-# einer Minute laeuft, Wenn das nicht der Fall ist, wird so lange eine
-# verkuerzte Zykluszeit verwendet, bis die Ausfuehrung wieder im vorgesehenen
-# Zeitraum ablaeuft.
-#
-# Bei der Erstausfuehrung des Plugins nimmt dieses erst nach Erreichen
-# des vorgesehenen Zeitfensters die eigentliche Arbeit auf, weil der
-# Abstand zwischen zwei Triggern sonst zu klein werden koennte.
-#--------------------------------------------------------------------
-
-if ($curSec >= $slotEnd)
+# kontrollierte Startkonditionen setzen
+if (!defined $plugin_info{"$plugname.$version.firstRun"})
{
- if ($plugin_info{$plugname.'_cycle'} != 1)
+ # obsolete Versionen von $plugin_info bereinigen
+ foreach (keys %plugin_info)
{
- plugin_log($plugname, "lost time-slot due to time drift, reducing cycle time to 1 second");
- $plugin_info{$plugname.'_cycle'} = 1;
+ if (/^$plugname\./)
+ {
+ delete $plugin_info{$_};
+ plugin_log($plugname, "deleted plugin_info[$_]");
+ }
}
-
- # bei Erstausfuehrung auf Zeitfenster warten
- ($plugin_info{$plugname.$version.'firstRun'} == 1) and return;
+ plugin_log($plugname, "Started plugin version $version, will execute with first time-slot.");
+ $plugin_info{"$plugname.$version.firstRun"} = 1;
+ &setCycle();
}
+# beim ersten mal nur ausfuehren, wenn inmnerhalb des slots
+($curSec >= $slotEnd && $plugin_info{"$plugname.$version.firstRun"} == 1) and return;
+
# pruefen, ob in dieser Minute bereits ausgefuehrt
-(defined $plugin_info{$plugname.$version.'lastMinute'} && $plugin_info{$plugname.$version.'lastMinute'} == $curMin) and return;
+(defined $plugin_info{"$plugname.$version.lastMinute"} && $plugin_info{"$plugname.$version.lastMinute"} == $curMin) and return;
foreach my $Zeit (@Zeiten)
{
@@ -131,5 +149,10 @@
knx_write($Zeit->{GA},$Zeit->{Wert}, $Zeit->{DPT});
}
-$plugin_info{$plugname.$version.'lastMinute'} = $curMin;
-$plugin_info{$plugname.$version.'firstRun'} = 0;
+$plugin_info{"$plugname.$version.lastMinute"} = $curMin;
+
+# ggf. Zykluszeit korrigieren
+&setCycle();
+$plugin_info{"$plugname.$version.firstRun"} = 0;
+
+
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <e....@us...> - 2011-10-01 09:00:17
|
Revision: 430
http://openautomation.svn.sourceforge.net/openautomation/?rev=430&view=rev
Author: e.max
Date: 2011-10-01 09:00:10 +0000 (Sat, 01 Oct 2011)
Log Message:
-----------
id aktiviert
Property Changed:
----------------
wiregate/plugin/generic/emx_uhr.pl
Property changes on: wiregate/plugin/generic/emx_uhr.pl
___________________________________________________________________
Added: svn:keywords
+ Id
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <e....@us...> - 2011-10-10 17:34:43
|
Revision: 437
http://openautomation.svn.sourceforge.net/openautomation/?rev=437&view=rev
Author: e.max
Date: 2011-10-10 17:34:36 +0000 (Mon, 10 Oct 2011)
Log Message:
-----------
Bug in null-Wert Verarbeitung gefixt
Modified Paths:
--------------
wiregate/plugin/generic/emx_uhr.pl
Modified: wiregate/plugin/generic/emx_uhr.pl
===================================================================
--- wiregate/plugin/generic/emx_uhr.pl 2011-10-09 20:04:30 UTC (rev 436)
+++ wiregate/plugin/generic/emx_uhr.pl 2011-10-10 17:34:36 UTC (rev 437)
@@ -14,6 +14,16 @@
# ## who yyyymmdd bug# description
# -- --- -------- ----- ----------------------------------------
# . ... ........ ..... vorlage
+# 4 edh 20111010 ..... - Null-Werte wurden falsch verarbeitet
+# - Zyklusberechnung konnte wg. Rundung
+# in underruns (Minuten-Unterschreitung)
+# resultieren, wird jetzt durch Addition
+# eines Zusatzwertes vermieden.
+# Allerdings sind tw. immer noch solche
+# Underruns zu beobachten, die anscheinend
+# wg. unkorrektem timings von 'aussen'
+# verursacht werden. Das Script fängt
+# diese underruns allerdings ebenfalls ab.
# 3 edh 20110910 ..... Zykluszeit wurde nicht korrekt verarbeitet,
# Zyklus-Anpassung nun exakt in Sekunden,
# - dadurch keine 1-Sekunden leer-Zyklen mehr,
@@ -66,24 +76,40 @@
my $version = 8;
#-----------------------------------------------------------------------------
+# Numerischen string als Zahl zurückgeben
+# - blanks entfernen
+# - führende Nullen entfernen
+#-----------------------------------------------------------------------------
+sub toNumber
+{
+ my $value = shift;
+ (!defined $value) and return 0;
+
+ $value =~ s/\s+//g; # whitespace entfernen
+ $value =~ s/^0+(.)$/$1/g; # fuehrende Nullen entfernen
+ return $value;
+} # toNumber
+
+
+#-----------------------------------------------------------------------------
# Auswertung von Bereichs und Listenvergleichen
# Prueft, ob ein Wert zu einer Liste oder in einen Bereich passt
#-----------------------------------------------------------------------------
sub matches
{
my ($value, $def) = @_; # Zu pruefender Wert, Bereichsdefinition
- (!$def) and return 1;
+ (!defined $def) and return 1;
+ $value = &toNumber($value);
foreach (split(/,/, $def))
{
- s/\s+//g;
- s/^0+//g; # fuehrende Nullen entfernen
+ $_ = &toNumber($_);
# Vergleich auf Alpha-Basis (vermeidet Laufzeit-Fehler)
(/^$value$/) and return 1;
(/^([\d]+)-(\d+)/) and return ($value >= $1 && $value <= $2);
}
return 0;
-}
+} # matches
#-----------------------------------------------------------------------------
# Zykluszeit setzen
@@ -94,7 +120,7 @@
my $curSec = $seconds%60;
if ( $curSec >= $slotEnd)
{
- $plugin_info{$plugname.'_cycle'} = $cycleTime - $curSec - $uSec/1000000;
+ $plugin_info{$plugname.'_cycle'} = $cycleTime - $curSec - $uSec/1000000 + 0.1; # avoid rounding underruns
plugin_log($plugname, "cycle time set to $plugin_info{$plugname.'_cycle'} second");
}
else
@@ -103,7 +129,6 @@
}
}
-
#=============================================================================
# main()
#=============================================================================
@@ -114,6 +139,7 @@
# kontrollierte Startkonditionen setzen
if (!defined $plugin_info{"$plugname.$version.firstRun"})
{
+ plugin_log($plugname, "Starting plugin version $version, will execute with first time-slot.");
# obsolete Versionen von $plugin_info bereinigen
foreach (keys %plugin_info)
{
@@ -123,7 +149,6 @@
plugin_log($plugname, "deleted plugin_info[$_]");
}
}
- plugin_log($plugname, "Started plugin version $version, will execute with first time-slot.");
$plugin_info{"$plugname.$version.firstRun"} = 1;
&setCycle();
}
@@ -132,7 +157,11 @@
($curSec >= $slotEnd && $plugin_info{"$plugname.$version.firstRun"} == 1) and return;
# pruefen, ob in dieser Minute bereits ausgefuehrt
-(defined $plugin_info{"$plugname.$version.lastMinute"} && $plugin_info{"$plugname.$version.lastMinute"} == $curMin) and return;
+if (defined $plugin_info{"$plugname.$version.lastMinute"} && $plugin_info{"$plugname.$version.lastMinute"} == $curMin)
+{
+ &setCycle();
+ return;
+}
foreach my $Zeit (@Zeiten)
{
@@ -144,7 +173,7 @@
(defined $Zeit->{Mon} && !&matches($curMon, $Zeit->{Mon})) and next;
(defined $Zeit->{WTag} && !&matches($curWTag, $Zeit->{WTag})) and next;
(defined $Zeit->{Log} && $Zeit->{Log} eq '1') and
- plugin_log($plugname, "Sending $Zeit->{Name}, GA[$Zeit->{GA}], Value[$Zeit->{Wert}]");
+ plugin_log($plugname, "Sending Value[$Zeit->{Wert}] to GA[$Zeit->{GA}], $Zeit->{Name}");
knx_write($Zeit->{GA},$Zeit->{Wert}, $Zeit->{DPT});
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <e....@us...> - 2011-10-23 13:23:51
|
Revision: 468
http://openautomation.svn.sourceforge.net/openautomation/?rev=468&view=rev
Author: e.max
Date: 2011-10-23 13:23:44 +0000 (Sun, 23 Oct 2011)
Log Message:
-----------
umstellung auf conf.d Verzeichnis
Modified Paths:
--------------
wiregate/plugin/generic/emx_uhr.pl
Modified: wiregate/plugin/generic/emx_uhr.pl
===================================================================
--- wiregate/plugin/generic/emx_uhr.pl 2011-10-23 12:12:22 UTC (rev 467)
+++ wiregate/plugin/generic/emx_uhr.pl 2011-10-23 13:23:44 UTC (rev 468)
@@ -1,19 +1,20 @@
# Plugin zum Zeitabhaengigen Schalten von GA's (Schaltuhr)
# License: GPL (v2)
# version von emax
-
-# Plugin zum Zeitabhaengigen Schalten von GA's (Schaltuhr)
-# License: GPL (v2)
-# version von emax
#
# $Id$
#
-# Copyright: Edgar (emax) Hermanns, emax at berlios Punkt de
+# Copyright: Edgar (emax) Hermanns, forum at hermanns punkt net
#--------------------------------------------------------------------
# CHANGE LOG:
# ## who yyyymmdd bug# description
# -- --- -------- ----- ----------------------------------------
# . ... ........ ..... vorlage
+# 5 edh 20111023 ..... conf.d Verzeichnis eingefuehrt. Alle
+# Einstellungen werden kuenftig ueber
+# ueber eine entsprechende Konfigura-
+# tionsdatei conf.d/plugin.conf vorge-
+# nommen, Einzelheiten siehe dort.
# 4 edh 20111010 ..... - Null-Werte wurden falsch verarbeitet
# - Zyklusberechnung konnte wg. Rundung
# in underruns (Minuten-Unterschreitung)
@@ -34,46 +35,28 @@
# 1 edh 20110807 ----- wg. utf-8 Zirkus Umlaute in ae/ue/oe geaendert
# 0 edh 20110708 ----- erste Version
-#-----------------------------------------------------------------------------
-# Einstellungen
-#-----------------------------------------------------------------------------
+use POSIX;
-
-my @Zeiten =
- (
- # Beispiele
- { Name=>'Test', Aktiv=>'0', Std=>undef, Min=>undef, MTag=>undef, Mon=>undef, WTag=>undef, Wert=>'1', DPT=>'1', GA=>'1/1/30', Log=>'1' },
- { Name=>'Bewaesserung', Aktiv=>'0', Std=>'7', Min=> '0', MTag=>'3', Mon=>'4-9', WTag=>'1-5', Wert=>'1', DPT=>'1', GA=>'1/1/30' },
- { Name=>'AussenlichtEin', Aktiv=>'0', Std=>'19', Min=>'30', MTag=>'4', Mon=>undef, WTag=>'1,3,5', Wert=>'1', DPT=>'1', GA=>'1/2/40' },
- { Name=>'AussenlichtAus', Aktiv=>'0', Std=>'7', Min=> '0', MTag=>undef, Mon=>undef, WTag=>'2,4,6', Wert=>'0', DPT=>'1', GA=>'1/2/40' }
- );
-
#-----------------------------------------------------------------------------
-# ENDE Einstellungen
+# konfigurierbare Werte, siehe conf.d/emx_uhr.conf
#-----------------------------------------------------------------------------
+my @Zeiten = ();
+my $slotEnd = 3;
-use POSIX;
-
#-----------------------------------------------------------------------------
-# Eigenen Aufruf-Zyklus setzen
+# Aufruf-Zyklus setzen
# Das script verarbeitet keine Sekunden, weshalb die kleinste
-# Granulaitaet ohne zusaetzlioche Statusverarbeitung eine Minute ist.
+# Granularitaet ohne zusaetzlioche Statusverarbeitung eine Minute ist.
#-----------------------------------------------------------------------------
my $cycleTime = 60;
#-----------------------------------------------------------------------------
-# definiert die Sekunde, ab der neu synchronisiert wird
-# ACHTUNG: Sollte nicht kleiner als 1 Sekunde sein.
-#-----------------------------------------------------------------------------
-my $slotEnd = 1;
-
-#-----------------------------------------------------------------------------
# Die Versionsnummer is Teil des plugin_info hashes und dient
-# dazu, dass das script definierte anfangskonditionen findet
+# dazu, dass das script definierte Anfangskonditionen findet
# auch ohne den wiregated neu starten zu muessen. Die Nummer
# einfach nach einer Aenderung des scripts um eins erhoehen.
#-----------------------------------------------------------------------------
-my $version = 8;
+my $version = 9;
#-----------------------------------------------------------------------------
# Numerischen string als Zahl zurückgeben
@@ -90,7 +73,6 @@
return $value;
} # toNumber
-
#-----------------------------------------------------------------------------
# Auswertung von Bereichs und Listenvergleichen
# Prueft, ob ein Wert zu einer Liste oder in einen Bereich passt
@@ -112,13 +94,13 @@
} # matches
#-----------------------------------------------------------------------------
-# Zykluszeit setzen
+# Zykluszeit berechnen und neu setzen
#-----------------------------------------------------------------------------
sub setCycle
{
my ($seconds,$uSec) = gettimeofday();
my $curSec = $seconds%60;
- if ( $curSec >= $slotEnd)
+ if ($curSec >= $slotEnd)
{
$plugin_info{$plugname.'_cycle'} = $cycleTime - $curSec - $uSec/1000000 + 0.1; # avoid rounding underruns
plugin_log($plugname, "cycle time set to $plugin_info{$plugname.'_cycle'} second");
@@ -129,12 +111,37 @@
}
}
+sub readConf
+{
+ my $confFile = '/etc/wiregate/plugin/generic/conf.d/'.basename($plugname,'.pl').'.conf';
+ if (! -f $confFile)
+ {
+ plugin_log($plugname, " no conf file [$confFile] found.");
+ }
+ else
+ {
+ plugin_log($plugname, " reading conf file [$confFile].");
+ open(CONF, $confFile);
+ my @lines = <CONF>;
+ close($confFile);
+ my $result = eval("@lines");
+ ($result) and plugin_log($plugname, "conf file [$confFile] returned result[$result]");
+ if ($@)
+ {
+ plugin_log($plugname, "conf file [$confFile] returned:");
+ my @parts = split(/\n/, $@);
+ plugin_log($plugname, "--> $_") foreach (@parts);
+ }
+ }
+} # readConf
+
#=============================================================================
# main()
#=============================================================================
my ($curSec,$curMin,$curStu,$curMTag,$curMon,$curJahr,$curWTag,$curJTag,$isdst) = localtime(time);
$curJahr += 1900;
+&readConf();
# kontrollierte Startkonditionen setzen
if (!defined $plugin_info{"$plugname.$version.firstRun"})
@@ -148,12 +155,12 @@
delete $plugin_info{$_};
plugin_log($plugname, "deleted plugin_info[$_]");
}
- }
+ }
$plugin_info{"$plugname.$version.firstRun"} = 1;
&setCycle();
}
-# beim ersten mal nur ausfuehren, wenn inmnerhalb des slots
+# beim ersten Mal nur ausfuehren, wenn innerhalb des slots
($curSec >= $slotEnd && $plugin_info{"$plugname.$version.firstRun"} == 1) and return;
# pruefen, ob in dieser Minute bereits ausgefuehrt
@@ -165,23 +172,20 @@
foreach my $Zeit (@Zeiten)
{
- (defined $Zeit->{Aktiv} && !$Zeit->{Aktiv}) and next;
-
- (defined $Zeit->{Min} && !&matches($curMin, $Zeit->{Min})) and next;
- (defined $Zeit->{Std} && !&matches($curStu, $Zeit->{Std})) and next;
- (defined $Zeit->{MTag} && !&matches($curMTag, $Zeit->{MTag})) and next;
- (defined $Zeit->{Mon} && !&matches($curMon, $Zeit->{Mon})) and next;
- (defined $Zeit->{WTag} && !&matches($curWTag, $Zeit->{WTag})) and next;
- (defined $Zeit->{Log} && $Zeit->{Log} eq '1') and
+ (defined $Zeit->{Aktiv} && !$Zeit->{Aktiv}) and next;
+ (defined $Zeit->{Min} && !&matches($curMin, $Zeit->{Min})) and next;
+ (defined $Zeit->{Std} && !&matches($curStu, $Zeit->{Std})) and next;
+ (defined $Zeit->{MTag} && !&matches($curMTag, $Zeit->{MTag})) and next;
+ (defined $Zeit->{Mon} && !&matches($curMon, $Zeit->{Mon})) and next;
+ (defined $Zeit->{WTag} && !&matches($curWTag, $Zeit->{WTag})) and next;
+ (defined $Zeit->{Log} && $Zeit->{Log} eq '1') and
plugin_log($plugname, "Sending Value[$Zeit->{Wert}] to GA[$Zeit->{GA}], $Zeit->{Name}");
knx_write($Zeit->{GA},$Zeit->{Wert}, $Zeit->{DPT});
-}
+} # foreach (@Zeiten)
$plugin_info{"$plugname.$version.lastMinute"} = $curMin;
# ggf. Zykluszeit korrigieren
&setCycle();
$plugin_info{"$plugname.$version.firstRun"} = 0;
-
-
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <e....@us...> - 2012-07-06 14:41:42
|
Revision: 910
http://openautomation.svn.sourceforge.net/openautomation/?rev=910&view=rev
Author: e.max
Date: 2012-07-06 14:41:31 +0000 (Fri, 06 Jul 2012)
Log Message:
-----------
Zeitzonen eingefuehrt.
Durch Angabe des neuen Parameters 'Zone' in der @Zeiten Tabelle kann nun festgelegt werden, fuer welche Zeitzone der Schaltzeitpunkt berechnet werden soll.Der Parameter is wahlweise, so dass bisherige conf-Dateien ohne Aenderung weiter verwendet werden koennen. Eine detaillierte Dokumentation findet sich in der conf-Datei, die auch Beipiele enthaelt.
Modified Paths:
--------------
wiregate/plugin/generic/emx_uhr.pl
Modified: wiregate/plugin/generic/emx_uhr.pl
===================================================================
--- wiregate/plugin/generic/emx_uhr.pl 2012-07-04 11:24:59 UTC (rev 909)
+++ wiregate/plugin/generic/emx_uhr.pl 2012-07-06 14:41:31 UTC (rev 910)
@@ -10,6 +10,17 @@
# ## who yyyymmdd bug# description
# -- --- -------- ----- ----------------------------------------
# . ... ........ ..... vorlage
+# 6 edh 20120706 ..... Zeitzonen eingefuehrt. Durch Angabe
+# des neuen Parameters 'Zone' in der
+# @Zeiten Tabelle kann nun festgelegt
+# werden, fuer welche Zeitzone der
+# Schaltzeitpunkt berechnet werden soll.
+# Der Parameter is wahlweise, so dass
+# bisherige conf-Dateien ohne Aenderung
+# weiter verwendet werden koennen.
+# Eine detaillierte Dokumentation findet
+# sich in der conf-Datei, die auch Beipiele
+# enthaelt.
# 5 edh 20111023 ..... conf.d Verzeichnis eingefuehrt. Alle
# Einstellungen werden kuenftig ueber
# ueber eine entsprechende Konfigura-
@@ -23,30 +34,33 @@
# Allerdings sind tw. immer noch solche
# Underruns zu beobachten, die anscheinend
# wg. unkorrektem timings von 'aussen'
-# verursacht werden. Das Script fängt
+# verursacht werden. Das Script faengt
# diese underruns allerdings ebenfalls ab.
# 3 edh 20110910 ..... Zykluszeit wurde nicht korrekt verarbeitet,
# Zyklus-Anpassung nun exakt in Sekunden,
# - dadurch keine 1-Sekunden leer-Zyklen mehr,
# - weniger Systemlast.
-# Alte plugin_info einträge werden bei neuer
+# Alte plugin_info Eintraege werden bei neuer
# versionsnummer nun bereinigt.
# 2 edh 20110910 ----- Bug im Wertevergleich in 'matches()' gefixt
# 1 edh 20110807 ----- wg. utf-8 Zirkus Umlaute in ae/ue/oe geaendert
# 0 edh 20110708 ----- erste Version
use POSIX;
+use Time::Zone;
#-----------------------------------------------------------------------------
-# konfigurierbare Werte, siehe conf.d/emx_uhr.conf
+# konfigurierbare Werte, siehe conf.d/emx_uhr.conf.sample
#-----------------------------------------------------------------------------
-my @Zeiten = ();
+my @Zeiten = ();
+my $LokaleZeitZone = "CET"; # lokale Zeitzone
+my $LokaleSommerZeitZone = "CEST"; # lokale Zeitzone im Sommer
my $slotEnd = 3;
#-----------------------------------------------------------------------------
# Aufruf-Zyklus setzen
# Das script verarbeitet keine Sekunden, weshalb die kleinste
-# Granularitaet ohne zusaetzlioche Statusverarbeitung eine Minute ist.
+# Granularitaet ohne zusaetzliche Statusverarbeitung eine Minute ist.
#-----------------------------------------------------------------------------
my $cycleTime = 60;
@@ -56,12 +70,12 @@
# auch ohne den wiregated neu starten zu muessen. Die Nummer
# einfach nach einer Aenderung des scripts um eins erhoehen.
#-----------------------------------------------------------------------------
-my $version = 9;
+my $version = 11;
#-----------------------------------------------------------------------------
-# Numerischen string als Zahl zurückgeben
+# Numerischen String als Zahl zurueckgeben
# - blanks entfernen
-# - führende Nullen entfernen
+# - fuehrende Nullen entfernen
#-----------------------------------------------------------------------------
sub toNumber
{
@@ -111,16 +125,19 @@
}
}
+#-----------------------------------------------------------------------------
+# Konfiguration lesen. Erwartet wird eine Datei conf.d/emx_uhr.conf
+#-----------------------------------------------------------------------------
sub readConf
{
my $confFile = '/etc/wiregate/plugin/generic/conf.d/'.basename($plugname,'.pl').'.conf';
if (! -f $confFile)
{
- plugin_log($plugname, " no conf file [$confFile] found.");
+ plugin_log($plugname, "no conf file [$confFile] found.");
}
else
{
- plugin_log($plugname, " reading conf file [$confFile].");
+ plugin_log($plugname, "reading conf file [$confFile].");
open(CONF, $confFile);
my @lines = <CONF>;
close($confFile);
@@ -128,7 +145,7 @@
($result) and plugin_log($plugname, "conf file [$confFile] returned result[$result]");
if ($@)
{
- plugin_log($plugname, "conf file [$confFile] returned:");
+ plugin_log($plugname, "ERR: conf file [$confFile] returned:");
my @parts = split(/\n/, $@);
plugin_log($plugname, "--> $_") foreach (@parts);
}
@@ -139,8 +156,14 @@
# main()
#=============================================================================
-my ($curSec,$curMin,$curStu,$curMTag,$curMon,$curJahr,$curWTag,$curJTag,$isdst) = localtime(time);
+my $tStamp = time;
+my ($curSec,$curMin,$curStu,$curMTag,$curMon,$curJahr,$curWTag,$curJTag,$isdst) = localtime($tStamp);
$curJahr += 1900;
+
+# set the time zone to use here and now
+my $curZone = ($isdst) ? $LokaleSommerZeitZone : $LokaleZeitZone;
+my $lclOffset = tz_offset("$curZone");
+
&readConf();
# kontrollierte Startkonditionen setzen
@@ -170,16 +193,28 @@
return;
}
+# create the 'basetime' which is used for calclulations
+my ($basSec,$basMin,$basStu,$basMTag,$basMon,$basJahr,$basWTag,$basJTag) =
+ ($curSec,$curMin,$curStu,$curMTag,$curMon,$curJahr,$curWTag,$curJTag);
+
foreach my $Zeit (@Zeiten)
{
(defined $Zeit->{Aktiv} && !$Zeit->{Aktiv}) and next;
- (defined $Zeit->{Min} && !&matches($curMin, $Zeit->{Min})) and next;
- (defined $Zeit->{Std} && !&matches($curStu, $Zeit->{Std})) and next;
- (defined $Zeit->{MTag} && !&matches($curMTag, $Zeit->{MTag})) and next;
- (defined $Zeit->{Mon} && !&matches($curMon, $Zeit->{Mon})) and next;
- (defined $Zeit->{WTag} && !&matches($curWTag, $Zeit->{WTag})) and next;
+ my $baseZone = (defined $Zeit->{Zone} && (length($Zeit->{Zone}) >= 3) ) ? $Zeit->{Zone} : $curZone;
+ if ($baseZone ne $curZone) # different time zone than local,recalculate time values for defined zone
+ {
+ ($basSec,$basMin,$basStu,$basMTag,$basMon,$basJahr,$basWTag,$basJTag) = localtime($tStamp-$lclOffset+tz_offset($baseZone));
+ $basJahr += 1900;
+ }
+
+ (defined $Zeit->{Min} && !&matches($basMin, $Zeit->{Min})) and next;
+ (defined $Zeit->{Std} && !&matches($basStu, $Zeit->{Std})) and next;
+ (defined $Zeit->{MTag} && !&matches($basMTag, $Zeit->{MTag})) and next;
+ (defined $Zeit->{Mon} && !&matches($basMon, $Zeit->{Mon})) and next;
+ (defined $Zeit->{WTag} && !&matches($basWTag, $Zeit->{WTag})) and next;
(defined $Zeit->{Log} && $Zeit->{Log} eq '1') and
- plugin_log($plugname, "Sending Value[$Zeit->{Wert}] to GA[$Zeit->{GA}], $Zeit->{Name}");
+ plugin_log($plugname, sprintf "Sending at[$baseZone %02d:%02d:%02d],Value[$Zeit->{Wert}],GA[$Zeit->{GA}]",
+ $basStu,$basMin,$basSec);
knx_write($Zeit->{GA},$Zeit->{Wert}, $Zeit->{DPT});
} # foreach (@Zeiten)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ma...@us...> - 2012-12-03 17:07:24
|
Revision: 1183
http://openautomation.svn.sourceforge.net/openautomation/?rev=1183&view=rev
Author: makki1
Date: 2012-12-03 17:07:14 +0000 (Mon, 03 Dec 2012)
Log Message:
-----------
undefined knx_write - see http://knx-user-forum.de/wiregate/23510-none-unsupported-dpt-sent-value.html#post271946
Modified Paths:
--------------
wiregate/plugin/generic/emx_uhr.pl
Modified: wiregate/plugin/generic/emx_uhr.pl
===================================================================
--- wiregate/plugin/generic/emx_uhr.pl 2012-12-02 11:50:50 UTC (rev 1182)
+++ wiregate/plugin/generic/emx_uhr.pl 2012-12-03 17:07:14 UTC (rev 1183)
@@ -216,7 +216,7 @@
plugin_log($plugname, sprintf "Sending at[$baseZone %02d:%02d:%02d],Value[$Zeit->{Wert}],GA[$Zeit->{GA}]",
$basStu,$basMin,$basSec);
- knx_write($Zeit->{GA},$Zeit->{Wert}, $Zeit->{DPT});
+ (defined ($Zeit->{GA}) && knx_write($Zeit->{GA},$Zeit->{Wert}, $Zeit->{DPT}));
} # foreach (@Zeiten)
$plugin_info{"$plugname.$version.lastMinute"} = $curMin;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|