NEWS
Screenshot Flot-Charts über Telegram verschicken
-
Hallo zusammen,
ich habe mir ein Skript gebaut, welches es mir erlaubt Screenshots von Flot-Charts (eigentlich jeder beliebigen Website) per Telegramm zu verschicken. Eigentlich ist hierfür ja der PhantomJS Adapter gedacht, allerdings hatte ich es nicht geschafft diesen auf meinem Raspi4 (headless) zum Laufen zu bewegen.
Bitte versteht das Skript lediglich als Anregung - ich bin für Verbesserungen oder vielleicht sogar einer Adapterentwicklung auf dieser Basis dankbar! Ich habe ein Raspian auf meinem Pi laufen und habe es auch nicht mit anderen OS getestet.
Ich benutze CutyCapt zur Erstellung des Screenshots auf dem Pi. Hier der Link zu meiner Quelle: "https://www.booleanworld.com/take-screenshots-webpages-command-line/"
Dieses muss zunächst installiert werden:
sudo apt install cutycapt
Im Anschluss muss noch xvfb installiert werden, damit das ganze auch auf dem headless Raspi läuft:
sudo apt-get install xvfb
Nach der Installation kann mit folgendem Befehl im Terminal ein Screenshot erzeugt werden:
xvfb-run --server-args="-screen 0, 1280x1200x24" cutycapt --url=http://www.demo.com --out=demo.png
Da unser Ziel ja das Erstellen von Screenshot unseres Flot-Adapters ist, habe ich noch ein "--delay=20000" eingefügt. Dadurch hat der Graph genügend Zeit zu laden und wir bekommen nicht nur ein Screenshot des Ladesymbols des Flot-Graphen.
Ab hier kann natürlich jeder selbst weitermachen und sich über Speicherorte oder ähnliches seine eigenen Gedanken machen. Ich für meinen Teil habe als --out erstmal einen neuen Ordner unter /opt/iobroker/charts erstellt (auf Userrights achten!). Ich habe ferner über Text2Command eine Regel erstellt, welche mir in einen definierten Datenpunkt einen Text schreibt, welcher definiert welches Diagramm ich geschickt bekommen möchte. So kann ich zum Beispiel schreiben: "Zeig mir den Verbrauch" und bekomme das Bild des Plot-Charts meines Smart-Meters. Ich nutze dabei eine "Schreibe Text in den Zustand" Regel mit dem Triggerwort "Zeig mir".
Diesen nun durch Text2Command gesetzten Datenpunkt nutze ich in einem Blockly-Script zur Bestimmung der Ziel URL. Ich habe diesen Datenpunkt im folgenden Blockly-Export als Platzhalter mit "trigger" bezeichnet.
Natürlich sind hier noch viele Anpassungen zu machen und es ist sicherlich weit weg von perfekt, aber für mich erfüllt dieses Script alle Anforderungen und ich dachte es ist nicht verkehrt dieses hier zu teilen.
Wichtige Anpassungen:
- Ihr müsst im Trigger die korrekte ObjektID abfragen (ich gehe davon aus, dass grundlegende Blockly Kenntnisse da sind) und diese auch etwas später im Ablauf nochmal einsetzen (ist wieder mit einem Text-Block "trigger" markiert)
- Ihr müsst den Platzhalter der Flot-Chart URL durch eine richtige URL ersetzten. Diese bekommt Ihr wie immer aus dem Flot-Editor. Achtet bitte darauf die scheinbar doppelten Anführungszeichen beizubehalten. Sprich aus "URL aus Flot" wird wieder "URL" inklusive der sonst eigentlich überflüssigen Anführungszeichen.
- Solltet Ihr mehrere Charts abfragen wollen muss lediglich das If-else Statement um ein if erweitert werden (Zahnrad im Block).
Dann solltet Ihr das ganze per Nachricht über Telegramm auslösen können. Ich freue mich auf Rückmeldungen!
-
@Trident
habe es angepasst und ausgeführt. Allerdings bekomme ich als Antwort nur den Pfad vom Bild.
In diesem Ordner ist aber kein Bild vorhanden. Gibt es spezielle Voraussetzungen, dass das mit einem Raspberry Pi funktioniert?Edit:
Ein Screenshot von Google oder vom Forum erhalte ich aber leider nicht vom Flot Diagramm. Vermute mal, dass es den Link nicht richtig erkennt. -
Hast du an die Anführungszeichen um die url geachtet? Es hört sich für mich so an als würden die fehlen - ich weiß im Beispiel sind sie auch nicht und das klappt auch bei einfachen url. Die von flow klappen nur mit zusätzlichen „“ am Anfang und Ende.
-
@Trident ja hab ich auch schon probiert. Mit " und ' und sogar mit <>.
Führe es inzwischen auch direkt im Terminal aus und da zerstückelt es mir immer die URL.
-
Das ist komisch - ich hab die url immer direkt aus dem flot-Editor in die „“ kopiert. Klappt anstandslos im Terminal und auch über telegram bzw. IoBroker.
Da andere Websites gehen kann es ja auch kein Rechte-Problem mit dem Ordner sein...
Oder hast du die Ausführung hier anders gestartet? Hab bei mir noch chmod 700, chown iobroker und chgrp iobroker auf dem Speicherort ausgeführt.
-
@Trident wenn ich über den Terminal, die URL von Google eintrage, wird ein Screenshot von Google gemacht und abgespeichert. Wenn ich aber als url die vom Flot Editor eintrage, wird die URL zerstückelt, weil es als ganzes nicht gesehen wird.
Die URL für den Flot, ist ja sehr lange mit all den Einstellungen für den Graph.Da die URL https hat, hab ich "--insecure" hinzugefügt und mit der URL vom Forum ausprobiert. Das klappt auch.
Die Authentifizierung im Web Adapter ist auch ausgeschaltet.Eine weitere Änderung und zwar setze ich ein "-a" nach run ein. Sonst macht er bei mir nämlich gar nichts.
Also so: xvfb-run -a --server-args ... -
Das zerstückeln der URL sollte eigentlich durch die Anführungszeichen verhindert werden... Genau aus dem Grund musste ich die auch anfügen (wie du ja auch selbst schreibst) ...
Ich habe bei meinem Flot kein https - vielleicht ist das ein Problem?Der String den ich nutze sieht wie folgt aus:
"http://192. ...." danach folgen alle Einstellungen von flot (sehr lang). Hast du mal aus dem iobroker Skript heraus die debug-ausgabe ins terminal kopiert und ausgeführt? -
@Trident hab es hinbekommen. Es fehlte ein / am Ende von der Chart_URL.
Danke fürs teilen und helfen
-
Sehr cool! Freut mich das es klappt!
-
@Trident Kannst Du sagen wie Du dies genau eingegeben hast (chmod 700, chown iobroker und chgrp iobroker)? Hab wenig Ahnung von Linux......habe Probleme beim Ausführen als User Iobroker. Mit dem Pi User funktioniert es.
-
@uwe72 Ich konnte den vorherigen Kommentar nicht löschen. Aber funktioniert nun. Echt klasse Sache!!
-
Moin zusammen,
da ich auch einen Raspi 4 besitze bin ich auf die hier vorgestellte Möglichkeit, Screenshots zu erstellen, gekommen. Super, dass @Trident dieses ausgetüftelt hat.
Leider komme ich jedoch nicht ganz damit zurecht. Ich nutze kein Text2Command (mehr), daher habe ich dieses aus dem Script ausgebaut:
Scheint auch zu funktionieren, denn erste und zweite Nachricht kommen an. Die 2. Nachricht erscheint jedoch doppelt und zwar mit
/opt/iobroker/charts/chart.png
/opt/iobroker/charts/chart.pngEin Bild ist nicht angehängt und es ist auch keines im Ordner zu finden.
Installiert habe ich alles, den Link von FLOT in "" gepackt. -a nach run habe ich auch getestet, leider wird auch hierbei kein Bild geschickt, jedoch geht die Nachricht /opt/iobroker/charts/chart.png nur noch einmal ein.
Ich nutze IoBroker ohne https, daher habe ich sonst nichts angepasst.
Hat noch jemand eine Idee?
Nachtrag: 700 er Berechtigung ist auch gesetzt
-
Hi, hast du mal versucht den Befehl im Terminal auszuführen ? Danach sollte ein Bild in dem von dir gewählten Pfad liegen. Dann wüssten wir zumindest, dass dieser Teil funktioniert. Ich tippe hier ist noch was falsch.
Viele Grüße
-
@Trident Wenn ich die Erstellung über das Terminal auslöse, wie bestimme ich dann den Speicherort?
xvfb-run --server-args="-screen 0, 1280x1200x24" cutycapt --url=http://www.google.de --out=demo.png
dürfte ja nicht reichen, oder?
-
@PatrickFro
so zum Beispiel:xvfb-run --server-args="-screen 0, 1280x1200x24" cutycapt --url=http://www.google.de --out=/home/pi/screenshot/demo.png
-
@Malaus Danke, damit klappt zumindest Google schon. Ich baue mal mein Blockly nach, hatte es aus Frust gelöscht und berichte, ob es nun auch damit klappt
-
-
@PatrickFro
hast du dir das Bild mal angeschaut? Ist es ein richtiges Bild? Hab gesehen du nutzt kein Delay um die Seite aufzurufen.
Kann das sein, dass du kein Delay hast? Also das du dem ganzen keine Zeit gibst, ein Bild zu erstellen?So sieht das bei mir aus:
xvfb-run cutycapt --min-width=1300 --min-height=400 --delay=2500 --url=
Und dann brauchst du nochmal eine Verzögerung um das Bild abzuspeichern. Bei mir sind das 6 Sekunden.
-
-
So, es klappt nun. Ich musste einmal die Neuerstellung deaktivieren, den exec Befehl. Seit dem klappt es, auch mit dem gerade erstellten Bild. Warum weiß ich aber nicht
Danke Euch beiden!