SVG: Unterstützung für Templates, einstellbares gplot-Dir

Begonnen von Dr. Boris Neubert, 18 März 2017, 20:34:24

Vorheriges Thema - Nächstes Thema

Dr. Boris Neubert

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!

KernSani

Hi Boris,
bei SVGs gibt es das Attribut plotfunction. Damit kann man eine gplot Datei für beliebig viele plots verwenden...
Grüße,
Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Dr. Boris Neubert

Zitat von: KernSani am 18 März 2017, 21:24:26
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!

KernSani

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...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

rudolfkoenig

ZitatDazu 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.

Dr. Boris Neubert

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!

rudolfkoenig

ZitatNoch eine Auffälligkeit: Zeile 773 sollte
Danke, habs eingecheckt.

JoeALLb

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 (8.1 Watt), KNX,
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

rudolfkoenig

Ich bin aber der Ansicht, dass die Ersetzung dem Benutzer hilft. Rueckfragen hatte ich bisher auch keine :)

Virsacer

Also ich weiß nicht, ob ich mich grade zu blöd anstelle, aber bei mir klappt das nicht...

Aus
attr SVG_Thermometer title "$data{min1} °C ≤ $data{currval1} °C ≤ $data{max1} °C"

hab ich erstmal nur
attr SVG_Thermometer plotReplace <TL>=Test
gemacht, aber das geht schon nicht!?

rudolfkoenig


Virsacer

Ok, mit attr SVG_Thermometer plotReplace TL={"$data{min1} °C ≤ $data{currval1} °C ≤ $data{max1} °C"} funktionierts jetzt. Danke :)

Allerdings vertauscht er jetzt, wenn mehrere Plots auf einer Seite angezeigt werden, manchmal die Daten :o

rudolfkoenig

@Virsacer: Hast recht, die plotReplace Ersetzung wird ausgefuehrt, bevor die Daten geholt sind, damit ist $data{min1},etc aus dem vorherigen Lauf.

Eigentlich muesste ich statt plotReplace zwei Attribute einfuehren: plotReplaceBeforeDataGet und plotReplaceAfterDataGet.
Hat irgendwer eine bessere Idee?

Virsacer

Ah, jetzt hab ichs glaube ich vollständig verstanden :-)

Eigentlich würde es doch schon reichen, wenn man schaut, ob der String "$data{" (oder ne Regex mit min\d|max\d usw.) in einer Ersetzungsregel vorkommt und die entsprechenden Regeln dann erst nach dem holen der Daten ausführt, oder?

Dr. Boris Neubert

Hallo,

<TL> wird ja erst in substcfg() ersetzt, während plotReplace die .gplot-Datei als Vorlage interpretiert und die Ersetzungen vorab macht.

Aus meiner Sicht ist es logisch, plotReplace weiter genau so funktionieren zu lassen, also aus einer Vorlage durch stumpfe Substitution den Text der .gplot-Datei zu erzeugen, die dann verwendet wird. plotReplace darf daher in

attr SVG_Thermometer plotReplace TL={"$data{min1} °C ≤ $data{currval1} °C ≤ $data{max1} °C"}

den Perl-Code nicht auswerten. Würde es nicht reichen, wenn der Anwender den Perl-Code maskiert, so dass der Text nach dem Gleichheitszeichen wörtlich übernommen wird, und der Perl-Code erst hinterher ausgewertet wird?

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

rudolfkoenig

Leider nein, ich wuesste nicht, warum ich das beim zweiten mal auswerten soll.

Dr. Boris Neubert

Hallo,

ich versuche mich begreiflich zu machen. Ich verstehe folgendes. Im

(1) alten Code

schreibt der Benutzer mit

attr mySVG title $data{min1}

$data{min1} wörtlich ins Attribut title. In SVG_substcfg() wird dann der Titel auf

AnalyzeCommand(undef, "{ $data{min1} }")

gesetzt. Die geschweiften Klammern, die dafür sorgen, dass $data{min1} als Perl-Code ausgewertet wird, werden erst nachträglich hinzugefügt. Die Auswertung findet statt, wenn %data mit dem zum aktuellen Plot gehörigen Daten befüllt ist.


Dahingegen schreibt der Benutzer im

(2) neuen Code aus diesem Thema

attr mySVG plotReplace TL="$data{min1}"

und das wird ausgewertet, wenn die .gplot-Datei für die die Verwendung fertig gemacht wird:

$pr->{$k} = eval $cmdFromAnalyze;

Das muss so sein für Leute wie mich, die den Namen des Logfile etc. dynamisch zuführen wollen. Allerdings ist zu diesem Zeitpunkt %data noch nicht belegt.

Du hast daher vorgeschlagen, dass es zwei Sorten von plotReplace gibt: eines, dass vor dem Holen und eines, dass nach dem Holen der Daten ausgeführt wird. Mein

Vorschlag 1

geht darauf hinaus, dass für die Optionen im .gplot-File, für die es sinnvoll ist (title, [xy][23]?label, ...), noch ein Eval drüber geschickt wird, bevor sie verwendet werden. In der .gplot-Datei (Vorlage) steht

set title <TL>

Der Benutzer hat

attr mySVG plotReplace TL="\{ $data{min1} \}"

Daraus wird in der verwendeten .gplot-Datei

set title { $data{min1} }

und bringt das gewünschte Ergebnis. 


Oder man lässt in meinem

Vorschlag 2

die Logik wie jetzt in (1) und erzwingt also die Auswertung der Argumente in der .gplot-Datei, für die es sinnvoll ist (title, [xy][23]?label, ...). Diese Variante wäre dann so:

Der Benutzer hat

attr mySVG plotReplace TL="$data{min1}"

Daraus wird in der verwendeten .gplot-Datei

set title $data{min1}

und das Argument $data{min1} wird dann noch mit

AnalyzeCommand(undef, "{ $data{min1} }")

ausgewertet (oder mit eval).


Vorschlag 2 ist vermutlich am leichtesten verständlich, wenn man dokumentiert, dass die Argumente von title & Co. in der .gplot-Datei als Perl-Kode interpretiert werden. Vorschlag 1 hat den Vorteil, dass nur das als Perl-Kode ausgewertet wird, was nach Parametersubstitution noch in geschweiften Klammern steht, und man sich nicht merken muss, welche Optionen in der .gplot-Datei jetzt die Sonderbehandlung haben.

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

rudolfkoenig

Der Haken an Vorschlag 1 ist, dass selbst fuer Erfahrene erst nach Studium von irgendwo versteckten Doku verstaendlich wird. Und der Haken an beiden Vorschlaegen ist, dass es nicht kompatibel zu den bisherigen Syntax sind. Eigentlich ist der Fall von Virsacer der haeufigere Fall, sollte also einfacher und ohne Doku zu verwenden sein.

Ich habe einen neuen Versuch gewagt: Falls das erste Zeichen des plotReplace Schluessels _ ist, dann erfolgt die Ersetzung vor der Input-Abfrage (so wie Boris es braucht), sonst danach (so wie Virsacer es braucht). D.h. Boris muss seine Templates und Attributwerte nach dem update anpassen, und die Schluessel mit einem _ "prefixen".

Virsacer

Die Idee ist gut, allerdings wird die Ersetzung mit dem (nicht mehr vorhanden) title-Attribut noch davor ausgeführt, sodass bei der Verwendung des Keys "<TL>" der Text "HISTORY" über dem Diagramm steht - mit anderen Keys funktionierts :)

PS: Ich werde dann demnächst auch mal die andere Variante ausprobieren, um ein paar gplot-Files zu sparen ;)

Dr. Boris Neubert

Zitat von: rudolfkoenig am 27 März 2017, 22:04:17

Ich habe einen neuen Versuch gewagt: Falls das erste Zeichen des plotReplace Schluessels _ ist, dann erfolgt die Ersetzung vor der Input-Abfrage (so wie Boris es braucht), sonst danach (so wie Virsacer es braucht). D.h. Boris muss seine Templates und Attributwerte nach dem update anpassen, und die Schluessel mit einem _ "prefixen".

Dann wäre es meines Erachtens leichter, mit zwei Typen in der .gplot-Datei zu arbeiten:

%...% wird vor, <...> wird nach Input-Abfrage ersetzt. Das ist dann wieder 100% abwärtskompatibel. Konvention mit Unterstrich im Parameternamen ist für mich unlogisch.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

JoeALLb

Zitat von: Dr. Boris Neubert am 28 März 2017, 00:00:14
%...% wird vor, <...> wird nach Input-Abfrage ersetzt. Das ist dann wieder 100% abwärtskompatibel. Konvention mit Unterstrich im Parameternamen ist für mich unlogisch.
Dann könnte man auch zusätzlich noch #...# für Werte, die nicht im Ploteditor sondern nut bei der Anzeige des Plots ersetzt werden sollen, ergänzen,
um die Wiederverwendbarkeit eines Plot-Templates zu erleichtern.
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
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

rudolfkoenig

Zitat%...% wird vor, <...> wird nach Input-Abfrage ersetzt
Das habe ich jetzt implementiert.

Zitatzusätzlich noch #...# für Werte, die nicht im Ploteditor sondern nut bei der Anzeige des Plots ersetzt werden sollen
<...> wird auch jetzt nicht ersetzt, nur %...%. Das sollte eigentlich auch nicht ersetzt werden, wuerde aber einen groesseren Umbau bedeuten. Die Notwendigkeit fuer #...# sehe ich nicht.

betateilchen

ich habe diesen Thread eben erst entdeckt, die Funktionen noch nicht getestet und trotzdem schon eine Frage.

Was wird denn jetzt eigentlich von FHEM in eine .gplot Datei geschrieben, die über einen Klick auf "Create SVG from..." erzeugt wird?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

Wenn man in einem FileLog clickt, dann wird  ein SVG mit www/gplot/template.gplot angelegt, und "set $name copyGplotFile" ausgefuehrt. DbLog kenne ich nicht :)

Verstehe aber den Zusammenhang nicht.

betateilchen

Die Frage bezog sich darauf, ob die verwendeten template.gplot Dateien eventuell angepasst werden sollten, weniger auf ihren Speicherort.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig


JoeALLb

Zitat von: betateilchen am 28 März 2017, 17:40:16
Was wird denn jetzt eigentlich von FHEM in eine .gplot Datei geschrieben, die über einen Klick auf "Create SVG from..." erzeugt wird?
Bei Klick auf "Write .gplot file" (oder einfach ENTER) drückt wird in der gplot-Datei die Variable <XX> durch den Wert aus plotReplace XX=Test ersetzt.
Die gplot-Datei ist dahe rnicht mehr für andere Vorlagen verwendbar.

Um dies zu vermeiden habe ich die Template-gplot-Datei mit einem Schreibschutz versehen. (Wie mache ich das in configDB?).
Man muss also zuerst
set $name copyGplotFile
ausführen, um das Template zu kopieren und es erst danach mit den plotReplace - Werten ersetzen.
Den Sinn, warum die Variablen in der gplot-Datei mit den Ersetzungs-Werten überschrieben werden habe ich noch nicht ganz verstanden...

FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
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

rudolfkoenig

ZitatBei Klick auf "Write .gplot file" (oder einfach ENTER) drückt wird in der gplot-Datei die Variable <XX> durch den Wert aus plotReplace XX=Test ersetzt.
Das ist weder beabsichtigt, noch konnte ich es gerade reproduzieren.
Kannst du mir bitte helfen, es nachzustellen?

JoeALLb

Zitat von: rudolfkoenig am 29 März 2017, 09:05:21
Kannst du mir bitte helfen, es nachzustellen?
Aktuell nach neuerlichem Update bekomme ich gar keine Plots mit Variablen mehr angezeigt. Sie bleiben leer.
Bin auf Dienstreise mit schlechtem Empfang, am Handy sehe ich das nicht, kann also noch dauern...
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
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

klausw

Gibt es eine Möglichkeit den Namen des SVG Devices oder auch den Namen des Filelog Devices aus der Definition im plotReplace zu nutzen?
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

rudolfkoenig

Wenn der Wert in {} eingeschlossen (und deswegen evaluiert wird), gibt es eine Chance, dass $wl auf dem Namen der SVG-Definition und $ld auf dem LOGDEVICE gesetzt ist. Habe aber nicht die Musse es jetzt zu testen, bitte um Nachsicht.

klausw

Zitat von: rudolfkoenig am 12 April 2017, 18:44:23
Wenn der Wert in {} eingeschlossen (und deswegen evaluiert wird), gibt es eine Chance, dass $wl auf dem Namen der SVG-Definition und $ld auf dem LOGDEVICE gesetzt ist. Habe aber nicht die Musse es jetzt zu testen, bitte um Nachsicht.

Der Tipp reicht mir volkommen, Danke
$wl funktioniert
$ld funktioniert nicht (daran das ich LogProxy nutze sollte das nicht liegen, oder?)
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

Virsacer

Ich weiß nicht genau, ob das jetzt hierhin gehört, aber mir ist aufgefallen, dass ich im Log immer eine Fehlermeldung habe, wenn ich das erste mal nach einem FHEM-Neustart die Seite mit den Plots aufrufe:

2017.07.23 20:40:03 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/93_DbLog.pm line 731.
2017.07.23 20:40:03 3: eval: {$data{min1}." °C ≤ ".$data{currval1}." °C ≤ ".$data{max1}." °C"}

rudolfkoenig

Nein, es gehoert nach Automatisierung in einem neuen Thema.
Die Warnung kommt von DbLog, und laut MAINTAINER.txt wird das in Automatisierung behandelt.

Die Warnung gibt es vermutlich haeufiger, aber fhem.pl gibt bei Voreinstellung eine bestimmte Warnung nur einmal aus.

HeikoE

#34
Zitat von: JoeALLb am 30 März 2017, 08:45:02
Aktuell nach neuerlichem Update bekomme ich gar keine Plots mit Variablen mehr angezeigt. Sie bleiben leer.
Bin auf Dienstreise mit schlechtem Empfang, am Handy sehe ich das nicht, kann also noch dauern...
Ich experimentiere mit Variablen in der .gplot-Datei. Mit Einträgen für den Titel geht's, aber bei Verweisen auf Einträge im dbLog klappt es nicht. In der gplot Datei steht

#Datenbank <Etage>.<Zimmer>.Heizung:actuator

Im Device steht

attr SVG_OG.SZ.Heizung plotReplace L1={"Heizung - Temperatur $data{currval1}°C ($data{min1}-$data{max1})"} Etage=OG Zimmer=SZ

Der Plot bleibt leer.
Irgendwas wird ersetzt, denn L1 im Titel funktioniert. Auch wenn ich <Etage> noch dazuschreibe, wird OG angezeigt.
%...% <...> habe ich auch ausprobiert - ohne Erfolg.
Hab ich noch was vergessen oder mache ich was falsch?
Schöne Grüße
Heiko

rudolfkoenig

#Datenbank <Etage>.<Zimmer>.Heizung:actuator
Aus der CommandRef:
ZitatIn the .gplot file <key> is replaced with the corresponding value, the evaluation of {} takes place after the input file is processed, so $data{min1} etc can be used.
%key% will be repaced before the input file is processed, this expression can be used to replace parameters for the input processing.

->
#Datenbank %Etage%.%Zimmer%.Heizung:actuator

HeikoE

Zitat von: rudolfkoenig am 05 November 2017, 16:40:29
#Datenbank <Etage>.<Zimmer>.Heizung:actuator
Aus der CommandRef:
->
#Datenbank %Etage%.%Zimmer%.Heizung:actuator
War ein Verständnisfehler meinerseits. Ich hatte %...% beim Attribut plotreplace eingetragen, nicht in der gplot-Datei.
Jetzt geht's.
Ein Beispiel hätte mich sicherlich schneller zum Ziel gebracht - ich habe jedoch keines gefunden.
Danke für die Hilfe.
Heiko

MCh76

#37
Zitat von: rudolfkoenig am 05 November 2017, 16:40:29
#Datenbank <Etage>.<Zimmer>.Heizung:actuator
Aus der CommandRef:
->
#Datenbank %Etage%.%Zimmer%.Heizung:actuator

nachdem ich nun auch einige zeit mit einem plot gekämpft habe die Frage:
nach meinem Verständnis funktioniert doch dann <TL>/<L1> in Verbindung mit plotReplace dann nur im PlotTitle, nicht aber aber "innerhalb" des Plots oder?
Jedenfalls führte folgender Inhalt in der gplot Datei immer zu XML-Errors:

#DBLogging out_wetter:temp_c
plot "<IN>" using 1:2 axes x1y2 title '<L1>' ls l0 lw 1 with lines


dagegen funktioniert die Ersetzung mit folgendem Code:

plot "<IN>" using 1:2 axes x1y2 title '%L1%' ls l1 lw 3 with lines


im plotReplace habe ich stehen:

TL={"Temperatur $data{currval1}°C $data{min1} $data{max1}"} L1={"$data{currval1}"}


danke für eine kurze Aufklärung.
VG,
Chris

rudolfkoenig

Ich fuerchte dein Problem ist z.Zt. nicht einfach loesbar: die erwaehnte Stelle wird nur _vor_ dem Einlesen der Plot-Daten verarbeitet, d.h. hier werden nur %key% Werte ausgewertet, <key> bleibt erhalten. Leider stehen die min/max/etc Daten aus dem aktuellen Plot damit auch nicht zur Verfuegung, d.h. %L1% zeigt Werte aus irgendeinem der vorherigen Plots.