get FileLog bestimmte Spalte auswerten

Begonnen von docb, 04 August 2019, 17:39:09

Vorheriges Thema - Nächstes Thema

docb

Grüß Euch, ich versuche gerade verzweifelt ein FileLog auszulesen (um die relevanten Teile dann per Telegramm zu verschicken).
Ich scheitere allerdings bereits am ersten Teil, denn

get FileLog_AlexaVoice - - 2019-01-01 2019-10-03
liefert zwar schön alle Daten aus (das Datum wird dann später noch automatisch angepasst), aber ich brauche das ganze Gedöns nicht, sondern hätte nur gerne das was hinter "voice: " steht

2019-08-04_16:55:35 ECHO_G090U6078353034F voice: echo
2019-08-04_16:51:35 ECHO_G2A0QU0573940MW1 voice: echo spiele sido
2019-08-04_16:50:35 ECHO_G2A0QU0573940MW1 voice: spiele deine freunde
2019-08-03_21:40:02 ECHO_G090L91174160MCL voice: echo was steht an
2019-08-02_10:05:09 ECHO_G090L91174160MCL voice: stoppe bayern drei
2019-08-02_10:04:09 ECHO_G090L91174160MCL voice: echo spiel bayern drei
2019-08-02_10:03:09 ECHO_G090L91174160MCL voice_timestamp: 1564732940533
2019-08-02_10:03:09 ECHO_G090L91174160MCL voice: echo stoppe bayern drei


Anhand der Commandref und der Wiki habe ich mich mal versucht, das zu "filtern", aber ich bin offensichtlich zu doof:
ich müsste ja eigentlich nur <col>:<regexp>:<default>:<fn> anhängen soweit ich das kapiere. Nachdem ich nur stumpf immer die 4. Spalte brauche, habe ich es mit
get FileLog_AlexaVoice - - 2019-01-01 2019-10-03 4
versucht - da kommt dann #4 raus. mit 4::: kommt #4::: raus.
Kann mir bitte jemand auf die Sprünge helfen  ::)

Danke und viele Grüße
doc

PS: Ziel ist quasi eine Tagesauswertung der Befehle per Telegram
I love FHEM!

amenomade

get FileLog ist für SVG Plots gedacht, und kann meines Wissens nur numerische Werte zurückgeben. Probier mal z.B.

get FileLog_AlexaVoice - - 2019-04-08 2019-04-08 4:::$fld[4]=~"echo"?100:50
Einige 100 und 50 sollten schon kommen.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

docb

Hm, da kommt nur
#4:::$fld[4]=~"echo"?100:50
zurück. Aber okay, wenn das nicht geht, muss ich das halt in einer Perl-Funktion umbügeln ;-)
Schade, aber das bekomme ich schon irgendwie hin.
Viele Grüße
I love FHEM!

amenomade

Hmm da kommt wahrscheinlich nichts zurück weil ich 2019-04-08 statt 2019-08-04 geschrieben habe...
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

docb

Haha, stimmt und ich habe es stumpf übernommen ;-)
Jetzt kommt was, ist aber leider nicht brauchbar, brauche ja den Text. Bastel gerade an einer völlig umständlichen Perl-Funktion, um das hinzubekommen. Schauen wir mal, wie weit ich komme  ???
2019-08-02_10:03:09 50
2019-08-02_10:03:09 50
2019-08-02_10:04:09 50
2019-08-02_10:05:09 50
2019-08-03_21:40:02 50
2019-08-04_16:07:35 50
2019-08-04_16:50:35 50
2019-08-04_16:51:35 50
2019-08-04_16:52:35 50
2019-08-04_16:55:35 50
2019-08-04_16:55:35 50
#4:::$fld[4]=~"echo"?100:

Gracias!
I love FHEM!

docb

Nachdem das echt klappt (hat mich auch 2 Stunden gekostet  ;)) - wer es brauchen kann:


sub
SendAlexa(){
my $yesterday = POSIX::strftime("%Y-%m-%d",localtime(time-24*60*60));

my $text = fhem("get FileLog_AlexaVoice - - ".$yesterday."_00:00:00 ".$yesterday."_24:00:00");
my @lines = split("\n",$text);
my $newtext;
my $next;
foreach my $line (@lines){
my @lineparts = split(" ",$line);
$next=false;
foreach my $linepart (@lineparts){
  if ($linepart eq "voice:"){
$next=true;
next;
}
  if ($next == true) {
    $newtext = $newtext . " " . $linepart;
  }
}
}
fhem("msg push |Alexa Übersicht| $newtext");
}


Geht sicher auch eleganter - aber mit Perl hatte ich es noch nie so wirklich - eher stumpf als trumpf, Funktion vor Schönheit ;D
I love FHEM!