dblog FBDECT parser

Begonnen von cbug, 30 Mai 2019, 19:48:27

Vorheriges Thema - Nächstes Thema

cbug

Hi,

hab ein paar Comet DECT und AVM 301 Thermostate im Haus. dblog speichert dabei einige Werte falsch in der db nach dem auslesen aus der Fritzbox (6490 unitymedia gebranded, abruf über FBATAHTTP).



#select * from history where device like 'FBDECT_FritzBox_%' and EVENT like '%desire%';
+---------------------+-------------------------------+--------+-----------------------------+------------------------+---------------+--------+
| TIMESTAMP           | DEVICE                        | TYPE   | EVENT                       | READING                | VALUE         | UNIT   |
+---------------------+-------------------------------+--------+-----------------------------+------------------------+---------------+--------+
| 2019-05-29 20:18:01 | FBDECT_FritzBox_11959_0104816 | FBDECT | state: desired-temp: 20.0 C | state                  | desired-temp  | 20.0 C |
| 2019-05-29 20:18:01 | FBDECT_FritzBox_11959_0104800 | FBDECT | state: desired-temp: 20.0 C | state                  | desired-temp  | 20.0 C |
| 2019-05-29 20:18:01 | FBDECT_FritzBox_11959_0104800 | FBDECT | state: desired-temp: 20.0 C | state                  | desired-temp  | 20.0 C |
| 2019-05-29 20:18:01 | FBDECT_FritzBox_11959_0045784 | FBDECT | state: desired-temp: 14.0 C | state                  | desired-temp  | 14.0 C |
| 2019-05-29 20:18:01 | FBDECT_FritzBox_11959_0045784 | FBDECT | state: desired-temp: 14.0 C | state                  | desired-temp  | 14.0 C |
| 2019-05-29 20:18:01 | FBDECT_FritzBox_11959_0104680 | FBDECT | state: desired-temp: 20.0 C | state                  | desired-temp  | 20.0 C |
| 2019-05-29 20:18:01 | FBDECT_FritzBox_11959_0104680 | FBDECT | state: desired-temp: 20.0 C | state                  | desired-temp  | 20.0 C |
| 2019-05-29 20:18:02 | FBDECT_FritzBox_11959_0045408 | FBDECT | state: desired-temp: 16.0 C | state                  | desired-temp  | 16.0 C |
| 2019-05-29 20:18:02 | FBDECT_FritzBox_11959_0045408 | FBDECT | state: desired-temp: 16.0 C | state                  | desired-temp  | 16.0 C |
| 2019-05-29 20:18:02 | FBDECT_FritzBox_11959_0074288 | FBDECT | state: desired-temp: 20.0 C | state                  | desired-temp  | 20.0 C |
| 2019-05-29 20:18:02 | FBDECT_FritzBox_11959_0074288 | FBDECT | state: desired-temp: 20.0 C | state                  | desired-temp  | 20.0 C |
| 2019-05-29 20:18:02 | FBDECT_FritzBox_09995_0109579 | FBDECT | state: desired-temp: 20.0 C | state                  | desired-temp  | 20.0 C |
| 2019-05-29 20:18:02 | FBDECT_FritzBox_09995_0109579 | FBDECT | state: desired-temp: 20.0 C | state                  | desired-temp  | 20.0 C |
| 2019-05-29 20:18:02 | FBDECT_FritzBox_09995_0112640 | FBDECT | state: desired-temp: 17.0 C | state                  | desired-temp  | 17.0 C |

Folge war, dass im SVG nur "desired-temp" zurückgeliefert wurde als Value.

Habe jetzt in der /opt/fhem/FHEM/93_DbLog.pm folgendes geändert:


Zeile 995:
  # FBDECT
  elsif ($type eq "FBDECT") {
    if ( $value=~/([\.\d]+)\s([a-z].*)/i ) {
     $value = $1;
     $unit  = $2;
    }

    if ( $event=~/state:\s(.*):\s([\.\d]+)\s?(.*)?/i ) {
     $reading = $1;
     $value = $2;
     $unit = $3;
    }

  }




Der Schnippsel ist NICHT ausgiebig getestet. Wenn ein Gerät ausgeschaltet ist, wird z.b. 7.5 angezeigt und das C fehlt, liegt aber glaube ich nicht an meinem regex, sondern wird so schon im event gespeichert.



| 2019-05-30 19:37:25 | FBDECT_FritzBox_11959_0104816 | FBDECT | state: desired-temp: 20.0 C | desired-temp           | 20.0          | C      |
| 2019-05-30 19:37:25 | FBDECT_FritzBox_11959_0104816 | FBDECT | state: desired-temp: 20.0 C | desired-temp           | 20.0          | C      |
| 2019-05-30 19:37:26 | FBDECT_FritzBox_11959_0104800 | FBDECT | state: desired-temp: 20.0 C | desired-temp           | 20.0          | C      |
| 2019-05-30 19:37:26 | FBDECT_FritzBox_11959_0104800 | FBDECT | state: desired-temp: 20.0 C | desired-temp           | 20.0          | C      |
| 2019-05-30 19:37:26 | FBDECT_FritzBox_11959_0045784 | FBDECT | state: desired-temp: 14.0 C | desired-temp           | 14.0          | C      |
| 2019-05-30 19:37:26 | FBDECT_FritzBox_11959_0045784 | FBDECT | state: desired-temp: 14.0 C | desired-temp           | 14.0          | C      |
| 2019-05-30 19:37:26 | FBDECT_FritzBox_11959_0104680 | FBDECT | state: desired-temp: 16.0 C | desired-temp           | 16.0          | C      |
| 2019-05-30 19:37:26 | FBDECT_FritzBox_11959_0104680 | FBDECT | state: desired-temp: 16.0 C | desired-temp           | 16.0          | C      |
| 2019-05-30 19:37:26 | FBDECT_FritzBox_11959_0045408 | FBDECT | state: desired-temp: 20.0 C | desired-temp           | 20.0          | C      |
| 2019-05-30 19:37:26 | FBDECT_FritzBox_11959_0045408 | FBDECT | state: desired-temp: 20.0 C | desired-temp           | 20.0          | C      |
| 2019-05-30 19:37:26 | FBDECT_FritzBox_11959_0074288 | FBDECT | state: desired-temp: 7.5    | desired-temp           | 7.5           |        |
| 2019-05-30 19:37:26 | FBDECT_FritzBox_11959_0074288 | FBDECT | state: desired-temp: 7.5    | desired-temp           | 7.5           |        |
| 2019-05-30 19:37:26 | FBDECT_FritzBox_09995_0109579 | FBDECT | state: desired-temp: 20.0 C | desired-temp           | 20.0          | C      |
| 2019-05-30 19:37:26 | FBDECT_FritzBox_09995_0109579 | FBDECT | state: desired-temp: 20.0 C | desired-temp           | 20.0          | C      |
| 2019-05-30 19:37:26 | FBDECT_FritzBox_09995_0112640 | FBDECT | state: desired-temp: 17.0 C | desired-temp           | 17.0          | C      |
| 2019-05-30 19:37:26 | FBDECT_FritzBox_09995_0112640 | FBDECT | state: desired-temp: 17.0 C | desired-temp           | 17.0          | C      |
| 2019-05-30 19:37:26 | FBDECT_FritzBox_09995_0110933 | FBDECT | state: desired-temp: 20.0 C | desired-temp           | 20.0          | C      |
| 2019-05-30 19:37:26 | FBDECT_FritzBox_09995_0110933 | FBDECT | state: desired-temp: 20.0 C | desired-temp           | 20.0          | C      |
+---------------------+-------------------------------+--------+-----------------------------+------------------------+---------------+--------+



Wär schön, wenn das ins SVN käme, ich muss das sonst immer nachträglich einfügen nach dem updaten. ;-)
Kann auch sein, dass ich an der falschen Stelle angepasst habe, dann wär es toll, wenn mir jemand die richtige zeigt, dann pass ich das an.
Warum die Einträge doppelt sind, weiss ich nicht.

DS_Starter

Hallo cbug,

habe durch Zufall deinen Beitrag gefunden. Ist hier etwas ungünstig, besser wäre "Automatisierung" dafür gewesen.

Für dein Problem gibt es im DbLog bereits das Attribut "addStateEvent". Mit "addStateEvent = 0" sollte dein Problem gelöst sein.

Die Commandref sagt dazu:

    attr <device> addStateEvent [0|1]
    Bekanntlich wird normalerweise bei einem Event mit dem Reading "state" der state-String entfernt, d.h. der Event ist nicht zum Beispiel "state: on" sondern nur "on".
    Meistens ist es aber hilfreich in DbLog den kompletten Event verarbeiten zu können. Deswegen übernimmt DbLog per Default den Event inklusive dem Reading-String "state".
    In einigen Fällen, z.B. alten oder speziellen Modulen, ist es allerdings wünschenswert den state-String wie gewöhnlich zu entfernen. In diesen Fällen bitte   
    addStateEvent = "0" setzen. Versuchen sie bitte diese Einstellung, falls es mit dem Standard Probleme geben sollte.

Grüße,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

cbug

Oh na prima,

hätte ich das mal eher gewusst ;-)

Danke.