FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Kai-Alfonso am 12 Juni 2017, 14:38:29

Titel: [Gelöst] Hilfe bei Berechnung von Tagen seit...
Beitrag von: Kai-Alfonso am 12 Juni 2017, 14:38:29
Hi,

ich habe mal eine Frage zur Berechnung von Zeiträumen. Ich würde gerne die Anzahl der Tage ermitteln - von einem Startdatum angefangen bis heute. Das Startdatum habe ich als userReading (im Format DD.MM.YYY) definiert. Ich würde gerne die Anzahl der Tage in einem weiteren uerReading erfassen, bin aber ein wenig überfordert - so wie ich das sehe, geht das nur mit Perl und der date::calc Funktion. Vielleicht kann mir mal jemand unter die Arme greifen?

Danke schön :-)

Viele Grüße
Titel: Antw:Hilfe bei Berechnung von Tagen seit...
Beitrag von: Amenophis86 am 12 Juni 2017, 15:05:00
in einer eigenen Sub und da kannst du zB auch direkt mit timestamp arbeiten. Aber es gibt sicher viele Wege dafür.
Titel: Antw:Hilfe bei Berechnung von Tagen seit...
Beitrag von: arthur_dent_2015 am 12 Juni 2017, 19:30:43
eher ich mich mit Perl code rumärgere mach ich das mit nem 2zeiler script:
Tage=$((($(date -d 31-Dec-2017 +'%s') - $(date +'%s')) /86400))
perl /opt/fhem/fhem.pl 7072 "set xyz $Tage "
Titel: Antw:Hilfe bei Berechnung von Tagen seit...
Beitrag von: Kai-Alfonso am 13 Juni 2017, 11:18:57
Hi,

ich habe das mal versucht, das mit einer Subroutine in der myUtils zu lösen. Da ich noch so gut wie nie was mit Perl und noch nie was mit der myUtils gemacht habe (außer fremden Code eingefügt) war das recht spannend. Bin auch schon recht weit gekommen, allerdings hänge ich an einer Stelle und komme nicht weiter. Vielleicht kann mir mal jemand helfen?

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

my $start_datum = ReadingsVal("Easymeter","Start_Periode","");
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 $anzahl_tage = Delta_Days($start_datum,$ymd);


return $anzahl_tage;
}


Der Wert für das  Reading Start_Periode ist 01.02.2017

als Fehlermeldung kommt im Reading
Zitat
Error evaluating Easymeter userReading Tage_Periode: Usage: Date::Calc::XS::Delta_Days(year1, month1, day1, year2, month2, day2) at ./FHEM/99_myUtils.pm line

Wenn ich mir aber  den Inhalt der Variablen $start_datum (=2017,02,01) und $ymd (=2017,06,13) anschaue, dann müsste die Syntax aber richtig sein. - oder anscheinend ja nicht, weil es nicht geht ;-) Geb ich anstatt der Variablen den Inhalt der Variablen ein, dann geht es.

Hat jemand einen Tipp?
Titel: Antw:Hilfe bei Berechnung von Tagen seit...
Beitrag von: Kai-Alfonso am 13 Juni 2017, 16:04:47
Sooo...

habe den Fehler selber gefunden - mit Strings (grade auch zusammengesetzte) kann man natürlich nicht rechnen ;-)


Wem es interessiert - hiermit geht es:

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

my $start_datum = ReadingsVal("Easymeter","Start_Periode","");
my $tag = substr($start_datum, 0, 2);
my $monat = substr($start_datum, 3, 2);
my $jahr = substr($start_datum, 6, 4);

my ($d,$m,$y) = (localtime)[3,4,5];
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;
}
Titel: Antw:Hilfe bei Berechnung von Tagen seit...
Beitrag von: KernSani am 13 Juni 2017, 21:59:42
Danke, dass du die Lösung hier postest. Könntest du auch noch [Gelöst] vor das Subject des ersten Posts schreiben?
Titel: Antw:Hilfe bei Berechnung von Tagen seit...
Beitrag von: Kai-Alfonso am 14 Juni 2017, 07:25:46
Zitat von: KernSani am 13 Juni 2017, 21:59:42
Danke, dass du die Lösung hier postest. Könntest du auch noch [Gelöst] vor das Subject des ersten Posts schreiben?


Sorry, dachte eigentlich, das ich das gemacht habe - habe ich dann wohl vergessen und wurde hiermit nachgeholt
Titel: Antw:[Gelöst] Hilfe bei Berechnung von Tagen seit...
Beitrag von: Homer1978 am 26 April 2021, 18:45:52
hi, ich habe diesen post gefunden und deine sub in die myutils eingefügt, mein gerät und das reading geändert aber ich bekomme kein reading im gerät mit der anzahl der tage. was mache ich falsch

mfg
Titel: Antw:[Gelöst] Hilfe bei Berechnung von Tagen seit...
Beitrag von: CoolTux am 26 April 2021, 20:57:52
Du musst die Sub natürlich auch aufrufen.
Ich denke mal am besten aus ein userreadings heraus