Kein dblog Eintrag von Dummy Device

Begonnen von TSB, 17 September 2015, 19:38:10

Vorheriges Thema - Nächstes Thema

TSB

Ich würde gerne den Zustand des Heizungsbrenners protokollieren (on|off), anhand eines 18b20 i2c Thermometers (das steckt im Abgasrohr).

Für den Zustand habe ich ein Dummy Device angelegt (BRENNER_STATUS, mit zwei Readings: last für den letzten Temperaturwert und state für den Zustand selbst on|off).

Protokolliert werden sollen Zustandsänderung in der logdb. Um nicht alles zu loggen hatte ich einen Regexp gesetzt:
REGEXP     .*:(temperature|valveposition|humidity)

Ich würde gerne diesen Regex erweitern, sodass auch der BRENNER_STATUS geloggt wird, in etwa:
REGEXP     (.*:(temperature|valveposition|humidity)|.*BRENNER_STATUS.*:state)

Dann loggt das System aber gar nichts mehr, also stimmt die Syntax oder die Einträge nicht.

Derzeit gelöst habe ich es jetzt so, dass ich alles logge
REGEXP     .*:.*

und mittels DbLogExclude dann in jedem Device alles deaktiviert, was nicht geloggt werden soll.

Schöner wäre es wenn es mittels des zentralen Regex funktioniert.

Der Eintrag in der DB sieht dann so aus:
2015-09-17 20:30:51|BRENNER_STATUS|DUMMY|off|state|off|

Internals:
   CFGFN
   NAME       BRENNER_STATUS
   NR         390
   STATE      off
   TYPE       dummy
   Readings:
     2015-09-17 19:16:25   last            29.5
     2015-09-17 18:49:54   state           off
Attributes:
   devStateIcon on:Heizung_Hauptschalter.on off:Heizung_Hauptschalter.off
   room       Brenner
   userReadings last



Internals:
   CONFIGURATION ./db.conf
   DBMODEL    SQLITE
   DEF        ./db.conf (.*:(temperature|valveposition|humidity)|.*BRENNER_STATUS.*:state)
   NAME       logdb
   NR         34
   NTFY_ORDER 50-logdb
   PID        5811
   REGEXP     (.*:(temperature|valveposition|humidity)|.*BRENNER_STATUS.*:state)
   STATE      connected
   TYPE       DbLog
   dbconn     SQLite:dbname=/opt/fhem/fhem.db
   dbuser
   Readings:
     2015-09-17 18:36:37   state           connected
Attributes:



Internals:
   CFGFN
   DEF        TempEmission:temperature:.* {
  Log 3,"Brennerstatus";
  my $threshold = 4;
  my ($emission, $emission_last, $status) = (
    ReadingsVal("TempEmission","temperature",0),
    ReadingsVal("BRENNER_STATUS","last",0),
    Value("BRENNER_STATUS")||"off"
  );
  my $time_diff = time()-time_str2num(ReadingsTimestamp("BRENNER_STATUS","last",0));
  my $delta = $emission - $emission_last;
  if ($time_diff > 60 || abs($delta) > $threshold) {
    fhem("setreading BRENNER_STATUS last $emission");
  } elsif ($status eq "on" && $delta > 0) {
    fhem("setreading BRENNER_STATUS last $emission");
  }
  if    ($delta > $threshold && $status eq "off") { fhem("setreading BRENNER_STATUS state on")  }
  elsif ($emission < $emission_last && $status eq "on") { fhem("setreading BRENNER_STATUS state off") }
  Log 3,"Emission: $emission, $emission_last, $delta, $status, ".Value("BRENNER_STATUS");
}
   NAME       Brenner
   NOTIFYDEV  TempEmission
   NR         347
   NTFY_ORDER 50-Brenner
   REGEXP     TempEmission:temperature:.*
   STATE      2015-09-17 19:16:25
   TYPE       notify
   Readings:
     2015-09-17 19:12:01   state           active
Attributes:
   room       Brenner


DB-Werte für TempEmission (Abgastemperatur):
2015-09-17 15:48:53|TempEmission|GPIO4|temperature: 30.5|temperature|30.5|°C
2015-09-17 16:01:16|TempEmission|GPIO4|temperature: 28.5|temperature|28.5|°C
2015-09-17 17:03:43|TempEmission|GPIO4|temperature: 30.875|temperature|30.875|°C
2015-09-17 17:03:51|TempEmission|GPIO4|temperature: 34.187|temperature|34.187|°C
2015-09-17 17:03:59|TempEmission|GPIO4|temperature: 37.5|temperature|37.5|°C
2015-09-17 17:04:08|TempEmission|GPIO4|temperature: 40|temperature|40|°C
2015-09-17 17:04:21|TempEmission|GPIO4|temperature: 42.125|temperature|42.125|°C
2015-09-17 17:04:37|TempEmission|GPIO4|temperature: 44.562|temperature|44.562|°C
2015-09-17 17:04:49|TempEmission|GPIO4|temperature: 46.812|temperature|46.812|°C
2015-09-17 17:05:06|TempEmission|GPIO4|temperature: 49.062|temperature|49.062|°C
2015-09-17 17:05:22|TempEmission|GPIO4|temperature: 51.125|temperature|51.125|°C
2015-09-17 17:05:42|TempEmission|GPIO4|temperature: 53.375|temperature|53.375|°C
2015-09-17 17:06:01|TempEmission|GPIO4|temperature: 55.625|temperature|55.625|°C
2015-09-17 17:06:27|TempEmission|GPIO4|temperature: 58|temperature|58|°C
2015-09-17 17:06:54|TempEmission|GPIO4|temperature: 60.25|temperature|60.25|°C
2015-09-17 17:07:23|TempEmission|GPIO4|temperature: 62.312|temperature|62.312|°C
2015-09-17 17:08:06|TempEmission|GPIO4|temperature: 64.375|temperature|64.375|°C
2015-09-17 17:09:03|TempEmission|GPIO4|temperature: 66.375|temperature|66.375|°C
2015-09-17 17:10:14|TempEmission|GPIO4|temperature: 68.375|temperature|68.375|°C
2015-09-17 17:11:49|TempEmission|GPIO4|temperature: 70.375|temperature|70.375|°C
2015-09-17 17:12:35|TempEmission|GPIO4|temperature: 67.562|temperature|67.562|°C
2015-09-17 17:12:44|TempEmission|GPIO4|temperature: 65.312|temperature|65.312|°C
2015-09-17 17:12:55|TempEmission|GPIO4|temperature: 62.625|temperature|62.625|°C
2015-09-17 17:13:07|TempEmission|GPIO4|temperature: 60.375|temperature|60.375|°C
2015-09-17 17:13:23|TempEmission|GPIO4|temperature: 57.875|temperature|57.875|°C
2015-09-17 17:13:39|TempEmission|GPIO4|temperature: 55.812|temperature|55.812|°C
2015-09-17 17:13:59|TempEmission|GPIO4|temperature: 53.75|temperature|53.75|°C
2015-09-17 17:14:26|TempEmission|GPIO4|temperature: 51.687|temperature|51.687|°C
2015-09-17 17:14:56|TempEmission|GPIO4|temperature: 49.687|temperature|49.687|°C
2015-09-17 17:15:36|TempEmission|GPIO4|temperature: 47.625|temperature|47.625|°C
2015-09-17 17:16:24|TempEmission|GPIO4|temperature: 45.625|temperature|45.625|°C
2015-09-17 17:17:24|TempEmission|GPIO4|temperature: 43.562|temperature|43.562|°C
2015-09-17 17:18:50|TempEmission|GPIO4|temperature: 41.5|temperature|41.5|°C
2015-09-17 17:20:32|TempEmission|GPIO4|temperature: 39.5|temperature|39.5|°C
2015-09-17 17:22:32|TempEmission|GPIO4|temperature: 37.437|temperature|37.437|°C
2015-09-17 17:25:06|TempEmission|GPIO4|temperature: 35.437|temperature|35.437|°C
2015-09-17 17:28:16|TempEmission|GPIO4|temperature: 33.437|temperature|33.437|°C
2015-09-17 17:35:16|TempEmission|GPIO4|temperature: 31.375|temperature|31.375|°C

TSB

Derzeit gelöst habe ich es jetzt so, dass ich alles logge
REGEXP     .*:.*

und mittels DbLogExclude dann in jedem Device alles deaktiviert, was nicht geloggt werden soll.

Schöner wäre es wenn es mittels des zentralen Regex funktioniert.

Ist somit dann kein spezielles Problem mit dem Dummy Device sondern nur noch ein Problem des Aufgabaus vom REGEXP der dblog.

rapster

Hallo TSB,

du kannst das reading 'state' nicht filtern, am besten hierzu einfach beobachten was dir der Event-Monitor anzeigt, und davon ausgehend die RegExp bauen.

d.H. Deine RegEx muss so aussehen:
(.*:(temperature|valveposition|humidity).*|BRENNER_STATUS:.*)
oder alternativ für bestimmte zustände vom reading 'state' beim Br.Status:
(.*:(temperature|valveposition|humidity).*|BRENNER_STATUS:(on|off))

Gruß
  Claudiu