[schwere Geburt, aber gelöst] DbLog und SVG

Begonnen von andies, 02 Mai 2017, 13:51:41

Vorheriges Thema - Nächstes Thema

Muschelpuster

#15
Also nach 1x drüber schlafen finde ich es unglücklich, den Plot als Kläranlage für die geloggte Sch... zu verwenden. Wenn man vorne in's Log gleicher sauber einfüllt, braucht man sich hinten nicht verbiegen. Den Gedanken hatte ich gestern auch schon mal, wollte aber über das mächtige Attribut valueFn vom dblog lösen, was aber wohl mit 3 Zielwerten nicht geht. Man muss 'einfach' Userreadings im sysmon schaffen und die loggen (bei mir auf eth0):attr sysmon_pi userReadings eth0_tx_diff difference {int(ReadingsVal("sysmon_pi","eth0_tx",0)/60)} ,
          eth0_rx_diff difference {int(ReadingsVal("sysmon_pi","eth0_rx",0)/60)} ,
          eth0_all_diff difference {ReadingsVal("sysmon_pi","eth0_rx_diff",0) + ReadingsVal("sysmon_pi","eth0_tx_diff",0)}
attr sysmon_pi DbLogInclude eth0_tx_diff,eth0_rx_diff,eth0_all_diff
Ich teile die Werte durch 60, da ich zum Testen minütlich logge und ja die bit/s haben will. Wenn man nun 5-minütlich loggt, teilt man eben durch 300. Um den Wert in kb/s zu haben muss man dann eben durch 60 bzw. 300 mal 1024 teilen. Dann muss man aber noch auf 2 Nachkommastellen oder so runden, sonst bekommt man zumeist den Wert 0 zurück.
Dazu ist zu sagen, dass mein dblog im Include-Mode läuft, da ich beim Umstieg auf dblog nicht die Vorteile durch Fluten der  DB mit unnötigen Werte kaputt machen wollte.
Wer jetzt aber dachte, das ist eine gute Idee, der hat seine Rechnung ohne FHEM gemacht  ;) Die Userreadings gehen beim Event kurz auf 0 und die Differenz in's Minus, bevor 1 Sekunde später die richtigen Werte geloggt werden. Also doch noch valueFn im dblog  >:( attr bdlog valueFn {if ($DEVICE eq "sysmon_pi"  && $VALUE < 1){$IGNORE=1;}}Das braucht man eh, denn bei 5-minütlichem Logging gehen die Userreadigs in den 4 Minuten dazwischen natürlich auch auf 0  ;)

Und schon kann man auf der GUI bleiben und seinen Plot ganz ohne gplot-Akrobatik bauen. Ob der Kopfstand vorher besser ist, oder nachher muss jeder selbst für sich entscheiden, oder das sysmon entsprechend weiter programmieren, damit saubere Werte in das dblog gehen.

alternative Grüße
Niels

fhem @ ZBOX mit 1,6MHz Celeron, 4GB RAM & 120GB SSD mit Debian Bullseye # MiLight # Homematic via CCU3 # W&T WebIO # Rademacher DuoFern # ESPeasy # logdb@mysql # configdb@mysql # Shelly @ MQTT2 # go-eCharger mit PV-Überschussladung via DOIF

itarch

Hallo

ich teile die Meinung (siehe Zitat) von @Muschelpuster ...
ZitatWenn man vorne in's Log gleicher sauber einfüllt, braucht man sich hinten nicht verbiegen.

Allerdings führt er weiter auf
ZitatMan muss 'einfach' Userreadings im sysmon schaffen und die loggen (bei mir auf eth0)
Und das verstehe ich nicht so ganz. Heißt, das device muß bestimmte Voraussetzungen erfüllen, oder erreicht man mit userReadings Anweisung(en) mein folgendes Anliegen.

Ich habe im dblog das device Heizung (Luxtronik2.pm) definiert, welches mir bspw das Reading "Heizung.statElectricityHeatPumpTariff1" bereitstellt, welches wie folgt Value Strings in der DB ablegt "Day: 9746.8 Month: 87.028 Year: 87.028 (since...)". Ich brauch nur den Wert von "Day: ..." bzw Reading = Day und Value = <wert>.  Um den Plot umsetzen zu können habe ich das GPLOT-File anpassen müssen. Schöner wäre es wenn dies über die GUI gehen würde.  Jetzt habe ich zwar den Plot, aber muß fortfolgend das GPLOT-File manuell bearbeiten, da sonst übers GUI einmal angepasst, die manuelle Ergänzungen gelöscht werden (siehe Details hier https://forum.fhem.de/index.php/topic,79469.0.html). Dafür sollte ja - wie bereits von @Muschelpuster angemerkt - das dblog angepasst werden, aber wie?

 

Muschelpuster

hallo itarch,

Eigentlich hast Du ja schon alle Zutaten. Wenn Du nun anstelle von statElectricityHeatPumpTariff1 das Userreading statElectricityHeatPumpTariff1_log mit aufbereiteten Daten füllst, dann bist Du doch schon fast am Ziel. Und die Aufbereitung hast Du ja mit Deinem Ausdruck ~s/Day..([\d]*).*/$1/e ja auch schon gebaut. Damit musst Du doch 'nur' das Userreading betanken und dieses dann loggen.
Der Vorteil ist für mich auch, dass ich sehe was passiert. Wenn mein regulärer Ausdruck noch nicht richtig ist, sehe ich das im Userreading und sehe auch den Effekt meiner Änderungen. Dadurch ist es für mich 'einfacher', die Regexen zu basteln.

'einfache' Grüße
Niels
fhem @ ZBOX mit 1,6MHz Celeron, 4GB RAM & 120GB SSD mit Debian Bullseye # MiLight # Homematic via CCU3 # W&T WebIO # Rademacher DuoFern # ESPeasy # logdb@mysql # configdb@mysql # Shelly @ MQTT2 # go-eCharger mit PV-Überschussladung via DOIF

itarch

Hallo Niels

Danke !
Ich werde die Tage mal versuchen es umzusetzen, auch wenn ich es noch nicht ganz verdaut habe... Bis später

BG, itarch

itarch

... nach langem hin und her mit Perl's Suchen/Ersetzen, also kurzum ohne Erfolg
habe ich das gezielte Abgreifen (also Teile aus dem value eines reading) mitr Perl's split umgesetzt.

Demnach habe ich also für das Device: Heizung
(Typ: LUXTRONIK2)

für bspw das Reading "statElectricityHeatPumpTariff1" (hier ein value-bsp.: Day: 5980.5 Month: 226.076 Year: 226.076 (since: 2017-11-09 )
folgendes Attribut generiert um den Wert für Day zu erhalten:
ElecHeatPumpDay { (split(" ", ReadingsVal('Heizung','statElectricityHeatPumpTariff1','0')))[1] } .

Fortfolgend finde ich beim generieren eines Plots (bspw. über dblog oder Filelog) das Reading "ElecHeatPumpDay" und bin am Ziel.

Hoffe irgend jemand kann damit was anfangen.

freundliche grüße