[Gelöst] Plot via plotAsPng als File speichern

Begonnen von jle, 08 August 2018, 21:50:27

Vorheriges Thema - Nächstes Thema

h002

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.

Peter aus Calw

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

Peter aus Calw

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

Peter aus Calw

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



Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Prof. Dr. Peter Henning

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

Peter aus Calw

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