Also ich versuche ein Bild ( Diagramm ) einzuspielen.
Wenn ich einen Button auslöse, so wird in Perl die Datei erzeugt und ebenfalls mittels fhem ein Weblink define --
Doch leider wird kein Update durchgeführt !!
Wenn ich den Raum verlasse und dann wieder aufrufe erscheint das Objekt korrekt.
Wenn sich ein Status ändert -- so wird dies ja auch reflektiert. Wie kann ich dies lösen ?
Perl sequence:
# lösche das bisherige Object
fhem ("delete group=Vorschau");
$tmp_str = basename( $filename, ".png");
fhem ("define $tmp_str weblink htmlCode { rw_showgraph() } ");
fhem ("attr $tmp_str room ElektroSpeicher_Ladekurve") ;
fhem ("attr $tmp_str group Vorschau") ;
Vielleicht hilft Dir das hier weiter?
https://forum.fhem.de/index.php?topic=68902.0 (https://forum.fhem.de/index.php?topic=68902.0)
Erst mal vielen Dank für den Hinweis.
Ich habe es jetzt wohl gelöst !!
Sprich meine Grafik - Bilddatei wird aktualisiert ( und ich bin mit den Nerven fast am Ende, da dies eine endlose testerei ist - was tut wie und was nicht ! )
Meine Lösung:
Fhem config Auszüge :
define EH_Calc dummy
attr EH_Calc alias Berechne Ladezeit
attr EH_Calc devStateIcon on:rc_RED:off .*:rc_GREEN:on
define EH_Kurve1 weblink iframe http://raspilan:80/fhem/graf.png?cachebust=1
attr EH_Kurve1 htmlattr width="640" height="380"
# Manuelle Berechnung der Ladezeit durchführen
define n_EH_Calc notify EH_Calc:on { rw_EH_Berechne();; rw_ladekurve();; }
define n_EH_Calc2 notify EH_Calc:off trigger WEB JS:location.reload(true)
Meine PERL Routine -- rw_ladekurve
sub rw_ladekurve()
{
my @x;
my @y1;
my @y2;
my @y3;
my $graph;
my @data;
my $gd;
# alle mögliche X Werte zuerst festlegen
$x[0] = -25;
$x[1] = $E1;
$x[2] = $EH_Avg_Temp + $EH_TempOffset; # Korrigierter Wert
$x[3] = $EH_Avg_Temp + $EH_TempOffset; # Korrigierter Wert
$x[4] = $EH_Avg_Temp; # Normaler Wert
$x[5] = $EH_Avg_Temp; # Normaler Wert
$x[6] = $E2;
$x[7] = $E2;
$x[8] = 25;
# Daten der LAdekurve
$y1[0] = 480;
$y1[1] = 480;
$y1[2] = undef;
$y1[3] = undef;
$y1[4] = undef;
$y1[5] = undef;
$y1[6] = $S;
$y1[7] = 0;
$y1[8] = 0;
# Linien für wirkl. berechnung
$y2[0] = $EH_Max_Dauer;
$y2[1] = undef;
$y2[2] = $EH_Max_Dauer;
$y2[3] = 0;
$y2[4] = undef;
$y2[5] = undef;
$y2[6] = undef;
$y2[7] = undef;
$y2[8] = undef;
# Linien für wirkl. berechnung
$y3[0] = $EH_Max_Dauer_Avg;
$y3[1] = undef;
$y3[2] = undef;
$y3[3] = undef;
$y3[4] = $EH_Max_Dauer_Avg;
$y3[5] = 0;
$y3[6] = undef;
$y3[7] = undef;
$y3[8] = undef;
@data = (\@x,\@y1,\@y2, \@y3);
# Erzeuge Graph image
$graph = new GD::Graph::linespoints(800, 500);
# set parameters for graph
$graph->set(
transparent => 0,
long_ticks => 1,
title => 'Ladekurven - Kennlinie',
text_space => 10,
line_width => 2,
skip_undef => 0,
marker_size => 2,
markers => [1, 3, 7],
x_label => 'Temperatur',
x_min_value => -25,
x_max_value => 25,
x_tick_number => 50,
x_label_skip => 5,
y_label => 'Ladezeit in Min',
y_min_value => 0,
y_max_value => 480,
y_tick_number => 16,
y_label_skip => 2,
);
# plot the data on the graph
my $gd = $graph->plot( \@data ) ;
# output file
my $pathfile = "/var/www/fhem/graf.png";
open(PNG, ">$pathfile") or die $!;
# set output file handle PNG to binary stream
binmode PNG;
# print the image to the output file
print PNG $gd->png;
close PNG;
fhem ("set EH_Calc off");
# refresh die Graphic für fhem
#fhem ("trigger EH_Kurve1 JS:location.reload(true)") ;
#fhem ("trigger WEB JS:location.reload(true)") ;
}
Meine Tests haben gezeigt, dass die fhem - trigger Aufrufe aus PERL keinerlei Wirkung haben. Funktioniert nur über commando
aus der Config. --Könnte noch Fehler in FHEM sein ? oder habe ich falsche Annahme.
weiterhin ist ?cacheburst=1 ebenfalls wichtig für den Dateinamen, da sonst die Datei im Cache gehalten wird und sich gar kein
update durchsetzt.
-- Auf jeden Fall habe ich jetzt eine Lösung und hoffe andere können dies gebrauchen !
Zitat von: roli am 14 November 2017, 12:10:01
Meine Tests haben gezeigt, dass die fhem - trigger Aufrufe aus PERL keinerlei Wirkung haben. Funktioniert nur über commando
aus der Config. --Könnte noch Fehler in FHEM sein ? oder habe ich falsche Annahme.
weiterhin ist ?cacheburst=1 ebenfalls wichtig für den Dateinamen, da sonst die Datei im Cache gehalten wird und sich gar kein
update durchsetzt.
-- Auf jeden Fall habe ich jetzt eine Lösung und hoffe andere können dies gebrauchen !
Schön, dass es geht.
Das die trigger aufrufe keinerlei Wirkung haben kann ich mir eigentlich nicht vorstellen, aber ich habe die Lösung auch nicht bei mir am Laufen. Was es heissen soll, dass die aus der Config. funktionieren verstehe ich nicht - meinst Du die fhem.cfg?
JA.
Siehe unten. Ich habe eine Notify eingefügt. Ich drücke den Button, welcher über Notify on Regel die Perl Routinen
zur Berechnung meiner Ladekurve und zur Erzeugung des Plot Grahp aufrufen.
Zuletzt wird der Button wieder auf OFF gesetzt was das off notify auslöst und trigger aufgerufen wird. Nur so funktioniert es bei mir.
Siehe Screen shot zum besseren Verständnis was ich tue.