[Gelöst] Hilfe bei Berechnung von Tagen seit...

Begonnen von Kai-Alfonso, 12 Juni 2017, 14:38:29

Vorheriges Thema - Nächstes Thema

Kai-Alfonso

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
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)

Amenophis86

in einer eigenen Sub und da kannst du zB auch direkt mit timestamp arbeiten. Aber es gibt sicher viele Wege dafür.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

arthur_dent_2015

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 "

Kai-Alfonso

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?
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)

Kai-Alfonso

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;
}
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)

KernSani

Danke, dass du die Lösung hier postest. Könntest du auch noch [Gelöst] vor das Subject des ersten Posts schreiben?
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Kai-Alfonso

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
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)

Homer1978

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
FHEM seit 2016, aktuell auf einem Nuc installiert. Max! Heizungsteuerung mit 23 Geräten, diverse ESP Eigenbauten und Culs im Einsatz.

CoolTux

Du musst die Sub natürlich auch aufrufen.
Ich denke mal am besten aus ein userreadings heraus
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net