[Gelöst] Systemzeit als Unix-Timestamp in FHEM verwenden - Funktion?

Begonnen von Pfriemler, 11 Oktober 2017, 22:25:31

Vorheriges Thema - Nächstes Thema

Pfriemler

Ich bekomme von einem Gerät einen Zeitstempel als Integerzahl (Stichwort: Unix-Epoche) angeliefert, mit dem ich ein DOIF als Zeit anfüttere. Das beschwert sich zu Recht, wenn der Zeitpunkt in der Vergangenheit liegt. Also würde ich die aktuelle Systemzeit gern als Integerzahl abfragen zum Vergleich. Auf der Linux-Kommandozeile liefert "date +%s" das gewünschte Ergebnis. Wie kriege ich das nach FHEM oder was wäre eine Alternative?

Was bisher geschah:
Ich habe jetzt eine Weile gesucht, völlig erfolglos. Auf der Kommandozeile lese ich mehr "Bareword <xyz> not allowed while "strict subs" in use at (eval 1065908) line 1" als irgendein sinnvolles Ergebnis.
Auch mit Umrechnungen tue ich mich schwer. Meine Funktion in myUtils, mit der ich diese Timestamps in den in FHEM-typischen Zeitstempel umformatiere, liefert mit dem Aufruf {time_num2strVA(localtime*86400)} genau das richtige Ergebnis, führt aber im Notify bei der Zeile ""my $timenow = localtime()*86400"  zu einem Fehler ("PERL WARNING: Argument "*main::86400" isn't numeric in localtime at (eval 1065708) line 1.") und ohne die Klammern hinter localtime wird $timenow zu "Thu Jan  1 01:00:00 1970", was sich nicht mit dem Integerwert vergleichen lassen will.
Es ist vermutlich lausig einfach, aber ich weiß einmal mehr, warum ich Linux und Perl nicht produktiv nutze.

So, hat jemand eine Lösungsidee? Danke.
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Pfriemler

@CoolTux: Ja im Prinzip, aber lies mal meine Versuche damit im ersten Post und sage mir was ich falsch mache um das umzusetzen ...
ZitatDu musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Nicht mal das habe ich gefunden, oder ich habe einfach noch nicht die richtigen Stichworte für Google gefunden.
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."


CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Pfriemler

#5
Wie ich schon sagte, es wird ganz einfach sein... Ich hatte diverse Sachen ausprobiert, auch localtime, aber eben nicht time.
if ($newrec > time()) {fhem("set ...
Und funktioniert. Mann!!! Danke!!!
Dem Perl-Anfänger erschließt sich nicht logisch, warum time() eine nackte Zahl liefert (bezogen auf die Weltzeit) und localtime() eine Umrechnungsfunktion ist, die eine zugelieferte Unix-Zeit in einen lokal basierten Zeitstring umrechnet und offenbar time() als default input verwendet.
Aber das ist eine andere Geschichte und soll ein anderes Mal verflucht werden.  ::)
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Michi1978

Hallo, ich möchte auch eine Unixzeit in eine "normalte" Uhrzeit umwandeln, bekomme es aber in Verbindung mit der Unwetterzentrale und Pushover nicht hin.

ZitatUnwetterzentrale:.* {
my $warnendtime = (ReadingsVal('Unwetterzentrale','Warn_0_End',""));;
my $warnlevelcolor = (ReadingsVal('Unwetterzentrale','WarnUWZLevel_Color',""));;
my $warncounter = (ReadingsVal('Unwetterzentrale','WarnCount',""));;
my $warntextshort = (ReadingsVal('Unwetterzentrale','Warn_0_ShortText',""));;

if($warncounter > 0) {fhem ("set Pushover msg title='Unwetterwarnung' message='Warnstufe [($warnendtime > time())] $warnlevelcolor \nWetterwarnung für Paderborn: $warntextshort'")};;}

was hab ich falsch gemacht?
Wäre dankbar für etwas Hilfe :)

CoolTux

Zitat von: Michi1978 am 12 Januar 2019, 09:14:08
Hallo, ich möchte auch eine Unixzeit in eine "normalte" Uhrzeit umwandeln, bekomme es aber in Verbindung mit der Unwetterzentrale und Pushover nicht hin.

was hab ich falsch gemacht?
Wäre dankbar für etwas Hilfe :)

Bitte Codetags verwenden. So kann man das schlecht lesen.
Du vermischst Fhem Befehle und Perl Code.

Das hier ist Unsinn

fhem ("set Pushover msg title='Unwetterwarnung' message='Warnstufe [($warnendtime > time())] $warnlevelcolor \nWetterwarnung für Paderborn: $warntextshort'")


Was genau willst Du da erreichen? Was soll da stehen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Michi1978

if($warncounter > 0) {fhem ("set Pushover msg title='Unwetterwarnung' message='Warnstufe [($warnendtime > time())] $warnlevelcolor \nWetterwarnung für Paderborn: $warntextshort'")};;}

Tittle= Unwetterwarnung
"$warnlevel $warnlevelcolor" Warnstufe Orange 3
"$warnendtime" Ende der Unwetterwarnung dd.mm.yyy hh
"$warntextshort" Text der Wetterwarnung

Das Datum und die Urzeit von UWZ kommt im diesem Format 1547424000.

Die absätze sollen auch mit rein, das klappt auch nicht wirklich mit z.B. \n

CoolTux

Zitat von: Michi1978 am 12 Januar 2019, 09:56:29
if($warncounter > 0) {fhem ("set Pushover msg title='Unwetterwarnung' message='Warnstufe [($warnendtime > time())] $warnlevelcolor \nWetterwarnung für Paderborn: $warntextshort'")};;}

Tittle= Unwetterwarnung
"$warnlevel $warnlevelcolor" Warnstufe Orange 3
"$warnendtime" Ende der Unwetterwarnung dd.mm.yyy hh
"$warntextshort" Text der Wetterwarnung

Das Datum und die Urzeit von UWZ kommt im diesem Format 1547424000.

Die absätze sollen auch mit rein, das klappt auch nicht wirklich mit z.B. \n

Ich verstehe nicht das das hier soll

message='Warnstufe [($warnendtime > time())] $warnlevelcolor \n


Und bitte verwende Codetags bei Codeschnippsel.

$warnendtime > time() und dann ???
Erstmal muss ich wissen was Du erreichen willst.

Eine einfache Message wäre


fhem ("set Pushover msg title='Unwetterwarnung' message=Warnstufe $warnlevelcolor Wetterwarnung für Paderborn: $warntextshort")


Probiere bitte erstmal das. Ob es so geht.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

folgendes geht


fhem ('set Pushover msg title=\'Unwetterwarnung\' message=\'Warnstufe\nWetterwarnung für Paderborn\');


Probiere erstmal nur das bitte. Genau so.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Michi1978

Zitat von: CoolTux am 12 Januar 2019, 10:01:53
Ich verstehe nicht das das hier soll

message='Warnstufe [($warnendtime > time())] $warnlevelcolor \n


Und bitte verwende Codetags bei Codeschnippsel.

$warnendtime > time() und dann ???
Erstmal muss ich wissen was Du erreichen willst.

Eine einfache Message wäre


fhem ("set Pushover msg title='Unwetterwarnung' message=Warnstufe $warnlevelcolor Wetterwarnung für Paderborn: $warntextshort")


Probiere bitte erstmal das. Ob es so geht.

Unwetterzentrale:.* {
my $warnendtime = (ReadingsVal('Unwetterzentrale','Warn_0_End',""));;
my $warnlevel = (ReadingsVal('Unwetterzentrale','WarnUWZLevel',""));;
my $warnlevelcolor = (ReadingsVal('Unwetterzentrale','WarnUWZLevel_Color',""));;
my $warncounter = (ReadingsVal('Unwetterzentrale','WarnCount',""));;
my $warntextshort = (ReadingsVal('Unwetterzentrale','Warn_0_ShortText',""));;

if( $warnlevel > 0 ) {fhem ("set Pushover msg title='Unwetterwarnung' message=Warnstufe $warnlevelcolor Wetterwarnung für Paderborn: $warntextshort")};;}


Ausgabe in Pushover:

Unwetterwarnung
Warnstufe

CoolTux

Wir machen es mal anders. Zum probieren

Oben in der FHEM Kommandozeile gibst Du ein


{ fhem ('set Pushover msg title=\'Unwetterwarnung\' message=\'Warnstufe\nWetterwarnung für Paderborn\') }


Dann bekommst erstmal Text.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Michi1978

#13
Zitat von: CoolTux am 12 Januar 2019, 10:44:08
Wir machen es mal anders. Zum probieren

Oben in der FHEM Kommandozeile gibst Du ein


{ fhem ('set Pushover msg title=\'Unwetterwarnung\' message=\'Warnstufe\nWetterwarnung für Paderborn\') }


Dann bekommst erstmal Text.
Can't find string terminator "'" anywhere before EOF at (eval 1350) line 1.


Habe selber noch einmal nen bischen rumprobiert. Folgender Code funktioniert so wie gewünscht jedoch muss jetzt "nur" noch die Unix zeit umgewandelt werden.

Unwetterzentrale:.* {
my $warnendtime = (ReadingsVal('Unwetterzentrale','Warn_0_End',""));;
my $warnlevel = (ReadingsVal('Unwetterzentrale','WarnUWZLevel',""));;
my $warnlevelcolor = (ReadingsVal('Unwetterzentrale','WarnUWZLevel_Color',""));;
my $warncounter = (ReadingsVal('Unwetterzentrale','WarnCount',""));;
my $warntextshort = (ReadingsVal('Unwetterzentrale','Warn_0_ShortText',""));;

if($warncounter > 0) {fhem ("set Pushover msg title='Unwetterwarnung' message='Warnstufe $warnlevel $warnlevelcolor. \nWetterwarnung für Paderborn: $warntextshort \nWetterwarnung ende: $warnendtime'")};;}


::EDIT::
Ok funktioniert doch nicht alles. Die Absätze werden auch nicht ausgeführt :(

CoolTux

Du bist zu ungeduldig. Mache es bitte wie ich es Dir sage und wir kommen zu Deinem gewünschten Endergebnis. Aber das wichtigste wird sein das Du verstehen wirst was Du gemacht hast und wie es funktioniert.

Also nochmal. Mach bitte
Zitat von: CoolTux am 12 Januar 2019, 10:44:08
Wir machen es mal anders. Zum probieren

Oben in der FHEM Kommandozeile gibst Du ein


{ fhem ('set Pushover msg title=\'Unwetterwarnung\' message=\'Warnstufe\nWetterwarnung für Paderborn\') }


Dann bekommst erstmal Text.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net