FHEM Forum

FHEM => Frontends => SVG / Plots / logProxy => Thema gestartet von: stgeran am 12 Oktober 2013, 23:10:56

Titel: Drei Kurven in einem Plot
Beitrag von: stgeran am 12 Oktober 2013, 23:10:56
Kann ich Feuchtigkeit, Temperatur UND Luftdruck in einen Plot bringen? Es werden doch immer nur zwei Größen angezeigt. Und der Plot müsste auf zwei logfiles zugreifen.
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: justme1968 am 12 Oktober 2013, 23:27:49
es gehen beliebig viele kurven mit bis zu 6 y-achsen von denen aber nur zwei angezeigt werden. ich hatte für das alte plot modul (vor SVG) einen patch gebaut der eine dritte angezeigt hat.

die daten müssen aus dem gleichen log file komme. 

zum mischen unterschiedlicher sensoren bietet sich db log an. einfach alles in eine db logge. und dann beliebig kombinieren.

gruss
  andre
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: Bernhard am 13 Oktober 2013, 17:21:47
ne, stimmt nicht ganz - siehe Anhang.

Bernhard

Titel: Antw:Drei Kurven in einem Plot
Beitrag von: betateilchen am 13 Oktober 2013, 17:47:04
Doch das stimmt. Was soll man Deinem Screenshot entnehmen?

Natürlich kann ich beliebig viele Devices in einem Logfile loggen, das ich dann zum plotten verwende, aber der SVG Plot liest nur aus EINEM Logfile, wie von andre schon geschrieben:


DEF FileLog_out_Balkon:wl_out_Balkon:CURRENT
    ^^^^^^^^^^^^^^^^^^

Titel: Antw:Drei Kurven in einem Plot
Beitrag von: Bernhard am 14 Oktober 2013, 09:07:15
:-)
die Antwort gibst du doch selber. Die Kernfrage war doch, wie kann ich weitere Kurven im Plot anzeigenß
Dafür sorgen, dass im Logfile die entsprechenden Daten vorhanden sind - wie auch immer
Bernhard
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: stgeran am 14 Oktober 2013, 10:05:28
Das war aber auch ein Teil der Frage, wie bekomme ich von zwei Devices die Daten in einen Log?
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: betateilchen am 14 Oktober 2013, 11:28:46
Indem du die Definition des Logfiles so änderst, dass auch das zweite Device mit geloggt wird. Stichwort: regexp

define blaLog FileLog ./log/blaLog-%Y.log (device1|device2|device3)

loggt die aufgeführten drei Geräte in ein gemeinsames Logfile.
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: stgeran am 14 Oktober 2013, 11:37:24
Ahh, viel Danke vielmals. Ich hatte die Devices mit "," getrennt.
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: betateilchen am 14 Oktober 2013, 11:51:12
das ist regex (http://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck) und nicht irgendeine fhem-Aufzählung ;)
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: stgeran am 14 Oktober 2013, 17:42:03
Ich bekomme es immer noch nicht geregelt. So sieht es jetzt aus:

define FileLog_Test FileLog ./log/Meine_Logs/Test-%m.log (Temp_aussen|BMP180)
attr FileLog_Test logtype TempDruck:Temp/Hum,text
attr FileLog_Test room CUL_TX
define weblink_TEST SVG FileLog_TEST:TempDruck:CURRENT
attr weblink_TEST label "Temp_Druck Min $data{min1}, Max $data{max1}, Last $data{currval1}"
attr weblink_TEST room Plots,CUL_TX

Ausschnitt aus der logfile:

2013-10-14_17:17:02 Temp_aussen T: 13.4 H: 73.0
2013-10-14_17:17:02 Temp_aussen temperature: 13.2
2013-10-14_17:17:09 BMP180 T: 43.0 P: 1006.0 P-NN: 1016.4
2013-10-14_17:17:09 BMP180 temperature: 43.0
2013-10-14_17:17:09 BMP180 pressure: 1006.0
2013-10-14_17:17:09 BMP180 pressure-nn: 1016.4
2013-10-14_17:20:12 BMP180 T: 43.0 P: 1006.0 P-NN: 1016.4
2013-10-14_17:20:12 BMP180 temperature: 43.0
2013-10-14_17:20:12 BMP180 pressure: 1006.0
2013-10-14_17:20:12 BMP180 pressure-nn: 1016.4

Die TempDruck.gplot ist eine kopie der temp4hum4.gplot. Es erscheint aber keine Auswahlzeile in dem Editor "Example lines for input:"
Was fehlt da?
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: stgeran am 15 Oktober 2013, 22:07:26
Nächster Versuch, ich krieg es nicht hin. Teil der cfg:

define FileLog_Test FileLog ./log/Meine_Logs/Test-%m.log (Temp_aussen|BMP180)
attr FileLog_Test logtype SVG_FileLog_Test_1:Druck,text
attr FileLog_Test room CUL_TX
define weblink_TEST SVG FileLog_TEST:SVG_FileLog_Test_1:CURRENT
attr weblink_TEST label "Temp_Druck Min $data{min1}, Max $data{max1}, Last $data{currval1}"
attr weblink_TEST plotsize 800,400
attr weblink_TEST room Plots,CUL_TX

Wenn ich den room CUL_TX aufrufe sehe ich meine plots von temp_aussen und temp_innen wie gewünscht. Nur der plot Test erscheint mit willkürlichem Inhalt
(meist temp_aussen) mit label CURRENT anstelle von  "Temp_Druck Min $data{min1}, Max $data{max1}, Last $data{currval1}"

Ich weis nicht warum
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: justme1968 am 15 Oktober 2013, 22:14:44
du hat in der SVG definition das test in FileLog_TEST gross geschrieben. dein log file heisst aber FileLog_Test mit mixed case test.

SVG macht seltsame sachen wenn das logfile oder die db nicht da sind.

gruss
  andre
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: stgeran am 15 Oktober 2013, 22:44:22
Oh, Mann, das kommt davon, wenn man vor lauter Bäumen den Wald nicht sieht. Danke!!!!!!!!!!!!!!!!!!!!!!!!
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: Puschel74 am 18 Oktober 2013, 20:10:03
Hallo,

ich hab mal wieder eine Fräge.

Ich logge ja alles in mein DBLog.
Kurven meiner Sensoren kann ich auch wunderbar darstellen aber bei meinen Schaltern komme ich nicht weiter.
Evtl. kann mir ja mal jemand (andre?  ;) ) auf die Srpünge helfen bitte.

Definiert ist
- ein FS20-Schalter der per FHEM einwandfrei bedient werden kann und der state auch brav on und off ist
- mein DBLog (logischerweise)
- mein Weblink der aber immer nur off zeigt



############################
# Display the on and off values off an FS20 device
# Corresponding FileLog definition:
# define fs20log FileLog /var/log/fhem/fs20dev-%Y-%U.log fs20dev

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 '<L1>'

set ytics ("Off" 0, "On" 1)
set y2tics ("Off" 0, "On" 1)
set yrange [-0.1:1.1]
set y2range [-0.1:1.1]
set ylabel "Status"
set y2label "Status"

#DbLog <SPEC1>:state::

plot "< awk '{print $1, $3~/on/? 1 : 0; }' <IN>"\
        using 1:2 notitle with steps
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: justme1968 am 18 Oktober 2013, 20:31:35
versuch es mal mit data statt state. da wird genau so wie bei einigen anderen devices state umgemapped.

gruss
  andre
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: Puschel74 am 18 Oktober 2013, 20:37:25
Hallo,

danke für die Antowrt andre aber ein

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 '<L1>'

set ytics ("Off" 0, "On" 1)
set y2tics ("Off" 0, "On" 1)
set yrange [-0.1:1.1]
set y2range [-0.1:1.1]
set ylabel "Status"
set y2label "Status"

#DbLog <SPEC1>:data::

plot "< awk '{print $1, $3~/on/? 1 : 0; }' <IN>"\
        using 1:2 notitle with steps


in der fs20db.gplot brachte nur einen leeren Plot hervor.
Also nichtmal die Linie bei off.

Grüße
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: justme1968 am 18 Oktober 2013, 20:46:13
du musst die on/off aus dem log noch auf 0/1 mappen etwa so:<SPEC1>:data:::$val=~s/(on|off).*/$1eq"on"?1:0/eg

gruss
  andre
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: Puschel74 am 18 Oktober 2013, 21:06:51
Hallo,

Zitat<SPEC1>:data:::$val=~s/(on|off).*/$1eq"on"?1:0/eg

Autsch - auf sowas muss man erstmal kommen.
Aber klappt leider auch nicht - Plot bleibt leer.

Ich dachte in meiner "jugendlichen" Naivität das

plot "< awk '{print $1, $3~/on/? 1 : 0; }' <IN>"\

nach on sucht - als Ergebnis eine 1 an plot liefert sonst eine 0 und das

set ytics ("Off" 0, "On" 1)
set y2tics ("Off" 0, "On" 1)


aus einer 0 im Plot ein OFF macht und eine 1 ein ON.

Grüße
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: justme1968 am 18 Oktober 2013, 21:17:30
Zitat von: Puschel74 am 18 Oktober 2013, 21:06:51
Hallo,

Autsch - auf sowas muss man erstmal kommen.
oder in der commandref nachschauen :)

ZitatAber klappt leider auch nicht - Plot bleibt leer.

Ich dachte in meiner "jugendlichen" Naivität das

plot "< awk '{print $1, $3~/on/? 1 : 0; }' <IN>"\

nach on sucht - als Ergebnis eine 1 an plot liefert sonst eine 0 und das

der teil ist noch aus gplot zeiten und wird nur zum teil ausgewertet. das mapping z.b. genau nicht.

Zitatset ytics ("Off" 0, "On" 1)
set y2tics ("Off" 0, "On" 1)


aus einer 0 im Plot ein OFF macht und eine 1 ein ON.
das ist nur für die achsen beschriftung da. sonst für nichts.

also schritt für schritt:
- zuerst nachschauen was wirklich in der db steht: sqlite <dein db file> und dann select * from HISTORY where DEVICE="<dein fs20 device>"; oder entsprechend für mysql.

da muss als READING data auftauchen uns als VALUE etwas mit on oder off.

gruss
  andre
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: Puschel74 am 19 Oktober 2013, 12:37:38
Hallo,

Zitatselect * from HISTORY where DEVICE="EG_Eingang_Licht_innen";

liefert als state Aus und Ein-for-timer 30  8)

Stimmt ja auch - ich schalte das Licht meist mit Timer ein  :o

Dann werd ich deine Tipps nochmal versuchen. Diesmal mit Ein-for-timer 30.

Grüße
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: justme1968 am 19 Oktober 2013, 12:56:26
dann musst du beim mappen im plotfile natürlich ein und aus statt on und off verwenden.

das -for-timer wird schon abgefangen.

gruss
  andre
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: Puschel74 am 19 Oktober 2013, 14:20:32
Hallo,

Zitatdas -for-timer wird schon abgefangen.

was die Sache schon ungemein erleichtert.

Danke nochmal für die Hilfe andre.

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 '<L1>'

set ytics ("Aus" 0, "Ein" 1)
set y2tics ("Aus" 0, "Ein" 1)
set yrange [-0.1:1.1]
set y2range [-0.1:1.1]
set ylabel "Status"
set y2label "Status"

#DbLog <SPEC1>:state:::$val=~s/(Ein|Aus).*/$1eq"Ein"?1:0/eg

plot "< awk '{print $1, $3~/Ein/? 1 : 0; }' <IN>"\
        using 1:2 notitle with steps


So klappts auch mit dem Plot.

Grüße

Edith: Mal schauen ob ichs auch für on/off und dim hinbekomme.
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: justme1968 am 19 Oktober 2013, 15:02:08
wirklich state und nicht data?

gruss
  andre
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: Puschel74 am 19 Oktober 2013, 15:43:39
Hallo,

Zitatwirklich state und nicht data?

Jep. state
Mit data bekomm ich nur einen leeren Plot geliefert und die select-Abfrage hat auch state geliefert.

Grüße
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: justme1968 am 19 Oktober 2013, 15:56:32
seltsam...

aber wenn es geht ist ja alles gut.

gruss
  andre
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: Puschel74 am 19 Oktober 2013, 16:19:17
Hallo,

so sehen zumindest die Plots aus:

(http://screenshot018.jpg)

Nur der OG_Flur_Licht lässt sich auch mit einem

#DbLog <SPEC1>:state:::$val=~s/(Ein|Aus|dim).*/$1eq"Ein"?1:0/eg

nicht überreden - klar kann aiúch nicht da ja Ein auf 1 und der Rest auf 0 gemapped wird.
Als state habe ich dort dim100% und dim81%.
Wenn ich
#DbLog <SPEC1>:state:::$val=~s/(Ein|Aus|dim).*/$1eq"dim"?1:0/eg
eintrage wird natürlich alles mit dim auf 1 gemapped und die restlichen Plots bringen wieder nur Aus.

Ist es möglich (wird sicher sein nur wie??) das ich bei FS20-Dimmer so einen "ähnlichen" Plot mache wie bei den FHT80-actuator?
Also den Prozentwert zwischen 0 und 100 und Aus = 0 und dim100% und Ein = 100.
Die fs20db.gplot aber so allgemein gehalten bleibt das ich auch Geräte plotten kann die nur Ein und Aus liefern?

Danke für die Hilfe.

Grüße

Edith: Das
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 '<L1>'

set ytics ("Aus" 0, "Ein" 100)
set y2tics ("Aus" 0, "Ein" 100)
set yrange [-0.1:100.1]
set y2range [-0.1:100.1]
set ylabel "Status"
set y2label "Status"

#DbLog <SPEC1>:state:::$val=~s/(Ein|Aus|dim).*/$1eq"Ein"?100:0/eg

plot "< awk '{print $1, $3~/Ein/? 1 : 0; }' <IN>"\
        using 1:2 notitle with steps

klappt auch nicht.
Irgendwo habe ich noch einen gewaltigen Denkfehler  :-\
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: justme1968 am 20 Oktober 2013, 13:25:28
ich würde zweistufig vorgehen:

- per eventMap dim0 auf aus und dim100 auf ein mappen. etwa so:attr <device> eventMap
/dim0%:Aus/dim100%:Ein/


- dann die $val bestimmung drei stufig machen:$val=~s/(Ein|Aus|dim).*/$1eq"Ein"?1:($1eq"dim"?0.5:0)/eg

wenn du mit der regex beim suchen spielst kannst du vermutlich sogar die dim werte genau bestimmen und nicht alles was gedimmt ist auf 0.5 setzen.

gruss
  andre

edit: idee für die dim level:$val=~s/(Ein|Aus|dim(\d*)).*/$1eq"Ein"?1:($1eq"dim"?$2/100:0)/eg
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: Puschel74 am 21 Oktober 2013, 20:03:55
Hallo,

das

$val=~s/(Ein|Aus|dim(\d*)).*/$1eq"Ein"?1:($1eq"dim"?$2/100:0)/eg

brachte das

Zitat2013.10.21 19:30:36 3: DbLog: Error in inline function: <$val=~s/(Ein|Aus|dim(\d*)).*/$1eq"Ein"?1:($1eq"dim"?$2/100:0)/eg>, Error: syntax error at (eval 338384) line 1, near "s/(Ein|Aus|dim(\d*)).*/$1eq"Ein"?1:($1eq"dim"?$2/100"

Ich habe erstmal aber auch nur ein einfaches
$val=~s/(Ein|Aus|dim).*/$1eq"Aus"?0:1/eg
am Start was mir wenigstens anstelle des Dimmwertes eine 1 bringt im Plot.

Grüße
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: justme1968 am 21 Oktober 2013, 20:25:23
der parser kommt mit den / für geteilt durch durcheinander.

wenn du noch lust hast versuch mal das hier:
$val=~s/(Ein|Aus|dim(\d*)).*/$1eq"Ein"?1:($1eq"dim"?$2*0.01:0)/eg;

gruss
  andre
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: Puschel74 am 22 Oktober 2013, 19:18:45
Hallo,

danke nochmal für deine unermüdliche Unterstützung andre  :)

Leider hat
$val=~s/(Ein|Aus|dim(\d*)).*/$1eq"Ein"?1:($1eq"dim"?$2*0.01:0)/eg;
(in meiner Verzweiflung auch mit und ohne ; am Ende versucht) nicht geklappt.

Und auch mein versuchtes
$val=~s/(Ein|Aus|dim).*/$1eq"Ein"?1:($1eq"dim"?$2*0.01:0)/eg;
sowie
$val=~s/(Ein|Aus|dim).*/$1eq"Ein"?1:$1eq"dim"?$2*0.01:0/eg;
und auch
$val=~s/(Ein|Aus|dim(\d*)).*/$1eq"Ein"?1:$1eq"dim"?$2*0.01:0/eg;
hat nicht gefruchtet.

Ein und dim wurde bei beiden ignoriert und der Plot zeigt nur eine schöne Linie bei Aus.

Grüße
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: justme1968 am 22 Oktober 2013, 19:45:11
mein fehler... die klammern waren falsch.$val=~s/(Ein|Aus|dim)(\d*).*/$1eq"Ein"?1:($1eq"dim"?$2*0.01:0)/egund ohne das semikolon.

gruss
  andre
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: Puschel74 am 22 Oktober 2013, 20:06:26
Hallo,

yeah - bingo.

Tausend Dank andre.

Wenn man genau hinsieht erkennt man das die Linien mal bei ~80% enden und mal bis ganz rauf gehen.

Grüße
Titel: Drei Kurven in einem Plot
Beitrag von: Jaydee am 29 Oktober 2013, 10:54:19
Ich klinke mich hier auch mal kurz ein, weil das Thema so schön passt.

Wie zuvor ja schon gesagt wurde kann man ja mehr als die zwei (linke und rechte) Y-Achsen nutzen. Die ist zum Beispiel nötig, wenn meine 3+ Kurven völlig verschiedene Ranges haben. Mit dem SVG-Editor komm ich ich dann nicht weiter, was nicht dramatisch ist, das kann ich ja auch mit nem Texteditor anpassen: axes x1y3
Der Haken ist nur, dass, sobald man den SVG-Editor dann irgendwann verwendet um z.B. an Kurve 1 eine Kleinigkeit zu ändern, er auch Kurve 3 versaut, weil er dort dann die Achse auf right (y2) setzt.

Gibt es eine Möglichkeit das zu verhindern? Kann ich da etwas sperren?

Grüße
Jan
Titel: Antw:Drei Kurven in einem Plot
Beitrag von: betateilchen am 29 Oktober 2013, 11:27:32
Der SVG-Editor macht noch ganz andere schräge Sachen. Damit muss man sich abfinden und bei karierten Maiglöckchen auf seine Verwendung komplett verzichten.