Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. Screenshot Flot-Charts über Telegram verschicken

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    14
    1
    425

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    613

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.8k

Screenshot Flot-Charts über Telegram verschicken

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
chartstelegramblockly
40 Beiträge 9 Kommentatoren 6.1k Aufrufe 13 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • J Offline
    J Offline
    jwerlsdf
    schrieb am zuletzt editiert von jwerlsdf
    #31

    Hallo,
    bei mir werden schon einmal die screenshots erzeugt. Jetzt habe ich noch zwei Fragen: Screens aus der VIS gehen wohl nicht erstellen/ verschicken?!

    Bei den Flot-Diagrammen wird nur das Ladesymbol angezeigt, wo muss ich denn genau den delay befehl hinkopieren?

    xvfb-run --server-args="-screen 0, 1280x1200x24" cutycapt --url="http://192..." --out=/home/pi/Pictures/Sprittpreis.png

    OK, Frage 2 hat sich geklärt: xvfb-run --server-args="-screen 0, 1024x768x24" cutycapt --delay=20000 --url

    Noch eine Frage:
    Wie muss denn genau die Einträge zu text 2 command aussehen?

    M 1 Antwort Letzte Antwort
    0
    • M Malaus

      @PatrickFro habe keine Vis. Ich erstelle damit einen Screenshot von Grafana. Das ist ja auch lokal, daher dachte ich, dass es vielleicht bei dir auch klappt.

      B Offline
      B Offline
      bert200000
      schrieb am zuletzt editiert von
      #32

      @Malaus hallo, wie machst du das mit Grafana, sobald ein &-Zeichen in der URL ist klappt der Befehl nicht mehr.

      M 1 Antwort Letzte Antwort
      0
      • B bert200000

        @Malaus hallo, wie machst du das mit Grafana, sobald ein &-Zeichen in der URL ist klappt der Befehl nicht mehr.

        M Offline
        M Offline
        Malaus
        schrieb am zuletzt editiert von
        #33

        @bert200000
        Mein Link sieht so aus:

        http://192.168.178.141:3000/d/pMX2uwigk/strom?orgId=1&width=1440&height=300&kiosk=tv&refresh=30s/

        B 1 Antwort Letzte Antwort
        0
        • M Malaus

          @bert200000
          Mein Link sieht so aus:

          http://192.168.178.141:3000/d/pMX2uwigk/strom?orgId=1&width=1440&height=300&kiosk=tv&refresh=30s/

          B Offline
          B Offline
          bert200000
          schrieb am zuletzt editiert von bert200000
          #34

          @Malaus komisch, geb ich das im Terminal ein:

          xvfb-run --server-args="-screen 0, 1024x768x24" cutycapt --delay=10000 --http://192.168.1.35:3000/d-solo/8g5UgojZk/corona-deutschland?orgId=1&refresh=15m&panelId=2 --out=/opt/iobroker/ipcam/test1.png

          bekomme ich als Ausgabe:
          [1] 14276
          [2] 14277
          -bash: --out=/opt/iobroker/ipcam/test1.png: Datei oder Verzeichnis nicht gefunden
          [2]+ Fertig refresh=15m

          Geb ich aber das ein funktionierts:

          xvfb-run --server-args="-screen 0, 1024x768x24" cutycapt --delay=10000 --url=http://192.168.1.35:3000/d/8g5UgojZk/corona-deutschland --out=/opt/iobroker/ipcam/test1.png

          Aber so ist halt das Diagram nicht Fullscreen.test1.png

          M 1 Antwort Letzte Antwort
          0
          • B bert200000

            @Malaus komisch, geb ich das im Terminal ein:

            xvfb-run --server-args="-screen 0, 1024x768x24" cutycapt --delay=10000 --http://192.168.1.35:3000/d-solo/8g5UgojZk/corona-deutschland?orgId=1&refresh=15m&panelId=2 --out=/opt/iobroker/ipcam/test1.png

            bekomme ich als Ausgabe:
            [1] 14276
            [2] 14277
            -bash: --out=/opt/iobroker/ipcam/test1.png: Datei oder Verzeichnis nicht gefunden
            [2]+ Fertig refresh=15m

            Geb ich aber das ein funktionierts:

            xvfb-run --server-args="-screen 0, 1024x768x24" cutycapt --delay=10000 --url=http://192.168.1.35:3000/d/8g5UgojZk/corona-deutschland --out=/opt/iobroker/ipcam/test1.png

            Aber so ist halt das Diagram nicht Fullscreen.test1.png

            M Offline
            M Offline
            Malaus
            schrieb am zuletzt editiert von
            #35

            @bert200000 ich hab in meinem Link nochmal zusätzlich die Auflösung drin.
            Hast du das auch mal ausprobiert?

            1 Antwort Letzte Antwort
            0
            • J jwerlsdf

              Hallo,
              bei mir werden schon einmal die screenshots erzeugt. Jetzt habe ich noch zwei Fragen: Screens aus der VIS gehen wohl nicht erstellen/ verschicken?!

              Bei den Flot-Diagrammen wird nur das Ladesymbol angezeigt, wo muss ich denn genau den delay befehl hinkopieren?

              xvfb-run --server-args="-screen 0, 1280x1200x24" cutycapt --url="http://192..." --out=/home/pi/Pictures/Sprittpreis.png

              OK, Frage 2 hat sich geklärt: xvfb-run --server-args="-screen 0, 1024x768x24" cutycapt --delay=20000 --url

              Noch eine Frage:
              Wie muss denn genau die Einträge zu text 2 command aussehen?

              M Offline
              M Offline
              maboe
              schrieb am zuletzt editiert von
              #36

              @jwerlsdf Ich habe auch versucht, die Screens aus der VIS zu versenden, bin aber auch immer nur bis zum Loading Spinner gekommen. Nun habe ich nach einigen Stunden Herumprobieren eine Lösung gefunden, die sich allerdings nur in JavaScript umsetzen lässt. Die Lösung basiert auf der Verwendung von Chromium.

              Zunächst wird das Tool Puppeteer benötigt. Dazu den Javascript Adapter öffnen und oben unter Module 'puppeteer' eintragen.
              Anschließend muss Chromium headless installiert werden. Dies dient dazu, den Browser zu benutzen, als würde man tatsächlich davor sitzen. Die Vorgehensweise ist hier beschrieben:
              https://code-flow-hjbello.blogspot.com/2018/11/make-puppeteer-work-with-raspbian-vers.html
              Es können statt der dort angegeben Versionen optional auch die neuen installiert werden.

              Anschließend kann Puppeteer genutzt werden. Hier z.B. mein Script, welches bei einer Telegram Nachricht mit einem Screenshot aus Vis antwortet:

              on({id: "telegram.0.communicate.request", change: "any"}, function (obj) {
                var value = obj.state.val;
                var oldValue = obj.oldState.val;
                if (getState("telegram.0.communicate.request").val == '[Maboe]/screen') {
                  sendTo("telegram", "send", {
                      text: 'Alles klar - Ich erstelle das Bild! Einen Moment bitte ... Es wird ungefähr 25 Sekunden brauchen'
                  });
                  bild_pfad = '/opt/iobroker/charts/chart.png';
                    async function run () {
                      const browser = await puppeteer.launch({executablePath: '/usr/bin/chromium-browser'});
                      const page = await browser.newPage();
                      await page.goto('http://192.168.x.xxx:8082/vis/index.html?MatDesign#E_Home');
                      await sleep(20000)
                      await page.screenshot({path: bild_pfad});
                      browser.close();
                    }
                    run();
                    timeout = setTimeout(function () {
                      sendTo("telegram", "send", {
                          text: bild_pfad
                      });
                    }, 24000);
                }
              });
              

              Angepasst werden müssen die Url (s. "goTo") sowie "[Maboe]/screen" (Telegram Nutzernamen + Kommando des Users). Den trigger aus dem originalen Blockly nutze ich nicht, da ich nur eine Vis-View abfrage.
              Wenn ich mit meinem Handy (Nutzer Maboe) nun die Nachricht "/screen" schicke, bekomme ich den Screenshot.

              J 1 Antwort Letzte Antwort
              0
              • M maboe

                @jwerlsdf Ich habe auch versucht, die Screens aus der VIS zu versenden, bin aber auch immer nur bis zum Loading Spinner gekommen. Nun habe ich nach einigen Stunden Herumprobieren eine Lösung gefunden, die sich allerdings nur in JavaScript umsetzen lässt. Die Lösung basiert auf der Verwendung von Chromium.

                Zunächst wird das Tool Puppeteer benötigt. Dazu den Javascript Adapter öffnen und oben unter Module 'puppeteer' eintragen.
                Anschließend muss Chromium headless installiert werden. Dies dient dazu, den Browser zu benutzen, als würde man tatsächlich davor sitzen. Die Vorgehensweise ist hier beschrieben:
                https://code-flow-hjbello.blogspot.com/2018/11/make-puppeteer-work-with-raspbian-vers.html
                Es können statt der dort angegeben Versionen optional auch die neuen installiert werden.

                Anschließend kann Puppeteer genutzt werden. Hier z.B. mein Script, welches bei einer Telegram Nachricht mit einem Screenshot aus Vis antwortet:

                on({id: "telegram.0.communicate.request", change: "any"}, function (obj) {
                  var value = obj.state.val;
                  var oldValue = obj.oldState.val;
                  if (getState("telegram.0.communicate.request").val == '[Maboe]/screen') {
                    sendTo("telegram", "send", {
                        text: 'Alles klar - Ich erstelle das Bild! Einen Moment bitte ... Es wird ungefähr 25 Sekunden brauchen'
                    });
                    bild_pfad = '/opt/iobroker/charts/chart.png';
                      async function run () {
                        const browser = await puppeteer.launch({executablePath: '/usr/bin/chromium-browser'});
                        const page = await browser.newPage();
                        await page.goto('http://192.168.x.xxx:8082/vis/index.html?MatDesign#E_Home');
                        await sleep(20000)
                        await page.screenshot({path: bild_pfad});
                        browser.close();
                      }
                      run();
                      timeout = setTimeout(function () {
                        sendTo("telegram", "send", {
                            text: bild_pfad
                        });
                      }, 24000);
                  }
                });
                

                Angepasst werden müssen die Url (s. "goTo") sowie "[Maboe]/screen" (Telegram Nutzernamen + Kommando des Users). Den trigger aus dem originalen Blockly nutze ich nicht, da ich nur eine Vis-View abfrage.
                Wenn ich mit meinem Handy (Nutzer Maboe) nun die Nachricht "/screen" schicke, bekomme ich den Screenshot.

                J Offline
                J Offline
                jwerlsdf
                schrieb am zuletzt editiert von jwerlsdf
                #37

                @maboe
                vielen Dank schon einmal für dein Skript. Diese habe ich verstanden.
                Ich komme aber noch nicht ganz klar mit puppeteer. Würdest du das bitte noch einmal genauer schreiben?
                Ich habe bereits den Chromium-browser 84.
                Dementsprechend brauchte ich nur noch den Punkt 2: Install the necessary debian dependencies
                Das habe ich gemacht.
                Wie muss ich aber genau bei Punkt 4 vorgehen?
                Ich bekomme im Moment folgenden Fehler:

                script.js.Bild_per_Telegram_senden: ReferenceError: puppeteer is not defined
                
                jhubigJ 1 Antwort Letzte Antwort
                0
                • J jwerlsdf

                  @maboe
                  vielen Dank schon einmal für dein Skript. Diese habe ich verstanden.
                  Ich komme aber noch nicht ganz klar mit puppeteer. Würdest du das bitte noch einmal genauer schreiben?
                  Ich habe bereits den Chromium-browser 84.
                  Dementsprechend brauchte ich nur noch den Punkt 2: Install the necessary debian dependencies
                  Das habe ich gemacht.
                  Wie muss ich aber genau bei Punkt 4 vorgehen?
                  Ich bekomme im Moment folgenden Fehler:

                  script.js.Bild_per_Telegram_senden: ReferenceError: puppeteer is not defined
                  
                  jhubigJ Offline
                  jhubigJ Offline
                  jhubig
                  schrieb am zuletzt editiert von
                  #38

                  @jwerlsdf
                  Hallo,

                  hatte soeben die gleiche "Problematik". Ich gehe davon aus, dass du den Chromium Browser + codecs bereits installiert hast. Du hast puppeteer auch bei den zusätzlichen npm Modulen im javascript-Adapter hinzugefügt?
                  EIgentlich sollte das Modul dann automatisch hinzugefügt werden (schau mal unter /opt/iobroker/node_modules ob du es finden kannst). Wenn nicht dann gehe in das Verzeichnis /opt/iobroker/node_modules mit dem terminal und installiere puppeteer manuel mit "npm install puppeteer". Beim Script von @maboe habe ich ganz oben noch folgendes ergänzt:

                  
                  var timeout;
                  const puppeteer = require("puppeteer");
                  
                  on({id: "telegram.0.communicate.request", change: "any"}, function (obj) {
                    var value = obj.state.val;
                    var oldValue = obj.oldState.val;
                    if (getState("telegram.0.communicate.request").val == '[Maboe]/screen') {
                      sendTo("telegram", "send", {
                          text: 'Alles klar - Ich erstelle das Bild! Einen Moment bitte ... Es wird ungefähr 25 Sekunden brauchen'
                      });
                      bild_pfad = '/opt/iobroker/chart.png';
                        async function run () {
                          const browser = await puppeteer.launch({executablePath: '/usr/bin/chromium-browser'});
                          const page = await browser.newPage();
                          await page.goto('http://192.168.x.xxx:8082/vis/index.html?MatDesign#E_Home');
                          await sleep(20000)
                          await page.screenshot({path: bild_pfad});
                          browser.close();
                        }
                        run();
                        
                        timeout = setTimeout(function () {
                                sendTo('telegram', bild_pfad)
                              }, 24000);
                    }
                  });
                  

                  So funktioniert es bei mir.

                  Hoffe das hilft.

                  Grüße
                  Johannes

                  J 1 Antwort Letzte Antwort
                  1
                  • jhubigJ jhubig

                    @jwerlsdf
                    Hallo,

                    hatte soeben die gleiche "Problematik". Ich gehe davon aus, dass du den Chromium Browser + codecs bereits installiert hast. Du hast puppeteer auch bei den zusätzlichen npm Modulen im javascript-Adapter hinzugefügt?
                    EIgentlich sollte das Modul dann automatisch hinzugefügt werden (schau mal unter /opt/iobroker/node_modules ob du es finden kannst). Wenn nicht dann gehe in das Verzeichnis /opt/iobroker/node_modules mit dem terminal und installiere puppeteer manuel mit "npm install puppeteer". Beim Script von @maboe habe ich ganz oben noch folgendes ergänzt:

                    
                    var timeout;
                    const puppeteer = require("puppeteer");
                    
                    on({id: "telegram.0.communicate.request", change: "any"}, function (obj) {
                      var value = obj.state.val;
                      var oldValue = obj.oldState.val;
                      if (getState("telegram.0.communicate.request").val == '[Maboe]/screen') {
                        sendTo("telegram", "send", {
                            text: 'Alles klar - Ich erstelle das Bild! Einen Moment bitte ... Es wird ungefähr 25 Sekunden brauchen'
                        });
                        bild_pfad = '/opt/iobroker/chart.png';
                          async function run () {
                            const browser = await puppeteer.launch({executablePath: '/usr/bin/chromium-browser'});
                            const page = await browser.newPage();
                            await page.goto('http://192.168.x.xxx:8082/vis/index.html?MatDesign#E_Home');
                            await sleep(20000)
                            await page.screenshot({path: bild_pfad});
                            browser.close();
                          }
                          run();
                          
                          timeout = setTimeout(function () {
                                  sendTo('telegram', bild_pfad)
                                }, 24000);
                      }
                    });
                    

                    So funktioniert es bei mir.

                    Hoffe das hilft.

                    Grüße
                    Johannes

                    J Offline
                    J Offline
                    jwerlsdf
                    schrieb am zuletzt editiert von jwerlsdf
                    #39

                    @jhubig
                    vielen Dank.
                    Mit deinem Skript geht es nun.
                    Das Bild wird bei mir nun richtig abgelegt und es wird auch ein "richtiges" Bild erzeugt.
                    In Telegram bekomme ich aber nun folgendes angezeigt und nicht das tatsächliche Bild: /media/usb1/chart.png

                    Wie bekomme ich nun in Telegram ein Bild angezeigt?

                    Ok. Ich musste das Skript noch im unteren Teil verändern. So ging es dann auch bei mir. Vielen Dank noch mal für die Hilfe!

                    var timeout;
                    const puppeteer = require("puppeteer");
                    
                    on({id: "telegram.0.communicate.request", change: "any"}, function (obj) {
                     var value = obj.state.val;
                     var oldValue = obj.oldState.val;
                     if (getState("telegram.0.communicate.request").val == '[Mi]/screen') {
                       sendTo("telegram", "send", {
                           text: 'Alles klar - Ich erstelle das Bild! Einen Moment bitte ... Es wird ungefähr 25 Sekunden brauchen'
                       });
                       bild_pfad = '/media/usb1/chart.png';
                         async function run () {
                           const browser = await puppeteer.launch({executablePath: '/usr/bin/chromium-browser'});
                           const page = await browser.newPage();
                           await page.goto('http://192.168.178.28:8082/vis/index.html#034_Multimedia_TV_Programm');
                           await sleep(20000)
                           await page.screenshot({path: bild_pfad});
                           browser.close();
                         }
                         run();
                         
                         timeout = setTimeout(function () {
                                 sendTo('telegram', bild_pfad)
                               }, 24000);
                    }
                         function sendphoto() {                      // Warteschleife, 3 Sekunden, damit das Bild erzeugt wird
                                setTimeout(waittime, 3000); 
                    }
                    function waittime() {                       // Nach der Warteschleife, sende das Bild per Telegram
                       sendTo('telegram', "/media/usb1/chart.png");    
                     }
                    });
                    
                    

                    0 1 Antwort Letzte Antwort
                    0
                    • J jwerlsdf

                      @jhubig
                      vielen Dank.
                      Mit deinem Skript geht es nun.
                      Das Bild wird bei mir nun richtig abgelegt und es wird auch ein "richtiges" Bild erzeugt.
                      In Telegram bekomme ich aber nun folgendes angezeigt und nicht das tatsächliche Bild: /media/usb1/chart.png

                      Wie bekomme ich nun in Telegram ein Bild angezeigt?

                      Ok. Ich musste das Skript noch im unteren Teil verändern. So ging es dann auch bei mir. Vielen Dank noch mal für die Hilfe!

                      var timeout;
                      const puppeteer = require("puppeteer");
                      
                      on({id: "telegram.0.communicate.request", change: "any"}, function (obj) {
                       var value = obj.state.val;
                       var oldValue = obj.oldState.val;
                       if (getState("telegram.0.communicate.request").val == '[Mi]/screen') {
                         sendTo("telegram", "send", {
                             text: 'Alles klar - Ich erstelle das Bild! Einen Moment bitte ... Es wird ungefähr 25 Sekunden brauchen'
                         });
                         bild_pfad = '/media/usb1/chart.png';
                           async function run () {
                             const browser = await puppeteer.launch({executablePath: '/usr/bin/chromium-browser'});
                             const page = await browser.newPage();
                             await page.goto('http://192.168.178.28:8082/vis/index.html#034_Multimedia_TV_Programm');
                             await sleep(20000)
                             await page.screenshot({path: bild_pfad});
                             browser.close();
                           }
                           run();
                           
                           timeout = setTimeout(function () {
                                   sendTo('telegram', bild_pfad)
                                 }, 24000);
                      }
                           function sendphoto() {                      // Warteschleife, 3 Sekunden, damit das Bild erzeugt wird
                                  setTimeout(waittime, 3000); 
                      }
                      function waittime() {                       // Nach der Warteschleife, sende das Bild per Telegram
                         sendTo('telegram', "/media/usb1/chart.png");    
                       }
                      });
                      
                      

                      0 Offline
                      0 Offline
                      007Schneiderlein
                      schrieb am zuletzt editiert von
                      #40

                      Hi @jwerlsdf und jhubig,

                      also ich muss sagen, dass mit euerer Methode über Puppeteer ich nun endlich screenshots von vis auf telegram bekomme.
                      Ich bin mehr als begeistert! und zugleich immer wieder erstaunt was diese iobroker community leistet. 🙏

                      Eine kleine Frage hätte ich noch..
                      meine screens sind nicht vollständig, vermutlich weil meine VIS Views eine Auflösung von 1280x800 (für 10" Tablet Querformat) besitzen.
                      Da ich nach über 5 Jahren Blockly offensichtlich immer noch nichts im Javascript-Bereich dazugelernt habe 🤦‍♂️, nun meine Frage:
                      Gäbe es denn noch die Möglichkeit die Auflösung im Script anzupassen? 😇

                      Vorab schon mal herzlichen Dank!
                      Grüße Stefan

                      1 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate
                      FAQ Cloud / IOT
                      HowTo: Node.js-Update
                      HowTo: Backup/Restore
                      Downloads
                      BLOG

                      634

                      Online

                      32.6k

                      Benutzer

                      81.9k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe