[erledigt] in svg linie in lotrichtung nach werten zeichnen?

Begonnen von the ratman, 20 März 2021, 15:21:29

Vorheriges Thema - Nächstes Thema

the ratman

hiho,

ich spiele mich blöd rum und kriegs wieder mal nicht hin ...

ich würde gerne werte mit horizontalen linien darstellen.
ums zu veranschaulichen bräuchte ich anstelle der in der grafik zu sehenden "points" jeweils einen strich von oben nach unten über die gesamte dynamische höhe des plots. im idealfall hätte der strich auch nach festgelegtem wert (es gibt nur 0, 1 und 2) eine von 3 farben.

ist das irgendwie halbwegs simpel mit logproxy oder was weiß ich machbar?
und wenn ja: wie (bitte mit nachvollziehbarem beispiel)

danke schon mal im voraus fürs hirnschmalz zur verfügung stellen!
→do↑p!dnʇs↓shit←

xenos1984

Zitat von: the ratman am 20 März 2021, 15:21:29
ich würde gerne werte mit horizontalen linien darstellen.
ums zu veranschaulichen bräuchte ich anstelle der in der grafik zu sehenden "points" jeweils einen strich von oben nach unten über die gesamte dynamische höhe des plots. im idealfall hätte der strich auch nach festgelegtem wert (es gibt nur 0, 1 und 2) eine von 3 farben.

Was denn nun - horizontal (von links nach rechts) oder von oben nach unten (vertikal)?

Zitat
ist das irgendwie halbwegs simpel mit logproxy oder was weiß ich machbar?
und wenn ja: wie (bitte mit nachvollziehbarem beispiel)

Das Wiki hat Beispiele für beides:

http://wiki.fhem.de/wiki/LogProxy

the ratman

ups, ja, natürlich vertikal oder ganz sicher ... in lotrichtung *g*

ja, nur wiki macht nur festes zeug oder uhrzeiten und in sachen farbe in dem zusammenhang hät ich gar nix gefunden.

ich hab das svg-zeugs sowieso nie verstanden, kann nur abschreiben.
→do↑p!dnʇs↓shit←

xenos1984

In dem Fall wäre es gut, wenn du ein paar Beispieldaten hättest. Im Wiki ist dieses Beispiel:


#logProxy DbLog:dbLog:s300ht:temperature::
#logProxy ConstX:logProxy_shiftTime($from,60*60),$data{min1},$data{max1}
#logProxy ConstX:logProxy_shiftTime($from,60*60),$data{min1},$data{max1}

plot "<IN>" using 1:2 axes x1y1 title 'temp' ls l1 lw 1 with steps,\
      "<IN>" using 1:2 axes x1y1 title 'minmax' ls l0 lw 1 with lines,\
      "<IN>" using 1:2 axes x1y1 ls l0 lw 1 with points


Definiert wird die Linie mit:


#logProxy ConstX:[x-Wert],[unterer y-Wert],[oberer y-Wert]


Was dort genau einzusetzen ist, hängt davon ab, woher deine Daten kommen. Im Beispiel sind $data{min1} und $data{max1} Minimum und Maximum der ersten Kurve. Die Linie wird dann so gezeichnet:


"<IN>" using 1:2 axes x1y1 title 'minmax' ls l0 lw 1 with lines


Die Farbe wird durch den Linientyp, hier l0 bestimmt - andere Farben bekommst du mit l1, l2, ..., l8.

the ratman

#4
mein derzeitiger plot schreibt sich so, wenns den was hilft *g*:# Created by FHEM/98_SVG.pm, 2021-03-19 15:11:38
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 'info'
set ytics "gut" 0, "mittel" 1, "schlecht" 2
set y2tics
set grid ytics y2tics
set ylabel ""
set y2label ""
set yrange [-0.2:2.2]

#logdb proplanta:pressure::
#logdb doif_info:info_plot::

plot "<IN>" using 1:2 axes x1y2 title 'druck' ls l2 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 title 'info' ls l0 lw 1 with points

beide datensätze kommen aus ner mysql db.

und da#logProxy DbLog:dbLog:s300ht:temperature::
#logProxy ConstX:logProxy_shiftTime($from,60*60),$data{min1},$data{max1}
#logProxy ConstX:logProxy_shiftTime($from,60*60),$data{min1},$data{max1}
könntest mir auch eine statistik der in deinem garten wachsenden blumen hinschreiben. mir sowas fang ich ned wirklich was an.
→do↑p!dnʇs↓shit←

xenos1984

Zitat von: the ratman am 20 März 2021, 19:35:02
mein derzeitiger plot schreibt sich so, wenns den was hilft *g*:

Das sagt aber nichts darüber aus, wo denn nun die vertikalen Linien hin sollen, bzw. welche Datenpunkte (x-Wert, y-Minimum, y-Maximum) denn nun eigentlich dargestellt werden sollen.

Falls die dort gezeichnet werden sollen, wo jetzt die Punkte sind (also eine vertikale Linie für jeden Punkt), wird das ganz ohne Perl wohl nicht gehen.

the ratman

min und max sind nach wetterdaten luftdruck, gehen durchschnirrlich irgendwo zw. 1020 und 1030 rum.
die als strich darzustellenden daten haben nur die werte 0, 1 und 2.

ich bräuchte doch tatsächlich nur eine strich, wie er in logproxy für feste uhrzeiten gezeigt wird.
meinste also ConstX:<zeit>,<y>[,<y2>] mit ner funktion, <zeit> extra auszulesen?
→do↑p!dnʇs↓shit←

xenos1984

Zitat von: the ratman am 21 März 2021, 10:59:43
meinste also ConstX:<zeit>,<y>[,<y2>] mit ner funktion, <zeit> extra auszulesen?

<zeit>, <y> und <y2> sind Perl-Ausdrücke, die Zeit und die beiden y-Werte bestimmen, an denen die Linie erscheinen soll. Ob du dafür nun Funktionen, konstante Werte oder Datenpunkte aus dem anderen Plot einsetzt, kommt ganz darauf an, was du dort dargestellt haben willst und woher du die Daten dafür nimmst. Wenn du die Daten aus einer Datenbank abrufst, dann eben das.

the ratman

→do↑p!dnʇs↓shit←

gichtl

Die Zeile
    #logProxy ConstX:TimeNow(),1020,1030
zeichnet eine senkrechte Linie zwischen 1020 und 1030 zur aktuellen Zeit

Und
   #logProxy ConstX:'2021-03-22_12:00:00',1020,1030
eine für heute um 12 Uhr Mittag.


Du könntest für den Strich einen weiteren
    set y3range [0:1]
spendieren, und dann mit
    #logProxy ConstX:TimeNow(),0,1
und mit
     "<IN>" using 1:2 axes x1y3 notitle ls l5 lw 1 with lines
zeichnen. Dann reicht der Strich immer exakt über das Diagramm.

the ratman

naja, die aktuelle uhrzeit is es ja nicht, die zeit kommt schon auch aus der db.

ich hab's projekt aber gekippt, da ich die luftdruckwerte nur alle 15 min aus proplanta kriege. scheinbar ist die sache zu ungenau, um da wirklich schlüsse ziehen zu können. und mir jetzt einen luftdrucksensor zu basteln (ich find tatsächlich nix fürs alte homematic oder hue) ist den aufwand nicht wert.

trotzdem mal danke für euere bemühungen!
→do↑p!dnʇs↓shit←

frank

constX ist für diesen fall sowieso eher suboptimal, da für jeden strich eine separate linie gezeichnet wird.
die maximale linienanzahl ist ja begrentzt (8? oder 16?).
dazu bräuchte man wohl einen neuen linientyp.
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

the ratman

ach, auch noch begrenzt ... *g*
na dann würds bei mehr als 24 stunden-ansicht eh schon nicht mehr gehen.

neuer linientyp wäre aber genial. horizontal gibt's ihn ja schon, warum nicht auch vertikal? wäre irgendwie nur logisch, oder?
→do↑p!dnʇs↓shit←

xenos1984

Zitat von: frank am 22 März 2021, 12:11:46
die maximale linienanzahl ist ja begrentzt (8? oder 16?).
So weit ich weiß, ist nicht die Linienanzahl begrenzt, sondern die der Linienstile von l0 bis l8, wobei es von denen jeweils noch gepunktete und gefüllte Varianten gibt, sowie die Zahl der y-Achsen. Wenn man aber mehr Linien haben will, die alle den gleichen Stil haben, sollte das möglich sein. (Ich habe einen Plot mit 12 Linien.)