[Gelöst] Endlosschleife in ElectricityCalculator wegen Zeitumstellung?

Begonnen von KyleK, 31 Oktober 2022, 00:09:53

Vorheriges Thema - Nächstes Thema

Nestor

You don't need localtime and can simplify a bit with object chaining.
Maybe implement the timezone as a device attr, since it can be different for users. There is no global timezone support in Fhem I believe.

use 5.030;
use strict;
use warnings;

use DateTime;

my $tz = 'Europe/Brussels'; # implement as device attribute ?
my $dt = DateTime->now()->set_time_zone($tz)->set_hour(0)->set_minute(0)->set_second(0);

say $dt;
say $dt->add(days => 1);


Result:
2022-11-08T00:00:00
2022-11-09T00:00:00

Sailor

Hi Nestor

Zitat von: Nestor am 08 November 2022, 18:23:06
You don't need localtime and can simplify a bit with object chaining.
Ok, fair enough. I used you shorter version


Zitat von: Nestor am 08 November 2022, 18:23:06
Maybe implement the timezone as a device attr, since it can be different for users. There is no global timezone support in Fhem I believe.
I am obtaining the timzone from the system by
my $TimeZone = DateTime::TimeZone->new( name => 'local' )->name();

I am testing the modules over night and then I will check them in.

Regards
    Sailor
******************************
Man wird immer besser...

Sailor

Ein herzerfrischendes "Moin" vom Achtern Diek vorweg!

Aufgrund eines Bugs in den
73_ElectricityCalculator
73_GasCalculator
73_WaterCalculator
mit den Anzahl der Sekunden pro Tag während der Zeitumstellung sowie dem Start der Mitternachtsroutine, bin ich gezwungen die Bibliothek "DateTime" zu verwenden.

Daher bitte unbedingt vor dem Update im linux shell die Bibliohek DateTime nachinstallieren:
sudo cpan install DateTime

ausfuehren!

Ansonsten schmiert Euch euer fhem ab und legt sich in eine Dauer-Startschleife.

Sorry für die Unannehmlichkeiten, aber es ging leider nicht anders.

Gruß
    Sailor
******************************
Man wird immer besser...

Beta-User

Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Nestor

Zitat von: Sailor am 08 November 2022, 20:31:32
my $TimeZone = DateTime::TimeZone->new( name => 'local' )->name();

You can use the string "local" directly (instead of creating a TimeZone object and converting to string).

my $dt = DateTime->now()->set_time_zone('local');
say $dt->time_zone;


Result:

DateTime::TimeZone::Europe::Brussels=HASH(0x5628649f3a00)

Beta-User

Können wir bitte in Ruhe nochmal checken, welche Lösung ggf. Sinn macht, ohne für die kommenden Monate einen unabsehbaren support-Aufwand zu generieren?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

betateilchen

Zitat von: Sailor am 08 November 2022, 20:38:17
Ansonsten schmiert Euch euer fhem ab und legt sich in eine Dauer-Startschleife.

Sorry für die Unannehmlichkeiten, aber es ging leider nicht anders.

Sorry Herr Nachbar, aber das ist Quatsch. Du kannst doch einfach prüfen, ob das benötigte Modul geladen werden kann und wenn das nicht der Fall ist, eine Logmeldung ausgeben und die Verarbeitung beenden.

Da muss man doch keine Dauerschleife für das gesamte System provozieren.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

KölnSolar

ZitatKönnen wir bitte in Ruhe nochmal checken, welche Lösung ggf. Sinn macht, ohne für die kommenden Monate einen unabsehbaren support-Aufwand zu generieren?
Sehe ich ähnlich. Nach Nestors Analyse nutzen ja eine Menge Module einen "Tageswechselcheck" per 86.400s. Dann sollte aber auch eine allgemeine Lösung(zentrale Funktion) gefunden und mit den anderen maintainern diskutiert werden. Dauert zwar länger, aber eine Hals-über-Kopf-Lösung ist doch gar nicht notwendig. Das "Problem" kommt doch frühestens Ende März wieder.  :-\

Zitat von: Sailor am 08 November 2022, 20:38:17
Ein herzerfrischendes "Moin" vom Achtern Diek vorweg!

Aufgrund eines Bugs in den
73_ElectricityCalculator
73_GasCalculator
73_WaterCalculator
mit den Anzahl der Sekunden pro Tag während der Zeitumstellung sowie dem Start der Mitternachtsroutine, bin ich gezwungen die Bibliothek "DateTime" zu verwenden.

Daher bitte unbedingt vor dem Update im linux shell die Bibliohek DateTime nachinstallieren:
sudo cpan install DateTime

ausfuehren!

Ansonsten schmiert Euch euer fhem ab und legt sich in eine Dauer-Startschleife.

Sorry für die Unannehmlichkeiten, aber es ging leider nicht anders.

Gruß
    Sailor
Viele sind wenig bedarft im Umgang mit dem OS. Und viele fahren mit Debian und nutzen apt zur "Systempflege".  DateTime ist wohl in libdatetime-perl enthalten und dann braucht es kein cpan zur Installation.
Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Sailor

Hi BetaUser

Zitat von: Beta-User am 08 November 2022, 20:45:46
Doch... nocheck!

Habe sie noch nicht eingecheckt.
Ich will da noch ein wenig Zeit in Land streichen lassen...

Es gibt hier noch interessante Verbesserungsvorschläge von betateilchen und Nestor die ich wohl erst mit einarbeiten will.

Gruß
    Sailor
******************************
Man wird immer besser...

Sailor

Hallo betateilchen

Zitat von: betateilchen am 08 November 2022, 22:10:16
Sorry Herr Nachbar, aber das ist Quatsch. Du kannst doch einfach prüfen, ob das benötigte Modul geladen werden kann und wenn das nicht der Fall ist, eine Logmeldung ausgeben und die Verarbeitung beenden.
Da muss man doch keine Dauerschleife für das gesamte System provozieren.


Seit 2 Jahren suche ich mir im fhem - Developer Board nach genau dieser Möglichkeit einen Wolf.
Das ist generell genau ein Problem mit allen Modulen und mich hat es ohnehin gewundert, warum das nicht auf übergeordneter Ebene bereits abgefangen wird.
Dort könnte man dann auch gleich die entsprechenden Module automatisch nachinstallieren.

Wenn du mir ein Code-Schnipsel nennen oder auch nur einen Hinweis zum Lesen geben kannst wie man dieses Problem löst, dann hast du bei mir einen Whiskey gut.  ;)

Gruss
    Sailor
******************************
Man wird immer besser...

Sailor

Hi Markus

Zitat von: KölnSolar am 09 November 2022, 06:53:30
Sehe ich ähnlich. Nach Nestors Analyse nutzen ja eine Menge Module einen "Tageswechselcheck" per 86.400s. Dann sollte aber auch eine allgemeine Lösung(zentrale Funktion) gefunden und mit den anderen maintainern diskutiert werden. Dauert zwar länger, aber eine Hals-über-Kopf-Lösung ist doch gar nicht notwendig. Das "Problem" kommt doch frühestens Ende März wieder.  :-\
Viele sind wenig bedarft im Umgang mit dem OS. Und viele fahren mit Debian und nutzen apt zur "Systempflege".  DateTime ist wohl in libdatetime-perl enthalten und dann braucht es kein cpan zur Installation.

Da gebe ich dir vollkommen Recht!

Aus meiner Sicht sollte es in der fhem.pl einige nützliche Funktionen mehr geben.

Zum Beispiel die besagte "getSecondsOfDay()" mit der Aufruf-Option
getSecondsOfDay(0) -> heute
getSecondsOfDay(+1) -> Morgen
getSecondsOfDay("2023-03-26") -> Vom 26. März 2023

Damit wären die 86400 endgültig Mausetot!

Anderes Beispiel zum Starten von Mitternachtsroutinen ein "getEpochOfMidnight()"
Diese werden beim InternalTimer benötigt.

Gruß
    Sailor
******************************
Man wird immer besser...

KölnSolar

Hi Sailor,
bin zwar zu weit weg für den Whisky(den kannst Du ja Udo rüber bringen), aber so mach ich es eval {require Time::HiRes; 1;}
or do {
return "......Module Time:HiRes not installed. Check perl libraries'";
};


ZitatDa gebe ich dir vollkommen Recht!
Schön. Machst Du dann einen neuen Faden im Development Bereich ?

Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Sailor

Hi Markus

Zitat von: KölnSolar am 09 November 2022, 12:01:37
Hi Sailor,
bin zwar zu weit weg für den Whisky(den kannst Du ja Udo rüber bringen)
Der wird sich sicher freuen!

Zitat von: KölnSolar am 09 November 2022, 12:01:37
so mach ich es


eval {require Time::HiRes; 1;}
or do {
return "......Module Time:HiRes not installed. Check perl libraries'";
};


OK, hatte immer wieder mit dem Standard Modul ExtUtils::Installed eingelesen.

Aber die Frage die sich bei beiden Lösungen stellt ist die, ob ich das Ganze am geschicktesten über oder in die Subfunktion "X_Initialize()" stelle...

Zitat von: KölnSolar am 09 November 2022, 12:01:37
Schön. Machst Du dann einen neuen Faden im Development Bereich ?
Sobald ich dieses Problem gelöst habe, mache ich mich ran...

Die derzeitig eingecheckten Module werden wohl am 30.11. Schwierigkeiten bereiten weil sie versuchen den 31.11. zu berechnen.
Ein saudummer Fehler meinerseits im letzten Update.
Bis dahin habe ich noch 21 Tage Zeit...

Gruß
   Sailor
******************************
Man wird immer besser...

KölnSolar

ZitatAber die Frage die sich bei beiden Lösungen stellt ist die, ob ich das Ganze am geschicktesten über oder in die Subfunktion "X_Initialize()" stelle...
Initialize, Define... lasse ich durchlaufen. Dann hat der Anwender wenigstens sein device anlegen können(schlimmstenfalls ja ein altes device, welches dann nach einem update/restart "plötzlich" verschwunden ist. Und man merkt es erst einmal nicht.
Erst wenn ich das Modul bei einer Interaktion benötige, prüfe ich und der User sieht die Meldung ggfs. hoffentlich online.

Ist bei Dir natürlich anders, da es ja keine Interaktion gibt. Ich würde das Log fluten.....

Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Beta-User

Zitat von: Sailor am 09 November 2022, 07:22:24
Hi BetaUser

Habe sie noch nicht eingecheckt.
So war es nicht gemeint, das bezog sich auf die "nocheck"-Variante von timelocal...

Für die Kommandozeile:
{ my $ts=1669836392;; my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($ts);; return localtime(Time::Local::timelocal_nocheck(0,0,0,$mday+1,$mon,$year)) }
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files