Wandthermostat "set <device> sysTime" bei Zeitabweichungen automatisch ausführen

Begonnen von hauwech, 02 Dezember 2014, 15:17:42

Vorheriges Thema - Nächstes Thema

hauwech

Hallo zusammen,
ich bräuchte mal Hilfe von Perl-Ahnunghabern.
Ich habe festgestellt, daß hin und wieder mal die Systemzeit meines HM-TC-IT-WM-W-EU um viele Stunden abweicht. Es sieht so aus, als ob jedes Mal, wenn der HMLAN Config einen Disconnect hatte, die Zeit des Wandthermostaten aus dem Ruder läuft. Ich nutze die Zeittabelle des WT, um den Heizungsthermostaten im Bad zu steuern. Durch die sporadischen Zeitabweichungen kann es passieren, daß man morgens im kalten Bad steht. Das hätte fatale Auswirkungen beim WAF und sollte unbedingt vermieden werden ;-).
Meine erste Idee:
- in der 99_myUtils.pm eine Routine einbauen, die die Zeitdifferenz ermittelt:
sub GetWTTimeDiff($) {
    my $device = shift;
    my $WTTime = { fhem ("get $device param HMLAN1_TIME")};
    Log 3, $WTTime;
    my $t = Time::Piece->strptime($WTTime, "%Y-%m-%d %H:%M:%S");
    my $Diff = abs(localtime(time) - localtime($t));
    return ($Diff);
}


und das dann abhängig von der tolerierten Differenz in einem notify verwursten, der auf ".*:reappeared (HMLAN1)" reagiert.

Ich habe zum Testen ein "at" angelegt, das die Subroutine aufruft. Dummerweise ist der Rückgabewert des { fhem ("get $device param HMLAN1_TIME")}; laut Log
HASH(0x32a46e8)
was das anschließende Parsen fehlschlagen läßt. Wenn ich { fhem ("get <devicename> param HMLAN1_TIME")} in der command line aufrufe, kommt sauber 2014-12-02 14:34:21 zurück.
Wenn ich my $WTTime = Value({ fhem ("get $device param HMLAN1_TIME")}); verwende, ist $WTTime ganz leer.

Kann mir jemand auf die Sprünge helfen, wie ich aus dem zurückgelieferten HASH(0x32a46e8) den Datetime-String zurückgewinnen kann? Der zurückgegebene Wert ändert sich mit jedem Aufruf, da sollte also schon Datum/Zeit drinstecken.

Besten Dank
Roland
Fhem auf Intel NUC11TNKi5+M2 NVMe+32GB RAM mit Ubuntu 22.04 LTS

Rohan

Hi

Dürfte unixtime sein: hex2dec 32a46e8 = 53102312

Und dann mal hier eingeben.

Passt das?

Gruß
Thomas

Edith meint:
P.S. Solltest du nicht besser der Ursache für die Systemzeitabweichungen auf den Grund gehen?
Fhem auf Mini-ITX mit Celeron 2-Core, HMLAN (> 55 Devices), CUL (FS20 und EM), RFXtrx 433E, Arduino (einige DS18B20), RPi mit 1-Wire (DS2423 für S0-Signale, DS18B20+), RPi/Arduino mit MQ-5 und MQ-9 (CO- und CNG/LPG-Sensor), CO-20 IAQ Sensor

justme1968

das ist die adresse des hash in dem der rückgabewert steckt. den Inhalt kannst du dir mit Data::Dumper ausgeben lassen. also so: {Dumper fhem(...)}

warum da ein hash statt einem string zurück kommt verstehe ich aber gerade nicht. ist dein fhem aktuell?

ich meine da sollte ein string mit einer zeile pro device zurück kommen.

gruß
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

hauwech

@ Thomas: paßt nicht, da kommt der 07.09.1971 - 15:38:32 raus, sollte aber heute so um 14:00 Uhr rum gewesen sein.
@Andre: "version" spuckt "# $Id: fhem.pl 6913 2014-11-08 10:32:44Z rudolfkoenig $ " aus, das letzte fhem Update habe ich letzte Woche gemacht.
my $WTTime = {Dumper fhem ("get $device param HMLAN1_TIME")}; gibt auch "HASH(0x33d6880)" aus.

Gruß Roland
Fhem auf Intel NUC11TNKi5+M2 NVMe+32GB RAM mit Ubuntu 22.04 LTS

Rohan

Hi,

war wohl Mist, den ich da verzapft habe  :o

Ich lass den Blödsinn aber stehen, denn die Antwort von andre folgt ja auf dem Fuß.

Der wird dir bei deinem real existierenden Problem eher helfen können als ich.

Gruß
Thomas
Fhem auf Mini-ITX mit Celeron 2-Core, HMLAN (> 55 Devices), CUL (FS20 und EM), RFXtrx 433E, Arduino (einige DS18B20), RPi mit 1-Wire (DS2423 für S0-Signale, DS18B20+), RPi/Arduino mit MQ-5 und MQ-9 (CO- und CNG/LPG-Sensor), CO-20 IAQ Sensor

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

hauwech

Fhem auf Intel NUC11TNKi5+M2 NVMe+32GB RAM mit Ubuntu 22.04 LTS

hauwech

Fhem auf Intel NUC11TNKi5+M2 NVMe+32GB RAM mit Ubuntu 22.04 LTS

justme1968

dann bau den Dumper aufruf in die log zeile mit ein. direkt vor die variable.

ich sehe gerade dein problem. die geschweiften klammern um den fhem aufruf gehören da nicht hin.

du bist schon auf perl ebene. die klammern machen dann genau den hash draus. also so muss es sein: my $WTTime = fhem(...);

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

hauwech

Fhem auf Intel NUC11TNKi5+M2 NVMe+32GB RAM mit Ubuntu 22.04 LTS

frank

werden die tc-it nicht alle 24h neu gesetzt? warum nicht den befehl set <dev> sysTime ohne prüfung einfach absetzen? alle 24 std 1-2 std vor dem badbesuch.

ZitatEs sieht so aus, als ob jedes Mal, wenn der HMLAN Config einen Disconnect hatte, die Zeit des Wandthermostaten aus dem Ruder läuft.
schon mal den hmlan neu gebootet? (stecker ziehen)
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

hauwech

Hallo Frank,

Zitatwerden die tc-it nicht alle 24h neu gesetzt?
ja, es wird einmal täglich ein Timerequest abgesetzt.
Zitatwarum nicht den befehl set <dev> sysTime ohne prüfung einfach absetzen?
Das habe ich bisher einmal stündlich so gemacht, aber das finde ich nicht so schön. Meiner Meinung nach ist es besser, ereignisorientiert vorzugehen, weil man nicht weiß, WANN ein disconnect/reappear eintritt. Aber hauptsächlich helfen mir solche kleinen Sachen, mich in das System einzufuchsen und ich finde es gut, wenn man eine Idee umsetzen kann, daß es so funktioniert, wie man sich das vorgestellt hat - halt einfach "Basteltrieb".
Zitatschon mal den hmlan neu gebootet? (stecker ziehen)
Ich habe ihn zugegebenermaßen lange nicht gebootet->
ZitatNever touch a running system :)
Und ich weiß, daß ich an den letzten disconnects selber schuld war, weil ich die Netzwerkinterfaces meines VM-Hosts umkonfiguriert habe. Ich fahre mein fhem in einer Ubuntu Hyper-V VM.

Gruß Roland
Fhem auf Intel NUC11TNKi5+M2 NVMe+32GB RAM mit Ubuntu 22.04 LTS

frank

ZitatIch habe ihn zugegebenermaßen lange nicht gebootet
kennst du diesen thread? http://forum.fhem.de/index.php/topic,28088.msg215924.html#msg215924

ZitatNever touch a running system :)
nach deinen beschreibungen stimmt das ja nun nicht wirklich.  ;)
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

hauwech

Ja, den thread kenne ich, dadurch hat sich meine Aufmerksamkeit auf den disconnect des HMLAN gerichtet.
Zitatnach deinen beschreibungen stimmt das ja nun nicht wirklich.
... aber fast  ;D
Fhem auf Intel NUC11TNKi5+M2 NVMe+32GB RAM mit Ubuntu 22.04 LTS

Rohan

Hi,

@andre:

Zitat von: justme1968 am 02 Dezember 2014, 17:38:20... du bist schon auf perl ebene. die klammern machen dann genau den hash draus. also so muss es sein: my $WTTime = fhem(...);

Ich bin gerade in die gleiche "Sauce" getappt. Ich habe etwas neues angefangen (Abfrage der holiday-readings). Ich habe - zur Syntax in der 99-myUtils.cfg - dabei das Fhem-Wiki als Vorlage genommen.

Dort ist die Klammerung mit {fhem ( .... )} manifestiert, es erscheint aber auch eine Syntax a la { fhem ...}, also ohne "(" und ")", in dem ersten Beispiel. Da ich gerade ziemlichen Stress habe... könnte jemand mit Wiki-Zugriff das evtl. richten?

Edith möchte ergänzen: Ich fühle mich da auch nicht "sattelfest" genug, dass alles auch richtig zu korrigieren.

Danke und Gruß
Thomas
Fhem auf Mini-ITX mit Celeron 2-Core, HMLAN (> 55 Devices), CUL (FS20 und EM), RFXtrx 433E, Arduino (einige DS18B20), RPi mit 1-Wire (DS2423 für S0-Signale, DS18B20+), RPi/Arduino mit MQ-5 und MQ-9 (CO- und CNG/LPG-Sensor), CO-20 IAQ Sensor