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

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