Gelöst: Eigene Sub im PlotEditor verwenden

Begonnen von TomWest, 14 Januar 2015, 11:42:08

Vorheriges Thema - Nächstes Thema

TomWest

Hallo zusammen,

Ich verwende das statistics Modul, um meine Brennerlaufzeit zu loggen. Der tägliche Eintrag sieht so aus:

2015-01-13_23:59:55 KEL_Heizung_BZ statStateDayLast: closed: 18:26:04 closed_Count: 45 open: 05:33:56 open_Count: 44

Wenn ich jetzt die Brennerzeit (im Format hh:mm:ss) plotten möchte, wird nichts angezeigt. Ich habe mir unter 99_myutils eine sub definiert, die reale Zeiten in Industriezeiten umrechnet, die man dann plotten könnte:

# Konvertiert Realtime (hh:mm:ss) in Industriezeiten (hh.xx)
sub rt2it($)
{
  my($h,$m,$s)=split(":",shift);
  $m=0 if(!$m);
  $s=0 if(!$s);
  my $t1=$h+$m/60+$s/3600;
  return $t1;
}


Funktioniert in der Kommandozeile auch wunderbar. Wenn ich nun in das regex Feld im Plot einen (wahrscheinlich falschen) Aufruf in der Form

=rt2it($fld[7]) einfüge, stürzt mein fhem komplett ab. Kann man eigene Subs überhaupt im Editor verwenden?




Lösung: Ja, kann man natürlich. Einfach ohne '=', also rt2it($fld[8]) eintragen. Dabei beachten: Der Index in $fld ist immer eins weniger als der dazugehörige column Wert -> siehe Anhang.

FHEM on R-π - HM-TC-IT-WM-W-EU - HM-LC-Sw1-FM - HM-SCI-3-FM - HM-CC-RT-DN

rudolfkoenig

#1
- Wie wir das in dem anderen Thread schon festgestellt haben, geht es um die Spalte Function und nicht regex.
- Falls eine Zeile aus dem Log das regexp passiert, dann wird diese "Function" per eval ausgewertet. Da kann man alles reinschreiben, was Perl ist, solange es kein Leerzeichen enthaelt.
- Falls hier was schiefgeht, gibt es keine Fehlermeldung. Erstens damit es schneller geht (das ist hier ein Engpass), und zweitens weil sonst viele bisher friedlich laufende Plots ploetzlich Fehler ausspucken wuerden.
- Einen Absturz wg. kaputten Ausdruck kann ich z.Zt. weder vorstellen, noch reproduzieren (habs gerade versucht).
- =rt2it($fld[7]) wird von Perl als ein POD (Plain-Old-Documentation) Anweisung interpretiert (wg. dem = am Anfang), und in diesem Kontext deswegen einfach ignoriert.

Vermutlich sollte man das = am Anfang weglassen.
Und vorher ein Perl Buch (z.Bsp. das mit dem Kamel) lesen.

justme1968

ja. das = am anfang muss weg.

hier: http://forum.fhem.de/index.php/topic,23912.msg171292.html#msg171292 findest du ein funktionierendes beispiel um eine zeit in einen dezimalwert zu verwandeln und zu plotten.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

TomWest

Super, vielen Dank. Wird direkt implementiert.
FHEM on R-π - HM-TC-IT-WM-W-EU - HM-LC-Sw1-FM - HM-SCI-3-FM - HM-CC-RT-DN