Evtl fehlerhaftes DB Logging vom MAX Thermostat

Begonnen von Afterburner, 08 Dezember 2015, 19:39:23

Vorheriges Thema - Nächstes Thema

Afterburner

Servus,

ich mal wieder ^^

Ich bin jetzt vom Filelog auf DB Log umgestiegen und habe ein Problem mit dem Loggen vom "mode" des Thermostat

In der Datenbank wird beim entsprechenden Eintrag vom Mode bei VALUE kein Wert eingetragen, bei EVENT steht es aber schon drin im Format mode: auto
Temperatur und Ventilstellung werden richtig geloggt.

In der fhem.cfg habe ich momentan noch das Logging für alles aktiviert: (Ja das wird noch Optimiert, damit wollte ich gerade anfangen als mir das aufgefallen ist)
define logdb DbLog ./db.conf .*:.*
und als Attribute noch DbLogExclude unter global

Das gplot File (was ich aus dem alten FileLog angepasst habe) dazu schaut so aus falls das ne Rolle spielt (sollte es aber ja eigentlich nicht beim loggen)
# Created by FHEM/98_SVG.pm, 2015-12-07 14:10:07
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 '<TL> <L1>'
set ytics
set y2tics ("100%" 100, "50%" 50, "0%" 0, "Auto" 20, "Manu" 10)
set grid ytics y2tics
set ylabel "Temperatur °C"
set y2label "Ventil / Mode"
set yrange [5:40]
set y2range [-0.2:110]

#logdb Heizung.Arbeitszimmer:temperature
#logdb Heizung.Arbeitszimmer:valveposition
#logdb Heizung.Arbeitszimmer:mode:::$val=($val=~'auto'?20:10)

plot "<IN>" using 1:2 axes x1y1 title 'Temperatur' ls l1fill lw 0.2 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Ventilstellung' ls l3 lw 3 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Mode' ls l0 lw 3 with lines


Ich habe jetzt erst mal die Zeile
Zitat#logdb Heizung.Arbeitszimmer:mode:::$val=($val=~'auto'?20:10)
einfach "umgedreht" um den Plot wieder richtig zu haben
#logdb Heizung.Arbeitszimmer:mode:::$val=($val=~'manual'?10:20)
aber ändert ja nichts dran das auto nicht in der DB geloggt wird
CUL 868 --> Dirks Universalsensor - ESA200 Strommesser
HM USB --> HM Klingelsensor - HM Zwischenstecker
MAXLAN --> 5 x Thermostat - 4 x Fensterkontakt - ECO Taster - Cube
Arduino Nano V3.0 CC1101 433 MHz --> für Revolt Strommesser
bestellt: JeeLink 868 --> für TX 29 DT-HT Außensender

fow0ryl

Da es hier keine Antwort gab, und ich gut 1Jahr später das gleiche Verhalten festgestellt habe, wollte ich mal fragen, ob und wenn wo es dazu Info's gibt ?

JoeALLb

Ähnliches habe ich auch festgestellt. Zusätzlich gibt es Werte, wo der eigentliche "value" in die Units-Spalte verschoben wird.
Da ich in SQL besser bin als in Perl, habe ich mir in MySQL eine StoredProcedure gemacht, die es direkt am SQL-Server korrigiert.
Funktioniert, sollte abe rnicht die Standardlösung sein...
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

fow0ryl

Hallo,

da auf meine Frage sonst niemand geantwortet hat spiele ich mal Alleinunterhalter...
Die Ursache sehe ich in inkompatiblen Log Einträgen, also außerhalb der eigentlichen DB Logging Funktionalität.
Im Modul 10_MAX.pm werden die Log Einträge aufbereitet. Das nützt natürlich nichts, wenn schon der Input ungeeignet ist :(
Auch wenn das dblog nicht die richtige Stelle sein dürfte, habe ich mich trotzdem mal dran versucht, zumindest die wesentlichen Teile gerade zu biegen.
Das geht natürlich nicht für jede Eingabe ...

- Die geloggten Daten zu "weekprofile" passen inhaltlich normiert schon mal gar nicht in eine DB-Zeile. Da muss ein anderer Mechanismus her.
- Dann gibt es noch die "20°C 20°C" Zeilen ohne Angabe um welche Werte es sich überhaupt handelt. Habe die einfach mal zu "displayTemperature" gemacht.
- Mode liefert jetzt schön brav "manual" und "auto"
- Dann hatte ich im 3 Minuten Rythmus immer schön abwechselnd noch Events folgender Art. "desiredTemperature auto 17°C" und "desiredTemperature 17°C"
Scheint mit dem MAXScanner zusammen zu hängen.
Daraus habe ich 2 READINGS gemacht -> ""desiredTemperature auto" und "desiredTemperature".
Da die beiden abwechselnd kommen gibt das leider eine Menge überflüssiger Einträge in der DB :(

Bis vor ein paar Tagen habe ich noch nie eine Zeile perl kodiert. Man möge mir den Stil daher verzeihen ...
sub
MAX_DbLog_splitFn($)
{
  my ($event) = @_;
  my ($reading, $value, $unit) = "";

  my @parts = split(/ /,$event);
  $reading = shift @parts;
  $reading =~ tr/://d;
  $value = $parts[0];
  if($value =~ m/°C/) {
# Temperatur ohne Führungstext, wurde also in reading gespeichert
$value = $reading;
  $reading = "displayTemperature";
  } else {
if($reading =~ m/desiredTemperature/) {
   # desiredTemperature kann auch "auto 20°C" enthalten
   # dann ist die Temperatur in parts[1]
   if($value =~ m/auto/) {
      $value = $parts[1];
      $reading = "desiredTemperature auto";
   }
}
  }

  $unit = "°C" if(lc($reading) =~ m/temp/);
  $unit = "%" if(lc($reading) =~ m/valve/);
  $unit = "dBm" if(uc($reading) =~ m/RSSI/);
  return ($reading, $value, $unit);

}


Werde weiter graben ...

Gruß
Henning