FHEM Forum

FHEM - Hausautomations-Systeme => Unterstützende Dienste => Thema gestartet von: Thorsten Pferdekaemper am 08 Juli 2019, 16:53:27

Titel: [Astro] POSIX::tzset not implemented on this architecture at...
Beitrag von: Thorsten Pferdekaemper am 08 Juli 2019, 16:53:27
Hi,
ein "define astro Astro" macht seit kurzem das hier im Log:

POSIX::tzset not implemented on this architecture at ./FHEM/95_Astro.pm line 1859.

...und das ist das letzte was FHEM dann tut.
Für mich ist das nicht wirklich schlimm, da das nur eine Wimdows-Testinstanz ist. Ich dachte aber, die Maintainer interessiert das vielleicht.
Gruß,
   Thorsten
Titel: Antw:[Astro] POSIX::tzset not implemented on this architecture at...
Beitrag von: CoolTux am 08 Juli 2019, 16:55:45
Hallo Thorsten,

Welche Perl ersion verwendest Du unter Windows?
Titel: Antw:[Astro] POSIX::tzset not implemented on this architecture at...
Beitrag von: Thorsten Pferdekaemper am 08 Juli 2019, 17:02:45
Hi,
das ist StrawberryPerl. "perl -v" sagt das hier:

This is perl 5, version 26, subversion 2 (v5.26.2) built for MSWin32-x64-multi-thread

Gruß,
   Thorsten
Titel: Antw:[Astro] POSIX::tzset not implemented on this architecture at...
Beitrag von: CoolTux am 08 Juli 2019, 17:04:38
Danke Dir.
Scheint aber so das es diese Funktion erst gar nicht gibt unter Windows Perl.
Weiß jemand ob es generell das POSIX unter Windows Perl gibt?
Muss da mal schauen.
Titel: Antw:[Astro] POSIX::tzset not implemented on this architecture at...
Beitrag von: CoolTux am 08 Juli 2019, 17:07:58
https://mid.as/kb/00057/posix-tzset-not-implemented-on-this-architecture

Scheint nur Strawberry Perl zu betreffen.
Titel: Antw:[Astro] POSIX::tzset not implemented on this architecture at...
Beitrag von: Loredo am 08 Juli 2019, 17:38:56
tzset() wird aus Portabilitätsgründen explizit aufgerufen. Theoretisch ruft localtime() diese Funktion ebenfalls auf, womöglich hat localtime() bei StrawberryPerl eine spezielle Handhabung dafür.
Ich setze den Befehl mal als optional, so dass er nur ausgeführt wird, wenn er auch vorhanden ist. Entweder funktioniert die Veränderung der Zeitzone unter Windows damit oder nicht - im Zweifel bleibt es einfach bei der im System eingestellten Zeitzone, was sicherlich für die meisten auch kein Beinbruch ist. Die Funktion kommt ohnehin nur dann zum tragen, wenn man eine andere Zeitzone in FHEM konfiguriert hat oder beim Getter eine andere Zeitzone mit angeben möchte.
Titel: Antw:[Astro] POSIX::tzset not implemented on this architecture at...
Beitrag von: Thorsten Pferdekaemper am 30 Oktober 2019, 10:30:36
Hi,
ich bin jetzt mal wieder darüber gestolpert. Die Änderung hilft nichts, es kommt immer noch zum selben Fehler. In 95_Astro.pm findet man jetzt diese Zeile:

    tzset() if ( exists &{'tzset'} );

Das "if exists" bringt aber nichts, da die Funktion schon existiert aber halt beim Aufruf den Fehler produziert. Man müsste also entweder wirklich auf's OS abfragen oder sowas machen:

eval { tzset() };

Das mit dem eval habe ich ausprobiert.
Allerdings habe ich Hinweise darauf gefunden, dass man das tzset gar nicht mehr braucht:
Zitat
TL;DR: Starting with Perl v5.8.9 (released in 2011) calling tzset when changing $ENV{TZ} isn't needed anymore.
Das ist aus https://stackoverflow.com/questions/38276673/when-does-a-perl-script-need-to-call-tzset-before-calling-localtime

Letzteres habe ich allerdings nicht ausprobiert. Mit dem eval wäre man daher wahrscheinlich auf der sicheren Seite.

Wie vorher schon gesagt: Meine Windows-FHEM ist nur Spiel und Test. Für mich ist das also nicht wirklich wichtig.
Gruß,
   Thorsten

Titel: Antw:[Astro] POSIX::tzset not implemented on this architecture at...
Beitrag von: Loredo am 28 Dezember 2019, 15:44:05
Ja, der explizite Befehl ist wie gesagt für die Kompatibilität da.
Ich habe das Eval mal in der Git Version hinzugefügt, wird dann bei Zeiten mal den Weg ins SVN finden.
Titel: Antw:[Astro] POSIX::tzset not implemented on this architecture at...
Beitrag von: Christoph Morrison am 03 September 2020, 22:56:29
Zitat von: Loredo am 28 Dezember 2019, 15:44:05
Ja, der explizite Befehl ist wie gesagt für die Kompatibilität da.
Ich habe das Eval mal in der Git Version hinzugefügt, wird dann bei Zeiten mal den Weg ins SVN finden.

Ist das eigentlich geschehen?