|
From: <pf...@us...> - 2012-05-17 20:40:18
|
Revision: 825
http://openautomation.svn.sourceforge.net/openautomation/?rev=825&view=rev
Author: pfry
Date: 2012-05-17 20:40:11 +0000 (Thu, 17 May 2012)
Log Message:
-----------
Bereiche als Datumsspezifikationen in der Timer-Funktion
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-05-17 20:08:58 UTC (rev 824)
+++ wiregate/plugin/generic/Logikprozessor.pl 2012-05-17 20:40:11 UTC (rev 825)
@@ -502,7 +502,29 @@
$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
- @{$s->{$k}}=sort @{$s->{$k}}; # alle Listen sortieren
+
+ # Expandieren von Bereichen, z.B. month=>'3-5'
+ if($k ne 'time' && grep /\-/, @{$s->{$k}})
+ {
+ my $newlist=[];
+ for my $ks (@{$s->{$k}})
+ {
+ if($ks=~/^([0-9]+)\-([0-9]+)$/)
+ {
+ push @{$newlist}, ($1..$2);
+ }
+ else
+ {
+ push @{$newlist}, $ks;
+ }
+ }
+ @{$s->{$k}} = sort @{$newlist};
+# plugin_log($plugname, "\$logic{$t} Aufrufdaten $k: ".join " ", @{$s->{$k}});
+ }
+ else
+ {
+ @{$s->{$k}}=sort @{$s->{$k}}; # alle Listen sortieren
+ }
}
# Expandieren periodischer Zeitangaben, das sind Zeitangaben der Form
@@ -553,7 +575,7 @@
my $schedules_done=0;
# falls nextcall noch nicht definiert, geht es jetzt um den naechsten Tag mit Termin
- until($schedules_done || defined $nextcall)
+ until($schedules_done || defined $nextcall || $days_until_nextcall>5000) # maximal ca. 15 Jahre suchen
{
$schedules_done=1;
$days_until_nextcall++;
@@ -572,7 +594,8 @@
if(defined $nextcall)
{
my $daytext='';
- $daytext = ($days_until_nextcall==1 ? " morgen" : " in $days_until_nextcall Tagen") if $days_until_nextcall;
+ 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
Modified: wiregate/plugin/generic/conf.d/Logikprozessor.conf
===================================================================
--- wiregate/plugin/generic/conf.d/Logikprozessor.conf 2012-05-17 20:08:58 UTC (rev 824)
+++ wiregate/plugin/generic/conf.d/Logikprozessor.conf 2012-05-17 20:40:11 UTC (rev 825)
@@ -62,11 +62,13 @@
# 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), $year (2012),
- # $weekend (0 oder 1), $weekday (= nicht $weekend), $time_of_day ("08:34:02"),
+ # Die Variablen $day_of_week (Mo...So), $calendar_week, $day_of_month (01-31), $month (01-12), $day_of_year (1-366),
+ # $year (2012), $weekend (0 oder 1), $weekday (= nicht $weekend), $holiday (0 oder 1),
+ # $workingday (=nicht $weekend und nicht $holiday), $time_of_day ("08:34:02"),
# $hour ("08"), $day (1 falls zwischen 7 und 23 Uhr, 0 sonst) und $night (entsprechend umgekehrt)
# sind f\xFCr diese Logiken vorbesetzt (bitte nicht darauf schreiben, koennte unverhergesehene Auswirkungen
- # auf andere Logiken haben).
+ # auf andere Logiken haben). $holiday beruecksichtigt dabei Neujahr, 1. Mai,
+ # 3. Oktober, Weihnachten/Ostern/Pfingsten, Christi Himmelfahrt und Fronleichnam als Feiertage.
# 8. Eine einfache UND-Logik mit zwei Eingaengen. Falls ein Telegramm auf einer der beiden receive-GAs empfangen wird,
# wird die andere Adresse noch ausgelesen, die Logik angewendet und das Ergebnis auf der transmit-GA uebermittelt
@@ -95,10 +97,17 @@
# * Die transmit_only_on_request-Klausel funktioniert aber
# * jeglicher Bustraffic auf receive-Adressen wird ignoriert.
# * Evtl. spezifizierte receive-Adressen werden aber beim Timer-Aufruf abgefragt, um das input-Array vorzubesetzen).
- # Als timer-Eintrag geht entweder ein einzelner Eintrag timer=>{...} wie oben oder eine Liste solcher Eintraege
- # time=>[{...},{...},{...},...]. Jeder Eintrag MUSS eine Spezifikation time=>... (Varianten siehe Beispiel) enthalten
- # und DARF zusaetzliche, die Geltungstage einschraenkende Klauseln wie year, month, day_of_month,
- # calendar_week, day_of_week (Mo...So oder Mon...Sun oder 1...7) enthalten. Alle diese duerfen wieder Listen sein.
+ # Weitere Infos zu Timer-Spezifikationen
+ # * Als timer-Eintrag geht entweder ein einzelner Eintrag timer=>{...} wie oben oder eine Liste solcher Eintraege
+ # time=>[{...},{...},{...},...].
+ # * Jeder Eintrag MUSS eine Spezifikation time=>... (Varianten siehe Beispiel oben) enthalten.
+ # * Jeder Eintrag DARF zusaetzliche, die Geltungstage einschraenkende Klauseln wie year, month, day_of_year,
+ # day_of_month, calendar_week, day_of_week (Mo...So oder Mon...Sun oder 1...7) enthalten. Solche Eintr\xE4ge duerfen
+ # Einzelwerte sein (year=>2012), Bereiche (day_of_month=>'8-14') oder auch wieder Listen von Werten/Bereichen.
+ # als auch Listen von sein.
+ # * Jeder Eintrag DARF zusaetzliche binaere (0 oder 1) Einschraenkungen enthalten: weekend, weekday,
+ # holiday und workingday (=weder holiday noch weekend). holiday beruecksichtigt dabei Neujahr, 1. Mai,
+ # 3. Oktober, Weihnachten/Ostern/Pfingsten, Christi Himmelfahrt und Fronleichnam als Feiertage.
# 11. Schlussendlich wieder mal Werbung fuer die GA-Kurznamen. Verwendet man GA-Namen mit eindeutigem Kuerzel
# (Kuerzel=erstes Wort des Namens), so kann man ab Wiregate PL32 auch diese Kuerzel verwenden.
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|