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

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

Vorheriges Thema - Nächstes Thema

Michi1978

Könnte sein das ich ungeduldig bin  ;D

Hab weiter oben schon geschrieben was die Ausgabe ist wenn ich den Befehl eingebe.

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

CoolTux

Seltsam. Wenn ich das bei mir in die Kommandozeile in FHEMWEB eingebe dann bekomme ich eine Nachricht


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


Bitte noch einmal
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, 12:06:36
Seltsam. Wenn ich das bei mir in die Kommandozeile in FHEMWEB eingebe dann bekomme ich eine Nachricht


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


Bitte noch einmal

Wenn ich das ohne die gesxchwiften Klammern eingebe klappt es.

Zitatset Pushover msg title=\'Unwetterwarnung\' message=\'Warnstufe\nWetterwarnung für Paderborn\
Ausgabe in Phshover:
Zitat\'Unwetterzentrale\'
\'Warnstufe
Wetterwarnung

CoolTux

Keine Ahnung was Du da machst, aber passt schon.

Kurze Erklärung.

Wenn Du in der Kommandozeile oben etwas rein schreibst dann sind das FHEM Befehle. set ist so einer.
Wenn Du Perlfunktionen in der Kommandozeile ausführen willst musst du diese in { } setzen fhem() ist eine Perlfunktion.
Wenn Du die Perlfunktion verwendest

fhem('set pushmsg msg ...');

so ist das was Du in ' ' setzt ein Übergabeparameter an die Funktion. Natürlich muss es laut der Funktion genau das sein was Du auch in der FHEM Kommandozeile eingibst.
ABER. Dadurch das Du ' ' verwendet hast werden innerhalb dieser ' ' keine weiteren ' mehr beachtet und variablen $warnlevel nicht aufgelöst (heist der Wert der Variable wird nicht gesetzt) sondern nur $warnlevel als String geschieben.

Ansonsten musst Du aber komplett Perl verwenden.
Nun zu Deinem Code.
Regel Nummer ein wenn Du mit mir arbeitest. Es wird nie und niemals in der fhem.cfg direkt editiert.
Alles wird in FHEMWEB gemacht.
Also gehst Du auf Edit Files und dort auf Deine 99_myUtils oder in Dein Notify was Du hast. Je nachdem wo der Text steht. Und dann brauchst auch keine doppelten Semikolons.

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 . '\n.Wetterwarnung für Paderborn: ' . $warntextshort . '\nWetterwarnung ende: ' . $warnendtime');
}


So also.
('set Pushover msg title
Das erste ' sagt also der Funktion fhem() hier ist ein String als Parameter. die anderen ' ohne das \ davor beenden den String und somit kann eine Varibale mit Inhalt eingesetzt werden. Der Punkt dazwischen . verbindet jeweils immer den String mit den Wert der Variable in der Ausgabe. Daher immer ein Punkt nach und vor einem '. der . ' ' . bedeitet ich verbinde die Avriable vor dem . mit einem Lehrzeichen als String ' '.
Nun zu den \'
Das sind Optionen des set Befehles und somit zugehörig zum set Befhel. Sie müssen aber escapt werden damit nicht die Funktion fhem() denkt die ' gehören zu ihrer Anweisung.
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

Du willst mir echt etwas erklären, das finde ich super! Aber es wird hart für dich werden ;)

Vielleicht stimmt etwas mit meinem FHEM nicht wenn das mit den {}  in der Kommandozeile nicht klappt?

Habe es mit copy & paste eingefügt und erhalte trotzdem die fehlermeldung. Ohne die {} klappt es wie gesagt, kann es sein das ich ein Problem habe über die Kommandozeile Percode auszuführen?

Das was du da zusammengebaut hast sieht ganz gut aus. Anhand deiner erklärung sind es jetzt nicht nur hieroglyphen für mich. Jedoch erhalte ich hier ebenfalls eine fehlermeldung. Habe den Code über das Notify im FhemWEB editiert. Folgende ausgabe erhalte ich:

Can't find string terminator "'" anywhere before EOF at (eval 12146) line 9.


Copy aus mein Notify DEF
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 . '\n.Wetterwarnung für Paderborn: ' . $warntextshort . '\nWetterwarnung ende: ' . $warnendtime');
}


Hab anhand deiner erklärung auch selbst mal versucht nen Fehler in dem Code zu finden aber hab nix gefunden.


CoolTux

Du musst Deine Notify etwas formatieren oder Du zählst Deine Klammern.
Fehlt noch mal ganz unten eine }

Und dann noch
$warnendtime')
ändern in
$warnendtime)
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

also bei mir geht's testweise wunderbar ... bis auf die komische Zahl am Ende...  :)
localtime() macht es auch nicht besser ...
Aber setz doch mal in der Unwetterzentrale das attribut humanreadable 1 und nutze statt "Warn_0_End" dann "Warn_0_End_Time" als Reading ...

OT:
Zitat von: CoolTux am 12 Januar 2019, 12:42:36
Regel Nummer ein wenn Du mit mir arbeitest. Es wird nie und niemals in der fhem.cfg direkt editiert.
Alles wird in FHEMWEB gemacht.
;D ;D ;D
"Ä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

#22
Zitat von: Pfriemler am 12 Januar 2019, 14:42:16
Aber setz doch mal in der Unwetterzentrale das attribut humanreadable 1 und nutze statt "Warn_0_End" dann "Warn_0_End_Time" als Reading ...

OT: ;D ;D ;D

Perfect genau was ich gesucht habe  ;D Danke!

Ich hab noch ein"'" vor "Warnstufe" ('Warnstufe) im Pushover was ich nicht weg bekomme. Jemand ne Tip?

Unwetterzentrale:.* {
my $warncounter = (ReadingsVal('Unwetterzentrale','WarnCount',""));;
my $warnlevel = (ReadingsVal('Unwetterzentrale','WarnUWZLevel',""));;
my $warnlevelstr = (ReadingsVal('Unwetterzentrale','Warn_1_uwzLevel_Str',""));;
my $warnlevelcolor = (ReadingsVal('Unwetterzentrale','WarnUWZLevel_Color',""));;

my $warn0typestr = (ReadingsVal('Unwetterzentrale','Warn_0_Type_Str',""));;
my $warn0level = ReadingsVal('Unwetterzentrale','Warn_0_uwzLevel',"");
my $warn0textshort = (ReadingsVal('Unwetterzentrale','Warn_0_ShortText',""));;
my $warn0startdate = (ReadingsVal('Unwetterzentrale','Warn_0_Start_Date',""));;
my $warn0starttime = (ReadingsVal('Unwetterzentrale','Warn_0_Start_Time',""));;
my $warn0enddate = (ReadingsVal('Unwetterzentrale','Warn_0_End_Date',""));;
my $warn0endtime = (ReadingsVal('Unwetterzentrale','Warn_0_End_Time',""));;

my $warn1typestr = (ReadingsVal('Unwetterzentrale','Warn_1_Type_Str',""));;
my $warn1level = ReadingsVal('Unwetterzentrale','Warn_1_uwzLevel',"");
my $warn1textshort = ReadingsVal('Unwetterzentrale','Warn_1_ShortText',"");
my $warn1startdate = (ReadingsVal('Unwetterzentrale','Warn_1_Start_Date',""));;
my $warn1starttime = (ReadingsVal('Unwetterzentrale','Warn_1_Start_Time',""));;
my $warn1enddate = (ReadingsVal('Unwetterzentrale','Warn_1_End_Date',""));;
my $warn1endtime = (ReadingsVal('Unwetterzentrale','Warn_1_End_Time',""));;

if( $warncounter == 1 || $warncounter == 2 || $warncounter == 3 || $warnlevel == 3 || $warnlevel == 4 || $warnlevel == 5 || $warnlevel == 6 || $warnlevel == 7) {
fhem ('set Pushover msg sound=siren title='. $warncounter . '-' . 'Unwetterwarnung/en message=\'Warnstufe ' . $warnlevel . ' ' . $warnlevelcolor . '\n ' . '\nWetterwarnung für Paderborn: ' . '\n \n ' . $warn0typestr . '\n ' . $warn0startdate . ' ' . $warn0starttime . ' ' . $warn0textshort .  ' ' . $warn0enddate . '\n \n' . $warn1typestr . '\n ' . $warn1startdate . ' ' . $warn1textshort . ' ' . $warn1enddate);
}}

Michi1978

Zitat von: CoolTux am 12 Januar 2019, 13:58:47
Du musst Deine Notify etwas formatieren oder Du zählst Deine Klammern.
Fehlt noch mal ganz unten eine }

Und dann noch
$warnendtime')
ändern in
$warnendtime)

Dir auch erstmal nen fettes Danke für deine Geduld mit mir ;)