Sommerzeit/Normalzeit als DOIF Objekt

Begonnen von Loredo, 13 Oktober 2015, 10:28:47

Vorheriges Thema - Nächstes Thema

Xell1984

Zitat von: Damian am 06 März 2018, 19:25:24
Ich denke, den Aufwand kannst du dir sparen. Ich habe die Zeitumstellung im Modul berücksichtigt ;)

Ah ok, schon länger? Danke! :)
Razpberry on Raspberry Pi 3 mit Raspian Jessy

Damian

Schon immer.

Bsp.:

DOIF ([07:00) (...)


Das Modul triggert immer um sieben Uhr vor und nach der Zeitumstellung.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Xell1984

#17
Zitat von: Damian am 06 März 2018, 22:02:27
Schon immer.

Bsp.:

DOIF ([07:00) (...)


Das Modul triggert immer um sieben Uhr vor und nach der Zeitumstellung.

Guten Morgen,

ich hab gestern nicht richtig über deine Antwort nachgedacht.

Genau das ist in meinem Fall nämlich das "Problem" am Tag der Zeitumstellung.

Meine Jalousienautomatik läuft nicht mit Festen Uhrzeiten sondern z.B. mit Twilight (Sunrise) in einem Bestimmten Zeitrahmen. D.h. am Tag der Zeitumstelllung Würde nach alter Zeit der Timer auf z.B. 6:50 generiert, aber da ist es noch Dunkel, weil nach neuer Zeit müsste dann die Jalousie erst um 7:50 Uhr Hochfahren. Abends fährt sie dann um 17 Uhr runter, obwohl Sie nach Zeitumstellung erst gegen 18 Uhr runter fahren müsste. Ist klagen auf Hohem Niveau, da es genau 2 Tage im Jahr betrifft wo meine Jalousienautomatik nicht Sauber läuft.

Daher müsste ich entweder die DOIFs nach der Zeitumstellung neu Initialisieren oder FHEM neustarten lassen (dann werden vermutlich ja auch alle Timer neu generiert?).

Der Fehler entsteht wohl im twilight Modul.

Razpberry on Raspberry Pi 3 mit Raspian Jessy

Damian

Zitat von: Xell1984 am 07 März 2018, 08:04:49
Guten Morgen,

ich hab gestern nicht richtig über deine Antwort nachgedacht.

Genau das ist in meinem Fall nämlich das "Problem" am Tag der Zeitumstellung.

Meine Jalousienautomatik läuft nicht mit Festen Uhrzeiten sondern z.B. mit Twilight (Sunrise) in einem Bestimmten Zeitrahmen. D.h. am Tag der Zeitumstelllung Würde nach alter Zeit der Timer auf z.B. 6:50 generiert, aber da ist es noch Dunkel, weil nach neuer Zeit müsste dann die Jalousie erst um 7:50 Uhr Hochfahren. Abends fährt sie dann um 17 Uhr runter, obwohl Sie nach Zeitumstellung erst gegen 18 Uhr runter fahren müsste. Ist klagen auf Hohem Niveau, da es genau 2 Tage im Jahr betrifft wo meine Jalousienautomatik nicht Sauber läuft.

Daher müsste ich entweder die DOIFs nach der Zeitumstellung neu Initialisieren oder FHEM neustarten lassen (dann werden vermutlich ja auch alle Timer neu generiert?).

Der Fehler entsteht wohl im twilight Modul.

Wenn du nach der Zeitumstellung andere Zeiten haben willst, als vorher, dann wirst du dich selbst drum kümmern müssen, in dem du indirekte Zeiten benutzt, die du, wie auch immer anpassen musst, dann wird automatisch die Zeit im Modul neuberechnet.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

chq

Hallo,

ich habe auf der Suche nach der Bedeutung von "istdst" brav in der ComandRef gesucht und habe (nur) das hier gefunden:

IsDST = 1 if running on daylight savings time, 0 otherwise

Ich bin auf der Suche nach einer Möglichkeit, innerhalb eines DOIFs nach Sommer- und Winterzeit abzufragen.

Was ist "daylight savings time"?

Gruß Chris
So einfach wie möglich, so kompliziert wie nötig

yersinia

Zitat von: chq am 16 Mai 2021, 09:21:52Was ist "daylight savings time"?
Sommerzeit.
ZitatDaylight Saving Time, siehe Sommerzeit
https://de.wikipedia.org/wiki/DST

$isdst müsste 1 wiedergeben, wenn Sommerzeit (DST) gesetzt ist.
@Damian: hängt das von den Systemzeiteinstellungen oder DOIF ab?
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Damian

Zitat von: yersinia am 16 Mai 2021, 13:26:48
Sommerzeit.https://de.wikipedia.org/wiki/DST

$isdst müsste 1 wiedergeben, wenn Sommerzeit (DST) gesetzt ist.
@Damian: hängt das von den Systemzeiteinstellungen oder DOIF ab?

$isdst wird vom System bestimmt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Doogy

Hallo zusammen,

ich habe seitdem es "Winterzeit" ist folgendes Problem.
Ich nutze den Codeschnipsel zur Ausgabe ob Winter- oder Sommerzeit schon seit ein paar Jahren, jetzt ist es allerdings so, dass er nach der automatischen Abfrage auf "Sommer" steht, wenn ich aber ein manuelles "Checkall" mache, wird es wieder Winter.

Kann mir dabei jemand helfen??

VG Felix

Damian

Immer ein List vom vermeintlich falschen Zustand des Moduls posten.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Doogy

Hallo Damian,

hier der Auszug aus der fhem.cfg


define SommerzeitWinterzeit DOIF (([02:00] or [03:00]) and $isdst) DOELSE
setuuid SommerzeitWinterzeit 5e83080c-f33f-64a8-2ab9-528ef299b3ddef2f
attr SommerzeitWinterzeit cmdState summer|winter
attr SommerzeitWinterzeit event-on-change-reading state
attr SommerzeitWinterzeit eventMap winter:Winter summer:Sommer initialized:---
attr SommerzeitWinterzeit icon time_clock
attr SommerzeitWinterzeit room Kalender,Rollladen


und hier das list


Internals:
   DEF        (([02:00] or [03:00]) and $isdst) DOELSE
   FUUID      5e83080c-f33f-64a8-2ab9-528ef299b3ddef2f
   MODEL      FHEM
   NAME       SommerzeitWinterzeit
   NOTIFYDEV  global
   NR         276
   NTFY_ORDER 50-SommerzeitWinterzeit
   STATE      Sommer
   TYPE       DOIF
   VERSION    24905 2021-09-01 18:35:54
   READINGS:
     2021-10-14 02:00:00   cmd             1
     2021-10-14 02:00:00   cmd_event       timer_1
     2021-10-14 02:00:00   cmd_nr          1
     2021-10-13 16:26:37   mode            enabled
     2021-10-14 02:00:00   state           summer
     2021-10-14 02:00:00   timer_01_c01    15.10.2021 02:00:00
     2021-10-14 03:00:00   timer_02_c01    15.10.2021 03:00:00
   Regex:
     accu:
     collect:
   attr:
     cmdState:
       0:
         summer
       1:
         winter
     wait:
     waitdel:
   condition:
     0          (::DOIF_time_once($hash,0,$wday) or ::DOIF_time_once($hash,1,$wday)) and $isdst
   days:
   do:
     0:
       0         
     1:
       0         
   helper:
     DEVFILTER  ^global$
     NOTIFYDEV  global
     event      timer_2
     globalinit 1
     last_timer 2
     sleeptimer -1
     timerdev   
     timerevent timer_2
     triggerDev
     timerevents:
       timer_2
     timereventsState:
       timer_2
     triggerEvents:
       timer_2
     triggerEventsState:
       timer_2
   interval:
   intervalfunc:
   localtime:
     0          1634256000
     1          1634259600
   realtime:
     0          02:00:00
     1          03:00:00
   time:
     0          02:00:00
     1          03:00:00
   timeCond:
     0          0
     1          0
   timer:
     0          0
     1          0
   timers:
     0           0  1
   triggertime:
     1634256000:
       localtime  1634256000
       hash:
     1634259600:
       localtime  1634259600
       hash:
   uiState:
   uiTable:
Attributes:
   cmdState   summer|winter
   event-on-change-reading state
   eventMap   winter:Winter summer:Sommer initialized:---
   icon       time_clock
   room       Kalender,Rollladen


Jamo

Hallo Damian,
ist bei mir ähnlich, im Moment ist ja noch Sommerzeit, aber ein 'set SommerzeitWinterzeit checkall' ergibt "Winter" für heute:


defmod SommerzeitWinterzeit DOIF (([02:00] or [03:00]) and $isdst) ({fhem("\"cp /opt/fhem/www/pgm2/station-clock.js.sommerzeit /opt/fhem/www/pgm2/station-clock.js\"")}) DOELSE({fhem("\"cp /opt/fhem/www/pgm2/station-clock.js.winterzeit /opt/fhem/www/pgm2/station-clock.js\"")})
attr SommerzeitWinterzeit cmdState summer|winter
attr SommerzeitWinterzeit comment (([02:00] or [03:00]) and $isdst) DOELSE()
attr SommerzeitWinterzeit event-on-change-reading state
attr SommerzeitWinterzeit eventMap eventMap summer:Sommer winter:Winter initialized:---
attr SommerzeitWinterzeit room System,Weather

setstate SommerzeitWinterzeit Winter
setstate SommerzeitWinterzeit 2021-10-14 19:03:15 cmd 2
setstate SommerzeitWinterzeit 2021-10-14 19:03:15 cmd_event SommerzeitWinterzeit
setstate SommerzeitWinterzeit 2021-10-14 19:03:15 cmd_nr 2
setstate SommerzeitWinterzeit 2021-10-14 19:03:15 state winter
setstate SommerzeitWinterzeit 2021-10-14 02:00:00 timer_01_c01 15.10.2021 02:00:00
setstate SommerzeitWinterzeit 2021-10-14 03:00:00 timer_02_c01 15.10.2021 03:00:00


Internals:
   DEF        (([02:00] or [03:00]) and $isdst) ({fhem("\"cp /opt/fhem/www/pgm2/station-clock.js.sommerzeit /opt/fhem/www/pgm2/station-clock.js\"")}) DOELSE({fhem("\"cp /opt/fhem/www/pgm2/station-clock.js.winterzeit /opt/fhem/www/pgm2/station-clock.js\"")})
   FUUID      5c42ee3e-f33f-97bf-ef38-fbfe31549a9430d7
   MODEL      FHEM
   NAME       SommerzeitWinterzeit
   NOTIFYDEV  global
   NR         45
   NTFY_ORDER 50-SommerzeitWinterzeit
   STATE      Winter
   TYPE       DOIF
   VERSION    24905 2021-09-01 18:35:54
   READINGS:
     2021-10-14 19:03:15   cmd             2
     2021-10-14 19:03:15   cmd_event       SommerzeitWinterzeit
     2021-10-14 19:03:15   cmd_nr          2
     2021-10-14 19:03:15   state           winter
     2021-10-14 02:00:00   timer_01_c01    15.10.2021 02:00:00
     2021-10-14 03:00:00   timer_02_c01    15.10.2021 03:00:00
   Regex:
     accu:
     collect:
   attr:
     cmdState:
       0:
         summer
       1:
         winter
     wait:
     waitdel:
   condition:
     0          (::DOIF_time_once($hash,0,$wday) or ::DOIF_time_once($hash,1,$wday)) and $isdst
   days:
   do:
     0:
       0          {fhem("\"cp /opt/fhem/www/pgm2/station-clock.js.sommerzeit /opt/fhem/www/pgm2/station-clock.js\"")}
     1:
       0          {fhem("\"cp /opt/fhem/www/pgm2/station-clock.js.winterzeit /opt/fhem/www/pgm2/station-clock.js\"")}
   helper:
     DEVFILTER  ^global$
     NOTIFYDEV  global
     event      timer_2
     globalinit 1
     last_timer 2
     sleeptimer -1
     timerdev   
     timerevent timer_2
     timerevents
     timereventsState
     triggerDev
     DOIF_eventa:
       cmd_nr: 2
       cmd: 2
       cmd_event: SommerzeitWinterzeit
       winter
     DOIF_eventas:
       cmd_nr: 2
       cmd: 2
       cmd_event: SommerzeitWinterzeit
       state: winter
   interval:
   intervalfunc:
   localtime:
     0          1634256000
     1          1634259600
   perlblock:
   realtime:
     0          02:00:00
     1          03:00:00
   time:
     0          02:00:00
     1          03:00:00
   timeCond:
     0          0
     1          0
   timer:
     0          0
     1          0
   timers:
     0           0  1
   triggertime:
     1634256000:
       localtime  1634256000
       hash:
     1634259600:
       localtime  1634259600
       hash:
   uiState:
   uiTable:
Attributes:
   cmdState   summer|winter
   comment    (([02:00] or [03:00]) and $isdst) DOELSE()
   event-on-change-reading state
   eventMap   eventMap summer:Sommer winter:Winter initialized:---
   room       System,Weather
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

Damian

Zitat von: Jamo am 14 Oktober 2021, 19:06:11
ist bei mir ähnlich, im Moment ist ja noch Sommerzeit, aber ein 'set SommerzeitWinterzeit checkall' ergibt "Winter" für heute:

Abfrage per checkall macht bei dieser Definition keinen Sinn, denn Zeitpunkttrigger [02:00] bzw. [03:00] sind ja nur zu diesem Triggerzeitpunkt wahr und sonst nicht, daher ergibt die AND-Verknüpfung logischerweise false, was zu cmd_2 führt und damit "Winter".
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Zitat von: Doogy am 14 Oktober 2021, 16:43:00
und hier das list


Internals:
   DEF        (([02:00] or [03:00]) and $isdst) DOELSE
   FUUID      5e83080c-f33f-64a8-2ab9-528ef299b3ddef2f
   MODEL      FHEM
   NAME       SommerzeitWinterzeit
   NOTIFYDEV  global
   NR         276
   NTFY_ORDER 50-SommerzeitWinterzeit
   STATE      Sommer
   TYPE       DOIF
   VERSION    24905 2021-09-01 18:35:54
   READINGS:
     2021-10-14 02:00:00   cmd             1
     2021-10-14 02:00:00   cmd_event       timer_1
     2021-10-14 02:00:00   cmd_nr          1
     2021-10-13 16:26:37   mode            enabled
     2021-10-14 02:00:00   state           summer
     2021-10-14 02:00:00   timer_01_c01    15.10.2021 02:00:00
     2021-10-14 03:00:00   timer_02_c01    15.10.2021 03:00:00
...


hier funktioniert alles richtig. Um 02:00 Uhr wurde der Zustand cmd_1 also "Sommer" gesetzt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Jamo

Zitat von: Damian am 16 Oktober 2021, 11:14:45
Abfrage per checkall macht bei dieser Definition keinen Sinn, denn Zeitpunkttrigger [02:00] bzw. [03:00] sind ja nur zu diesem Triggerzeitpunkt wahr und sonst nicht, daher ergibt die AND-Verknüpfung logischerweise false, was zu cmd_2 führt und damit "Winter".
Ja, stimmt, sorry das war Unsinn was ich da gemacht habe. Mea Culpa!
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack