Werte berechen aus Logfiles

Begonnen von Franz Tenbrock, 12 Dezember 2013, 15:46:26

Vorheriges Thema - Nächstes Thema

Franz Tenbrock

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..
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

Puschel74

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.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Franz Tenbrock

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
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

Puschel74

#18
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
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Arne

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).
Zentrale: FHEM 5.5 auf Linux-Server mit CUL, HMLAN, MAX! Cube, JeeLink
Heizkörper: MAX!  ||  Gas: EM 1000-GZ  ||  Strom: ESA 100WZ-IR
Rolladen, Fenster u. Türen: HM  ||  Zisterne: KFM 100 S
Licht: HM-Dimmer + 12V-LED-Lampen  ||  Steckdosen: PCA 301
Bodenfeuchte: Sensor FS20-BF, Sender KFM 100 S