FHEM Forum

FHEM - Hausautomations-Systeme => Homematic => Thema gestartet von: hauwech am 02 Dezember 2014, 15:17:42

Titel: Wandthermostat "set <device> sysTime" bei Zeitabweichungen automatisch ausführen
Beitrag von: hauwech am 02 Dezember 2014, 15:17:42
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
Titel: Antw:Wandthermostat "set <device> sysTime" bei Zeitabweichungen automatisch ausführen
Beitrag von: Rohan am 02 Dezember 2014, 15:57:51
Hi

Dürfte unixtime sein: hex2dec (http://www.binaryhexconverter.com/hex-to-decimal-converter) 32a46e8 = 53102312

Und dann mal hier (http://www.unixtime.de/) eingeben.

Passt das?

Gruß
Thomas

Edith meint:
P.S. Solltest du nicht besser der Ursache für die Systemzeitabweichungen auf den Grund gehen?
Titel: Antw:Wandthermostat &quot;set &lt;device&gt; sysTime&quot; bei Zeitabweichungen automatisch ausführe
Beitrag von: justme1968 am 02 Dezember 2014, 16:10:16
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
Titel: Antw:Wandthermostat "set <device> sysTime" bei Zeitabweichungen automatisch ausführen
Beitrag von: hauwech am 02 Dezember 2014, 16:31:01
@ 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
Titel: Antw:Wandthermostat "set <device> sysTime" bei Zeitabweichungen automatisch ausführen
Beitrag von: Rohan am 02 Dezember 2014, 16:36:03
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
Titel: Antw:Wandthermostat &quot;set &lt;device&gt; sysTime&quot; bei Zeitabweichungen automatisch ausführe
Beitrag von: justme1968 am 02 Dezember 2014, 16:47:25
erst mal ohne alle zuweisung direkt auf der fhem kommandozeile.
Titel: Antw:Wandthermostat &quot;set &lt;device&gt; sysTime&quot; bei Zeitabweichungen automatisch ausführe
Beitrag von: hauwech am 02 Dezember 2014, 16:47:35
Kein Problem, hätte ja sein können. .. und ist schnell getestet ☺
Titel: Antw:Wandthermostat &quot;set &lt;device&gt; sysTime&quot; bei Zeitabweichungen automatisch ausführe
Beitrag von: hauwech am 02 Dezember 2014, 16:49:06
In der Command line kommt auch ohne Dump ein DateTime string.
Titel: Wandthermostat "set <device> sysTime" bei Zeitabweichungen automatisch ausführen
Beitrag von: justme1968 am 02 Dezember 2014, 17:38:20
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
Titel: Antw:Wandthermostat "set <device> sysTime" bei Zeitabweichungen automatisch ausführen
Beitrag von: hauwech am 02 Dezember 2014, 19:41:06
Geil! Das war's.
Danke :D

Gruß Roland
Titel: Antw:Wandthermostat "set <device> sysTime" bei Zeitabweichungen automatisch ausführen
Beitrag von: frank am 02 Dezember 2014, 22:41:02
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)
Titel: Antw:Wandthermostat "set <device> sysTime" bei Zeitabweichungen automatisch ausführen
Beitrag von: hauwech am 03 Dezember 2014, 10:46:59
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
Titel: Antw:Wandthermostat "set <device> sysTime" bei Zeitabweichungen automatisch ausführen
Beitrag von: frank am 03 Dezember 2014, 14:05:15
ZitatIch habe ihn zugegebenermaßen lange nicht gebootet
kennst du diesen thread? http://forum.fhem.de/index.php/topic,28088.msg215924.html#msg215924 (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.  ;)
Titel: Antw:Wandthermostat "set <device> sysTime" bei Zeitabweichungen automatisch ausführen
Beitrag von: hauwech am 03 Dezember 2014, 16:00:10
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
Titel: Antw:Wandthermostat "set <device> sysTime" bei Zeitabweichungen automatisch ausführen
Beitrag von: Rohan am 05 Dezember 2014, 22:16:44
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 (http://www.fhemwiki.de/wiki/99_myUtils_anlegen#Eigene_Routinen_einf.C3.BCgen) 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
Titel: Antw:Wandthermostat "set <device> sysTime" bei Zeitabweichungen automatisch ausführen
Beitrag von: justme1968 am 05 Dezember 2014, 22:45:40
im wiki beispiel sind die {} klammern nur überflüssig haben aber nicht die fehlerhaften auswirkungen weil nichts zugewiesen wird.

ich hab das wiki beispiel aufgeräumt.

gruss
  andre
Titel: Antw:Wandthermostat "set <device> sysTime" bei Zeitabweichungen automatisch ausführen
Beitrag von: Rohan am 05 Dezember 2014, 23:05:57
Nabend,

Zitat von: justme1968 am 05 Dezember 2014, 22:45:40... weil nichts zugewiesen wird.

ok, aber wenn jemand nach dem bisherigen Wiki-Code so etwas macht:

 
  my $UEMorgen = strftime("%d-%m", localtime + 172800);
  my $MuellHeute = fhem("get Muell today");
  my $MuellMorgen = fhem("get Muell tomorrow");
  my $MuellUEMorgen = fhem("get Muell MM-DD ".$UEMorgen);


dann läuft diese(r) jemand mit ziemlicher Wahrscheinlichkeit in ähnliche Probleme.

Zitat von: justme1968 am 05 Dezember 2014, 22:45:40
ich hab das wiki beispiel aufgeräumt.

Danke.

Gruß
Thomas
Titel: Antw:Wandthermostat &quot;set &lt;device&gt; sysTime&quot; bei Zeitabweichungen automatisch ausführe
Beitrag von: justme1968 am 05 Dezember 2014, 23:28:07
wobei 'was machen' ohne genau zu wissen wie und warum nicht nur hier sondern bei jeder andere programmierung, elektro, wasser, Kkfz oder sonstigem bastelei probleme macht.
Titel: Antw:Wandthermostat &quot;set &lt;device&gt; sysTime&quot; bei Zeitabweichungen automatisch ausführe
Beitrag von: Rohan am 06 Dezember 2014, 00:27:16
Hi,

Zitat von: justme1968 am 05 Dezember 2014, 23:28:07wobei ...

ach andre, lass es doch einfach. "Ich habe jetzt gerade keine Lust mehr auf Fhem" würde "betateilchen" jetzt schreiben.

Den Rest erspare ich mir (und anderen) (oder auch nicht,habe ich gerade festgestellt), denn es führt zu nichts, wie ich zwischenzeitlich aus zahlreichen anderen Beiträgen auch anderer "Developer" herauslesen musste. Ich beschränke mich dann mal aufs Lesen, solange die "Developer" hier nicht einen geschlossenen Zirkel machen. Gibt ja zum Glück Alternativen.

Mach du dein Ding, ich mach meins. Und immer daran denken: Man kann nicht alles "können" aber *lernen*und es ist noch kein Meister vom Himmel gefallen. Das nicht jeder Fachmann für alles ist, sollte dir klar sein, also komm runter. Falls du Kinder hast: die konnten sicherlich von Anfang an richtig laufen, sind nicht einmal hingefallen und haben sich nie weh getan. Du hast sicherlich schon am ersten Schultag das kleine und das große Einmaleins auswendig gekonnt. Der deutschen Sprache bist du ab deinem ersten Lebenstag vollends mächtig gewesen und du machst keine Fehler beim Schreiben (dann lies doch mal bitte dein letztes Posting durch oder schicke es durch eine Rechtschreibprüfung).

Also bitte auf dem Teppich bleiben, Danke.

btw: Warum/wofür gibt es eigentlich dieses Forum? Fhem müsste doch selbsterklärend sein (wenn man denn Programmierer ist und den Code lesen und verstehen kann). Ach ja, ein (möglichst fehlerfreies) Wiki braucht es ja auch noch, und eine Anfängerdoku. Wieso gibt es dann eigentlich keine Fortgeschrittenen-Doku? Ach ja, die lesen ja alles aus dem Perl-Code.

Machen Programmierer eigentlich keine Fehler (denn die sollten ja wissen, was sie tun, oder)?

N8
Thomas
Titel: Antw:Wandthermostat "set <device> sysTime" bei Zeitabweichungen automatisch ausführen
Beitrag von: frank am 06 Dezember 2014, 00:54:13
gibt es da eigentlich auch eine vorgeschichte zu.  :)
Titel: Antw:Wandthermostat &quot;set &lt;device&gt; sysTime&quot; bei Zeitabweichungen automatisch ausführe
Beitrag von: justme1968 am 06 Dezember 2014, 00:57:51
schade das du das so siehst und verstehst.

ein anders zitat wäre jetzt 'was hast du denn geraucht' aber das würde nur passen wenn ich die einstellung hätte die du mir in deinen ausführungen unterstellst.

was kritisierst du eigentlich gerade? das ich auf ein posting reagiert habe? das ich versucht habe den unterschied zwischen beiden fällen zu erklären? das ich den wiki beitrag aufgeräumt habe? oder das das alles noch nicht genug war?

ich kann weder alles. noch weiß ich alles. noch habe ich jemals eines von beidem behauptet. ich bin für mehr dinge als du dir vorstellen kannst kein fachmann und würde auch niemals etwas anders sagen. wie du selber festgestellt hast mache ich mehr als einem fehler beim schreiben (und sogar beim programmieren) und ich weigere mich sogar die rechtschreibprüfung zu verwenden. wenn du es nicht lesen magst den knopf zum ignorieren gibt es immernoch.

statt einer vielleicht konkreten frage zu dem unterschied zwischen beiden fällen war 'so was' deine wort wahl.

ach was solls...

eigentlich hatte ich noch mehr geschrieben aber vielleicht schläfst du mal drüber und kommst beim durchlesen deiner reaktion selber drauf was du für einen mist von dir gegeben hast.

wenn du der meinung bist etwas besser zu können beschränk dich nicht aufs lesen sondern tu etwas.

gruss
  andre
Titel: Antw:Wandthermostat "set <device> sysTime" bei Zeitabweichungen automatisch ausführen
Beitrag von: Rohan am 06 Dezember 2014, 18:20:14
Nabend,

@ Frank: Nö, gibt es nicht.

@ andre: worauf ich mich beziehe, sollte einem aufmerksamen Leser durch das abgekürzte Eingangszitat klar werden. Aber wer die Scheuklappen auf hat und meint, nur "er" tut etwas, dann ist es halt so. Meine Reputation brauche und werde ich hier nicht zur Debatte stellen. Ich weiß, was ich tue und bin.

Die "Problematiken" mit Dingen wie " elektro, wasser, Kkfz" gleichzusetzen, sagt mir genug.

Und das mit dem Ignorieren hättest du lieber beherzigen sollen. "Man" muss ja nicht zu allem *unnötige* Kommentare abgeben.

Mehr lohnt sich wirklich nicht.

Wie gesagt: Mach dein Ding.

Thomas