Hallo,
ich habe schon viel im Forum und im Internet gesucht und auch die commandref durchstöbert, aber ich habe keinen vernünftigen Ansatz gefunden. Aber ich hoffe mir kann jemand helfen.
Eigentlich, so dachte ich, eine simple Sache, aber so etwas wie event-on-date habe ich nicht gefunden.
Mein Anliegen ist eigentlich einfach zu beschreiben:
Ein userReading soll an jedem Monatsende um 23:59:59 Uhr in ein Logfile wie gewohnt mit Datum-Uhrzeitformat abgespeichert werden.
Hat jemand sowas schon mal gemacht? Hat jemand einen Tip/Ansatz?
In einem at prüfen, ob morgen der Erste ist:
define month_end_at at *23:59:00 {if (strftime "%d",localtime time+86400 eq "1") {Log 1,ReadingsVal("myDevice","myUserReading,"")}
(ungetestet)
Gruß
Hans
Zitat von: Hans Franz am 17 Februar 2016, 00:12:01
In einem at prüfen, ob morgen der Erste ist:
define month_end_at at *23:59:00 {if (strftime "%d",localtime time+86400 eq "1") {Log 1,ReadingsVal("myDevice","myUserReading,"")}
(ungetestet)
Gruß
Hans
Genial :o
Hallo Hans,
der Ansatz ist super. Auf die Idee muss man mal kommen. vielen dank dafür.
Ich habe es bei mir eingebaut.
Gruß,
Peterson
Hallo,
ich habe noch eine Klammer in der Bedingung hinzugefügt, damit diese richtig fasst.
define month_end_at at *23:59:00 {if ((strftime "%d",localtime time+86400) eq "1") {Log 1,ReadingsVal("myDevice","myUserReading,"")}
Leider habe ich das mit dem log 1 nicht so ganz verstanden. Ich habe dazu auch nichts an Erklärung gefunden, so dass ich dieses als Platzhalter interpretiert habe. Ein Austausch mit dem Log Device brachte nichts und auch die Angabe der logdatei brachte nichts. Auch im standard log sehe ich nur die Ausführung aber nicht den Wert.
Eigentlich will ich nur das UserReading in ein spezielles Logfile schreiben. Kann da noch jemand helfen?
Gruß,
Peterson
Tja, war ungetestet.Ändere in
define month_end_at at *23:59:00 {if ((strftime "%d",localtime time+86400) eq "01") {Log 1,ReadingsVal("myDevice","myUserReading,"")}}
Also '01' statt '1' und geschweifte Klammer am Ende.
Log 1 ist kein Platzhalter sondern schreibt in das Standard-Logfile. Wenn du in ein anderes Filelog schreiben willst, kannst du z.B. ein entspechendes Event generieren, auf das das Regex des Filelogs matched.
Gruß
Hans
Hallo Hans,
danke noch für die Info.
Ich werde mir dies noch weiter ansehen.
Gruß,
Peterson
Hallo zusammen,
ich bin über die Suchfunktion hierher gelangt, da ich gleiches Vorhaben wie der Threadstarter habe. 1x am Monatsende soll ein Reading in ein FileLog geschrieben werden. Hierfür habe ich ein eigenes Reading erstellt, was zu diesem letzten Moment des laufenden Monats mit aktuellen Daten gefüttert werden soll. Das somit erzeugte Event löst das FileLog Device aus.
Nun bin ich unsicher, ob meine Codezeile richtig angepasst wurde. Könnt Ihr das bestätigen oder mir meine(n) Fehler aufzeigen?
define at_EnergyCostMonth2359 at *23:59:00 {if ((strftime "%d",localtime time+86400) eq "01") {setreading Gaszaehler EnergyCostMonth2359 [Gaszaehler:ESPEasy_ESP_Easy1_reedkontakt_Total_EnergyCostMonth]}}
Ich bin unsicher, was den zweiten Teil der if-Anweisung betrifft, ob die geschweiften Klammern korrekt sind, denn FHEM antwortet mit einem Syntax Error.
Stört sich das Perl nicht an der Wertabfrage mit [ ]?
ReadingsVal stattdessen?
Ja wahrscheinlich, aber ich weiß nicht, wie die korrekte Syntax aussehen muss.
ReadingsVal("Gaszaehler","ESPEasy_ESP_Easy1_reedkontakt_Total_EnergyCostMonth","")
müsste den Wert wiedergeben, welcher auf das neue Reading geschrieben werden soll.
Aber dieser Coeschnipsel in obige Codezeile eingesetzt, ist scheinbar auch noch nicht korrekt.
define at_EnergyCostMonth2359 at *23:59:00 {if ((strftime "%d",localtime time+86400) eq "01") {setreading Gaszaehler EnergyCostMonth2359 ReadingsVal("Gaszaehler","ESPEasy_ESP_Easy1_reedkontakt_Total_EnergyCostMonth","")}}
define at_EnergyCostMonth2359 at *23:59:00 {fhem "setreading Gaszaehler EnergyCostMonth2359 [Gaszaehler:ESPEasy_ESP_Easy1_reedkontakt_Total_EnergyCostMonth]" if ((strftime "%d",localtime time+86400) eq "01")}
Gruß
Dan
Cool, herzlichen Dank :-*
Aus Neugier für meinen Lerneffekt: was bewirkt fhem
in der Codezeile?
Zitat von: Dracolein am 10 März 2020, 12:51:19
Cool, herzlichen Dank :-*
Aus Neugier für meinen Lerneffekt: was bewirkt fhem
in der Codezeile?
Dass das was in Anführungszeichen folgt in Perl Code ausgeführt wird als wenn Du es oben in die FHEM Eingabezeile eingibst.
Vereinfacht: damit Perl die FHEM Befehle ausführen kann.
Gruß
Dan
Den Wald vor Bäumen nicht gesehen. Ist ja noch FHEM, da funktionieren die [ ] als Platzhalter ja. Letztlich muss es aber ein fertiger Perl-Befehl werden, also fhem und "". Ich kenne da übrigens nur Beispiele mit Klammern ...
Und auch was gelernt. Bis zum nächsten Mal ... ;D
Hallo zusammen,
ich hoffe hier kommt noch jemand vorbei!
Also meine Fragen?
Wenn ich einen Dummy mit dieser Funktion schalten möchte habe ich mir das zusammen gebaut.
define Test100 at *23:59:00 {fhem "set Test99 on" if ((strftime "%d",localtime time+86400) eq "01")}
Ist das richtig?
und vielleicht noch eine dumme Frage: Wie testet ihr das?
für hilfe bin ich immer sehr dankbar!!!
Gruß AyshaHM