PS Titel geändert, weil sich später herausstellte was los war.
Ich habe ein Problem beim Senden von SVGs via SignalBot. Inzwischen glaubt Cheffe (siehe https://forum.fhem.de/index.php?topic=116138.msg1229148#msg1229148 (https://forum.fhem.de/index.php?topic=116138.msg1229148#msg1229148), dort mehrere Listings etc) dass es sich dabei um ein DbLog-Problem handelt. Die Grafiken werden innerhalb von FHEM korrekt dargestellt, nicht jedoch beim Aufruf von plotAsPng. Leider bin ich da mit meinem Latein am Ende, vielleicht kann hier jemand weiterhelfen? Oder mir sagen, wo ich suchen soll?
PS Auch TelegramBot liefert kein Bild, völlig analog zu SignalBot. Wenn man plotAsPng verwendet...
Ich kann kein Problem feststellen.
Versendet habe ich
set teleBot cmdSend { plotAsPng("SVG_LogDB_Server") }
Ergebnis Empfang im Desktop Telegram siehe Anhang.
Danke - und Mist, gerade nochmal getestet:
set TelegramBot cmdSend { plotAsPng("WasserPlot") }
Das heißt, der Fehler liegt weder an DbLog noch an FHEM vermutlich. Wo kann ich denn dann weitersuchen?
plotAsPng ist eine Perl-Funktion aus 98_SVG.pm.
Die Funktion selbst basiert eigentlich hauptsächlich auf der Standard Perl Library Image::LibRSVG.
Vielleicht kannst du die bei dir updaten ?
Bei mir verwende ich dazu den Installer (http://fhem.de/commandref.html#Installer)
Danke! Der Installer meldet alles up-to-Date, die Bibliothek selbst habe ich über Debian installiert
libimage-librsvg-perl ist schon die neueste Version (0.07-8+b5).
Wenn ich der einzige bin, der das Problem hat, suche ich nun die Nadel im Heuhaufen...
Hast mal Verbose erhöht und das Log geprüft?
Hast Du in Deinem FHEM mehrere FHEMWEB devices definiert?
plotAsPng() verwendet das erste FHEMWEB device, das es in einer von devspecarray() gelieferten Tabelle findet und das nicht als TEMPORARY gekennzeichnet ist.
Das muss nicht zwingend das gleiche device sein, das Du auch verwendest, wenn Du den plot in FHEM selbst anschaust. Die Auswahl ist mehr oder weniger zufällig.
Vor nicht allzu langer Zeit habe ich mal einen halben Tag lang gesucht, um ein ähnliches Problem in der Darstellung von plots zu lösen.
Testweise kannst Du in der Funktion plotAsPng() in 98_SVG.pm die Zeile 2479 anpassen und dort den Namen des FHEM device eintragen, das Du für die Anzeige in FHEM selbst verwendest.
Mit DbLog hat das übrigens nichts zu tun, das Phänomen betrifft auch FileLog.
Wenn mir jemand was zum Nachstellen baut, dann schaue ich das naeher an.
Das ist mir zu kompliziert zu beschreiben, da baue ich lieber gleich einen patch für plotAsPng(), um eine bestimmte FHEMWEB Instanz beim Aufruf von plotAsPng() bestimmen zu können 8)
Zitat von: betateilchen am 26 Juli 2022, 10:15:18
da baue ich lieber gleich einen patch für plotAsPng(), um eine bestimmte FHEMWEB Instanz beim Aufruf von plotAsPng() bestimmen zu können
Es gibt ein neues Attribut "plotAsPngPort" mit dem in einem SVG device definiert wird, welche FHEMWEB Instanz (bestimmt durch ihren port!) vewendet werden soll, wenn dieser SVG-plot per plotAsPng() aufgerufen wird.
Warum port und nicht name? Weil die Wahrscheinlichkeit, dass sich in einer FHEMWEB-Instanz der Name ändert, höher ist als beim port.
Warum Attribut und nicht Aufrufparameter? Weil die Funktion jetzt schon mit mehreren Werten aufgerufen werden kann, von denen die meisten optional sind, aber deren Reihenfolge vorgegeben ist. Eigentlich hätte ich auf parseParams() umbauen müssen, das war aber aus Kompatibilitätsgründen zu bestehenden Installation nicht ohne weiteres möglich.
Index: 98_SVG.pm
===================================================================
--- 98_SVG.pm (revision 26256)
+++ 98_SVG.pm (working copy)
@@ -83,6 +83,7 @@
plotsize
plotReplace:textField-long
plotAsPngFix:1,0
+ plotAsPngPort
startDate
title
);
@@ -2471,9 +2472,18 @@
plotAsPng(@)
{
my (@plotName) = @_;
- my (@webs, $mimetype, $svgdata, $rsvg, $pngImg);
+ my ($mimetype, $svgdata, $rsvg, $pngImg);
- @webs=devspec2array("TYPE=FHEMWEB");
+ my $svgName = $plotName[0];
+ return (Log 1, "$svgName not found for plotAsPng()") unless defined($defs{$svgName});
+
+ my $devspec = "TYPE=FHEMWEB";
+ my $port = AttrVal($svgName,'plotAsPngPort',undef);
+ $devspec .= ":FILTER=i:PORT=$port" if defined($port);
+
+ my @webs=devspec2array($devspec);
+ return (Log 1, "No FHEMWEB device using port $port found for plotAsPng($svgName)")
+ if (defined($port) and scalar(@webs) == 0);
foreach(@webs) {
if(!InternalVal($_,'TEMPORARY',undef)) {
$FW_wname = InternalVal($_,'NAME','');
@@ -2482,7 +2492,6 @@
}
}
- my $svgName = $plotName[0];
$FW_RET = undef;
$FW_webArgs{dev} = $svgName;
$FW_webArgs{logdev} = InternalVal($svgName, "LOGDEVICE", "");
@@ -2505,7 +2514,7 @@
$rsvg->loadImageFromString($svgdata);
$pngImg = $rsvg->getImageBitmap();
};
- Log3 $FW_wname, 1,
+ Log3 $svgName, 1,
"plotAsPng(): Cannot create plot as png image for \"" .
join(" ", @plotName) . "\": $@"
if($@ or !defined($pngImg) or ($pngImg eq ""));
@@ -2679,6 +2688,11 @@
be reduced.
</li><br>
+ <a id="SVG-attr-plotAsPngPort"></a>
+ <li>plotAsPngPort <portNum><br>
+ Affects only the plotAsPng function: Use a specific FHEMWEB instance.
+ </li><br>
+
<a id="SVG-attr-plotfunction"></a>
<li>plotfunction<br>
Space value separated list of values. The value will be used to replace
@@ -2965,6 +2979,11 @@
gesetzt wird, werden die CSS Anweisungen vereinfacht.
</li><br>
+ <a id="SVG-attr-plotAsPngPort"></a>
+ <li>plotAsPngPort <portNum><br>
+ Betrifft nur die plotAsPng Funktion: Verwendet eine bestimmte FHEMWEB Instanz.
+ </li><br>
+
<a id="SVG-attr-plotfunction"></a>
<li>plotfunction<br>
Eine Liste, deren Werte durch Leerzeichen voneinander getrennt sind.
Da ich Schwierigkeiten habe vorzustellen, warum eine andere FHEMWEB Instanz das hier beschriebene Problem loesen sollte:
@andies: kannst Du bitte diesen Patch ausprobieren, und berichten, ob es hilft?
Zuerst einmal zu den Symptomen, das sieht gut aus
list TYPE=FHEMWEB
WEB
WEB_192.168.2.66_55588
WEB_192.168.2.66_55589
WEB_192.168.2.66_55590
WEB_192.168.2.66_55593
WEBphone
WEBtablet
Zum Patch: Ich habe das analog zu https://forum.fhem.de/index.php/topic,116138.msg1229155.html#msg1229155 (https://forum.fhem.de/index.php/topic,116138.msg1229155.html#msg1229155) getestet, klappt nicht - siehe Anhang. Oder muss ich den Port selbst herausfinden? Ich habe ja die neue Funktion nicht aufgerufen.
Zitat von: rudolfkoenig am 26 Juli 2022, 11:20:43
Da ich Schwierigkeiten habe vorzustellen, warum eine andere FHEMWEB Instanz das hier beschriebene Problem loesen sollte:
In meinem Problemfall damals war das Problem, dass ich mehrere FHEMWEB Instanzen hatte, die jeweils mit unterschiedlichen styles angelegt waren. Bei einigen styles hatte die Darstellung per plotAsPng() ziemlich merkwürdige Ergebnisse geliefert. Als ich dann im Code den Namen der "richtigen" FHEMWEB Instanz angegeben habe, wurden auch die png-Daten korrekt erzeugt.
Zitat von: andies am 26 Juli 2022, 11:36:52
Oder muss ich den Port selbst herausfinden?
Du musst den gleichen Port verwenden in der FHEMWEB Instanz, mit der die plots in FHEM richtig angezeigt werden.
Der Port steht in der URL Zeile Deines Browsers.
Diesen port musst Du dann als Attribut in dem betroffenen SVG-device angeben.
Zitat von: andies am 26 Juli 2022, 11:36:52
Ich habe ja die neue Funktion nicht aufgerufen.
Das verstehe ich nicht.
Zitat von: betateilchen am 26 Juli 2022, 13:22:59
Der Port steht in der URL Zeile Deines Browsers.
Diesen port musst Du dann als Attribut in dem betroffenen SVG-device angeben.
Das verstehe ich nicht.
Ich habe "plotAsPng" aufgerufen, nicht aber "plotAsPngPort":
{ WriteFile("www/images/plot.png", plotAsPng("WasserPlot")) }
Habe ich dann da was falsch gemacht bei meinem Test?
Zitat von: andies am 26 Juli 2022, 13:25:12
Ich habe "plotAsPng" aufgerufen, nicht aber "plotAsPngPort":
plotAsPngPort ist keine Funktion, sondern ein Attribut.
Muss ich das irgendwie setzen? Denn der Patch hat bei mir das Problem nicht gelöst. Kann ich sonst etwas tun?
Liest (und verstehst) Du eigentlich, was man hier schreibt?
Ich lese vollständig und verstehe nur zum Teil. Ich habe nie beruflich programmiert und daher verstehe ich zB nicht, was in der 98_SVG.pm passiert. Und wieso das die Ursache meines Problems sein könnte. Aber da ich anscheinend der einzige bin, der das Problem hat (siehe den Link oben), muss ich das ja reproduzieren bzw. den Patch einspielen und schauen, ob er was löst.
In meinem Unternehmen würde man sagen ,,der arbeitet nach Anweisung".
Nach dem Patch einspielen ist auch das Setzen des o.g. Attributes erforderlich.
ZitatBei einigen styles hatte die Darstellung per plotAsPng() ziemlich merkwürdige Ergebnisse geliefert.
Das verstehe ich, und habe deswegen den Patch eingecheckt.
Zitat von: rudolfkoenig am 26 Juli 2022, 14:40:43
Das verstehe ich, und habe deswegen den Patch eingecheckt.
Danke!
Zitat von: betateilchen am 26 Juli 2022, 13:22:59
Diesen port musst Du dann als Attribut in dem betroffenen SVG-device angeben.
Das hatte ich übersehen, Asche auf mein Haupt. Ich habe jetzt
Internals:
DEF DbLog:SVG_DbLog_Wasserzaehler_1:CURRENT
FUUID 5f64e557-f33f-1115-4639-875d9eb9fbaf5acd
FVERSION 98_SVG.pm:0.258760/2022-03-23
GPLOTFILE SVG_DbLog_Wasserzaehler_1
LOGDEVICE DbLog
LOGFILE CURRENT
NAME WasserPlot
NR 387
STATE initialized
TYPE SVG
Attributes:
plotAsPngFix 0
plotAsPngPort 8083
aber immer noch dasselbe Ergebnis nach
{ WriteFile("www/images/plot.png", plotAsPng("WasserPlot")) }
siehe Anhang.
Was passiert denn, wenn Du plotAsPngFix auf 1 setzt?
Zitat von: betateilchen am 26 Juli 2022, 14:55:55
Was passiert denn, wenn Du plotAsPngFix auf 1 setzt?
Klappt, danke!! Problem beseitigt.
Ich habe gesehen, dass Ihr da einen Fix eingecheckt habt. Wenn ich Update, muss ich dann etwas ändern? Kann ich im Wiki oder anderswo da mit Beschreibungen helfen, was man eventuell bei diesem Fehler tun muss? Oder ist der ,,verschwunden"?
Alles gut.
Zusammenfassung:
Das im ersten Beitrag beschriebene Problem (Graph nicht sichtbar im plotAsPng Output) kann behoben werden, wenn man das Attribut plotAsPngFix 1 setzt. Das ist noetig fuer neue Versionen der LibRSVG Bibliothek. Unklar ist, wieso das nicht getestet wurde, obwohl die Diskussion in dem verlinkten Thema startete, wo sich alles um dieses Attribut dreht. Entgegen des Betreffs (und meiner urspruenglichen Vermutung) hat die Ursache nichts mit DbLog zu tun.
Das hier eingecheckte Patch ist noetig, wenn man mehrere FHEMWEB-Instanzen mit unterschiedlichen Styles hat, und man von plotAsPng konsistente Ergebnisse erwartet. Womoeglich loest es auch weitere Probleme, die mir noch nicht klar sind. Um dieses Problem zu loesen muss man das plotAsPngPort SVG Attribut auf die Portnummer(!) der FHEMWEB Instanz setzen, dessen Style verwendet werden soll.
(Titel geändert)
Hier ein beispielhaftes List eines SVG devices, wenn der übliche Port 8083 verwendet wird.
Internals:
DEF DbLog:SVG_DbLog_Wasserzaehler_1:CURRENT
FVERSION 98_SVG.pm:0.258760/2022-03-23
GPLOTFILE SVG_DbLog_Wasserzaehler_1
LOGDEVICE DbLog
LOGFILE CURRENT
NAME WasserPlot
NR 387
STATE initialized
TYPE SVG
Attributes:
plotAsPngFix 1 <=====
plotAsPngPort 8083 <=======
Ich habe meine gepachte 98_SVG.pm angehangen. Nach dem überschreiben einmal
reload 98_SVG.pm
Erst danach Es sind die Attribute vorhanden.
Zitat von: andies am 27 Juli 2022, 09:01:47
Ich habe meine gepachte 98_SVG.pm angehangen. Nach dem überschreiben einmal
Kannst Du den Anhang bitte entfernen?
Die Änderung ist seit vorgestern in der offiziellen Modulversion enthalten.