Hauptmenü

Uhrzeit abfragen

Begonnen von Maxl, 14 Juli 2025, 13:00:29

Vorheriges Thema - Nächstes Thema

Maxl

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
FHEM auf Raspberry mit HM, HMC und AVR Netios.

Otto123

#1
Hi,

  • time() liefert die Sekunden seit dem 1.1.1970 , was Du ausrechnest könnten die Tage seit dem sein? (edit: falsch gedacht)
  • In Deinem ReadingsVal liest Du das Reading time, wo setzt Du das? Mit deinem anderen at setzt du ja den state - oder sehe ich es falsch?

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

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Maxl

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.
FHEM auf Raspberry mit HM, HMC und AVR Netios.

Otto123

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.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Maxl

#4
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.

FHEM auf Raspberry mit HM, HMC und AVR Netios.

Otto123

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.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Prof. Dr. Peter Henning

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