Delta Days berechnen oder Perl Code in doif

Begonnen von Kai-Alfonso, 10 Januar 2018, 10:10:06

Vorheriges Thema - Nächstes Thema

Kai-Alfonso

Hi,

ich habe für die Berechnung der aktuellen und zu erwartenden Stromkosten ein doif gebastelt. Gibt es eine Möglichkeit in doif, die Delta Tage von einem bestimmten Datum bis heute zu berechnen? Bis jetzt hatte ich das mit folgenden Sub in der myUtils gelöst:

sub CalcDays() {
use Date::Calc qw(Delta_Days);

my $start_datum = ReadingsVal("doif.Stromkosten","Start_Abrechnungsperiode","");
my $tag = substr($start_datum, 0, 2);
my $monat = substr($start_datum, 3, 2);
my $jahr = substr($start_datum, 6, 4);
#my $start_datum = ($jahr.", ".$monat.", ".$tag);

my ($d,$m,$y) = (localtime)[3,4,5];
#my $ymd = sprintf '%04d, %02d, %02d', $y+1900, $m+1, $d ;
my $y = sprintf '%04d',$y+1900;
my $m = sprintf '%02d',$m+1;
my $d = sprintf '%02d',$d;

my $anzahl_tage = Delta_Days($jahr,$monat,$tag,$y,$m,$d);


return $anzahl_tage;
}


Jetzt brauche ich das nicht für andere Prozeduren, deswegen würde ich es gerne aus der myUtils rausnehmen und direkt beim doif ausführen. Wie lautet da die Syntax bezüglich klammern bzw ist das eigentlich möglich? - oder falls einer eine (einfachere) Alternative kennt, würde ich auch diese nutzen.


Danke und Gruß

Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

Damian

Zitat von: Kai-Alfonso am 10 Januar 2018, 10:10:06
Hi,

ich habe für die Berechnung der aktuellen und zu erwartenden Stromkosten ein doif gebastelt. Gibt es eine Möglichkeit in doif, die Delta Tage von einem bestimmten Datum bis heute zu berechnen? Bis jetzt hatte ich das mit folgenden Sub in der myUtils gelöst:

sub CalcDays() {
use Date::Calc qw(Delta_Days);

my $start_datum = ReadingsVal("doif.Stromkosten","Start_Abrechnungsperiode","");
my $tag = substr($start_datum, 0, 2);
my $monat = substr($start_datum, 3, 2);
my $jahr = substr($start_datum, 6, 4);
#my $start_datum = ($jahr.", ".$monat.", ".$tag);

my ($d,$m,$y) = (localtime)[3,4,5];
#my $ymd = sprintf '%04d, %02d, %02d', $y+1900, $m+1, $d ;
my $y = sprintf '%04d',$y+1900;
my $m = sprintf '%02d',$m+1;
my $d = sprintf '%02d',$d;

my $anzahl_tage = Delta_Days($jahr,$monat,$tag,$y,$m,$d);


return $anzahl_tage;
}


Jetzt brauche ich das nicht für andere Prozeduren, deswegen würde ich es gerne aus der myUtils rausnehmen und direkt beim doif ausführen. Wie lautet da die Syntax bezüglich klammern bzw ist das eigentlich möglich? - oder falls einer eine (einfachere) Alternative kennt, würde ich auch diese nutzen.


Danke und Gruß

Das ist relativ einfach, DOIF-Bedingung ist schon weitgehend Perl, daher DOIF (... CalcDays() ....), im Ausführungsteil (set ....{(... CalcDays()...)} ....) oder direkt als Perlausführungsteil {... CalcDays()...}
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Kai-Alfonso

Danke - das war der entscheidende Hinweis :-) Klappt jetzt auch ohne myUtils
Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)