[Gelöst] Temperaturen loggen vom KNX-Bus - Kein Logfile

Begonnen von rudirudel.de, 05 Juni 2017, 10:23:54

Vorheriges Thema - Nächstes Thema

rudirudel.de

Hallo zusammen,

erstmal ein Riesen Kompliment an die Entwickler und User hier - Ihr habt mit FHEM ein echt schickes Stück Software geschaffen!

So, genug der Schleimerei...  :P
Meine Familie und ich haben letztes Jahr ein Haus gebaut und dabei ein KNX-Bussystem selbst eingebaut. Alle Komponenten stammen von MDT, aus deren Glastastern wird der Bus mit Temperaturwerten aus allen Räumen gefüttert. Das funktioniert auch alles einwandfrei, kann man in der ETS auf dem Busmonitor verfolgen. Als Anbindung ans LAN benutze ich eine IP-Schnittstelle.
FHEM hab ich nach ein paar Versuchen ohne große Probleme dazu gebracht, auf dem Bus mit zu lauschen. Ich habe auch inzwischen Devices angelegt, um die Temperaturwerte im Webinterface anschauen zu können. Hier mal beispielhaft ein Listing, die anderen sehen genauso aus nur halt mit anderen Raumbezeichnungen und Gruppenadressen:


Internals:
   DEF        1/1/1:dpt9
   DEVNAME    E.3_IstTemp
   IODev      KNX
   KNX_MSGCNT 15
   KNX_RAWMSG C01185w011010c29
   KNX_TIME   2017-06-05 09:34:52
   LASTInputDev KNX
   MSGCNT     15
   NAME       E.3_IstTemp
   NR         26
   NTFY_ORDER 50-E.3_IstTemp
   STATE      21.3 °C
   TYPE       KNX
   Gaddr:
     1          1/1/1
   Gcode:
     1          01101
   Model:
     1          dpt9
   Readings:
     2017-06-05 09:34:52   getG1           21.30
     2017-06-05 09:34:52   last-sender     1/1/133
     2017-06-05 09:34:52   state           21.30
   Readingsname:
Attributes:
   IODev      KNX
   alias      E.3 Gäste-WC
   stateFormat {sprintf("%.1f °C",ReadingsNum($name,"getG1",0))}
   webCmd     :


Als nächstes wollte ich versuchen, einen SVG-Plot von den Temperaturverläufen anzulegen. Dafür wollte ich ein Logfile "HausTemperaturen" anlegen und den "state" aller Temperatursensoren da rein schreiben. Nach ein bißchen Recherche hab ich das hier definiert:


Internals:
   DEF        ./log/HausTemperaturen-%Y-%m-%d.log E.3_IstTemp:state:.*|E.4_IstTemp:state:.*|E.5_IstTemp:state:.*|E.6_IstTemp:state:.*
   NAME       Temp_Logfile
   NOTIFYDEV  E.3_IstTemp,E.4_IstTemp,E.5_IstTemp,E.6_IstTemp
   NR         33
   NTFY_ORDER 50-Temp_Logfile
   REGEXP     E.3_IstTemp:state:.*|E.4_IstTemp:state:.*|E.5_IstTemp:state:.*|E.6_IstTemp:state:.*
   STATE      active
   TYPE       FileLog
   currentlogfile ./log/HausTemperaturen-2017-06-05.log
   logfile    ./log/HausTemperaturen-%Y-%m-%d.log
Attributes:


So, jetzt zum Problem: Es funktioniert nicht. Ich hab ein paar Anläufe genommen, um die Definition richtig hinzubekommen, jetzt habe ich keine Fehlermeldung mehr gehabt beim Definieren. Aber es entsteht halt kein Logfile... Was mache ich falsch? Ich dachte erst an ein notify, aber das scheint ja mit "NOTIFYDEV" da zu sein, oder? Die "state"-Werte ändern sich jedenfalls von allein, wenn sich die Temperatur in den Räumen ändert.
Ich würd mich freuen, wenn mich jemand in die richtige Richtung stubsen könnte...

Danke schonmal!

Gruß André

tiroso

Versuch mal nicht state  zu loggen sondern getG1.
Ansonsten Fang erstmal klein an und logge nur ein Device mit dem genannten reading

tiroso


rudirudel.de

Das funktioniert! Aber der Reihe nach:

Ich hab jetzt verschiedene Kombinationen im Webfrontend ausprobiert:

-Zuerst hab ich alle "state" durch "getG1" ersetzt mit Hilfe der RegExp-Funtion im Webfrontend.

Internals:
   DEF        ./log/HausTemperaturen-%Y-%m-%d.log E.3_IstTemp:getG1:.*|E.4_IstTemp:getG1:.*|E.5_IstTemp:getG1:.*|E.6_IstTemp:getG1:.*
   NAME       Temp_Logfile
   NOTIFYDEV  E.5_IstTemp,E.6_IstTemp,E.3_IstTemp,E.4_IstTemp
   NR         33
   NTFY_ORDER 50-Temp_Logfile
   REGEXP     E.3_IstTemp:getG1:.*|E.4_IstTemp:getG1:.*|E.5_IstTemp:getG1:.*|E.6_IstTemp:getG1:.*
   STATE      active
   TYPE       FileLog
   currentlogfile ./log/HausTemperaturen-2017-06-05.log
   logfile    ./log/HausTemperaturen-%Y-%m-%d.log
   Readings:
     2017-06-05 14:45:37   linesInTheFile  887
Attributes:

Das hat keine Veränderung gebracht.

- Als nächstes habe ich das Ganze auf einen Sensor reduziert:


Internals:
   DEF        ./log/HausTemperaturen-%Y-%m-%d.log E.3_IstTemp:getG1:.*
   NAME       Temp_Logfile
   NOTIFYDEV  E.3_IstTemp
   NR         33
   NTFY_ORDER 50-Temp_Logfile
   REGEXP     E.3_IstTemp:getG1:.*
   STATE      active
   TYPE       FileLog
   currentlogfile ./log/HausTemperaturen-2017-06-05.log
   logfile    ./log/HausTemperaturen-%Y-%m-%d.log
   Readings:
     2017-06-05 14:48:37   linesInTheFile  899
Attributes:

Das hat aber leider auch keinen Fortschritt gebracht.

- Zuletzt hab ich dann die Lösung aus Deinem zweiten Beitrag versucht. Dafür hab ich fhem.cfg direkt bearbeitet. Ich weiß, soll man nicht machen, aber ich hatte keine Idee, wie ich die Definition im Webinterface so hinkriegen soll.



Internals:
   DEF        ./log/HausTemperaturen-%Y-%m-%d.log E.(3|4|5|6)_IstTemp:.*getG1.*
   NAME       Temp_Logfile
   NR         33
   NTFY_ORDER 50-Temp_Logfile
   REGEXP     E.(3|4|5|6)_IstTemp:.*getG1.*
   STATE      active
   TYPE       FileLog
   currentlogfile ./log/HausTemperaturen-2017-06-05.log
   logfile    ./log/HausTemperaturen-%Y-%m-%d.log
   Readings:
     2017-06-05 15:29:29   linesInTheFile  1047
Attributes:

Und plötzlich gings.

Vielen Dank!

Mir ist aufgefallen, dass bei Dir die ganze RegExp anders aussieht, nämlich (...)_IstTemp:.*getG1.*. Vorher sah es so aus: (...)_IstTemp:getG1:.* Ich schätze mal, es liegt daran, dass es vorher nicht geklappt hat. Werde mich bei den Regular Expressions mal noch ein bißchen weiter einlesen, die Tage binde ich ja auch noch die Sensoren aus dem OG ein...

schöne Grüße

André