[gelöst] Umstellung FileLog nach DBLog: Fenster- / Türsensorplot Problem

Begonnen von McCavity, 26 Dezember 2014, 22:45:57

Vorheriges Thema - Nächstes Thema

McCavity

Hallo und (noch) frohe Weihnachten!

Vielleicht kann mir hier jemand mit Erfahrung weiterhelfen - ich stecke gerade fest und finde den entscheidenden Hinweis nicht. Da dies mein erstes Posting hier ist einige Details zuvor:

1. ich bin Anfänger mit FHEM, Perl und Regular Expressions (habe aber rund 20 Jahre allgemeine Erfahrung mit Unix Systemen, Webservern, Datenbanken und ähnlichem)
2. Ich habe die Grunddokumentation (PDF, Wiki, Forum) zu den Themen DBLog, plotfunction und gplot gelesen (zumindest das, was ich so gefunden habe)
3. ich habe im Forum nach meinem oder einem vergleichbaren Problem gesucht, konnte aber nicht fündig werden.

Ich bitte um Verzeihung, wenn ich trotz Recherche übersehen haben sollte, daß es schon einschlägige Information zu meinem Problem gibt - in diesem Fall bitte ich höflich um einen Link zur Fundtstelle - ein "RTFM" hilft mir nämlich auch nicht weiter, das habe ich bereits versucht.

Nun zum Problem - ich vermute, daß es irgendeine Kleinigkeit ist, die ich übersehe. Ich nutze FHEM jetzt seit etwa einer Woche (konnte mich endlich aufraffen, das Projekt "Heimautomation" mal anzugehen) und habe erstmal eine handvoll Komponenten konfiguriert. Dabei habe ich diverse Tutorials eingesetzt (an dieser Stelle einen Riesendank an alle Beitragenden - auch, wenn die Information machmal sehr verstreut ist, ist es überwältigend, was man mit FHEM alles anstellen kann und die diversen Quellen sind eine Riesenhilfe dabei) und nach diesen erstmal mit der "eingebauten" FileLog Variante angefangen. Dann habe ich aber MySQL installiert und ein DBLog eingerichtet und nun angefangen, auch die Plots aus der DB zu versorgen. Mit einigen habe ich das schon recht gut hinbekommen; Temperaturen, Ventilstellungen, Feuchtigkeit lese ich bereits erfolgreich aus der Datenbank.

Was mir Probleme bereitet ist die Umstellung der Fenster- und Türsensoren. Ich habe einiges schon ausprobiert, aber ich finde nicht den richtigen Weg, um die Plots aus der Datenbank genauso aussehen zu lassen, wie aus dem Filelog:
- die Graphen durchbrechen den oberen Bildrand (ich habe als Intervall [-0.1:1.1] gesetzt und der "open" Wert soll zu "1" übersetzt werden - angezeigt wird aber "1.5" oder so ähnlich)
- sie werden auch nicht mit Linien verbunden, sondern, wie ich das sehen, als "Spitzen" angezeigt.
- was mich am meisten wundert: ich meine eigentlich auf "open" zu matchen "curval1" liefert mir aber "alive" zurück?!?

[EDIT: für die letzten beiden Punkte habe ich, glaube ich, den Grund gefunden: ich matche nur auf "Spalte 4" und "open" - alles andere liefert "0". Allerdings ist es mir noch nicht
gelungen, eine RegEx zu finden, mit der ich nur auf die beiden Zustände "open" und "closed" filtern kann - bei anderen .gplots hatte ich das mit der Angabe des Wertes gelöst, z.B.

#DbLog <SPEC1>:temperature::

Das hatte ich hier auch schon probiert mit

#DbLog <SPEC1>:contact::$fld[5]=~"open"?1:0

(ich habe auch "open.*" probiert um "Beginnt mit 'open'" zu matchen (weil ja in der Spalte in der DB noch jeweils ein " (to HMLAN1)" folgt) - aber beide Versuche lieferten mir eine durchgezogene Linie auf der "0"
[/EDIT]

Da Bilder mehr als 1000 Worte sagen, hier mal ein Beispiel vom FileLog, wie es aussehen *soll*: siehe Screenshot1. Screenshot 2 zeigt das, was ich derzeit aus dem DBLog bekomme.

Die relevanten Einträge in der Datenbank sehen zum Beispiel so aus:

mysql> select * from `history` where `DEVICE` like "FL.Tuersensor" and (`VALUE` like "%open%" or `VALUE` like "%closed%");
+---------------------+---------------+--------+-----------------------------+---------+--------------------+------+
| TIMESTAMP           | DEVICE        | TYPE   | EVENT                       | READING | VALUE              | UNIT |
+---------------------+---------------+--------+-----------------------------+---------+--------------------+------+
| 2014-12-24 00:25:41 | FL.Tuersensor | CUL_HM | open                        | state   | open               |      |
| 2014-12-24 00:25:41 | FL.Tuersensor | CUL_HM | contact: open (to HMLAN1)   | contact | open (to HMLAN1)   |      |
| 2014-12-24 00:25:55 | FL.Tuersensor | CUL_HM | closed                      | state   | closed             |      |
| 2014-12-24 00:25:55 | FL.Tuersensor | CUL_HM | contact: closed (to HMLAN1) | contact | closed (to HMLAN1) |      |
| 2014-12-24 00:49:28 | FL.Tuersensor | CUL_HM | closed                      | state   | closed             |      |
| 2014-12-24 00:49:28 | FL.Tuersensor | CUL_HM | contact: closed (to HMLAN1) | contact | closed (to HMLAN1) |      |
| 2014-12-24 01:42:43 | FL.Tuersensor | CUL_HM | closed                      | state   | closed             |      |
| 2014-12-24 01:42:43 | FL.Tuersensor | CUL_HM | contact: closed (to HMLAN1) | contact | closed (to HMLAN1) |      |
[... bis zum nächsten "open" ...]
+---------------------+---------------+--------+-----------------------------+---------+--------------------+------+
222 rows in set (2.26 sec)


Ich habe auch mal nach "active" gesucht:

mysql> select * from `history` where `DEVICE` like "FL.Tuersensor" and `VALUE` like "%alive%";
+---------------------+---------------+--------+-----------------+----------+-------+------+
| TIMESTAMP           | DEVICE        | TYPE   | EVENT           | READING  | VALUE | UNIT |
+---------------------+---------------+--------+-----------------+----------+-------+------+
| 2014-12-24 00:24:38 | FL.Tuersensor | CUL_HM | Activity: alive | Activity | alive |      |
| 2014-12-24 00:30:46 | FL.Tuersensor | CUL_HM | Activity: alive | Activity | alive |      |
| 2014-12-24 02:40:17 | FL.Tuersensor | CUL_HM | Activity: alive | Activity | alive |      |
[...viele weitere Zeilen]
+---------------------+---------------+--------+-----------------+----------+-------+------+
98 rows in set (2.25 sec)


Ein Auszug aus dem FileLog zum Vergleich:

pi@rpi-fhem /opt/fhem/log $ cat FL.Tuersensor-2014.log
...
2014-12-24_00:24:38 FL.Tuersensor Activity: alive
2014-12-24_00:25:41 FL.Tuersensor trigger_cnt: 4
2014-12-24_00:25:41 FL.Tuersensor trigDst_29A2B2: noConfig
2014-12-24_00:25:41 FL.Tuersensor battery: ok
2014-12-24_00:25:41 FL.Tuersensor open
2014-12-24_00:25:41 FL.Tuersensor contact: open (to HMLAN1)
2014-12-24_00:25:55 FL.Tuersensor trigger_cnt: 5
2014-12-24_00:25:55 FL.Tuersensor trigDst_29A2B2: noConfig
2014-12-24_00:25:55 FL.Tuersensor battery: ok
2014-12-24_00:25:55 FL.Tuersensor closed
2014-12-24_00:25:55 FL.Tuersensor contact: closed (to HMLAN1)
2014-12-24_00:30:46 FL.Tuersensor Activity: alive
...


Die Grafik in Screenshot1 wird wie folgt in fhem.cfg erzeugt:

define weblink_FL.Tuersensor SVG FileLog_FL.Tuersensor:fs20:CURRENT
attr weblink_FL.Tuersensor label "FL.Tuersensor Min $data{min1}, Max $data{max1}, Last $data{currval1}"
attr weblink_FL.Tuersensor room Flur


Die zugehörige .gplot Datei:

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>'
set ytics ("Zu" 0, "Auf" 1)
set y2tics ("Zu" 0, "Auf" 1)
set grid
set ylabel "Status"
set y2label "Status"
set yrange [-0.1:1.1]
set y2range [-0.1:1.1]

#FileLog 4:FL.Tuersensor.contact\x3a:0:$fld[3]=~"open"?1:0

plot "<IN>" using 1:2 axes x1y2 notitle ls l0 lw 1 with steps


Der Auszug aus fhem.cfg für Screenshot2:

define DBLog_Flur.Tuersensor weblink dbplot fhemDbLog:DBLog_HM.Tuersensor:HISTORY
attr DBLog_Flur.Tuersensor room Flur
attr DBLog_Flur.Tuersensor plotfunction FL.Tuersensor
attr DBLog_Flur.Tuersensor label "Status: $data{currval1}"
attr DBLog_Flur.Tuersensor title "Eingangstuer"


und auch hier der zugehörige .gplot Datei:

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 ("Zu" 0, "Auf" 1)
set y2tics ("Zu" 0, "Auf" 1)
set grid
set ylabel "Status"
set y2label "Status"
set yrange [-0.1:1.1]
set y2range [-0.1:1.1]

#FileLog 4:FL.Tuersensor.contact\x3a:0:$fld[3]=~"open"?1:0
#DbLog <SPEC1>:::$fld[3]=~"open"?1:0

plot "<IN>" using 1:2 axes x1y2 notitle ls l0 lw 1 with steps


fheminfo (FHEM läuft auf einen Raspberry Pi B+):

Fhem info:
  Release  : 5.6
  Branch   : DEVELOPMENT
  OS       : linux
  Arch     : arm-linux-gnueabihf-thread-multi-64int
  Perl     : v5.14.2
  uniqueID : ba45302eced230bcb7809a4a9b8c8d2f
  upTime   : 01:17:32

Defined modules:
  CUL_HM     : 10
  DbLog      : 1
  FHEMWEB    : 8
  FHT        : 1
  FHZ        : 1
  FLOORPLAN  : 5
  FileLog    : 7
  HMLAN      : 1
  HMS        : 1
  SVG        : 16
  Weather    : 2
  at         : 4
  autocreate : 1
  dummy      : 20
  eventTypes : 1
  notify     : 20
  telnet     : 1
  weblink    : 2

Defined models per module:
  CUL_HM     : ActionDetector,HM-CC-RT-DN,HM-SEC-SCo,HM-WDS40-TH-I-2

Transmitting this information during an update:
  not set (Note: You can change this via the global attribute sendStatistics)


Vielen Dank schon einmal für die Hilfe, ich bitte um Entschuldigung, daß es doch recht umfangreich geworden ist.

Viele Grüße aus Hessen,

McCavity

franky08

Hallo und Willkommen in der fhem-Welt. An dem Thema hatte ich mir damals ebenfalls die Zähne ausgebissen. Die regex ist ziemlich komplex. Hier meine gplot Datei, diese funktioniert mit DbLog und plottet open und closed.

# Created by FHEM/98_SVG.pm, 2014-02-04 21:06:52
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 ("closed" 0, "open" 1)
set y2tics ("closed" 0, "open" 1)
set grid
set ylabel "Status"
set y2label "Status"
set yrange [-0.1:1.1]
set y2range [-0.1:1.1]

#DbLog <SPEC1>:state:::$val=~s/(open|closed|dim)(\d*).*/$1eq"open"?1:($1eq"dim"?$2*0.01:0)/eg

plot "< awk '{print $1, $3~/dim.*/? 1 : 0; }' <IN>"\
        using 1:2 notitle with steps


VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

McCavity

Erstmal dankeschön für die freundliche Begrüßung und den Tipp - ich habe mal versucht, das umzusetzen - aber da kam bei mir wieder nur eine "Flatline" heraus (bei mir matchen die Spalten auf "contact" und neben "open" und "closed" steht da in der "VALUE"-Spalte noch " (to HMLAN1)" - siehe "[EDIT]" oben.

Aber daß es die RegEx sein muß, ist schonmal ein guter Hinweis - ich habe jetzt noch dieses Tutorial gefunden:

https://www.danielfett.de/internet-und-opensource,artikel,regulaere-ausdruecke

Das werde ich mir morgen mal anschauen. Immerhin zeigt die Grafik jetzt zwar eine flache Linie, aber den richtigen Status (dies ist der momentane Stand meines Experiments:

#DbLog <SPEC1>:contact::$val=~s/(open \(to HMLAN1\)|closed \(to HMLAN1\)|dim)(\d*).*/$1eq"open \(to HMLAN 1\)"?1:($1eq"dim"?$2*0.01:0)/eg

Die Performance scheint aber ziemlich zu leiden, der Seitenaufbau dauert mit diesem Aufruf deutlich länger... (zur Erklärung: auf der Seite ("room Flur") befinden sich zur Zeit vier Graphen, jeweisl zwei aus demFileLog und zwei aus dem DBLog, jeweils einmal für den Tag und einmal die letzten 7 Tage.

Vielen Dank nochmal & viele Grüße

McCavity

franky08

Der Raspi ist schnell am Limit, wenn du viele Plots anzeigen läßt. Habe damals zum Cubietruck gewechselt, der hat ordentlich Power und die schnell anwachsende Datenbank fühlt sich auf einer SSD auch besser aufgehoben als auf einer SD Karte.

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

McCavity

Ja, das merke ich auch - ich denke, ich werde mir als erstes noch eine USB-Platte besorgen, muß ja kein riesiges Datengrab sein. Da die meisten Platten heute ohne Netzteil geliefert werden: reicht die Stromversorgung des RasPi über USB aus, um eine (aktuelle) externe Festplatte zu betreiben? Ich habe meinem RasPi ein 2A Netzteil spendiert (zumindest laut Spezifikation, nachgemessen habe ich es nicht) - reicht das aus? Oder soll ich sicherheitshalber eine Platte mit Netzteil suchen?

Aber zum eigentlichen Thema: ich habe es jetzt hinbekommen - mein Fehler gestern abend war noch, daß ich die "plot" Funktion nicht auf "awk" umgestellt hatte... d'oh! Jetzt funktioniert's bestens, da ich den Wert "dim" nicht berücksichtigen muß, wurde es nochmal ein bisschen einfacher:

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 ("Zu" 0, "Auf" 1)
set y2tics ("Zu" 0, "Auf" 1)
set grid
set ylabel "Status"
set y2label "Status"
set yrange [-0.1:1.1]
set y2range [-0.1:1.1]

#DbLog <SPEC1>:state:::$val=~s/(open|closed)(\d*).*/$1eq"open"?1:0/eg

plot "< awk '{print $1, $3}' <IN>"\
        using 1:2 notitle with steps


Vielen Dank noch einmal für die schnelle Hilfe!

Viele Grüße,

McCavity

Puschel74

Hallo,

wie im Einplatinencomputerbereich vielfach vorgeschlagen:
aktiver USB-Hub mit dem du ggf. auch den RasPi versorgen kannst.

Grüße
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.

McCavity

So, um das ganze nochh abzurunden - nochmal vielen Dank für die vielen guten Tipps. Ich habe mittlerweile gemerkt, daß der RasPi mit den vielen Plots wirklich in die Knie geht. Und jetzt kommt der Knaller: man sollte sein Bestände vielleicht doch etwas besser kennen, das erspart einem vieles... mir fiel vor ein paar Tagen ein, daß ich noch einen alten (von 2010) Mini-ITX Rechner im Keller stehen hatte (mit Atom D510 CPU @1,6GHz und satten 4GB RAM), der ursprünglich mal Firewall hätte werden sollen - wurde aber nie was aus dem Projekt. Jetzt habe ich den Rechner schnell mit einer aktuellen Distro neu betankt und meine FHEM-Instanz (inklusive Datenbank) rübergezogen. Funktioniert mittlerweile fast alles; ich habe zwar noch eine handvoll Fehler im Log, aber die finde ich auch noch.

Mein Fazit: Welten. Der Mini-ITX performt mal so richtig. Das Charting Frontend hat für meine (momentan) 7 Plots auf dem RasPi ewig gebraucht - auf dem Mini-ITX geht das ruck-zuck :-) Auch der FHEM Neustart geht jetzt augenblicklich vonstatten - der Raspi brauchte da deutlich länger. Den WAF wird der Performancegewinn freuen :-)

Jetzt muß ich mal gucken, was ich mit dem RasPi anfange, ist ja so für sich auch schon ein beeindruckendes Gerät :D

LG
McCavity