Hallo,
bin noch blutiger Anfänger und habe ein Problem mit dem Aufbau eines eigenen Logfiles. Ich lese mich nun seit Tagen durch div. Einträge, komme aber nicht weiter. Irgenwo habe ich mich verrannt.
Ich habe an meinen Rasperry PI einen Stromzähler mit S0-Ausgang angeschlossen. Die Einstellungen im Fhem habe ich einem Artikel aus dem Wiki in GitHub entnommen.
define log_counter FileLog %L/counter_%Y-%m.log counter.*power:.*
define counter RPI_GPIO 17
attr counter direction input
attr counter pud_resistor up
attr counter interrupt falling
attr counter stateFormat time
attr counter userReading\
time:reading:.off { use Time::HiRes qw(time);; time();; },\
power:reading:.off { use Time::HiRes qw(time);; sprintf("%.2f", 3600 / (time() - OldValue("counter"))) . " W";;}
Danach wird mir im LogFile erst mal gar nichts eingetragen!
Nachdem ich in der 1. Zeile *power:.* durch *Counter:.* ersetzt habe bekomme ich bei jedem
Impuls einen Eintrag im Logfile mit einem Zeitstempel (Sekundengenau) und der fortlaufenden Impulsanzahl.
Mein Ziel wäre aber eigentlich ein Zeitstempel (Millisekundengenau) und die berechente Watt Angaben.
Wie kann ich die userReadings time und power im Logfile anzeigen?
Für Hilfe wäre ich dankbar
Gruss
Rainer
Hallo Rainer,
mich verwirrt Dein Code und Dein Text.
Erstmal Counter und counter ist nicht das gleiche.
Die Einträge für das logfile erfolgen durch device1:reading:"filter"|device2:reading:"filter"
Also counter:.*|power:.*
wäre die Möglichkeit wenn Du die Devices power und counter hast und alle Events loggen willst
Du kannst jederzeit im oberen Teil der Def (Also in der Weboberfläche) Regexp parts zur Hilfe nehmen und dir alles im richtigen Syntax "zusammen klicken"
Wie das mit deinem userReading läuft weiß ich leider nicht. Ich bin auch nur Anfänger :)
Gruß Otto
Hallo Otto,
ich habe die Einzräge wie folgt verstanden.
- zuerst ein Device mit der Bezeichnung counter (klein) vom Typ RPI_GPIO erstellt.
- dieses hat mir dabei die Readings Counter (groß)(weiss, dass das käse ist, hab blind aus
Muster übernommen), Pinlevel, state und time zur Verfügung gestellt
- in der letzten Zeile sollten wohl die usrReadings power mit der Wattangabe und einen Millisek.
genauen Zeitstempel für time zur Verfügung gestellt werden.
Gruss
Rainer
Zitat von: perry am 18 Dezember 2015, 15:30:25
- zuerst ein Device mit der Bezeichnung counter (klein) vom Typ RPI_GPIO erstellt.
- dieses hat mir dabei die Readings Counter (groß)(weiss, dass das käse ist, hab blind aus
Muster übernommen), Pinlevel, state und time zur Verfügung gestellt
Das hält frisch im Kopf 8)
Also dann würde ich sagen
counter:Counter.*
für nur den Counter oder alle mit
counter:.*
müsste dir vier Werte liefern Counter, Pinlevel, state und time wenn sie denn wirklich erzeugt werden.
Wie gesagt schau es Dir mit Regexp Parts an, dass ist "bildlich"
Gruß Otto
Hallo Otto,
vielen Dank für den Tip mit dem Regexp Parts. Die Funktion war mir bisher nicht klar. Damit ist das Syntaxproblem beim LogFile geklärt.
Der eigentliche Fehler liegt nun ziemlich sicher in den usrReadings und hier vermutlich in der Bedingung, da wenn ich die raus nehme zumindest der erster Wert time im LogFile angezeigt wird.
Versuch mich weiter durch zu "wurschteln". ;)
Vielleicht finde ich ja noch eine Hilfe.
Gruss
Rainer
Hallo,
nur der Vollständigkeitshalber, ich habe mein Problem gelöst. Für die nachfolgenden die dies Interessiert der Auszug aus der fhem.cfg.
define counter RPI_GPIO 17
attr counter direction input
attr counter interrupt falling
attr counter pud_resistor up
attr counter stateFormat time
attr counter userReadings time:(Counter) { use Time::HiRes qw(time);; time();; },\
power:(Counter) { use Time::HiRes qw(time);; sprintf("%.2f", 1800 / (time() - OldValue("counter"))) . " W";;}
define log_counter FileLog %L/counter_%y-%m.log counter:Counter:.*|counter:power:.*|counter:time:.*
Gruss
Rainer
:) :) :) :) :)
Zitat von: perry am 18 Dezember 2015, 17:48:02
vielen Dank für den Tip mit dem Regexp Parts. Die Funktion war mir bisher nicht klar. Damit ist das Syntaxproblem beim LogFile geklärt.
Hallo Rainer,
dabei steht das an so prominenter Stelle, aber scheinbar schreckt jeden der Begriff derart ab, dass man gar nicht erst drauf drückt und nachschaut was dies leistet. Ging mir auch so bis mich einer von den "alten Hasen" drauf gestupst hat. Wie auch Du reagieren die meisten beim ersten Hinweis gar nicht darauf, das "Regexp Parts" klingt einfach viel zu abstrakt.
Vielleicht sollte man das umbenennen...
Deinen Code für den Zähler schau ich mir noch genauer an 8) das hilft mir glaube ich weiter.
Gruß Otto