FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Franz Tenbrock am 12 Dezember 2013, 15:46:26

Titel: Werte berechen aus Logfiles
Beitrag von: Franz Tenbrock am 12 Dezember 2013, 15:46:26
Hallo
ich hab wohl ien Brett vor dem Kopf . Seit längerem versuch ich ja schon den aktuellen Verbrauch meines Gaszählers anzuzeigen.
Leider hatte bisher keiner eine Antwort. Daher gehe ich das jetzt mal allgemeiner an
Ich habe ein Logfile mit dem Namen und den Einträgen

EM_Gas-cnt.log

2013-12-12_00:00:52 EM_Gas CNT: 110 CUM: 10479.930  5MIN: 0.000  TOP: 0.000
          "
2013-12-12_15:28:57 EM_Gas CNT: 39 CUM: 10485.750  5MIN: 0.150  TOP: 0.002

Dazu ein Plot der das ganze ausgibt.

in der Überschrift findet sich der Summenwert des Tags aus  - 10479,930 bis  10485.75

der Wert wird in der Überschrift des Plot auch angegeben
Im Ploteditor wird nach Colum = 8 und Rexexp EM_Gas:CNT:  gesucht ?

Ich will nun diesen Wert aber im Dashbord angeben

Muss ich die Zahl in einem Dummy speichern als
attr Tagesverbrauch_Gas dummy

wie integriere ich die Formel
Sum $data{sum1}
das hab ich im Plot gefunden.


Habe 3 Tages Plots und die Summenwerte stimmen auch
Es gibt kein andere Logfile
also müssen die Summen werte ja über irgendeine Formel mittels FHEM berechnet werden.

Irgenwie muss man ja wohl so auch die Monatswerte berechnen.



Versuche das zu verstehen, denke auch das die Idee nach der ich suche richtig ist, kann das aber nciht in eine passende Syntax bringen.
Wer kann helfen

Hätte meine Energieampel gerne irgendwann fertig
Titel: Antw:Werte berechen aus Logfiles
Beitrag von: Puschel74 am 12 Dezember 2013, 16:33:44
Hallo,

bei meinen Zählern erledigt das average.
Das generiert ein passendes Reading und das kann ausgelesen und angezeigt werden.

Grüße

Edith: Wobei ich grad versucht habe einen Plot mit dem "current_cum_day" zu bauen aber er bleibt mir leer  :o
Titel: Antw:Werte berechen aus Logfiles
Beitrag von: Franz Tenbrock am 12 Dezember 2013, 17:41:02
Ja das hab ich auch shcon gelesen, aber im Wiki steht da recht wenig drin, als Anfänger bin ich noch auf Beispiele angewiesen, ich kapier einfahc die Ganze Syntax noch nicht richtig.

Es funktioniert ja schon eine ganze Menge bei mir...
hab mir auch shcon mit eiem Edito die pm Dateien angeschaut, erkenne zwar an vielen stellen was da passieren soll, das Ganze dann aber aktiv selbst zu definieren ist halt ungleich schwerer

ist halt wie eien Fremsprache lernen, das geht halt auhc nciht von alleine,.
kurzum
kann ich 2 3 Zeilen mit so einem average haben ?

Die Plots werden ja super gemacht 3 Tage rückwärts, habe da in der pm aber kein average gefunden sondern das mit den Summen
das macht ja auch einen gewissen Sinn, hab mal nachgerechnet wenn ich vom aktuellen Wert den 0 Uhr WErt abziehe habe ich ja genau die Zahl die ich brauche.
genauso wäre es ja auch für den Monat zu machen, die Frage wäre nur wie man dann die Uhrzeit oder das Datum definiert.

Titel: Antw:Werte berechen aus Logfiles
Beitrag von: Puschel74 am 12 Dezember 2013, 17:51:25
Hallo,

define Alle_Avg average .*:current.*

Achtung!
Diese Zeile berechnet für JEDES Device bei dem im Reading current(irgendwas) vorkommt die Average-Werte.
Evtl. solltest du es erstmal so versuchen:

define Avg_Gas average EM_Gas:current.*

Wobei ich grad etwas verwirrt bin  :o
Ich hab nochmal in der commandref nachgeschaut und die current_cum_day / current_cum_month werden garnicht von average erzeugt.
Diese Werte müssten eigentlich vom Zähler geliefert werden.

Hast du einen EM1000GZ ??

Grüße
Titel: Antw:Werte berechen aus Logfiles
Beitrag von: Franz Tenbrock am 12 Dezember 2013, 17:56:17
ja hab ich einen EM1000GZ
der liefert leider komplett andere Daten als derWZ Stromzähler, für den WZ habe ich richtig schöne Werte die ich auch farblcih darstellen kann,

Beim GZ bekomme ich immer eine ganze Zeile mit dem
cum_day: 6.920 CUM: 10479.930 COST: 0.00

wobei cum_day soweit ich das jetzt sehe der Gesamtwert vom Vortag ist.

Es existiert wie gesagt nur 1 Logfile zu dem Gaszähler mit Zeilen wie ich es gepostet habe.
Da ich für die letzten 3 Tage hier im Forum eine Möglcihkeit gefunden habe die lezten Tage als Plot zu generieren muss es ja eine Möglichkeit geben den Summenwert von heute und gestern als Zahl auszugeben., generiert auf eben dem Logfile

Titel: Antw:Werte berechen aus Logfiles
Beitrag von: Franz Tenbrock am 12 Dezember 2013, 18:55:01
so gerade mal in meine fhem.save gesehen
da hab ich wohl was neues ````
setstate EM_Gas CNT: 78 CUM: 10487.050  5MIN: 0.010  TOP: 0.002
setstate EM_Gas 2013-12-12 18:44:36 RAW CNT: 78 CUM: 17475  5MIN: 1  TOP: 17475
setstate EM_Gas 2012-12-05 23:19:01 basis 1031230
setstate EM_Gas 2013-12-12 00:00:52 cum_day cum_day: 6.920 CUM: 10479.930 COST: 0.00
setstate EM_Gas 2013-12-12 18:44:36 current 0.01
setstate EM_Gas 2013-12-12 18:44:36 current_avg_day 0.0
setstate EM_Gas 2013-12-12 18:44:36 current_avg_month 0.0
setstate EM_Gas 2013-12-12 18:44:36 current_cnt 1
setstate EM_Gas 2013-12-12 18:44:36 current_cnt_avg_day 0.0
setstate EM_Gas 2013-12-12 18:44:36 current_cnt_avg_month 0.0
setstate EM_Gas 2013-12-12 18:44:36 current_cnt_cum_day 301
setstate EM_Gas 2013-12-12 18:44:36 current_cnt_cum_month 301
setstate EM_Gas 2013-12-12 18:44:36 current_cnt_max_day 1.0
setstate EM_Gas 2013-12-12 18:44:36 current_cnt_max_month 1.0
setstate EM_Gas 2013-12-12 18:43:45 current_cnt_min_day 0
setstate EM_Gas 2013-12-12 18:43:45 current_cnt_min_month 0
setstate EM_Gas 2013-12-12 18:44:36 current_cum_day 3.01
setstate EM_Gas 2013-12-12 18:44:36 current_cum_month 3.01
setstate EM_Gas 2013-12-12 18:44:36 current_max_day 0.0
setstate EM_Gas 2013-12-12 18:44:36 current_max_month 0.0
setstate EM_Gas 2013-12-12 18:43:45 current_min_day 0
setstate EM_Gas 2013-12-12 18:43:45 current_min_month 0


so wie es ausssieht sammelt average Daten

hier meine cfg dazu

define Avg_Gas average EM_Gas:current.*
attr Avg_Gas room TEST


da fehlt ja noch was
wie kann ich das nun anzeigen
wenn ich nun im TEST Raum schaue
sehe ich da nur

Avg_Gas              active

keine Zahl kein Reading
??
so nun auch das gefunden da tut sich wohl was, damit bin ich dann wohl doch schon was weiter


Nachtrag, jetzt bekomme ich schon mal andere Zahlen in meiner Energieampel, eben die aus den Readings :-)
mal sehen ob das dann mit den Summenwerten aus den Plots und mit dem realen Zählerstand auf ein level gebracht werden kann

aber das sieht schon mal 100 mal besser aus
Titel: Antw:Werte berechen aus Logfiles
Beitrag von: Puschel74 am 12 Dezember 2013, 19:09:01
Hallo,

average hat die Angewohnheit die Werte in die Readings des jeweiligen Device zu schreiben.
active ist absolut ausreichend.

siehe commandref zu average.

Grüße

P.S.: Am zerteilen des Strings für einen Plot bin ich mir grad die Zähne am ausbeissen  :o

Edith: So - hab den String zerteilt.
Ob du das aber 1:1 für FileLog verwenden kannst kann ich dir nicht sagen.
Diese GPlot
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "

set title '<L1>'
set ylabel "Power (kW)"
set y2label "Power (kW)"
set grid
set ytics
set y2tics
set format y "%.2f"
set format y2 "%.2f"

#DbLog <SPEC1>:cum_day:::$val=~s/[\D.*]*.([\d.]*).[\D.]*.[\d.]*.[\D.]*.[\d.]*/$1/eg
#DbLog <SPEC2>:cum_day:::$val=~s/[\D.*]*.([\d.]*).[\D.]*.[\d.]*.[\D.]*.[\d.]*/$1/eg

plot \
   "< awk '/load avg:/ {print $1, $4}' <IN>" \
   using 1:2 ls l0fill axes x1y1 title 'Gas' lw 1 with lines \
   "< awk '/load avg5:/ {print $1, $4}' <IN>" \
   using 1:2 ls l1 axes x1y2 title 'Strom' lw 2 with lines \

liefert mir zumindest den Screenshot.
Titel: Antw:Werte berechen aus Logfiles
Beitrag von: Franz Tenbrock am 12 Dezember 2013, 20:30:55
Also, das mit dem average bringt schon deutlich mehr Readings
siehe Bild
(http://aver1.jpg)

der Plot der schon lange existiert zeigt mir aber diesen Tagesverbrauch an
(http://aver2.jpg)

wie man sieht 7,48

Diese Zahlt taucht leider niergends in den Readings auf ? Faktor?

So in etwas soll später das Ganze im Dashboard aussehen
da ist aber noch ein Fehler in der Formatierung, das Datum dahinter sollte nicht angezeigt werden sondern heute, die Farben sind auch noch nicht ok das kommt sobald die Zahlen stimmen
(http://aver3.jpg)

hier die cfg

#########################################################
#######               EM EMGas          #############
#########################################################

define EM_Gas CUL_EM 11
attr EM_Gas model EMGZ
attr EM_Gas room Energie

define FileLog_EM_Gas FileLog ./log/EM_Gas-cnt.log EM_Gas:CNT.*
attr FileLog_EM_Gas logtype power8:Power,text
attr FileLog_EM_Gas room Energie


#Und jetzt die Definitionen der Plots ... ähnlich wie im ersten Beitrag:

define 15_Plot_EM_Gas_0 weblink htmlCode <h3>Gasverbrauch: Rückblick 3 Tage</h3>
attr 15_Plot_EM_Gas_0 room Energie

define 15_Plot_EM_Gas_1 SVG FileLog_EM_Gas:power8:CURRENT
attr 15_Plot_EM_Gas_1 fixedrange day
attr 15_Plot_EM_Gas_1 group Plot
attr 15_Plot_EM_Gas_1 label "heute - day power8 - Sum $data{sum1}"
attr 15_Plot_EM_Gas_1 room Energie

define 15_Plot_EM_Gas_2 SVG FileLog_EM_Gas:power8:CURRENT
attr 15_Plot_EM_Gas_2 fixedoffset -1
attr 15_Plot_EM_Gas_2 fixedrange day
attr 15_Plot_EM_Gas_2 label "vor 1 Tag - day power8 - Sum $data{sum1}"
attr 15_Plot_EM_Gas_2 room Energie

define 15_Plot_EM_Gas_3 SVG FileLog_EM_Gas:power8:CURRENT
attr 15_Plot_EM_Gas_3 fixedoffset -2
attr 15_Plot_EM_Gas_3 fixedrange day
attr 15_Plot_EM_Gas_3 label "vor 2 Tagen - day power8 - Sum $data{sum1}"
attr 15_Plot_EM_Gas_3 room Energie



#########################################################
#######          Verbrauchsanzeige          #############
#########################################################

### http://www.fhemwiki.de/wiki/ReadingsGroup

define Strom_Verbrauch readingsGroup ESAx000WZ_5f94:day,month
attr Strom_Verbrauch fp_Schaubild 260,120,0,
attr Strom_Verbrauch group Verbrauch
attr Strom_Verbrauch mapping %ALIAS
attr Strom_Verbrauch room TEST
attr Strom_Verbrauch valueFormat {day => "%.2f   heute", month => "%.1f   Monat"}
attr Strom_Verbrauch valueStyle {($READING eq "day" && $VALUE > 15)?'style="color:red"':($READING eq "day" && $VALUE > 12)?'style="color:yellow"':'style="color:green"'}

define PV_Strom readingsGroup ESASolar:day,month
attr PV_Strom fp_Schaubild 260,650,0,
attr PV_Strom group Verbrauch
attr PV_Strom mapping %ALIAS
attr PV_Strom room TEST
attr PV_Strom valueFormat {day => "%.2f   heute", month => "%.1f   Monat"}
attr PV_Strom valueStyle {($READING eq "day" && $VALUE > 10)?'style="color:green"':($READING eq "day" && $VALUE > 5)?'style="color:yellow"':'style="color:red"'}


define Gas_Verbrauch readingsGroup EM_Gas:current_cum_day
attr Gas_Verbrauch group Verbrauch
attr Gas_Verbrauch mapping %ALIAS
attr Gas_Verbrauch room TEST
attr Gas_Verbrauch valueFormat {current_cum_day => "%.1f  heute"}
attr Gas_Verbrauch valueStyle {($READING eq "current_cum_day" && $VALUE > 20)?'style="color:green"':($READING eq "current_cum_day" && $VALUE > 5)?'style="color:yellow"':'style="color:red"'}




siehe cfg Auszug
Titel: Antw:Werte berechen aus Logfiles
Beitrag von: Franz Tenbrock am 12 Dezember 2013, 22:26:03
Leider doch noch nichts gescheites

Ärgerlich ist das weil eben in den Plots der richtige Wert angezeigt wird,
wie kommt dieser Wert dort hin ??

aus dem Logfile kann man es ja per Hand ausrechnen :-(
Titel: Antw:Werte berechen aus Logfiles
Beitrag von: Puschel74 am 12 Dezember 2013, 22:50:25
Hallo,

ZitatÄrgerlich ist das weil eben in den Plots der richtige Wert angezeigt wird,
In deinen Plots wird der momentan-Wert angezeigt - oder hab ich einen Plot übersehen?

Zitatwie kommt dieser Wert dort hin ??
In das Reading kommt der Wert durch den Zähler - dieser übermittelt den Wert des vergangenen Tages (bei einem Tageswechsel) und den Wert des vergangenen Monats (bei einem Monatswechsel)
eigentlich an die zugehörige "Energie-Mess-Anzeige" (keine Ahnung wie die heisst), ich geh mal davon aus das das so stimmt - ich kann mich aber natürlich immer noch irren.

FHEM empfängt diese Werte und stellt sie im Reading zur Verfügung - zum Glück.
Was mich nur wundert ist das du keine cum_month-Werte hast - siehe Screenshot.

Grüße
Titel: Antw:Werte berechen aus Logfiles
Beitrag von: Franz Tenbrock am 13 Dezember 2013, 07:57:39
Guten Morgen
hab mir die Orginal pm vor 2 Wochen noch einmal runtergeladen und alles neu installiert und den Code auch von 12 auf 11 gestellt, das kann ich ja mittlerweile alles :-)
trotz allem wird weder cum_day noch cum_month angezeigt.
Average hat auch noch nichts gebracht. Sammelt zwar Zahlen , die kann ich auch anzeigen :-), aber sie bringen mir noch ncihts, weil sie eben nciht das richtige sammeln

In der pm sehe ich ja auch das da cum_day und cum_month berechnet wird, diese Werte werden aber nicht angezeigt .-(
Das was ich ja gerne anzeigen würde wäre der aktuelle Tagesverbrauchswert der obenim Plot auch angegebenist,
irgendwie muss der WErt doch da auch hingekommen sein ???
Hier noch einmal das Bild vom Plot

(http://snap.jpg)

Wenn ich wüsste wie das ginge, dann bekäme ich es ja auch hin die Werte der letzten 3 Tage im vergleich wie bei der Energieampel anzuzeigen, die Plots habe ich ja schon , die Werte also auch. Das hat ja einer aus dem Forum hier schon hinbekommen. Ich würde das gerne aber im Dashboard schon farbig darstellen damit meine Frau / Kinder das auch lesen können.
Darüber hinaus würde ich auch gerne lernen wie man aus vorhandenen Daten , ev auch über rechnen an neue Werte kommt.

Die Zahl wäre ja der aktuelle Gesamtzählerstand, ( dne hab ich ja auch 0 total ) - den Gesamtzählerstand des Tages um 00 :01 Uhr

aber Danke schon mal das man sich hier die Mühe macht zu helfen
vielleicht wirds ja doch noch was bis Weihnachten
Titel: Antw:Werte berechen aus Logfiles
Beitrag von: Franz Tenbrock am 13 Dezember 2013, 15:27:58
und wieder ein Versuch

in der Commandref steht
Get

    get <name> <infile> <outfile> <from> <to> <column_spec>

    Read data from the logfile, used by frontends to plot data without direct access to the file.
        <infile>
        Name of the logfile to grep. "-" is the current logfile, or you can specify an older file (or a file from the archive).
        <outfile>
        If it is "-", you get the data back on the current connection, else it is the prefix for the output file. If more than one file is specified, the data is separated by a comment line for "-", else it is written in separate files, numerated from 0.
        <from> <to>
        Used to grep the data. The elements should correspond to the timeformat or be an initial substring of it.
        <column_spec>
        For each column_spec return a set of data in a separate file or separated by a comment line on the current connection.
        Syntax: <col>:<regexp>:<default>:<fn>
            <col> The column number to return, starting at 1 with the date. If the column is enclosed in double quotes, then it is a fix text, not a column number.
            <regexp> If present, return only lines containing the regexp. Case sensitive.
            <default>
            If no values were found and the default value is set, then return one line containing the from value and this default. We need this feature as gnuplot aborts if a dataset has no value at all.
            <fn> One of the following:
                int
                Extract the integer at the beginning og the string. Used e.g. for constructs like 10%
                delta-h or delta-d
                Return the delta of the values for a given hour or a given day. Used if the column contains a counter, as is the case for the KS300 rain column.
                everything else
                The string is evaluated as a perl expression. @fld is the current line splitted by spaces. Note: The string/perl expression cannot contain spaces, as the part after the space will be considered as the next column_spec.


    Example:

        get outlog out-2008.log - 2008-01-01 2008-01-08 4:IR:int: 9:IR::


damit müsste ich doch einen Wert extrahieren können und in einem Dummy speichern und anzeigen
mit delta -d  den Tageswert anzeigen

EM_Gas-cnt.log:
2013-12-13_15:23:43 EM_Gas CNT: 69 CUM: 10492.820  5MIN: 0.150  TOP: 0.002

also nach dem delta-d der 7. Spalte ? suchen oder so ...

define gasheute dummy

nur noch confused
und eine commandref in Englich ist für einen Nichtprogrammierer auch nicht leichter.
so schwer kann das doch eigentlich gar nicht sein
die Daten sind doch da
Titel: Antw:Werte berechen aus Logfiles
Beitrag von: Puschel74 am 13 Dezember 2013, 15:41:14
Hallo,

in der 6. Spalte suchen  8)
Das Leerzeichen ist der Trenner, aber egal.

Wie du schon gesagt hast - die Daten sind ja da.

Ich habe dir oben ja schon gepostet wie das im Plot funktioniert die einzelnen Werte zu extrahieren (danke andre nochmal).
So bzw. so ähnlich musst du auch dran gehen und evtl. ein userReading generieren das "Tagesverbrauch" heissen könnte.
dieses userReading kannst du ja dann auf deinen Floorplan los lassen.

Ich hab mich heute schonmal versucht daran aber dann erstmal wieder auf die Seite geschoben.

Vom Prinzip also "nur" per regexp den Wert aus der cum_day Zeile extrahieren (warum das bei deinem EM1000GZ klein geschrieben ist wundert mich auch etwas - bei mir steht CUM_DAY) und dann in ein userReading schreiben.

Evtl. hab ich später nochmal Muße und häng mich nochmal dran.

Also entweder selbst probieren (regexp - die einfache Version sieht so aus $val=~s/^cum_day..([\d.]*).*/$1/eg)
in ein userReading schreibne oder noch ein bischen Geduld aufbringen.

Grüße

P.S.: In $val steht dann nur der Zahlenwert des Readings mit dem Namen cum_day
Titel: Antw:Werte berechen aus Logfiles
Beitrag von: Puschel74 am 13 Dezember 2013, 17:11:31
Hallo,

ACHTUNG! Das lesen dieses Beitrags kann sie erblinden lassen - ich lehne jede Verantwortung ab

nicht schön - nicht gut - und manche bekommen sicher eine Augenkrankheit wenn sie das sehen.
Aber es klappt.

Nein - ist kein userReading.
Ich kenn mich - ich zerschiess mir mit ziemlicher Siherheit die Readings des Device.
Daher ein Dummy.

define Tagesverbrauchset notify RS {
  my $wert1 = ReadingsVal("Gas","cum_day",0);
  my ($wert2, $wert3) = split /\ /, "$wert1", 2;
  my ($wert4, $wert5) = split /\ /, "$wert3", 2;
  fhem("set Tagesverbrauch_Gas $wert4 m3");
  Log(3,"Wert: ".$wert4);
}

dieser wurde zu Testzwecken von einem "wegwerf"-Dummy RS getriggert.
Da der Tagesverbrauch aber nur einmal am Tagesbeginn übermittelt wird könnte man sicher auch auf
EM_Gas:cum_day.* triggern.

Ja. Ich muss das zweimal splitten weil ich den code "ab-geguttenbergt" habe (weil ich selber zu blöd dazu bin) - also bitte nicht nachmachen.
Die Log-Zeile kann raus - ist nur für mich gedacht gewesen.
Das m3 am Ende kann evtl. auch weg.
Einheiten sollten nicht ins Reading geschrieben werden.
Da das aber kein Reading ist sondern eine "Vergewaltigung" habe ich m3 einfach mal mit rein geschrieben.

Grüße
Titel: Antw:Werte berechen aus Logfiles
Beitrag von: Franz Tenbrock am 13 Dezember 2013, 20:11:09
es muss nicht schön sein
erst einmal muss es nur funktionieren
bin gerade erst nach Hause gekommen
werde es morgen in Ruhe mal probieren
aber das war überhaupt der erste Vorschlag
Titel: Antw:Werte berechen aus Logfiles
Beitrag von: Franz Tenbrock am 14 Dezember 2013, 09:34:49
Sorry ich nerve...
aber so klappt es bei mir nicht
einfach mal zum Verständis
muss das Ganze in die FHEM.cfg oder in die 99_myutil.pm ?

Ich definiere die Zeile

define RS dummy

um einen Dummy mit dem Namen RS zu erzeugen
dieser wird  ja in deiner Formel verwendet
"dieser wurde zu Testzwecken von einem "wegwerf"-Dummy RS getriggert."

wie aber trigger ich
EM_Gas:cum_day.*
?

Tagesverbrauchset schaut nun auf RS

in der geschweiften Klammer wird dann das Reading cum_day aufgesplittet ????
du nimmst die Zeile aus dem Reading
bei mir:

cum_day   cum_day: 7.860 CUM: 10495.580 COST: 0.00  2013-12-14 00:00:26


define Tagesverbrauchset notify RS {
  my $wert1 = ReadingsVal("Gas","cum_day",0);
  my ($wert2, $wert3) = split /\ /, "$wert1", 2;
  my ($wert4, $wert5) = split /\ /, "$wert3", 2;
  fhem("set Tagesverbrauch_Gas $wert4 m3");
  Log(3,"Wert: ".$wert4);
}


das was ich wieder verstehe? ist diese Zeile
  fhem("set Tagesverbrauch_Gas $wert4 m3");

das ist die Anzeige !?

tja so ist das wenn man keine Ahnung vom programmieren hat..
Titel: Antw:Werte berechen aus Logfiles
Beitrag von: Puschel74 am 14 Dezember 2013, 09:55:17
Hallo,

Zitatmuss das Ganze in die FHEM.cfg oder in die 99_myutil.pm ?
Eigentlich in die fhem.cfg ABER!
da ich NIEMALS die fhem.cfg direkt editiere kann es bei meinen Lösungen oder Vorschlägen durchaus zu Fehlermeldungen kommen da ich mich nicht um Zeilenabschlüsse oder Zeichenschutz oder was auch immer kümmere.

Ich lege ein neues notify immer in der Form
define <einmaliger_Name> notify <worauf_soll_geachtet_werden> {}
an und bearbeite dieses notify dann über FHEMWEB indem ich das zugehörige DEF öffne.
Einfach das notify anklicken und in der Detailansicht beherzt auf DEF klicken.

Zitatwie aber trigger ich EM_Gas:cum_day.*
du garnicht das macht der Gaszähler (so er EM_Gas heisst) indem er nach Mitternacht das Event cum_day an FHEM sendet.

Das ganze mit notify ist aber im Einsteiger.pdf und im Wiki und auch hier im Forum zigmal erklärt und erläutert worden.
Nix für ungut aber Grundlagen sollten dann mal schön langsam von hinten nach vorne kommen - und das hat mit "Programmieren" nun wirklich nichts zu tun.
Aber egal - weiter im Text.

Zitatin der geschweiften Klammer wird dann das Reading cum_day aufgesplittet ????
du nimmst die Zeile aus dem Reading
bei mir:

cum_day   cum_day: 7.860 CUM: 10495.580 COST: 0.00  2013-12-14 00:00:26
Mehr oder weniger ja.
Ich nehme das Reading cum_day und splitte genau zweimal - beim ersten Mal steht "cum_day:" in der ersten Variable und " 7.860 CUM: 10495.580 COST: 0.00  2013-12-14 00:00:26" in der zweiten (warum ist bei dir Datum und Uhrzeit hinten dran? copy&paste-Fehler?)
Beim zweiten split steht in der Variable dann der Wert den du haben willst - hier nun "7.860" und den Dummy Tagesverbrauch_Gas setzte ich nun auf diesen Wert und häng ein m3 noch hinten dran.

Also Schritt für Schritt - lösch erstmal den Dummy RS wieder mit delete RS
Nun gibst du in die FHEM-Befehlszeile define Tagesverbrauchset notify EM_Gas:cum_day.* {}
ein.
Nun klickst du das soeben erzeugte notify an (musst du evtl. garnicht weil dich FHEM automatisch in die Detailansicht bringt).
Hier hast du nun neben DEF
ZitatEM_Gas:cum_day.* {}
stehen.
Nun beherzt auf dieses DEF klicken - also auf die 3 Buchstaben DEF.
Nun kannst du das notify bearbeiten und fügst zwischen { und } das ein
my $wert1 = ReadingsVal("Gas","cum_day",0);
  my ($wert2, $wert3) = split /\ /, "$wert1", 2;
  my ($wert4, $wert5) = split /\ /, "$wert3", 2;
  fhem("set Tagesverbrauch_Gas $wert4 m3");
  Log(3,"Wert: ".$wert4);

damit es am Ende so aussieht:
EM_Gas:cum_day.* {
  my $wert1 = ReadingsVal("Gas","cum_day",0);
  my ($wert2, $wert3) = split /\ /, "$wert1", 2;
  my ($wert4, $wert5) = split /\ /, "$wert3", 2;
  fhem("set Tagesverbrauch_Gas $wert4 m3");
  Log(3,"Wert: ".$wert4);
}

Nun unter dem notify-"Kasten" auf modify klicken damit die Änderungen übernommen werden.

Dann brauchst du nur noch bis morgen warten.
Sobald EM_Gas wieder das Reading cum_day (mit egal was hinten dran) sendet wird der der Tagesverbrauch von gestern! in den Dummy Tagesverbrauch_Gas geschrieben - den du übrigens auch noch anlegen musst  ;)

Wie erklär ich dir jetzt aber nicht  8)

Grüße

P.S.: Solltest du heute noch vorhaben FHEM neu zu starten würde es sich anbieten auch noch auf <save config> zu klicken da das soeben mühsam erstellte notify mitsamt Dummy sonst wieder verschwunden ist.
Titel: Antw:Werte berechen aus Logfiles
Beitrag von: Franz Tenbrock am 14 Dezember 2013, 12:06:42
so das klappt
1000 Dank

Problem ist das ich das mit der Befehlsszeile nie mache
ich will eine geordnete fhem.cfg sonst verstehe ich einige Tage später gar nichts mehr

Beschäftige mich ja noch nciht so lange damit
und zum Glück
das was ich einmal erfolgreich zusammengesucht habe
kann ich ja dann auch reproduzieren.

schreibe mir gerade mit Word mein Einsteiger pdf
wenn das hier klappt werde ich das mal zusammenschreiben
für absolute Anfänger - ev klappt das ja

Als Hausarzt kenne ich mein Praxisprogramm in und auswendig, da helfe ich in einem Forum auch den Kollegen, weil ich weiß wie frustrierend das manchmal ist.dann hab ich noch ein Softwareprojekt über das anfangs sehr viele gelacht haben, da programmiere ich zwar nciht aber ich sitze fast tgl mit dem Programmierer zusammen und wir überlegen uns neue Strategien, schau mal
maxidoc.de

Schönes WE
meiens ist erst einmal gerettet
Titel: Antw:Werte berechen aus Logfiles
Beitrag von: Puschel74 am 14 Dezember 2013, 12:28:00
Hallo,

ZitatProblem ist das ich das mit der Befehlsszeile nie mache
ich will eine geordnete fhem.cfg sonst verstehe ich einige Tage später gar nichts mehr

Kurzer Tipp dazu.
Vergiss erstmal das es eine fhem.cfg gibt  ;)
Für FHEM ist die fhem.cfg geordnet genug.
Du findest die Geräte, notifys, ats und sonst noch alles übers FHEMWEB und kannst das ganze auch dort bearbeiten.
Um den Rest lass sich doch FHEM kümmern  ;D

Als Anfänger sollte man in dieser Datei sowieso nicht rumfuhrwerken - das gibt meist nur Probleme.
Und als nicht-Anfänger sollte man da drinnen nur dann was machen wenn man weiß was man macht - auch weiß wie man das wieder funktionsfähig bringen kann wenn mal was nicht klappt  8)

Zitatschreibe mir gerade mit Word mein Einsteiger pdf
wenn das hier klappt werde ich das mal zusammenschreiben
für absolute Anfänger - ev klappt das ja
Na dann mach das mal bitte aus absoluter Anfängersicht.
Das können wir ja dann ins Wiki bzw. in den Anfängerbereich stellen für alle zukünftigen Neuankömmlinge.

Wenn du den Wert schonmal i nden "Tagesverbrauch_Gas" Dummy schreiben willst (und nicht bis morgen warten willst) mach do sowas noch:

RS:.* {
  my $wert1 = ReadingsVal("Gas","cum_day",0);
  my ($wert2, $wert3) = split /\ /, "$wert1", 2;
  my ($wert4, $wert5) = split /\ /, "$wert3", 2;
  fhem("set Tagesverbrauch_Gas $wert4 m3");
  Log(3,"Wert: ".$wert4);
}

und einen Dummy anlegen:
define RS dummy
attr RS webCmd on:off

Wenn du nun bei deinem Dummy RS auf on (oder off) klickst sollte in Tagesverbrauch_Gas schonmal der Wert auftauchen.
Dann hast du für heute schonmal den Wert von gestern und kannst diesen in deinem Floorplan platzieren.

Nachher kannst du ja mit delete RSden Dummy wieder löschen und im notify die erste Zeile wieder auf EM_Gas:cum_day.* {
ändern.
Das sollte dann ab morgen früh deinen "Tagesverbrauch_Gas" Dummy automatisch befüllen.

Grüße

Edith: Ein auslösen des notify sollte auch durch Eingabe von trigger EM_Gas cum_dayin der Befehlszeile klappen.
Das wäre dann aber schon was für <Beginner II>  ;D
Titel: Antw:Werte berechen aus Logfiles
Beitrag von: Arne am 14 Dezember 2013, 14:38:56
Hallo Franz,

Deine PM habe ich bekommen. Wie ich lese, hast Du bereits eine Lösung. Ein paar Anmerkungen habe ich noch.

Lösung mit notify

Das doppelte split im notify brauchst du nicht, wenn du die Beschränkung auf 2 Ergebniswerte weglässt:


define Tagesverbrauch_Gas_set notify EM_Gas:cum_day.* { \
  my $zeile = ReadingsVal( "EM_Gas", "cum_day", 0);;    \
  my ($egal, $wert) = split /\ /, $zeile;;              \
  fhem( "set Tagesverbrauch_Gas $wert m3");;            \
}


Lösung mit get

Im Logfile stehen beim Gaszähler neben den "Alle-5-Minuten-Werte" ...


2012-12-15_18:32:35 Gaszaehler CNT: 6 CUM: 65.713  5MIN: 0.035  TOP: 0.017
2012-12-15_18:37:36 Gaszaehler CNT: 7 CUM: 65.713  5MIN: 0.000  TOP: 0.000
2012-12-15_18:42:36 Gaszaehler CNT: 8 CUM: 65.764  5MIN: 0.051  TOP: 0.013
2012-12-15_18:47:37 Gaszaehler CNT: 9 CUM: 65.770  5MIN: 0.006  TOP: 0.013


... noch viele weitere Werte. Interessant sind ja die "Summenwerte" (Tag, Monat, ...):


2013-09-29_00:00:33 Gaszaehler cum_day: CUM_DAY: 1.297 CUM: 694.210 COST: 0.92
2013-09-30_00:03:55 Gaszaehler cum_day: CUM_DAY: 0.950 CUM: 695.160 COST: 0.67
2013-10-01_00:02:16 Gaszaehler cum_month: CUM_MONTH: 19.491 CUM: 696.276 COST: 18.93
2013-10-01_00:02:16 Gaszaehler cum_day: CUM_DAY: 1.116 CUM: 696.276 COST: 0.79
2013-10-02_00:07:11 Gaszaehler cum_day: CUM_DAY: 2.891 CUM: 699.167 COST: 2.05


Diese kannst Du auch mit get auslesen. Hier ein Test mit telnet:


fhem> get FileLog_Gaszaehler_CUM - - 2013-10-01 2013-10-02 5:CUM_DAY:0
2013-10-01_00:02:16 1.116
#5:CUM_DAY:0     


Achtung: Abgefragt werden muss der Zeitbereich, in dem der Summenwert weggeschrieben wurde.


fhem> get FileLog_Gaszaehler_CUM - - 2013-10-01 2013-10-01 5:CUM_DAY:0
2013-10-01 0        <--------- DAS GEHT ALSO NICHT!
#5:CUM_DAY:0

fhem> get FileLog_Gaszaehler_CUM - - 2013-10-01_00:00:00 2013-10-01_23:59:59 5:CUM_DAY:0
2013-10-01_00:02:16 1.116
#5:CUM_DAY:0


Wenn du den Gasverbrauch für den 30.09.2013 haben willst, muss du ab dem 01.10.2013 lesen. Bei der Angabe des bis-Wertes die Uhrzeit mit angeben oder einen Tag später nehmen, denn "2013-10-02" = "2013-10-02_00:00:00".

Sum-Wert im Plot

Der im Plot angegeben Sum-Wert ist die Summe der im Plot angezeigten Einzelwerte.
Also nicht der CUM_DAY:-Wert aus dem Log.

Plot über ein ganzes Jahr

Aus Performance-Gründen habe ich bei mir ein zusätzliches FileLog angelegt, in das nur die Summen-Werte geschrieben werden:


define Gaszaehler CUL_EM 9 0.001 0.001 0.71 5.09
define FileLog_Gaszaehler_ALL FileLog /fhem/log/Gaszaehler-ALL.log Gaszaehler
define FileLog_Gaszaehler_CUM FileLog /fhem/log/Gaszaehler-CUM.log Gaszaehler:cum_.*


Diese FileLog nutze ich für eine Jahresansicht (mit zwei Kurven: Tagverbrauch und Monatsverbrauch).