eCharts in FHEM (Version 0.0.12.1)

Begonnen von andies, 06 Februar 2024, 22:06:15

Vorheriges Thema - Nächstes Thema

andies

#60
Also ich habe den Samstag damit zugebracht, Veränderungen im Code zu schreiben, damit ich endlich die Bilder rendern und in Telegram senden kann. Aber das geht nicht. Es scheint wirklich so zu sein, dass eCharts kein echtes Server-Side-Rendering zulässt, sondern man einen externen Browser braucht (mal schauen, was hier herauskommt - <edit> Das kam da heraus).

Meine derzeitige Lösung ist eigentlich ziemlicher Mist und hat nur den Vorteil, dass sie funktioniert. Also ich habe installiert: NodeJS sowie puppeteer und dann lasse ich folgendes Script laufen:
// Diese Datei wird von FHEM genutzt zum Scrappen der eCharts Bilder
// Aufruf mit node Scrapper.js <Devicename der eChart-Datei>
const puppeteer = require('puppeteer');
const myVariable =process.argv[2];
const selector = '#eCharts_' + myVariable;

(async () => {
  const browser = await puppeteer.launch({
      executablePath: '/usr/bin/chromium-browser'
  });

  const page = await browser.newPage();
  try {
      page.on('error', msg => {
        throw msg;
      });

      await page.goto('http://localhost:8083/fhem?detail=' + myVariable);
      await page.waitForSelector(selector);

      const element = await page.$(selector);

      const screenShot = await element.screenshot({
//        encoding: 'base64'
          path: myVariable+'.jpg'
      });
      //console.log(screenShot);
    }catch (error) {
    throw error;
    }finally{
    await browser.close();
    }
  })().catch((error) => {
  console.log(error);
});
Man ruft einfach "node Scrapper.js <eChart devicename>" auf und kriegt dann eine jpg in dem Verzeichnis. (Ich habe keine Sicherheitsmerkmale bei FHEM, weil ich nur mit VPN an den Server komme.)

Geschieht das innerhalb von FHEM, kommt es wegen der blockierenden Ausführung eigentlich immer zu einem Timeout. Also das geht nur außerhalb von FHEM und dann sammelt man die Bilder ein. Wirklich keine elegante Lösung, und wenn mir die Grafiken nicht gefallen würden, hätte ich das jetzt begraben. So muss man eben zwei Programme parallel warten.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

MadMax

Das ist ja ein riesiger Umweg um an die Charts zu kommen.
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

andies

Noch eine Änderung, Version 10.3. Die Farbe der Legende war falsch, siehe Anhang.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

Zitat von: MadMax am 03 März 2024, 10:13:40Das ist ja ein riesiger Umweg um an die Charts zu kommen.
Ja, total nervig. Ich versuche ja von den eCharts-Leuten herauszubekommen, ob es einfacher geht. Sonst ist das eigentlich indiskutabel.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

PS Mir ist noch etwas aufgefallen. Ich hätte das mit den Farben anders machen müssen, von vornherein. Das habe ich jetzt geändert (danke nochmal für den array @colors):
Zeile 535 ${$eCharts_options_ref}{color} = \@colors;
und dann stimmt das mit den Farben in der Legende, dem Tooltip und so weiter. Das einzeln einzustellen, so wie ich das gemacht habe, ist viel zu anstrengend.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

MadMax

Hallo andies,

bei mir schein alles zu passen.
Die Farben scheinen nicht funktioniert zu haben wenn man im Chart fill Farben verwendet hatte.
Jetzt passt es, war mir vorher aber noch gar nicht aufgefallen.

Gruß
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

andies

Zitat von: schwatter am 29 Februar 2024, 08:40:37Ich habe so 10 min nach Nulluhr gemerkt, das mein Fhem nicht erreichbar war.
Nimm mal die neueste Version 0.0.10.4 im ersten Post; mir ist aufgefallen, dass man bei leeren Datensätzen die Abfrage anders gestalten muss. Mir ist heute beim Testen mehrfach FHEM abgestürzt, weil ich die Stelle nicht richtig getestet hatte. Jetzt sollte es gehen.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

schwatter

#67
Ok super,

lasse ich laufen  :)

Kleine Anmerkung, ihr habt ja shortnames für euren Log. Bei mir steht da der ganze  lange Name vom File im Title.
Vielleicht einen Zeilenumbruch an der Stelle?
Sieht auf dem Handy Banane aus.

Edit:
Sorry, egal ob Handy oder Desktop. Der Filelogname überlagert.

Gruß schwatter

andies

Zitat von: schwatter am 03 März 2024, 16:37:13Kleine Anmerkung, ihr habt ja shortnames für euren Log. Bei mir steht da der ganze  lange Name vom File im Title.
Vielleicht einen Zeilenumbruch an der Stelle?
Ich verstehe gar nicht, wo das herkommt. Ist das eine Art Zweittitel? Oder ist das von der Legende? Wenn es von der Legende kommt, kannst Du das ja selbst einstellen, zB
plot "<IN>" using 1:2 axes x1y1 title 'Banane' ls l1fill lw 0.2 with step
                                       ******
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

Zitat von: carlos am 27 Februar 2024, 17:46:13Ich habe hier noch ein Problem mit den Umlauten.
Ich kann mir nach wie vor nicht erklären, wieso das im SVG geht und bei mir nicht. Ich habe jetzt eine mögliche Lösung, die bei mir funktioniert:
attr <eChartsName> encoding 1musst aber die Version 10.5 im ersten Post nehmen.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

MadMax

Hallo,

Ich hatte heute ein Absturz und diese Meldung im Log.

Can't use an undefined value as an ARRAY reference at ./FHEM/98_eCharts.pm line 404.

Aber dort greifst du auf das Daten Array zu um dies zu Prüfen. Solltest du hier eventuell auch auf defined prüfen?

Gruß
Max
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

andies

Zitat von: MadMax am 04 März 2024, 18:30:10Can't use an undefined value as an ARRAY reference at ./FHEM/98_eCharts.pm line 404.
Kannst du mal schauen, welchen Code du in Zeile 404 hast? Es muss so sein
if (@{ $data_array[$series_index] // []}){ und nur durch diese kryptischen // [] wird das defined geprüft. Sonst stürzt FHEM (manchmal) ab.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

MadMax

Ich habe noch Version 0.0.10.3 am laufen.

Zeile 404
if (@{$data_array[$series_index]}){

Das hast du scheinbar schon gefixt.
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

schwatter

Zitat von: andies am 03 März 2024, 21:43:01
Zitat von: schwatter am 03 März 2024, 16:37:13Kleine Anmerkung, ihr habt ja shortnames für euren Log. Bei mir steht da der ganze  lange Name vom File im Title.
Vielleicht einen Zeilenumbruch an der Stelle?
Ich verstehe gar nicht, wo das herkommt. Ist das eine Art Zweittitel? Oder ist das von der Legende? Wenn es von der Legende kommt, kannst Du das ja selbst einstellen, zB
plot "<IN>" using 1:2 axes x1y1 title 'Banane' ls l1fill lw 0.2 with step
                                       ******



Nabend,

mh Legende? Ich weiß jetzt wo es herkommt, wahrscheinlich meinen wir das gleiche.
Aus meinem dazugehörigen SVG, "Plot title". Lösche ich den, ist nix da.
Für den Moment oder auch für die zukünftige Koexistenz müsste da eine bessere Lösung her?

Jetzt habe ich eben auf die 0.0.10.5 geupdatet, da ich Umlaute vernommen habe.
Update und nun knallt er mir mehrere Tage rein und ich hab SlowMo beim Aufbau des eCharts.
Bei der 0.0.10.4 wurde einfach der Tag genommen. Muss ich jetzt etwas explizit setzen für
den Tag?

Gruß schwatter

schwatter

Zitat von: andies am 29 Februar 2024, 18:09:07
Zitat von: schwatter am 28 Februar 2024, 22:58:12Vorschlag, das attr plotsize aus FHEMWEB auslesen. Ich z.B habe 3 Instanzen,
und in jeder eine andere Größe definiert.
Das muss einfach gehen. Allerdings wundert mich das, denn in Zeile 383 bei eCharts.pm steht
  my ($w, $h) = split(",", SVG_getplotsize($name));
und damit wird plotsize ja genau so wie bei SVG geholt - in SVG.pm wiederum wird zuerst bei WEB und dann im device gesucht, wenn ich das richtig sehe
sub
SVG_getplotsize($)
{
  my ($d) = @_;
  return $FW_webArgs{plotsize} ?
                $FW_webArgs{plotsize} :
                AttrVal($d,"plotsize", $FW_plotsize ? $FW_plotsize : "800,400");
}
Das müsste also schon so implementiert sein?

Ich hab das Problem gefunden. Ist ein Typo.

&SVG_getplotsize
zu

SVG_getplotsize
Da hat sich ein & bei dir eingeschlichen.


Gruß schwatter