Timestamp in FileLog

Begonnen von dirkscheuble, 19 März 2019, 21:51:14

Vorheriges Thema - Nächstes Thema

dirkscheuble

Hallo zusammen,

ich habe in topic https://forum.fhem.de/index.php/topic,98254 schonmal gefragt aber leider keine Antwort bekommen.

Gibt es die Möglichkeit die abgelegten Timestamps der Logfile zu beeinflussen?

Ich hab mir schonmal die 92_FileLog.pm angeschaut. Leider bin ich nicht schlauer weil ich den code nicht verstehe. perl.

Ich hoffe jemand hat eine Idee wie man sowas machen kann... evtl. gibt es ja schon was.

Danke schonmal

Viele Grüße
Dirk


herrmannj

Hallo Dirk,

ja das geht - ich setze das in 32_TechemWZ ein, dort kannst Du die Technik anschauen. Das ist jedoch nur mit aufwendiger Programmierung (perl) zu erreichen. Wenn ich Deinen post richtig interpretiere, dann kommt das für Dich eher nicht in Frage. (ich Bitte um Nachsicht wenn meine Interpretation falsch ist). In diesem Fall lautet die Antwort dann "Nein"

vg
Joerg

dirkscheuble

Danke herrmannj für die Antwort,

ich habe mir das Techem Modul mal angeschaut.
So 100%ig schlau bin ich nicht draus geworden weil ich die Perl Syntax überhaupt nicht kenne.

Ich hab mir allerdings überlegt, dass ich ja nur einen script brauche der mir Werte in eine Datei schreibt.
Dem Script übergebe ich dann zwei Argumente: Zeit und Wert.

Parallel dazu erstelle ich ein FileLog dass die gleiche Datei "verwendet".
Dann kann ich einfach daraus ein Plot erstellen.

Ich könnte mir also vorstellen dass ich ein MQTT_DEVICE habe welches auf ein topic hört.
Wenn sich das topic ändert wird der entsprechende Script ausgeführt.

Ist sowas denkbar?

Meine erste googlerei hat ergeben dass man per perl so in files schreibt:

use strict;
use warnings;

my $filename = 'meine_logfile.log';
my $date = argument0
my $time = argument1
my $name = argument2
my $value = argument3
open(my $fh, '>', $filename) or die "Could not open file '$filename' $!";
print $fh "${date}_${time} ${name} ${value}\n";
close $fh;


Allerdings bin ich mir im klaren darüber wie man das script aufruft, geschweige denn wie man die Argumente übergibt...
MQTT etc. läuft...

Grüße
Dirk




dirkscheuble

Hallo zusammen,

ich bin einen Schritt weiter.

Ich habe mir eine 99_myUtils.pm erstellt und ein sub eingebaut

sub
myLog($$$)
{
my $date  = @_[0];
my $value = @_[1];
my $filename = @_[2];

open(my $fh, '>>', "$filename") or die "Could not open file '$filename' $!";
print $fh "$date $value\n";
close $fh;

}



Das funktioniert soweit ok.
Was ich allerdings noch nicht hinbekommen habe:
Um mein MQTT_DEVICE (namens ST) per notify zu überwachen habe ich folgenden Script:

ST.* {myLog(ReadingsVal("ST","date",1), ReadingsVal("ST","value",1), ReadingsVal("Logger","currentlogfile",1))}

Logger ist der FileLog der quasi das erstellen der wöchentlichen Files, archivieren, etc. übernimmt.

Wie kann ich die richtigen Werte an mein sub übergeben?
Die Readings sind im MQTT_DEVICE vorhanden und werden auch schön aktualisiert. Das notify wird aufgerufen, übergibt aber keine Werte. bzw. nur 1 als default.

Kann da jemand helfen?
Ich seh den Wald vor lauter Bäumen nicht mehr.

Cheers
Dirk



dirkscheuble

Hallo,

ich habs hinbekommen.

Für die, die es interessiert:

Ich habe ein MQTT_DEVICE (ST). Das empfängt json strings.
Beispiel:
{"date": "2019-08-12_07:16:22","measure": "38","name":"SensorXY"}

Dieser String wird dann per "expandJSON" als readings in ST gepackt.

Ein notify überwacht das date.* reading und löst dann folgenden Befehl aus:

ST:date:.* {myLog(ReadingsVal("ST","date",1), ReadingsVal("ST","measure",1), InternalVal("MQTTLogger","currentlogfile",1), ReadingsVal("ST","name",1));; }

das wiederum ruft ein sub aus meiner 99_myUtils.pm auf der so aussieht:

sub
myLog($$$$)
{
my $date      = @_[0];
my $measure   = @_[1];
my $filename   = @_[2];
my $measurename   = @_[3];

open(my $fh, '>>', "$filename") or die "Could not open file '$filename' $!";
print $fh "$date $measurename $measure\n";
close $fh;

}


Das Device MQTTLogger ist ein FileLog. Der verwaltet die Logfiles und Archiviert die...

Soweit so gut.

Was ich jetzt noch versuchen möchte ist eine automatische Formatierung für das Datum.
Ich möchte den Timestamp in sekunden {time}
in dem JSON string übergeben.
mein sub (myLog) soll das dann entsprechend unmmodeln.

Viele Grüße
Dirk