FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Peterson am 16 Februar 2016, 22:42:29

Titel: Wert aus Userreading am Ende des Monat um 23:59 Uhr in logfile schreiben
Beitrag von: Peterson am 16 Februar 2016, 22:42:29
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?
Titel: Antw:Wert aus Userreading am Ende des Monat um 23:59 Uhr in logfile schreiben
Beitrag 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
Titel: Antw:Wert aus Userreading am Ende des Monat um 23:59 Uhr in logfile schreiben
Beitrag von: crusader am 17 Februar 2016, 09:04:06
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
Titel: Antw:Wert aus Userreading am Ende des Monat um 23:59 Uhr in logfile schreiben
Beitrag von: Peterson am 17 Februar 2016, 23:02:34
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
Titel: Antw:Wert aus Userreading am Ende des Monat um 23:59 Uhr in logfile schreiben
Beitrag von: Peterson am 21 Februar 2016, 21:53:04
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
Titel: Antw:Wert aus Userreading am Ende des Monat um 23:59 Uhr in logfile schreiben
Beitrag von: Hans Franz am 21 Februar 2016, 22:33:12
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

Titel: Antw:Wert aus Userreading am Ende des Monat um 23:59 Uhr in logfile schreiben
Beitrag von: Peterson am 24 Februar 2016, 21:10:03
Hallo Hans,

danke noch für die Info.

Ich  werde mir dies noch weiter ansehen.

Gruß,

Peterson
Titel: Antw:Wert aus Userreading am Ende des Monat um 23:59 Uhr in logfile schreiben
Beitrag von: Dracolein am 10 März 2020, 11:14:43
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.
Titel: Antw:Wert aus Userreading am Ende des Monat um 23:59 Uhr in logfile schreiben
Beitrag von: Pfriemler am 10 März 2020, 12:03:00
Stört sich das Perl  nicht an der Wertabfrage mit [ ]?
ReadingsVal stattdessen?
Titel: Antw:Wert aus Userreading am Ende des Monat um 23:59 Uhr in logfile schreiben
Beitrag von: Dracolein am 10 März 2020, 12:37:03
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","")}}
Titel: Antw:Wert aus Userreading am Ende des Monat um 23:59 Uhr in logfile schreiben
Beitrag von: DeeSPe am 10 März 2020, 12:44:09
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
Titel: Antw:Wert aus Userreading am Ende des Monat um 23:59 Uhr in logfile schreiben
Beitrag 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?
Titel: Antw:Wert aus Userreading am Ende des Monat um 23:59 Uhr in logfile schreiben
Beitrag von: DeeSPe am 10 März 2020, 13:29:01
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
Titel: Antw:Wert aus Userreading am Ende des Monat um 23:59 Uhr in logfile schreiben
Beitrag von: Pfriemler am 10 März 2020, 17:38:49
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
Titel: Antw:Wert aus Userreading am Ende des Monat um 23:59 Uhr in logfile schreiben
Beitrag von: AyshaHM am 20 November 2020, 14:37:11
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