FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Spielmann am 05 März 2014, 23:06:56

Titel: [gelöst] Auf Befehl loggen
Beitrag von: Spielmann am 05 März 2014, 23:06:56
Hallo,
ich möchte mit fhem (auf FritzBox 7270) und einem arduino mega + ethernet shield  (Firmata configurable) Impulse zählen (Duchflusszähler einer Tankstelle). Wird ein Taster am Arduino betätigt, soll das Zählergebnis in ein Logfile geschrieben werden.
Mit dieser Zeile:

define zaehlsaeule FileLog ./log/Tankstelle.txt zaehler:count:.*

bekomme ich bei jedem Impuls einen Eintrag.


2014-03-03_23:02:25 zaehler count: 1
2014-03-03_23:02:26 zaehler count: 2
2014-03-03_23:02:26 zaehler count: 3
2014-03-03_23:02:26 zaehler count: 4
2014-03-03_23:02:27 zaehler count: 5
2014-03-03_23:02:27 zaehler count: 6
2014-03-03_23:02:27 zaehler count: 7
2014-03-03_23:02:27 zaehler count: 8
2014-03-03_23:02:28 zaehler count: 9
2014-03-03_23:02:28 zaehler count: 10
2014-03-03_23:02:28 zaehler count: 11
2014-03-03_23:02:28 zaehler count: 12
2014-03-03_23:02:29 zaehler count: 13
2014-03-03_23:39:56 zaehler count: 14


Ich möchte jedoch auf Tastendruck nur den letzten Eintrag ins Log-File bekommen. Mit dem Befehl  ,,get zähler count" wird der Wert im Web Frontend angezeigt.
Wie soll ich es anstellen, dass auf Tastendruck einmalig der Zähler ausgelesen wird und in ein Log-File geschrieben wird. Ich habe im Forum  schon alles mögliche Ansätze gelesen und ausprobiert. Anscheinend hat noch keiner diese Funktion benötigt.
Ich suche so etwas wie:

define Zählerende notify Taster { if (ReadingsVal("Taster","reading","off") eq "off"){ fhem("get zaehler count und schreibe es in ./log/Tankstelle.txt ") } }
Titel: Antw:Auf Befehl loggen
Beitrag von: chris1284 am 06 März 2014, 06:17:14
was evtl geht: dummy -> userreading count -> logfile für den dummy erstellen -> notify wenn knopf gedrückt {fhem("setreading  dummy count ReadingsVal("zaehler","count","n.A.")");}

funktioniert bei mir ganz gut
Titel: Antw:Auf Befehl loggen
Beitrag von: betateilchen am 06 März 2014, 10:12:52


define n_taster notify taster.on.* get zaehler count



Damit sollte im Log automatisch ein Eintrag inkl. Ergebnis auftauchen.

Titel: Antw:Auf Befehl loggen
Beitrag von: Spielmann am 06 März 2014, 23:31:38


define n_taster notify taster.*on get zaehler count


funktioniert. Jedoch möchte ich den Log in ein seperates Logfile schreiben und nicht ins Standard fhem Log. Mit dem Vorschlag von chris1284 kann ich noch nichts anfangen (deswegen Anfängerfrage). Ich werde mich mal mit dummy und setreading die nächtsten Tage auseinandersetzten.
Titel: Antw:Auf Befehl loggen
Beitrag von: betateilchen am 07 März 2014, 09:33:04
dann leg Dir doch einfach ein Logfile dafür an, wo ist das Problem?

define tasterLog Filelog ./log/taster.log taster.*
Titel: Antw:Auf Befehl loggen
Beitrag von: Spielmann am 07 März 2014, 19:04:44
hier ist mein Problem. Mit

define n_taster notify taster.*on get zaehler count


schaffe ich die Beziehung mit dem taster und dem zaehler. Wenn ich nun


define tasterLog Filelog ./log/taster.log taster.*


verliere ich ja wieder diese Beziehung. Wie bekomme ich nun diese Definiton ins Log?  Folgendes funktioniert ja nicht.


define tasterLog Filelog ./log/taster.log n_taster <- also die Definition




Titel: Antw:Auf Befehl loggen
Beitrag von: Puschel74 am 08 März 2014, 07:09:46
Hallo,

hast du betateilchens Vorschlag überhaupt mal versucht?

Zitatdefine tasterLog Filelog ./log/taster.log n_taster
Kann nicht klappen weil du den NAMEN des notify nicht als DEVICE für das Logfile angeben kannst.

Zitatverliere ich ja wieder diese Beziehung. Wie bekomme ich nun diese Definiton ins Log?
Du verlierst nichts weil es 2 eigenständige Definitionen sind - davon kannst du 75 in FHEM haben und es wird nichts verloren gehen.
Was soll die Definition im Logfile?
Ich dachte du willst den Zustand resp. den Wert im Logfile  :o

Grüße

P.S.: Die Zahl 75 habe ich willkürlich gewählt - dort kann auch 291 stehen oder 9531.
Titel: Antw:Auf Befehl loggen
Beitrag von: Spielmann am 08 März 2014, 11:50:29
Natürlich habe ich es versucht.
Zitat
Kann nicht klappen weil du den NAMEN des notify nicht als DEVICE für das Logfile angeben kannst.

Habe ich schon selbst herausgefunden, dass das nicht geht.  :(
In meiner config.cfg steht nun (mit meinen Variablen):

define freigabe FRM_IN 2
attr freigabe internal-pullup on
attr freigabe room Tankstelle
attr freigabe stateFormat reading

define freigabe_0 notify freigabe.*on get zaehler count

define zaehl_log FileLog ./log/Tankstelle.txt freigabe.*on
attr zaehl_log logtype text
attr zaehl_log room Tankstelle


bei dieser Konfiguration wird nun im FHEM.log der Zählerstand geschrieben und im Tankstelle.txt Log der Zustand der Freigabe geschrieben.  Es wird nicht definiert, dass der zaehler ins Tankstelle.txt Logfile geschrieben werden soll (das habe ich mit der Beziehung gemeint). Wären nun alle diese Logs in Tankstelle.txt wäre mein Problem erledigt.

fhem.log:

22014.03.08 10:35:28 3: freigabe_0 return value: 29
2014.03.08 10:36:02 3: freigabe_0 return value: 1
2014.03.08 10:36:25 3: freigabe_0 return value: 7
2014.03.08 10:36:46 3: freigabe_0 return value: 11


Tankstelle.txt

2014-03-08_09:30:38 freigabe reading: off
2014-03-08_10:35:28 freigabe reading: on
2014-03-08_10:35:28 freigabe reading: on
2014-03-08_10:35:33 freigabe reading: off
2014-03-08_10:36:02 freigabe reading: on
2014-03-08_10:36:02 freigabe reading: on
2014-03-08_10:36:03 freigabe reading: off
2014-03-08_10:36:25 freigabe reading: on
2014-03-08_10:36:25 freigabe reading: on
2014-03-08_10:36:26 freigabe reading: off


Wenn ich nun:

define zaehl_log FileLog ./log/Tankstelle.txt freigabe.*on|zaehler:count:.*


schreibe, wird wieder jeder Zählimpuls mitgeloggt - was ich ja nicht möchte sondern nur auf freigabe.*on.


2014-03-08_11:09:08 zaehler count: 1
2014-03-08_11:09:09 zaehler count: 2
2014-03-08_11:09:09 zaehler count: 3
2014-03-08_11:09:09 zaehler count: 4
2014-03-08_11:09:10 zaehler count: 5
2014-03-08_11:09:10 zaehler count: 6
2014-03-08_11:09:10 zaehler count: 7
2014-03-08_11:09:10 zaehler count: 8
2014-03-08_11:09:11 zaehler count: 9
2014-03-08_11:09:11 zaehler count: 10
2014-03-08_11:09:11 zaehler count: 11


PS: Als ich das mit den 75 gelesen habe, hab ich schon beim Weiterlesen überlegt "warum 75?". Hat sich dann am Textende ja erledigt.
Titel: Antw:Auf Befehl loggen
Beitrag von: Puschel74 am 08 März 2014, 11:57:13
Hallo,

Zitatfreigabe.*on

Was passiert wenn du freigabe:.*on.*
versuchst?

Grüße
Titel: Antw:Auf Befehl loggen
Beitrag von: Spielmann am 08 März 2014, 12:17:50
Hallo,
meinst Du im Filelog ?

./log/Tankstelle.txt freigabe.*on.*


Das macht keinen Unterschied, bzw ich kann keine Änderung zu

./log/Tankstelle.txt freigabe.*on

feststellen

Gruß
Titel: Antw:Auf Befehl loggen
Beitrag von: Puschel74 am 08 März 2014, 12:29:43
Hallo,

Zitatmeinst Du im Filelog ?
Ja aber so

freigabe:.*on.*

Mit :  ;D

Grüße
Titel: Antw:Auf Befehl loggen
Beitrag von: Spielmann am 08 März 2014, 12:54:13
Hallo,
mit
freigabe:.*on.*
komme ich wieder zum gleichen Ergebnis.

Interessant wie unterschiedlich der Syntax geschrieben werden kann. Dies ist auch ein Grund, warum ich mich als Anfänger noch ein bisschen schwer tue (fhem Sprache und PEARL Sprache teilweise gemischt, {( Klammern), Antworten im Forum werden je je nach Schreibstil angeboten...).
Aber ich bleib dran!

Gruß
Titel: Antw:Auf Befehl loggen
Beitrag von: Puschel74 am 08 März 2014, 13:06:20
Hallo,

Zitatschreibe, wird wieder jeder Zählimpuls mitgeloggt - was ich ja nicht möchte sondern nur auf freigabe.*on.
Ähh  :o

Sorry aber heute bin ich irgendwie schwer von Begriff.

Du möchtest den Zählimpuls nur loggen wenn Freigabe auf on steht oder wo hab ich jetzt meinen Denkknoten?

Vielleicht kannst du bitte nochmal kurz und knapp "für Dummys" erklären was genau du möchtest.

Grüße
Titel: Antw:Auf Befehl loggen
Beitrag von: Spielmann am 08 März 2014, 23:48:27
Hallo,
ich möchte mit dem Logfile eine Tankliste erzeugen.  Der Taster zeigt an, ob die Zapfpistole aufliegt (on) oder abgehoben wird (off). Wird die Zapfpistole abgehoben wird der Zähler auf 0 gesetzt (set zaehler count 0 -> funktioniert auch).
Jetzt wird getankt und dabei werden die Impulse vom Durchflusssensor gezählt. Jetzt soll natürlich nicht


2014-03-08_11:09:08 zaehler count: 1
2014-03-08_11:09:09 zaehler count: 2
2014-03-08_11:09:09 zaehler count: 3
2014-03-08_11:09:09 zaehler count: 4
2014-03-08_11:09:10 zaehler count: 5
.
.
.
2014-03-08_11:09:10 zaehler count: 3487973458


im Logfile stehen sondern nur der letzte Eintrag. Dies möchte ich erreichen, indem die Zapfpistole wieder eingehängt wird (Taster geht off und es soll ein "get zaehler count" ausgelöst werden). Das Logfile soll dann folgendermaßen aussehen:


2014-03-08_12:07:04 freigabe reading: off
2014-03-08_12:09:10 freigabe_0 return value: 3487973458
2014-03-08_12:09:10 freigabe reading: on


oder


2014-03-08_12:07:04 freigabe reading: off
2014-03-08_12:09:10 freigabe reading: on
2014-03-08_12:09:10 freigabe_0 return value: 3487973458


oder so ähnlich.

Gruß
Titel: Antw:Auf Befehl loggen
Beitrag von: Spielmann am 10 März 2014, 12:16:38
Hallo,
ich bekomme es immer noch nicht hin. Vielleicht könnte mir chris1284 das mit dem "setreading", "userreading"  und "dummy" genauer erklären.

Zitat
was evtl geht: dummy -> userreading count -> logfile für den dummy erstellen -> notify wenn knopf gedrückt

Grüße
Titel: Antw:Auf Befehl loggen
Beitrag von: chris1284 am 10 März 2014, 17:45:41
Ich habe einen realen Sensor "KS300", einen dymmy"Wettermast" mit userreadings und ein log für diesen dummy.
Per notify "KS300NotifyTemp"reagiere ich auch den realenSensor, lesen den Wert und schreibe ihn in das reading des dummys.
Wenn sich das reading des dummys ändert wird es automatisch ins log geschrieben, musst du dich also nicht drum kümmern.

dummy mit seinen userreadings und seinem log:
define Wettermast dummy
attr Wettermast group _Wettersensoren_
attr Wettermast room Wetter
attr Wettermast userReadings state,rain,wind,humidity,temperature,israining

define FileLog_Wettermast FileLog ./log/Wettermast-%Y.log Wettermast
attr FileLog_Wettermast logtype text
attr FileLog_Wettermast room hidden


notify:
define KS300NotifyTemp notify KS300:temperature.* { fhem("set RemoteCT cmd setreading Wettermast temperature $EVTPART1");;}
("RemoteCT cmd" bezieht sich auf ein eigenes Modul ählich fhem2fhem, also nicht verwirren lassen.)

Umgebaut auf dein Szenario:

define ZaehlerDummy dummy
attr ZaehlerDummy userReadings count

define FileLog_ZaehlerDummy FileLog ./log/ZaehlerDummy-%Y.log ZaehlerDummy
attr FileLog_ZaehlerDummy logtype text


define freigabeNotify notify freigabe:off.* { fhem("setreading ZaehlerDummy count ReadingsVal("zaehler","count","n.A."));;}

keine Syntax_garantie :-) und die Namen sind ggf nicht genau deine
Titel: Antw:Auf Befehl loggen
Beitrag von: Spielmann am 12 März 2014, 23:36:22
Heureka! Jetzt funktionierts
leider hat er Syntax noch nicht ganz gepasst. Nach etlichen Versuchen, Forensuchen und lesen des Einsteiger PDFs hab ich den Syntax hinbekommen.


define freigabeNotify notify freigabe:off.* {fhem ("setreading ZaehlerDummy count ".ReadingsVal("zaehler","count","n.A."));;}


Vielen Dank für die Hilfe

Grüße
Spielmann
Titel: Antw:Auf Befehl loggen
Beitrag von: Puschel74 am 13 März 2014, 07:27:40
Hallo,

wenns klappt und die Frage erledigt ist dann bitte deinen ersten Beitrag bearbeiten und dem Titel ein (Gelöst) vorne dran.
Danke.

Grüsse