Autor Thema: SVG: Unterstützung für Templates, einstellbares gplot-Dir  (Gelesen 143 mal)

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 3517
Hallo,

bevor ich mir die Mühe mache, Patches zu erstellen, möchte ich zunächst hören, ob diese akzeptiert werden.

SVG

Es soll möglich sein, dieselbe Vorlage einer gplot-Datei für mehrere SVG-Geräte zu verwenden. Dazu erhält SVG ein neues Attribut template (oder einen anderen Namen). Das Attribut nimmt eine durch Leerzeichen getrennte Liste von <parameter>=<value>-Paaren auf. Taucht in der gplot-Datei dann %<parameter>% auf, wird dieser String durch <value> ersetzt. Das ist nützlich, wenn alle Plots zu Heizungen, Temperaturfühlern, Bewegungsmeldern gleich aussehen sollen, und man nicht für jeden Plot eine gplot-Datei anlegen will. Der Plot-Editor wird gesperrt, wenn das Attribut gesetzt ist.

$FW_gplotdir

Diese Variable ist fest auf $FW_dir/gplot gesetzt. Sie soll künftig per Attribut gplotDir einstellbar sein. Das ermöglicht es, Installation der Software FHEM und Konfiguration voneinander zu trennen. Selbiges wäre auch für $FW_cssdir und $FW_icondir (nicht zu verwechseln mit der existierenden Einstellung für iconPath) sinnvoll.


Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Online KernSani

  • Sr. Member
  • ****
  • Beiträge: 795
Antw:SVG: Unterstützung für Templates, einstellbares gplot-Dir
« Antwort #1 am: 18 März 2017, 21:24:26 »
Hi Boris,
bei SVGs gibt es das Attribut plotfunction. Damit kann man eine gplot Datei für beliebig viele plots verwenden...
Grüße,
Oli
Vom Arzt oder Apotheker empfohlen: https://fhem.de/commandref.html

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 3517
Antw:SVG: Unterstützung für Templates, einstellbares gplot-Dir
« Antwort #2 am: 18 März 2017, 21:58:55 »
bei SVGs gibt es das Attribut plotfunction. Damit kann man eine gplot Datei für beliebig viele plots verwenden...

Fast...

Meine aktuellen Anwendungsfälle sehen so aus:

3.dz.hzg.gplot
# Created by FHEM/98_SVG.pm, 2017-01-29 16:11:12                                                                                                     
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 nomirror                                                                                                                                   
set y2tics                                                                                                                                           
set grid y2tics                                                                                                                                       
set ylabel "Aktor / %"                                                                                                                               
set y2label "Temperatur / °C"                                                                                                                         
set yrange [0:99]                                                                                                                                     
                                                                                                                                                     
#3.dz.hzg.log 4:3.dz.hzg.measured-temp\x3a:0:                                                                                                         
#3.dz.hzg.log 4:3.dz.hzg.actuator\x3a:0:int

plot "<IN>" using 1:2 axes x1y2 title 'Temperatur' ls l0 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 title 'Actuator / %' ls l1 lw 1 with lines

waveform.gplot
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 'waveforms'
set ytics
set y2tics
set grid ytics y2tics
set ylabel "Voltage / V"
set y2label "Current / A"
set xrange [:]

#Node52_waves_proxy Func:logProxy_xyFile2Plot("%L/Node52_waves.log",4,"V_INST:")
#Node52_waves_proxy Func:logProxy_xyFile2Plot("%L/Node52_waves.log",4,"IA_INST:")
#Node52_waves_proxy Func:logProxy_xyFile2Plot("%L/Node52_waves.log",4,"IB_INST:")
#Node52_waves_trigger 4:Node52_ade.INSTready\x3a:0:

plot "<IN>" using 1:2 axes x1y2 title 'V' ls l0 lw 1 with quadraticSmooth,\
     "<IN>" using 1:2 axes x1y2 title 'IA' ls l1 lw 1 with quadraticSmooth,\
     "<IN>" using 1:2 axes x1y2 title 'IB' ls l2 lw 1 with quadraticSmooth,\
     "<IN>" using 1:2 axes x1y2 notitle ls l0 lw 1 with lines

Zu ersetzen wären die Strings 3.dz.hzg bzw. Node52. Wenn ich der Commandref glaube, muss ich aber eine #FileLog- oder #DbLog-Zeile haben. Das macht der aktuelle GPlot-Editor ja noch nicht einmal mehr.

Möglicherweise muss ich mir den Code zu plotfunction mal anschauen.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Online KernSani

  • Sr. Member
  • ****
  • Beiträge: 795
Antw:SVG: Unterstützung für Templates, einstellbares gplot-Dir
« Antwort #3 am: 18 März 2017, 22:31:22 »
Ich bin kein gplot-Spezialist, aber letztendlich macht plotfunction nichts anderes als die Variablen <SPEC1>..<SPECn> im gplot file durch die in plotfunction angrgebenen Werte zu ersetzen. Das enspricht m. E. Ziemlich genau dem, was der template Befehl macht...
Vom Arzt oder Apotheker empfohlen: https://fhem.de/commandref.html

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 15688
Antw:SVG: Unterstützung für Templates, einstellbares gplot-Dir
« Antwort #4 am: 19 März 2017, 12:09:36 »
Zitat
Dazu erhält SVG ein neues Attribut template (oder einen anderen Namen)

Grrr. Wir haben in 98_SVG.pm 3 Mechanismen, die eine Ersetzung durchfuehren (title, label und plotfunction), leider wird der Teil, was Boris benoetigt, nicht beruehrt. Ich habe jetzt ein plotReplace Attribut eingefuegt, was title, label und plotFunction abloesen soll. Verwendet parseParams von Andre, d.h. Syntax ist key1=value1 key2=value2 ...
Value kann mit " " Lerzeichen enthalten, und mit {} wird es evaluiert.

Den Bedarf fuer gplotDir sehe ich, ich meine aber, dass diese Loesung zu kurz greift. Es muesste irgendetwas sein, was alle fuer FHEM notwendigen Verzeichnisse, die von FHEM modifiziert werden, enthaelt, ich denke an sowas wie der Docker-Vortrag gestern. Da ich unsicher ueber den Umfang bin, habe ich noch nichts unternommen.
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 3517
Antw:SVG: Unterstützung für Templates, einstellbares gplot-Dir
« Antwort #5 am: 19 März 2017, 12:45:06 »
Großartig! Vielen Dank. Und gut, dass die alten Zöpfe abgeschnitten werden.

Noch eine Auffälligkeit: Zeile 773 sollte

    map { $l =~ s/<$_>/$pr->{$_}/g } keys %$pr if($plotReplace);
lauten, da wir alle Vorkommen in einer Zeile ersetzen wollen (ich habe den g-Modifier im Match ergänzt). Damit klappt es perfekt.

Zu den Verzeichnissen sollten wir ein neues Thema in FHEM-Development eröffnen.

Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 15688
Antw:SVG: Unterstützung für Templates, einstellbares gplot-Dir
« Antwort #6 am: 19 März 2017, 20:24:42 »
Zitat
Noch eine Auffälligkeit: Zeile 773 sollte
Danke, habs eingecheckt.

Offline JoeALLb

  • Sr. Member
  • ****
  • Beiträge: 938
Antw:SVG: Unterstützung für Templates, einstellbares gplot-Dir
« Antwort #7 am: 21 März 2017, 15:31:38 »
Sehr schönes Feature!!
Schade jedoch, dass beim Anzeigen der Plots-Definition die Variablen bereits ersetzt werden.
Wenn ich jetzt ENTER drücke, wird die gplot-Datei neu abgespeichert und die Variablen werden wieder durch den Wert aus plotReplace ersetzt.
Es wird zwar eine Warnung angezeigt, diese hatte bisher aber eine (etwas) andere Bedeutung.

Wäre es möglich, in der Define-Ansicht (vorallem im DbLog-Modus) die Keys auch als Keys anzuzeigen?
Ich denke dass dies auch intuitiver ist und dadurch zu weniger Rückfragen von Anwendern kommen würde!
FHEM-Server auf IntelAtom+Debian (12 Watt),
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 15688
Antw:SVG: Unterstützung für Templates, einstellbares gplot-Dir
« Antwort #8 am: 21 März 2017, 15:58:18 »
Ich bin aber der Ansicht, dass die Ersetzung dem Benutzer hilft. Rueckfragen hatte ich bisher auch keine :)

 

decade-submarginal