[gelöst] SVG Plot Werte filtern

Begonnen von gbomacfly, 13 Februar 2018, 20:10:14

Vorheriges Thema - Nächstes Thema

gbomacfly

Hi zusammen,

ich hab ein kleines "Problem". Ich möchte die desiredTemperature meines MAX!-Heizkörperthermostats loggen und plotten.
Funktioniert soweit auch ganz gut, nur leider hat das Reading nicht nur numerische Werte, sondern auch "eco" und "boost", ist aber auch mal komplett leer:
2018-02-13_16:08:33 22.0
2018-02-13_16:12:45 22.0
2018-02-13_16:14:13
2018-02-13_16:14:13 boost
2018-02-13_16:27:56 eco
2018-02-13_16:28:04 18.0

Dies hat zur Folge, dass der Plot an der Stelle auf 0 runtergeht (Siehe Screenshot, gelbe Linie "SollTemperatur"). Desweiteren müllt es mir das Log mit folgendem zu:
2018.02.13 19:39:15 1: PERL WARNING: Argument "eco" isn't numeric in numeric gt (>) at ./FHEM/98_SVG.pm line 1566.
2018.02.13 19:39:15 1: PERL WARNING: Argument "" isn't numeric in numeric gt (>) at ./FHEM/98_SVG.pm line 1566.
2018.02.13 19:39:15 1: PERL WARNING: Argument "boost" isn't numeric in numeric gt (>) at ./FHEM/98_SVG.pm line 1566.


Jetzt dachte ich, ich filter diese 3 Möglichkeiten einfach raus. Ich benutze DBLogging mit der Einstellung DbLogType: History und dachte daher an sowas:
WZ.Heizung:desiredTemperature:::$val=~s/(?!d)//g
oder
WZ.Heizung:desiredTemperature:::$val=~(?!d)

Ich hab zig Kombinationen ausprobiert, diverse Klammern, "" und '' gesetzt, Google und die Forensuche bemüht, hab aber leider bisher keinen Erfolg erzielen können. Entweder war die Linie komplett auf 0, oder es sieht aus wie im Screenshot.

Was für Möglichkeiten habe ich jetzt? Ein userreading? Wie müsste sowas aussehen? Oder gibt es da eine Filtermöglichkeit bei SVG? Kann ich bestimmte Werte ignorieren? Irgendwie seh ich grade den Wald vor lauter Bäumen nicht...



FHEM auf Debian Server, LogDB, MAX!-HT, Yeelight, Sonoff-Tasmota, IT, Signalduino434, nanoCUL868
FHEM-Keller auf RPI Zero mit OBIS (FHEM2FHEM)
FHEM-WZ auf RPI Zero - BT auf Alexa
Diverse Eigenbausensoren mit Arduino/MQTT

Phill

Ich dachte auch gleich an ein userReading. Könnte so ausehen.
attr WZ.Heizung userReadings filteredTemp {my $r=ReadingsVal("WZ.Heizung","desiredTemperature",""); $r=~/^\d/ ? $r : ReadingsVal("WZ.Heizung","filteredTemp","") }

Homebrew 1-Wire / HomeMatic Mix - Cubietruck mit FHEM als Server - Raspberry PI 3 als Informationsanzeige im MagicMirror Stil - Raspberry Pi 1 als Klingelanlage - VDR

Mein Modul: Talk2Fhem - Mein Tipp: https://forum.fhem.de/index.php/topic,82442.0.html

gbomacfly

Perfekt, hat sofort funktioniert :)

Vielen Dank! :)
FHEM auf Debian Server, LogDB, MAX!-HT, Yeelight, Sonoff-Tasmota, IT, Signalduino434, nanoCUL868
FHEM-Keller auf RPI Zero mit OBIS (FHEM2FHEM)
FHEM-WZ auf RPI Zero - BT auf Alexa
Diverse Eigenbausensoren mit Arduino/MQTT

kadettilac89

Ich würde die fehlerhaften Datensätze schon vom Loggen ausnehmen. Du verwendest DBlog, schau dir mal das DBLog-Attribut "valueFn" und IGNORE=1 im selben Zusammenhang an. Damit kannst du Werte ändern bevor diese in dei DB kommen (eco = xxx Grad, boost = xxx Grad), oder Sätze ignorieren.

Das hat den Vorteil, dass du das in einem Aufwasch für alle MAX-Thermostate machst, und nicht überall ein Userreading füttern musst.

gbomacfly

Hmmm, das klingt sogar noch besser. Das schau ich mir mal an, vielen Dank! :)
FHEM auf Debian Server, LogDB, MAX!-HT, Yeelight, Sonoff-Tasmota, IT, Signalduino434, nanoCUL868
FHEM-Keller auf RPI Zero mit OBIS (FHEM2FHEM)
FHEM-WZ auf RPI Zero - BT auf Alexa
Diverse Eigenbausensoren mit Arduino/MQTT