Gplot ab Wert bestimmte Farbe einnehmen

Begonnen von mrb, 06 November 2022, 11:52:39

Vorheriges Thema - Nächstes Thema

mrb

Hallo zusammen,

ich sehe immer so richtig geile Gplots von allen Leuten (siehe Screenhot) und habe mir jetzt gedacht das könnte man doch nutzen für meinen CO2 Sensor und meine Netatmo. Also ab bestimmten Wert wird mein Gplot Gelb und ab noch einem höheren Wert Rot.
ich habe jetzt folgende Information im Internet gefunden kann aber damit nicht so richtig was anfangen außer das man es als Funftion beim gplot eintragen könnte.
Mein Verständnis sagt mir "Wert 3 aus Gplot" wenn er höher ist als 1000" aber so richtig die Syntax ist mir nicht erklärbar.
$fld[3]>1000?1000:$fld[3]

Also fassen wir mal zusammen und zerlegen die Abfrage:
$fld[3] 3ter Wert der Logfile-Zeile
>        Größer
1000    Wert
?        "Ist größer als?"
1000    Wert
:         ?? ??
$fld[3] 3ter Wert der Logfile-Zeile


Bei mir kommmen nur ganz viele ?? Aber keine Antwort

Jamo

#1
Beispiel, alledings mit DbLog, musst Du dann auf Filelog umstricken.

$val=($val>600?600:$val) => $val wird abgefragt, falls $val>600 ist, wird $val durch 600 begrenzt/ersetzt, ansonsten bleibt der wert in der variable enthalten.
Damit erreicht man das die Grenzen farblich voneninander abgesetzt werden koennen.
Deswegen wird $val auch 4-mal geplottet. . . also die 4 Zeilen die mit #myDbLog co2:co2"" anfangen.

Beim plot ist die
erste Zeile die Linie aller Werte, einfach als Schwarze Linie,
zweite Zeile, die die Werte bis 600 als füll Fläche darstellt,
dritte Zeile, die die Werte bis 1200 als füll Fläche darstellt,
vierte Zeile, die dann alle Werte als füll Fläche darstellt.

Die unterschiedleichen Farben ergeben sich dann durch Überlagerung aller Füllflächen.



et 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 '<L1>'
#set ytics "good" 600, "ok" 1200, "bad" 1800
set y2tics "good" 600, "ok" 1200, "bad" 1800
set grid y2tics
set ylabel ""
set y2label "Air quality (ppm)"
set yrange  [0:2400]
set y2range [0:2400]


#myDbLog co2:co2::
#myDbLog co2:co2:::$val=($val>600?600:$val)
#myDbLog co2:co2:::$val=($val>1200?1200:$val)
#myDbLog co2:co2::

plot "<IN>" using 1:2 axes x1y2 title 'CO2 (ppm)' ls l5 lw 0.5 with lines,\
     "<IN>" using 1:2 axes x1y2 title ' ' ls l1fill lw 0.5 with lines,\
     "<IN>" using 1:2 axes x1y2 title ' ' ls l4fill lw 0.5 with lines,\
     "<IN>" using 1:2 axes x1y2 title ' ' ls l0fill lw 0.5 with lines
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence

mrb

#2
sorry auch da sind für mich viele ??-Zeichen

Edit:
oder meinst du das
$val>600?600:$val
($val>1200?1200:$val)
Aber ich bin auch einer der verstehen will. Wie ist hier genau die Syntax?

Jamo

#3
Habs oben ergänzt, und einen plot angehaengt. Ich hoffe es ist verständlich erklaert.
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence

mrb

Zitat von: Jamo am 06 November 2022, 23:10:08
Habs oben ergänzt, und einen plot angehaengt. Ich hoffe es ist verständlich erklaert.

Sorry jamo ist es irgendwie immer noch nicht  :'(
Das ist die erste zeile für dich oder?
plot "<IN>" using 1:2 axes x1y2 title 'CO2 (ppm)' ls l5 lw 0.5 with lines,\

woher weis er denn das er die zweite zeile ("<IN>" using 1:2 axes x1y2 title ' ' ls l1fill lw 0.5 with lines,\) nehmen soll?
Anhand dessen? 'set y2tics "good" 600, "ok" 1200, "bad" 1800'
oder dem '#myDbLog co2:co2::
#myDbLog co2:co2:::$val=($val>600?600:$val)
#myDbLog co2:co2:::$val=($val>1200?1200:$val)
#myDbLog co2:co2::'

aber das ist doch auskommentiert, oder?

mrb

okay bastel-wahn und bisserl grips einsetzen hat vermutlich gewonnen.
myDbLog muss ersetzt werden durch (bei mir) FL_InnenWetter.
Jetzt ist es wie man auf dem screenshot zu sehen ist schonmal "grün" und hoffentlich dann falls es dazu kommt "gelb" bzw "rot"

mrb

aber mal ne frage was macht diese zeile ? "#FL_InnenWetter 4:WE_NetatmoBasisstation.co2\x3a::"

in meinem Gplot:
et 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 'Netatmo CO2'
set ytics "good" 600, "ok" 1200, "bad" 1800
set y2tics "good" 600, "ok" 1200, "bad" 1800
set grid y2tics
set ylabel ""
set y2label "Air quality (ppm)"
set yrange  [0:2400]
set y2range [0:2400]

#FL_InnenWetter 4:WE_NetatmoBasisstation.co2\x3a::
#FL_InnenWetter co2:co2::
#FL_InnenWetter co2:co2:::$val=($val>600?600:$val)
#FL_InnenWetter co2:co2:::$val=($val>1200?1200:$val)
#FL_InnenWetter co2:co2::

plot "<IN>" using 1:2 axes x1y2 title 'CO2 (ppm)' ls l5 lw 0.5 with lines,\
     "<IN>" using 1:2 axes x1y2 title ' ' ls l1fill lw 0.5 with lines,\
     "<IN>" using 1:2 axes x1y2 title ' ' ls l4fill lw 0.5 with lines,\
     "<IN>" using 1:2 axes x1y2 title ' ' ls l0fill lw 0.5 with lines

mrb

also hab jetzt noch ""<IN>" using 1:2 axes x1y2 title 'CO2 (ppm)' ls l5 lw 0.5 with lines,\" weg gelassen und damit halt meine Referenzlinie nicht zeichnen lassen. sieht etwas runder aus finde ich.

Jamo

Das # vor 'FL_InnenWetter' heisst nicht dass das auskommentiert ist (frag mich warum). Damit wird gekennzeichnet wo die Daten herkommen. Dann, die Anzahl der Zeilen
#FL_InnenWetter 4:WE_NetatmoBasisstation.co2\x3a::
#FL_InnenWetter co2:co2::
#FL_InnenWetter co2:co2:::$val=($val>600?600:$val)
#FL_InnenWetter co2:co2:::$val=($val>1200?1200:$val)
#FL_InnenWetter co2:co2::

sollte der Anzahl der Zeilen im plot entsprechen. Da ist jetzt eine zuviel . . .
Die Reihenfolge ist dann so wie im plot von oben nach unten.

Um das ganze zu testen, kannst Du einfach mal 600 -> 100 und 1200 -> 200 ersetzen, bei good / ok / bad entsprechend
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence

mrb

nope das passt wohl nicht hab jetzt die 4te Zeile wieder mit rein, aber auch wenn ich die 4te Zeile weg lasse und es entsprechend anpasse von "#FL_InnenWetter 4:WE_NetatmoBasisstation.co2\x3a::" zu "#FL_InnenWetter 3:WE_NetatmoBasisstation.co2\x3a::" passt es nicht und alles wird gelb!?! Die Zahl bezieht sich doch auf den punkt "plot "<IN>" using 1:2 axes x1y2 title 'CO2 (ppm)' ls l5 lw 0.5 with lines,\......." richtig?


Aktueller Stand:

et 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 'Netatmo CO2'
set ytics "good" 100, "ok" 200, "bad" 300
#set y2tics "good" 600, "ok" 1200, "bad" 1800
set grid y2tics
set ylabel ""
set y2label "Air quality (ppm)"
set yrange  [0:2400]
set y2range [0:2400]

#FL_InnenWetter 4:WE_NetatmoBasisstation.co2\x3a::
#FL_InnenWetter co2:co2::
#FL_InnenWetter co2:co2:::$val=($val>100?100:$val)
#FL_InnenWetter co2:co2:::$val=($val>200?200:$val)

plot "<IN>" using 1:2 axes x1y2 title 'CO2 (ppm)' ls l5 lw 0.5 with lines,\
     "Good" using 1:2 axes x1y2 title ' ' ls l1fill lw 0.5 with lines,\
     "OK" using 1:2 axes x1y2 title ' ' ls l4fill lw 0.5 with lines,\
     "Bad" using 1:2 axes x1y2 title ' ' ls l0fill lw 0.5 with lines

betateilchen

Du solltest aufhören, die gplot Datei manuell zu bearbeiten, solange Du null Plan hast, was Du da tust.

In Deiner Datei ist syntaktisch so vieles falsch, dass man nicht weiss, wo man anfangen soll, Dir zu helfen.

Fang vielleicht mal damit an, die commandref zu SVG zu lesen und zu verstehen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

mrb

Zitat von: betateilchen am 07 November 2022, 13:39:09
Du solltest aufhören, die gplot Datei manuell zu bearbeiten, solange Du null Plan hast, was Du da tust.

In Deiner Datei ist syntaktisch so vieles falsch, dass man nicht weiss, wo man anfangen soll, Dir zu helfen.

Fang vielleicht mal damit an, die commandref zu SVG zu lesen und zu verstehen.

ich weiß betateilchen. habe es im vergleich zu nem anderen gplot gesehen und entsprechend korrigiert
Meine gplot sieht gerade so aus und scheint so zu funktionieren. zumindest wird mir auch unterschiedliche Farben korrekt angezeigt
# Created by FHEM/98_SVG.pm, 2022-11-07 13:42:24
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 'Netatmo CO2'
set ytics "good" 300, "ok" 1000, "bad" 2000
set y2tics
set grid y2tics
set ylabel "CO2 (ppm)"
set y2label "CO2 (ppm)"
set yrange [0:2500]
set y2range [0:2500]

#FL_InnenWetter 4:WE_NetatmoBasisstation.co2\x3a::$fld[3]>600?600:$fld[3]
#FL_InnenWetter 4:WE_NetatmoBasisstation.co2\x3a::$fld[3]>1500?1500:$fld[3]
#FL_InnenWetter 4:WE_NetatmoBasisstation.co2\x3a::$fld[3]>1500:$fld[3]

plot "<IN>" using 1:2 axes x1y2 title ' ' ls l1fill lw 0.5 with lines,\
     "<IN>" using 1:2 axes x1y2 title ' ' ls l8fill lw 0.5 with lines,\
     "<IN>" using 1:2 axes x1y2 title ' ' ls l0fill lw 0.5 with lines