FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Maxl am 14 Juli 2025, 13:00:29

Titel: Uhrzeit abfragen
Beitrag von: Maxl am 14 Juli 2025, 13:00:29
Hallo,

ich habe ein generelles Problem mit der Uhrzeit, ich benutzt die sunrise und sunset Funktion.
Dazu ist wie beschrieben folgendes angelegt:

define Sonnenaufgang dummy
attr Sonnenaufgang room Zeit
define Sonnenuntergang dummy
attr Sonnenuntergang room Zeit

define sun_riseSet_timer at *00:07:00 { my $s = sunrise();; fhem("set Sonnenaufgang $s");; $s = sunset();; fhem("set Sonnenuntergang $s");; }

define sun_riseSet_timer at *00:07:00 { my $s = sunrise();; fhem("set Sonnenaufgang $s");; $s = sunset();; fhem("set Sonnenuntergang $s");; }
#   COMMAND    { my $s = sunrise(); fhem("set Sonnenaufgang $s"); $s = sunset(); fhem("set Sonnenuntergang $s"); }
#   DEF        *00:07:00 { my $s = sunrise(); fhem("set Sonnenaufgang $s"); $s = sunset(); fhem("set Sonnenuntergang $s"); }
#   FUUID      5db5dd63-f33f-349b-5132-46de1c67a5562bb5
#   NAME       sun_riseSet_timer
#   NR         61
#   PERIODIC   yes
#   RELATIVE   no
#   REP        -1
#   STATE      Next: 00:07:00
#   TIMESPEC   00:07:00
#   TRIGGERTIME 1752530820
#   TRIGGERTIME_FMT 2025-07-15 00:07:00
#   TYPE       at
#   READINGS:
#     2025-07-14 08:06:10   state           Next: 00:07:00
#
setstate sun_riseSet_timer Next: 00:07:00
setstate sun_riseSet_timer 2025-07-14 08:06:10 state Next: 00:07:00


Wenn ich nun die Zeiten verwenden will dann bekomme ich bei folgenden Code
define my_check at +*00:00:10 {\
  my ($rh, $rm, $rs) = split(':', ReadingsVal("Sonnenaufgang", "time", "00:00:00"));;\
  my $sr_time = $rh*3600 + $rm*60 + $rs;;\
  my ($uh, $um, $us) = split(':', ReadingsVal("Sonnenuntergang", "time", "00:00:00"));;\
  my $ss_time = $uh*3600 + $um*60 + $us;;\
  my $now = time() % 86400;;\
  Log3("now", 3, "now: $now");;\
  Log3("sr_time", 3, "sr_time: $sr_time ");;\
  Log3("ss_time", 3, "ss_time: $ss_time ");;\
  if ($now > ($ss_time - 60)) {\
    Log3("Kontext", 3, "true");;\
  } else {\
    Log3("Kontext", 3, "false");;\
  }\
}
setuuid my_check 6874e0b4-f33f-49a1-b738-c6ec458d9d5caa7a

immer im Logfile Werte welche nicht recht stimmen.

2025.07.14 12:58:04.683 3: now: 39484
2025.07.14 12:58:04.684 3: sr_time: 3628
2025.07.14 12:58:04.684 3: ss_time: 3622
2025.07.14 12:58:04.685 3: true

im Webinterface steht

dummy
Sonnenaufgang 04:24:16
Sonnenuntergang 22:07:36

an was leigt das?

Danke
Titel: Aw: Uhrzeit abfragen
Beitrag von: Otto123 am 14 Juli 2025, 13:09:39
Hi,


Es gibt da im Wiki einen Artikel zum Rechnen mit Zeitangaben https://wiki.fhem.de/wiki/Zeitangaben,_rechnen_mit .

Gruß Otto
Titel: Aw: Uhrzeit abfragen
Beitrag von: Maxl am 14 Juli 2025, 14:07:25
Hallo Otto,

Sonnenaufgang 04:24:16

dann liefert mir doch sozusagen

my ($rh, $rm, $rs) = split(':', ReadingsVal("Sonnenaufgang", "time", "00:00:00"));;\
my $sr_time = $rh*3600 + $rm*60 + $rs;;\

die Sekunden seit Mitternacht - 1h

das
my $now = time() % 86400;;
stimmt ja, 39484s nach Mitternacht

warum nun das Endergbnis ein anderes ist verstehe ich nicht.
Titel: Aw: Uhrzeit abfragen
Beitrag von: Otto123 am 14 Juli 2025, 14:13:03
dann zeig mal ein list Sonnenaufgang - ich sehe wie gesagt kein Reading time in deinem code.

Vermutung: Du hast das mal irgendwie gesetzt, sonst würde Deine Rechnung ja 0 zurück liefern.
Titel: Aw: Uhrzeit abfragen
Beitrag von: Maxl am 14 Juli 2025, 14:19:01
Dürfte das sein

Internals:
   FUUID      5db5dd63-f33f-349b-fd71-a3481e7b1ab8f646
   NAME       Sonnenaufgang
   NR         58
   STATE      04:24:16
   TYPE       dummy
   READINGS:
     2025-07-13 00:07:00   state           04:24:16
     2025-07-14 07:38:48   time            01:00:28
Attributes:
   room       Zeit

kann es sein das ich state verwenden mus und nicht time um meinen richtigen Wert zu erhalten?
Dumme Frage, was ist der Unterschied zwischen state und time.

Titel: Aw: Uhrzeit abfragen
Beitrag von: Otto123 am 14 Juli 2025, 21:35:28
Eigentlich kannst nur Du Dir Deine Fragen beantworten. ;)
In Deinem at oben setzt Du state mit sunrise / sunset (du führst ein set aus, dies setzt das Reading state)

Der Wert in state sieht so sinnvoll aus, zumindest laut Deiner Erklärung oben.

Woher der Wert im Reading time kommt? Da habe ich keine Ahnung, da steht aber ein Wert drin, der Dein Rechenergebnis erklärt.
Zitat von: Maxl am 14 Juli 2025, 14:19:01kann es sein das ich state verwenden mus und nicht time um meinen richtigen Wert zu erhalten?
würde ich vorsichtig mit ja beantworten.
Zitat von: Maxl am 14 Juli 2025, 14:19:01Dumme Frage, was ist der Unterschied zwischen state und time.
wie gesagt, kannst nur Du erklären, wie Du siehst steht da aber ein (Zeit) Wert drin, der heute morgen geschrieben wurde.
Titel: Aw: Uhrzeit abfragen
Beitrag von: Prof. Dr. Peter Henning am 15 Juli 2025, 08:56:34
Zitat von: Maxl am 14 Juli 2025, 13:00:29ich habe ein generelles Problem mit der Uhrzeit
Typisches Anfängerdenken, viel zu kompliziert...

1.Tipp: Modul Astro verwenden, statt eigene Dummy-Devices zu befüllen.
2.Tipp: Modul YAAHM verwenden, um Schaltvorgänge an solche Zeiten zu koppeln.

LG

pah