FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Kai-Alfonso am 10 Januar 2018, 10:10:06

Titel: Delta Days berechnen oder Perl Code in doif
Beitrag 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ß

Titel: Antw:Delta Days berechnen oder Perl Code in doif
Beitrag von: Damian am 10 Januar 2018, 11:39:35
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()...}
Titel: Antw:Delta Days berechnen oder Perl Code in doif
Beitrag von: Kai-Alfonso am 10 Januar 2018, 15:45:25
Danke - das war der entscheidende Hinweis :-) Klappt jetzt auch ohne myUtils