logProxy modul zum manipulieren und ergänzen von SVG plots

Begonnen von justme1968, 26 August 2014, 22:47:55

Vorheriges Thema - Nächstes Thema

maxritti

Sorry. Eigentlich wollte ich das auch noch dran gehangen haben.

list myLP:

Internals:
   CFGFN
   NAME       myLP
   NR         159
   STATE      Initialized
   TYPE       logProxy
Attributes:


Oder in fhemweb siehe Screenshot.

GPlot:

# Created by FHEM/98_SVG.pm, 2014-09-16 20:27:10
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 'PV-Leistung / Rollos'
set ytics
set y2tics
set grid
set ylabel "Rollo"
set y2label "PV"
set yrange [0:110]

#logProxy DbLog:myDbLog:mySL:Pac_avg
#logProxy DbLog:myDbLog:EG_wz_RO_TerrasseRechts:pct
#logProxy DbLog:myDbLog:EG_wz_RO_Carport:pct
#logProxy DbLog:myDbLog:myTL:carporton
#logProxy ConstY:700
#logProxy ConstY:1000
#logProxy ConstY:1500
#logProxy ConstY:2100

plot "<IN>" using 1:2 axes x1y2 title 'Pac_avg' ls l5 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 title 'Terrasse rechts' ls l1 lw 1 with steps,\
     "<IN>" using 1:2 axes x1y1 title 'Carport' ls l2fill lw 1 with steps,\
     "<IN>" using 1:2 axes x1y1 title 'Carporton' ls l4fill lw 1 with steps,\
     "<IN>" using 1:2 axes x1y2 notitle ls l4 lw 1 with steps,\
     "<IN>" using 1:2 axes x1y2 notitle ls l4 lw 1 with steps,\
     "<IN>" using 1:2 axes x1y2 notitle ls l3 lw 1 with steps,\
     "<IN>" using 1:2 axes x1y2 notitle ls l3 lw 1 with steps

fhainz

Hallo Andre,

ich bekomme bei jedem FHEM-Reboot Perl Warnings in Log geschrieben. Anscheinend haben die etwas mit dem logProxy Modul zu tun. Hab alle Plots kommentiert, Warnings Weg, "normale" SVG Plots auskommentiert, Warnings Weg, ein logProxy Plot auskommentiert, Warnings da.

Vielleicht kannst du dir das mal ansehen. Ab hier: http://forum.fhem.de/index.php/topic,28393.msg212830.html#msg212830


Grüße



justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

justme1968

#78
ein kurzes update zwischendurch: ich denke/hoffe das ich nächste woche eine version so weit habe bei der die werte die rechts und links über den plotbereich hinaus gehen sauber abgeschnitten werden und der plotabriss dann ohne addLog sauber vermieden werden kann.

bis dahin noch eine kurze spielerei mit der idee von hier: http://forum.fhem.de/index.php/topic,23912.0.html zum plotten der sonnenauf- und -untergangszeit. aber ohne zu loggen sondern 'live' berechnet.

dahinter steckt eine logProxy_Func2Plot funktion der man beliebige andere funktionen übergeben kann die dann wiederholt für die einzelnen punkte in einem plot aufgerufen wird. die anzahl der aufrufe ist konfigurierbar und hängt im default fall vom zoomfaktor ab. d.h. bei einem jahres- und monatsplot wird der wert täglich bestimmt, bei wochen- und tagesplot stündlich, usw.

die relevante teil der plot definition sieht dann so aus:

#logProxy Func:logProxy_Func2Plot($from,$to,'{hms2dec(sunrise_abs_dat($sec))}')
#logProxy Func:logProxy_Func2Plot($from,$to,'{hms2dec(sunset_abs_dat($sec))}')
                                                             
plot "<IN>" using 1:2 axes x1y1 title 'Sonnenaufgang' ls l2 lw 1 with steps,\
plot "<IN>" using 1:2 axes x1y2 title 'Somnnenuntergang' ls l0 lw 1 with steps

gruss
  andre

edit: die aktuelle Version ist im wiki beschrieben: http://www.fhemwiki.de/wiki/LogProxy#Sonnenauf-_und_-untergangszeiten_plotten
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

frank

Zitatich denke/hoffe das ich nächste woche eine version so weit habe bei der die werte die rechts und links über den plotbereich hinaus gehen sauber abgeschnitten werden und der plotabriss dann ohne addLog sauber vermieden werden kann.
das hört sich gut an.  :)
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

justme1968

ich habe im ersten post die (hoffentlich) letzte version vor dem einchecken angehängt:
- das clippen am rand des plots für extend ist eingebaut.
- gibt die option interpolate. damit wird interpoliert statt einfach nur den vorherigen/nächsten wert auf den rand zu schieben.
- beispielfunktion logProxy_Func2Plot ist eingebaut
#logProxy Func:logProxy_Func2Plot($from,$to,'{logProxy_hms2dec(sunrise_abs_dat($sec))}')
#logProxy Func:logProxy_Func2Plot($from,$to,'{logProxy_hms2dec(sunset_abs_dat($sec))}')

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

fhainz

Hallo Andre,

Zitat von: justme1968 am 09 November 2014, 21:40:01der plotabriss dann ohne addLog sauber vermieden werden kann.

Hast du ein bitte ein Beispiel dazu? Meine Idee wäre zB
#logProxy FileLog:FileLog_wzHeizungSollTemp,extend=120:4:desired\x3a::
aber das klappt nicht, siehe Anhang.

Grüße


justme1968

doch eigentlich genau so.

aber die werte werden nicht 'in die zukunft' erweitert. da war ich mir nicht sicher ob das sinnvoll ist weil man dann nicht mehr sieht wann der tatsächlich letzte wert gekommen ist. dafür kann ich aber noch eine extra option einbauen den letzten vorhandenen wert auf jeden fall bis zur aktuellen zeit zu plotten.

unabhängig davon würden die von dir angegeben 120 sekunden auch nicht reichen da der letzte wert schon eine stunde alt ist.

du solltest den unterschied deutlich sehen wenn du in deinen plot reinzoomst und einmal mit und ein mal ohne extend zurück scrollst.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

fhainz

Ok jetzt erst verstehe ich richtig was extend bewirkt  8)

Zitat von: justme1968 am 15 November 2014, 20:25:14
dafür kann ich aber noch eine extra option einbauen den letzten vorhandenen wert auf jeden fall bis zur aktuellen zeit zu plotten.
Das wäre super, danke! Die addLog Funktion geht mir gegen den Strich, eigentlich will ich möglichst kleine Log Files haben, andererseits sind komplette Plots auch recht schön :)

Ein "Problem" hab ich noch. Der Plot Editor zeigt maximal 8 gplot Zeilen an. Bisher war kaum anzunehmen das jemand mehr als 8 Kurven in einem Plot zeichnet, aber mit LogProxy kommt da schnell was zusammen wenn man sich zB auch Striche und Punkte anzeigen lassen will. Normaleweise editiere ich alle Dateien mit eclipse aber bei kleinen Änderungen/Versuchen nehme ich da schon gerne den Plot Editor und wenn mehr als 8 Zeilen vorhanden sind hat der mir die gplot Datei zusammen. Ich hab dann mal nachgesehen und bin auf diese Zeile (313 98_SVG.pm) gestoßen:
$max = 8 if($max > 8);
ein zB
$max = 15 if($max > 15);
bringt nicht wirklich was, siehe Anhang. Da muss es irgendwo noch eine Einstellung geben, hab sie aber bisher nicht gefunden. Vielleicht kannst du dir das, wenn du Zeit und Muse hast, mal ansehen.


Grüße

justme1968

extend nimmt den bereich der dargestellt wird, erweitert ihn nach rechts und links um die angegebene zahl an sekunden und such dann in diesem bereich rechts und links jewels den wert der am nächsten am plot bereich liegt und verwendet diesen als anfang oder end wert. das passt dann für steps. oder wenn interpolate gesetzt ist wird zwischen diesen gefunden und dem ersten echten bzw. letzen plot wert interpoliert um den wert für den anfang oder das ende zu finden.

das könnte man zwar theoretisch noch etwas optimieren in dem man bei dbblog tatsächlich mit limit 1 den jewels ersten bzw letzen wert vor und nach dem bereich sucht aber das würde spätestens bei filelog nicht mehr gehen. und was den overhead durch den fest vorgegebenen bereich angeht: in den aller meisten fällen ist er klein im vergleich zum plot bereich. d.h. wenn ein sensor z.b. nur jede stunde einen wert liefert und man mit extend um 1 oder zwei stunden vergrössert macht das bei einem tages plot relativ gesehen zwar viel aus da zwar unter umständen fast 20% an bereich dazu kommt. da es aber nur um insgesamt 28 statt 24 werte geht ist das absoult insgesamt so wenig das es nichts aus macht. wenn man auf jahresebene plottet fallen die zusätzlichen 4 stunden weder relativ noch absolut ins gewicht.

zum komplett: die plots sind jetzt auch komplett. es wird nur nichts über die aktuelle zeit hinaus 'dazu erfunden'.

das mit dem editor schaue ich mir an. eigentlich wäre es ideal wenn alle zeilen angezeigt werden und es einen knopf gibt um eine neue zeile hinzuzufügen. mal sehen wie aufwändig das ist. ansonsten gibt es jeweils in filelog, dblog und logproxy noch die SVG_sampleDataFn die auch die begrenzung auf 8 eingebaut hat. mach für den logProxy da auch mal 15 draus.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

fhainz

Zitat von: justme1968 am 15 November 2014, 21:03:37
d.h. wenn ein sensor z.b. nur jede stunde einen wert liefert und man mit extend um 1 oder zwei stunden vergrössert macht das bei einem tages plot relativ gesehen zwar viel aus da zwar unter umständen fast 20% an bereich dazu kommt. da es aber nur um insgesamt 28 statt 24 werte geht ist das absoult insgesamt so wenig das es nichts aus macht. wenn man auf jahresebene plottet fallen die zusätzlichen 4 stunden weder relativ noch absolut ins gewicht.
Ok verstehe ich, in diesem Fall ist es aber eine Soll-Temperatur. Diese ändert sich im Normalfall nur 2-3 mal Tag bzw. wenn die Fenster geöffnet werden. Da kann es dann sein das der letzte Wert mehrere Stunden her ist und das sieht im Tages Plot nicht schön aus. Deshalb verwende ich bisher bei den Soll Temperaturen die addLog() Funktion was aber wiederum zu unnützen Log Einträgen führt.

Zitat von: justme1968 am 15 November 2014, 21:03:37
zum komplett: die plots sind jetzt auch komplett. es wird nur nichts über die aktuelle zeit hinaus 'dazu erfunden'.
Stimmt schon, hab mich schlecht ausgedrückt.

Zitat von: justme1968 am 15 November 2014, 21:03:37
eigentlich wäre es ideal wenn alle zeilen angezeigt werden und es einen knopf gibt um eine neue zeile hinzuzufügen. mal sehen wie aufwändig das ist. ansonsten gibt es jeweils in filelog, dblog und logproxy noch die SVG_sampleDataFn die auch die begrenzung auf 8 eingebaut hat. mach für den logProxy da auch mal 15 draus.
Stimme ich dir vollkommen zu. Die Änderung im logProxy Modul hat funktioniert. Nun werden mir alle 13 Zeilen angezeigt. Danke für den Tipp!

Grüße

justme1968

ich baue die option ein den letzen wert entweder um maximal  den extend zeitraum oder auf jeden fall bis zum aktuellen zeitpunkt zu erweitern.

wenn deine solltenperatur aus einem hm oder max thermostaten oder aus heatingcontrol oder WeekdayTimer kommt kannst du auch direkt diese werte plotten ohne das sie aus dem log kommen sondern live aus dem device. dann gibt es das abriss problem überhaupt nicht.

das geht natürlich nicht wenn du nicht die beabsichtige sondern die (durch das fenster beeinflusste) tatsächliche solltenperatur plotten willst.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

fhainz

Zitat von: justme1968 am 15 November 2014, 21:24:39
ich baue die option ein den letzen wert entweder um maximal  den extend zeitraum oder auf jeden fall bis zum aktuellen zeitpunkt zu erweitern.
Danke!

Zitat von: justme1968 am 15 November 2014, 21:24:39
wenn deine solltenperatur aus einem hm oder max thermostaten oder aus heatingcontrol oder WeekdayTimer kommt kannst du auch direkt diese werte plotten ohne das sie aus dem log kommen sondern live aus dem device. dann gibt es das abriss problem überhaupt nicht.

das geht natürlich nicht wenn du nicht die beabsichtige sondern die (durch das fenster beeinflusste) tatsächliche solltenperatur plotten willst.
Die (beeinflusste) Solltemperatur kommt bei mir von ein eigenes Hilfsmodul in dem ich SollTemp Zeiten eingeben kann und das auch auf meine Fensterkontakte reagiert und entsprechend absenkt. In dem Modul hab ich meine unzähligen Heizungs at's und notifys verstaut um der FHEM-Modul Programmierung näher zu kommen.
Das Live-Werte plotten geht wusste ich noch gar nicht, das werde ich aber mal versuchen.

Grüße

justme1968

schau dir mal logProxy_WeekProfile2Plot in der doku und im modul an. weiter vorne im thread gibt es auch beispiele. damit kannst du für die oben angegebenen device direkt das wochenprofil plotten. es gibt für hm, max und heatingcontroll/weekdaytime jewels eine funktion die die interne liste aufbereitet. das kannst du für den modul auch so machen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

fhainz