FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: neyzen am 13 März 2023, 12:58:18

Titel: userReading - Subtraktion von einer vorgegebenen Zeit
Beitrag von: neyzen am 13 März 2023, 12:58:18
Hallo,

ich habe ein Zeit (variable), dieser steht im reading
02_Sonnenaufgang 06:35 2023-03-13 10:01:02

Jetzt möchte ich zur dieser Zeit eine neue Zeit berechnen, die 50 minuten davor liegt.
In der Wiki ist ein schönes Beispiel
{POSIX::strftime("%H:%M:%S",localtime(time-45*60))}
Allerings möchte ich nicht wie im Beispiel die Differenz zur aktuellen Zeit, sondern eben zu meinem reading oben.
Ich weis leider nicht wie ich mein userReading definieren muss.
Kann mir jemand helfen?
Titel: Antw:userReading - Subtraktion von einer vorgegebenen Zeit
Beitrag von: Otto123 am 13 März 2023, 19:10:35
Wenn Du 50 min vorm Sonnenaufgang willst, wäre es einfach :)
{sunrise_abs('CIVIL',-50*60)}
https://fhem.de/commandref_modular_DE.html#SUNRISE_EL

Falls Du wirklich den Wert 06:35 auslesen willst:
{POSIX::strftime("%H:%M",localtime(time_str2num("$today ".ReadingsVal($name,'02_Sonnenaufgang',''))-50*60))}

Geht sicher viel einfacher :)
Titel: Antw:userReading - Subtraktion von einer vorgegebenen Zeit
Beitrag von: betateilchen am 13 März 2023, 20:51:26
Vielleicht nicht einfacher, aber leichter verständlich:


my $t = "06:30";
my $diff = 50*MINUTESECONDS;
my ($h,$m) = split(/:/,$t);
return strftime("%H:%M:%S",gmtime($h*HOURSECONDS+$m*MINUTESECONDS-$diff));
Titel: Antw:userReading - Subtraktion von einer vorgegebenen Zeit
Beitrag von: neyzen am 13 März 2023, 21:11:10
Hallo Otto,

nein ich brauche tatsächlich das reading 02_Sonnenaufgang zum Berechnen. Denn wenn das funktioniert, werde ich das auf meine 4 anderen Zeiten die sich ja täglich ändern, anwenden.

dein zweiter code gibt mir eine Fehlermeldung

Error evaluating KalanZamaniHesapla userReading KeratSabah: Global symbol "$today" requires explicit package name (did you forget to declare "my $today"?) at (eval 125601) line 1.

Das reading 02_Sonnenaufgang hat das Device in diesem Fall "Namaz"
Liegt hier mein Fehler?
Titel: Antw:userReading - Subtraktion von einer vorgegebenen Zeit
Beitrag von: neyzen am 13 März 2023, 21:15:43
Zitat von: betateilchen am 13 März 2023, 20:51:26
Vielleicht nicht einfacher, aber leichter verständlich:


my $t = "06:30";
my $diff = 50*MINUTESECONDS;
my ($h,$m) = split(/:/,$t);
return strftime("%H:%M:%S",gmtime($h*HOURSECONDS+$m*MINUTESECONDS-$diff));


Hallo betateilchen,

dein code funktioniert!
allerdings, wie mache ich my $t = "06:30"; variabel?
Mein reading dazu liegt ja hier
device= Namaz
reading=02_Sonnenaufgang
Titel: Antw:userReading - Subtraktion von einer vorgegebenen Zeit
Beitrag von: betateilchen am 13 März 2023, 21:18:54
Am einfachsten nimmst Du im split() einfach ReadingsVal() anstatt $t.
Titel: Antw:userReading - Subtraktion von einer vorgegebenen Zeit
Beitrag von: neyzen am 13 März 2023, 21:33:23
Ich habe jetzt folgendes bei meinem userReading geändert

{
my $diff = 50*MINUTESECONDS;
my ($h,$m) = split(/:/,ReadingsVal("Namaz","02_Sonnenaufgang",0));
return strftime("%H:%M:%S",gmtime($h*HOURSECONDS+$m*MINUTESECONDS-$diff));}


damit funktioniert es genau so wie ich es mir vorgestellt habe. Super. Du hast mir wieder mal sehr geholfen betateilchen.
Danke aber auch an Otto!

Titel: Antw:userReading - Subtraktion von einer vorgegebenen Zeit
Beitrag von: Otto123 am 13 März 2023, 22:03:39
Laut commandref ist die Variable verfügbar, in meinem Test war sie das auch:
ZitatUm die Verwendung von Datum und Zeitangaben zu vereinfachen, wurden die Variablen $sec, $min, $hour, $mday, $month, $year, $wday, $yday, $isdst und $hms für die Verwendung in PERL-"oneliners" eingeführt (s. unter perldoc -f localtime). Ausnahmen: $month hat einen Wertebereich von 1 bis 12 und $year ist korrigiert von 1900. Weiterhin enthält $hms die Zeit in dem HH:MM:SS Format und $today das aktuellen Datum in YYYY-MM-DD Format.
Offenbar ist sie in deinem Device nicht da - egal der Code von Betateilchen ist doch funktional und wirklich leichter verständlich.
Titel: Antw:userReading - Subtraktion von einer vorgegebenen Zeit
Beitrag von: betateilchen am 13 März 2023, 22:35:27
Ich würde die Gebetszeiten trotzdem nicht so umständlich über Berechnungen aus Readingwerten ermitteln. Das geht mit Sicherheit viel einfacher.