[DbLog] RegExp mit mehr Werten für $val Berechnung

Begonnen von ManOki, 04 August 2016, 16:37:12

Vorheriges Thema - Nächstes Thema

ManOki

Hallo alle zusammen,

ich bin gerade dabei, mir Plots über meine gesammelten DbLog Daten zu erstellen. Für meine Fenstersensoren (Typ MAX, gepairt mit Heizungsthermostat Typ MAX) werden dabei die folgenden Einträge erstellt:


+---------------------+------------+------+--------+---------+-------+------+
| TIMESTAMP           | DEVICE     | TYPE | EVENT  | READING | VALUE | UNIT |
+---------------------+------------+------+--------+---------+-------+------+
| 2016-08-04 09:58:27 | k_fenster  | MAX  | opened | opened  |       |      |
| 2016-08-04 09:58:05 | sz_fenster | MAX  | opened | opened  |       |      |
| 2016-08-04 09:58:04 | sz_fenster | MAX  | closed | closed  |       |      |
| 2016-08-04 09:09:13 | az_fenster | MAX  | closed | closed  |       |      |
| 2016-08-04 08:32:43 | az_fenster | MAX  | opened | opened  |       |      |
| 2016-08-04 08:31:51 | sz_fenster | MAX  | opened | opened  |       |      |
| 2016-08-03 19:06:12 | k_fenster  | MAX  | closed | closed  |       |      |
| 2016-08-03 16:16:15 | sz_fenster | MAX  | closed | closed  |       |      |
| 2016-08-03 10:18:53 | az_fenster | MAX  | closed | closed  |       |      |
| 2016-08-03 08:34:43 | sz_fenster | MAX  | opened | opened  |       |      |
+---------------------+------------+------+--------+---------+-------+------+


Nach der Dokumentation (http://fhem.de/commandref_DE.html#DbLog) gibt es für SVG-Plots dazu eine spezielle <column_spec>, die in der .gplot Datei angegeben werden kann. In meinem Fall müsste die komplette Zeile z.B. lauten:

#logdb sz_fenster::::$val=($reading=~"opened")?15:0

Leider ist die Variable $reading so nicht verfügbar, andere ähnliche Schreibweisen auch nicht. Mein Problem ist, dass ansonsten die zur Verfügung stehenden Variablen $val und $ts nicht ausreichend sind, da wie oben zu sehen, die Value Werte komplett leer sind (ansich auch korrekt, es gibt ja keinen Zahlenwert mit/ohne Einheit).

Was kann ich tun, um das Problem dennoch zu lösen? Gibt es dazu eine bestehende Möglichkeit in Fhem/DbLog oder kann u.U. der/die Entwickler sich dieses Problemes annehmen?

Für mich wäre es optimal, wenn EVENT oder READING ebenso wie $val in der <regexp> von <column_spec> verwendet werden könnte.

Vielen Dank
ManOki

betateilchen

Das Problem ist, dass Du das reading "state" loggst und deshalb kein Name im Reading steht. Dadurch "rutscht" der Wert "opened" aus der Spalte "value" nach "reading".

Das sollte der Maintainer des MAX Moduls lösen, z.B. indem er eine eigene X_DbLogSplitFn() in seinem Modul implementiert.

Erzeugt der Fenterkontakt kein anderes Reading, das den Wert "opened" enthält, kannst Du Dir ein solches Reading als userReading definieren und loggen. Dann kannst Du auch mit dem Reading arbeiten. Allerdings heißt die Variable dann trotzdem nicht $reading sondern $val.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

ManOki

Vielen Dank, betateilchen!

Die Erklärung hat weitergeholfen, ich logge ab jetzt besser das Reading "onoff". Dadurch sieht dann meine Tabelle wie folgt aus:


+---------------------+------------------+------+----------+---------+-------+------+
| TIMESTAMP           | DEVICE           | TYPE | EVENT    | READING | VALUE | UNIT |
+---------------------+------------------+------+----------+---------+-------+------+
| 2016-08-05 10:21:40 | sz_fenster       | MAX  | onoff: 0 | onoff   | 0     |      |
| 2016-08-05 10:03:47 | az_fenster       | MAX  | onoff: 0 | onoff   | 0     |      |
| 2016-08-05 09:58:09 | wz_fenster       | MAX  | onoff: 0 | onoff   | 0     |      |
| 2016-08-05 09:32:06 | k_fenster        | MAX  | onoff: 0 | onoff   | 0     |      |
| 2016-08-05 09:22:09 | sz_fenster       | MAX  | onoff: 1 | onoff   | 1     |      |
| 2016-08-05 09:15:14 | az_fenster       | MAX  | onoff: 1 | onoff   | 1     |      |
| 2016-08-05 09:14:46 | k_fenster        | MAX  | onoff: 1 | onoff   | 1     |      |
| 2016-08-05 09:14:15 | wz_fenster       | MAX  | onoff: 1 | onoff   | 1     |      |
| 2016-08-05 08:54:06 | sz_fenster       | MAX  | onoff: 0 | onoff   | 0     |      |
| 2016-08-04 22:49:04 | az_fenster       | MAX  | onoff: 0 | onoff   | 0     |      |
+---------------------+------------------+------+----------+---------+-------+------+


Die alten Historywerte habe ich per SQL auf die neue Variante aktualisiert, so sind diese immerhin gut "recycelt" :)