FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: jle am 08 August 2018, 21:50:27

Titel: [Gelöst] Plot via plotAsPng als File speichern
Beitrag von: jle am 08 August 2018, 21:50:27
Hallo alle,

wahrscheinlich eine total Einfach-Frage, aber ich komme einfach nicht darauf..

Ich möchte gerne in einer 99_myUtils - Funktion einen Plot via plotAsPng als PNG umwandeln und anschließend als png-Datei lokal ablegen.

plotAsPng Funktioniert, aber wie bekomme ich das ,,Ergebis" in eine Datei geschrieben?

Bin für jede Hilfe dankbar.

Viele Grüße
Titel: Antw:Plot via plotAsPng als File speichern
Beitrag von: jle am 08 August 2018, 21:52:25
Aktueller Lösungsansatz war ..
sub CreateRobiSvgPng(){
   my $out_file_name ="httpsrv/robi_svg.png";
   open (DATEI, ">".$out_file_name) or die $!;
    my $zeile = plotAsPng("RoombaPlot");
    print DATEI $zeile;
   close (DATEI);

   return $out_file_name;
}


Es wird auch eine Datei angelegt, aber sie ist anschließend leer..
Schreibrechte etc sind vorhanden.
Titel: Antw:Plot via plotAsPng als File speichern
Beitrag von: betateilchen am 08 August 2018, 21:59:35

sub test {
open(my $out, '>:raw', './log/test.png') or die "Unable to open: $!";
print $out plotAsPng('SVG_dbLog_2');
close($out);
}


Titel: Antw:Plot via plotAsPng als File speichern
Beitrag von: jle am 08 August 2018, 22:12:10
Super, danke funktioniert :-)
Titel: Antw:[Gelöst] Plot via plotAsPng als File speichern
Beitrag von: Peter aus Calw am 05 Oktober 2020, 23:47:00
Hallo zusammen,
bin zwar ziemlich spät auf das Thema gekommen, aber vielleicht kann ich doch auf Hilfe hoffen.
Versuche mein

SVG_FileLog_PV_Ertrag_1           Plot in eine .png Datei zu speichern um diese auf einem NAS abzulegen

und sie jederzeit auf anderen Geräten öffnen zu können. Mit einem händischen screenshot ist das ja kein Problem - aber es soll automatisch funktionieren.
Habe das auf der FHEM Kommandozeile mit

plotAsPng(SVG_FileLog_PV_Ertrag_1)

versucht -kommt der Fehler :

Unknown command plotAsPng(SVG_FileLog_PV_Ertrag_1)

Bin zwar ziemlich unbedarft in Sachen Programmierung, aber es macht mir viel Spass und deshalb hoffe ich auf einen Tipp.
Beste Grüße von Peter aus Calw 
Titel: Antw:[Gelöst] Plot via plotAsPng als File speichern
Beitrag von: h002 am 06 Oktober 2020, 14:23:27
@Peter aus Calw
Eine Lösung hat doch betateilchen gepostet. Die Sub muss "nur" an geeigneter Stelle eingebaut werden.

Ich habe es so gemacht (Sub in 99_myUtils.pm hinterlegen).


sub saveSVGToPNG(@){
my ($plotName) = @_;
open FILE, "> /opt/fhem/fhem_png_plots/$plotName.png";
binmode FILE;
print FILE plotAsPng($plotName);
close FILE;
}


Damit kannst du auf der Webconsole in FHEM mittels

{saveSVGToPNG("SVG_FileLog_PV_Ertrag_1")}

dein PNG abspeichern.
Titel: Antw:[Gelöst] Plot via plotAsPng als File speichern
Beitrag von: betateilchen am 06 Oktober 2020, 15:57:25
Zitat von: Peter aus Calw am 05 Oktober 2020, 23:47:00
Unknown command plotAsPng(SVG_FileLog_PV_Ertrag_1)

plotAsPng() ist kein Befehl, sondern eine perl Funktion und muss dementsprechend benutzt werden.
Titel: Antw:[Gelöst] Plot via plotAsPng als File speichern
Beitrag von: Peter aus Calw am 06 Oktober 2020, 18:08:00
Hallo h002, Hallo Betateilchen,
erstmal herzlichen Dank für eure Antworten. Habe rnun versucht den Vorschlag von h002 umzusetzen.
Also das "sub" so versucht anzupassen (.

sub saveSVGToPNG(@){
my ($PLSVplot) = @_;
open FILE, "> /opt/fhem/fhempng/$PLSVplot.png";
binmode FILE;
print FILE plotAsPng($PLSVplot);
close FILE;
}


nach

{saveSVGToPNG("SVG_FileLog_PV_Ertrag_1")}

als Ergebnis wird das Plot angezeigt (zwar nach links verschoben), aber ich finde die "PLSVplot.png" File unter "/opt/fhem/fhempng/" nicht ?
Wo habe ich Mist gebaut ?
LG Peter
 



Titel: Antw:[Gelöst] Plot via plotAsPng als File speichern
Beitrag von: Frank_Huber am 06 Oktober 2020, 18:11:11
Existiert das Verzeichnis?
Wie sind die Rechte?
Was sagt das Logfile?
Titel: Antw:[Gelöst] Plot via plotAsPng als File speichern
Beitrag von: Peter aus Calw am 06 Oktober 2020, 18:36:15
Hallo Frank,
hatte /opt/fhem/fhempgn statt fhempng geschrieben und anschliessend die Berechtigung auf "chown fhem:dialout" gesetzt und dann :

tata

es funktioniert  :) :D :)

besten Dank für die Unterstützung die im FHEM-Forum immer klasse ist - auch für Grufties um die 75.
Ein super Dankeschön von Peter aus Calw
Titel: Antw:[Gelöst] Plot via plotAsPng als File speichern
Beitrag von: betateilchen am 06 Oktober 2020, 19:04:38
Zitat von: Peter aus Calw am 06 Oktober 2020, 18:08:00
Habe rnun versucht den Vorschlag von h002 umzusetzen.
Also das "sub" so versucht anzupassen

Das was Du da abgeschrieben hast, ist aber "alte" perl Syntax, mit der Du in absehbarer Zeit Probleme mit neueren perl Versionen bekommen könntest.
Solche Konstrukte (der Teil von open bis close) werden irgendwann von perl nicht mehr unterstützt.

Titel: Antw:[Gelöst] Plot via plotAsPng als File speichern
Beitrag von: Peter aus Calw am 06 Oktober 2020, 20:33:37
Hallo Betateilchen danke für den Tipp,
wie könnte ich denn das dann entsprechend anpassen bzw. auf den nötigen Level bringen ?
Habe mich ja mächtig gefreut, daß es endlich funktioniert. Was mich noch etwas wundert(stört), daß beim öffnen der .png Datei im Background ein Karomuster hinterlegt ist - könnte man das irgendwo ändern ?
Freue mich auf Deinen Rat.
LG Peter
Titel: Antw:[Gelöst] Plot via plotAsPng als File speichern
Beitrag von: betateilchen am 06 Oktober 2020, 20:48:52
Zitat von: Peter aus Calw am 06 Oktober 2020, 20:33:37
wie könnte ich denn das dann entsprechend anpassen bzw. auf den nötigen Level bringen ?

ich habe doch weiter oben schon vor langer Zeit einen Lösungsvorschlag gepostet.

https://forum.fhem.de/index.php/topic,90083.msg825495.html#msg825495
Titel: Antw:[Gelöst] Plot via plotAsPng als File speichern
Beitrag von: h002 am 06 Oktober 2020, 21:16:45
Zitat von: betateilchen am 06 Oktober 2020, 19:04:38
ist aber "alte" perl Syntax, mit der Du in absehbarer Zeit Probleme mit neueren perl Versionen bekommen könntest.
Wo finde ich dazu Informationen? Danke dir!
Titel: Antw:[Gelöst] Plot via plotAsPng als File speichern
Beitrag von: betateilchen am 06 Oktober 2020, 21:19:38
Zitat von: h002 am 06 Oktober 2020, 21:16:45
Wo finde ich dazu Informationen?

www.perl.org
Titel: Antw:[Gelöst] Plot via plotAsPng als File speichern
Beitrag von: h002 am 06 Oktober 2020, 21:29:31
Hatte schon so ein Gefühl, diese Art von Antwort von dir zu erhalten. Als Laie versuche ich dazu zu lernen und lese gerne, um mein Wissen zu erweitern. Mich hätte es wirklich interessiert, wo genau ich zu diesem speziellen Fall etwas über die neue Syntax erfahre, ohne groß auf einer Webseite nach dem für mich wesentlichen Inhalt zu durchforsten. Dachte du kennst dich so gut aus und kannst gleich die entsprechende Position verlinken.

Für meine FHEM Automatisierung suche mir ich mir gerne funktionierende Beispiele, die bestimmt Lücken bzgl. Programmier-Etikette haben und bin auch immer bereit, diese zu verbessern.
Titel: Antw:[Gelöst] Plot via plotAsPng als File speichern
Beitrag von: Peter aus Calw am 06 Oktober 2020, 21:51:58
Hallo Frank,
bin hier ganz bei Dir, manche liebe Leute hier setzen sehr viel voraus, bin 75 Lenze und habe mit Hilfe aus diesem Forum ohne Programmierkenntnisse ein kleines FHEM-Hausautomatiksystem mit PV, Stromzähler und Heizthermostatenam E-Heizung am laufen, und finde es toll, daß man mit diesen Möglichkeiten auch ohne große Kenntnisse und kleinem Geldbeutel die Umwelt entlasten kann.
Wenn betateilchen bereit ist die mögliche Anpassungen für diese Anwendung verständlich bekannt zu geben kann ich meiner Familie die täglichen Verbrauchswerte richtig schön optisch vermitteln.
Liebe Grüße von Peter
Titel: Antw:[Gelöst] Plot via plotAsPng als File speichern
Beitrag von: Peter aus Calw am 10 Oktober 2020, 20:41:55
Hallo h002, Hallo betateilchen,
nach dem Hinweis von betateilchen habe ich diesen Vorschlag vom 8.8.2018 versucht:
sub test {
open(my $out, '>:raw', './log/test.png') or die "Unable to open: $!";
print $out plotAsPng('SVG_dbLog_2');
close($out);
}


und habe diesen für meine Anwendung so umgesetzt :

sub PVSVplot1 {
open(my $out, '>:raw', '/opt/fhem/fhempng/PVSVplot1.png') or die "Unable to open: $!";
print $out plotAsPng('SVG_FileLog_PV_Ertrag_1');
close($out);
}


und dann :

{PVSVplot1("PVSVplot1")}

in der FHEM Kommandozeile ausgeführt und erhalte mein gewünschtes Ergebnis wie mit Deinem Vorschlag..
Ob das nun die künftigen Syntax Vorausetzungen erfüllt - weiß ich nicht, vielleicht  gibt betateilchen einen Tipp dazu ?
LG Peter
Titel: Antw:[Gelöst] Plot via plotAsPng als File speichern
Beitrag von: Peter aus Calw am 10 Oktober 2020, 22:54:42
Hallo nochmal,
die Funktionen funktionieren einwandfrei, bekomme also die plotdaten in eine ".png" Datei. Habe dann ein "DOIF" eingerichtet um das sub periodisch zu starten:
{PVSVplot1("PVSVplot1")}
und erhalte dann in "DOIF" diesen Fehler, obwohl der Vorgang abläuft und die Datei *.png korrekt erzeugt wird  :
error       {PVSVplot1("PVSVplot1")}: 1 {PVSVplot2("PVSVplot2")}: 1
In der logfile erscheinen keine Fehler ???
wie kann das zustande kommen ?
LG Peter


Titel: Antw:[Gelöst] Plot via plotAsPng als File speichern
Beitrag von: Damian am 11 Oktober 2020, 18:29:37
Zitat von: Peter aus Calw am 10 Oktober 2020, 22:54:42
Hallo nochmal,
die Funktionen funktionieren einwandfrei, bekomme also die plotdaten in eine ".png" Datei. Habe dann ein "DOIF" eingerichtet um das sub periodisch zu starten:
{PVSVplot1("PVSVplot1")}
und erhalte dann in "DOIF" diesen Fehler, obwohl der Vorgang abläuft und die Datei *.png korrekt erzeugt wird  :
error       {PVSVplot1("PVSVplot1")}: 1 {PVSVplot2("PVSVplot2")}: 1
In der logfile erscheinen keine Fehler ???
wie kann das zustande kommen ?
LG Peter

Du musst am Ende deiner PVSVplot-Routine return (0); einbauen, damit DOIF den Aufruf als korrekt ansieht.
Titel: Antw:[Gelöst] Plot via plotAsPng als File speichern
Beitrag von: Prof. Dr. Peter Henning am 12 Oktober 2020, 05:41:45
Würde ich nicht so angehen. In den SmartHome Hacks habe ich dokumentiert, wie das andersherum geht: Skriptgesteuert von außen eine SVG-Grafik in FHEM abrufen (einfacher http-Call) und mit Inkscape in ein PNG umwandeln. Auf diese Weise archiviere ich jede Nacht ein paar Plots aus FHEM:

!/bin/bash
device=$1
logdev=$2
plotfile=$3

# get the file
wget "http://192.168.0.xx:8083/fhem/SVG_showLog?dev=$device&logdev=$logdev&gplotfile=$plotfile&logfile=-" -O /tmp/backup.svg > /dev/null 2> /tmp/picture.log

#rewrite into png
inkscape -z -d 150 -e /tmp/backup.png -b ffffff00 /tmp/backup.svg > /dev/null 2> /tmp/picture.log 

#rename properly
date=`date +"%Y-%m-%d"`
if  [ -d "/home/fhemnas/fhempictures" ]; then
  mv /tmp/backup.png "/home/fhemnas/fhempictures/$device-$date.png"
else
mv /tmp/backup.png "/home/fhem/fhemlogs/$device-$date.png"
fi


LG

pah
Titel: Antw:[Gelöst] Plot via plotAsPng als File speichern
Beitrag von: Peter aus Calw am 12 Oktober 2020, 23:10:40
Hallo Damian,
wie bereits gesendet funktioniert die Ergänzung mit "return(0);" in der myutils Routine auf Anhieb. Danke nochmal.
Hallo Herr Prof.Dr. Henning,
Ihren Vorschlag werde ich auf jeden Fall auch versuchen umzusetzen um meine FHEM-Plots lesbar zu machen, habe aber von Programmierung keine Ahnung und werde sicher einige Fragen an Sie richten müssen.
LG aus dem Schwarzwald von Peter