Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Praktische Anwendungen (Showcase)
    4. Grafana Diagramm per Telegram versenden

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Grafana Diagramm per Telegram versenden

    This topic has been deleted. Only users with topic management privileges can see it.
    • Achim Weis
      Achim Weis last edited by Achim Weis

      Hi

      Hier eine kleine Doku wie man Grafana Diagramme per Telegram versenden kann.
      Ich habe von der kompletten Doku nichts selbst erfunden, sondern aus diversen Quellen zusammen kopiert.

      Läuft auf Raspi4/4GB

      Grundidee:

      Grafana Diagramm als PNG rendern, lokal speichern und per Telegram versenden.

      Fazit:
      Läuft 🙂
      e047c11a-65fa-4832-9237-e6f0b99d3f3c-image.png*Telegram mit "eigener Tastatur" als Menüsteuerung

      1. Grafana und ggf. influxdb installieren
      Das ist hier schon perfekt beschrieben:
      https://www.verdrahtet.info/2020/02/14/installation-von-influxdb-grafana-inkl-verbindung-zu-iobroker/

      login: admin/admin

      2. Diagramm als PNG rendern
      Wenn man jetzt in Grafana versucht das Diagramm zu exportieren, stolpert man über das erste Problem:
      image_2020-10-21_23-41-05.png

      Da PhantomJS nicht so einfach für ARM vorhanden ist, muss man also die render-Engine tauschen.

      2.1 per SSH auf den raspi einloggen
      https://www.heise.de/tipps-tricks/Raspberry-Pi-SSH-einrichten-so-geht-s-4190645.html

      danach muss eine ganze Reihe an Befehlen ausgeführt werden.

      sudo su
      
      apt-get update
      apt-get install git
      cd /var/lib/grafana/plugins
      git clone https://github.com/grafana/grafana-image-renderer
      cd grafana-image-renderer
      npm -g install yarn
      
      
      npm -g install npm
      npm -g install yarn
      npm -g install typescript
      
      npm config set unsafe-perm=true
      
      npm i grpc
      npm i husky
      npm i puppeteer
      npm i postinstall
      npm i install
      npm install
      
      
      yarn install --pure-lockfile
      yarn run build
      
      cp plugin_start_linux_amd64 plugin_start_linux_arm
      

      jetzt kann man endlich den chromium Browser installieren

      sudo apt-get install chromium-browser
      

      Danach kann man in der frisch kopierten Datei den Chromium hinterlegen.
      /var/lib/grafana/plugins/grafana-image-renderer/plugin_start_linux_arm

      nano plugin_start_linux_arm
      

      und die rote Zeile einfügen

      export GF_RENDERER_PLUGIN_CHROME_BIN="/usr/bin/chromium-browser"
      

      EDIT: mittlerweile heißt der chromium browser wohl nur noch chromium.
      daher muss man die Zeile in

      #!/bin/bash
      DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
      export GF_RENDERER_PLUGIN_CHROME_BIN="/usr/bin/chromium"
      node ${DIR}/build/app.js

      ändern

      Danach mit
      [Strg] + [O] und [Strg] + [X]
      speichern und beenden

      #!/bin/bash
      DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
      export GF_RENDERER_PLUGIN_CHROME_BIN="/usr/bin/chromium-browser"
      node ${DIR}/build/app.js

      Fertig.

      Jetzt noch neu starten

      sudo systemctl restart grafana-server.service
      

      und nach 30 Sekunden testen ob der service sauber gestartet wurde:

      sudo systemctl status grafana-server.service
      

      logs finden sich hier

      /var/log/grafana
      
      

      Am besten startet man den Raspi einmal neu.... keine Ahnung ob das nötig ist, unter "Windows95 gelernt" - funktioniert bis heute... 🙂

      3. Diagram als PNG Bild exportieren (TEST)
      572f198f-0a1a-4d47-a4e7-e11dc5e31684-image.png

      c5133629-f061-4564-a748-0a181b92f52e-image.png

      Wenn es funktioniert --> gleich den Link kopieren

      4. Bild per CURL und API Key speichern
      https://mattionline.de/grafana-api-export-graph-as-png/#get-the-graph-url

      Einfach in Grafana den API key generieren.
      99e3d963-f17f-4e3a-96cc-fa3b81937149-image.png

      Danach wie von Matti beschrieben den CURL Befehl zusammenbasteln

      curl -H "Authorization: Bearer eyJrIjoieDRzbjh6R1__APIKEY__joiZXhwb3J0IiwiaWQiOjF9" "http://192.168.2.132:3000/render/dashboard-solo/db/mathias?panelId=22&from=now-24h&to=now&width=1000&height=500" > ./home/pi/filename.png

      rot = dein API key
      grün = dein Verzeichnis der Wahl

      5. Blockly Beispiel
      10337dbf-ba90-4d1c-86bc-2d166b848d80-image.png

      In diesem Beispiel wird der EXEC Befehl mit dem CURL command abgesetzt und das Bild im Ordner
      ./home/pi/GrafanaExportTelegram gespeichert.
      Danach wartet das Skript 7 Sekunden (die Generierung dauert ca 5 Sekunden auf dem Raspi4)
      Danach wird im Telegram Blockly einfach der Pfad zur Datei als text eingetragen.

      Hinweis:

      1. Auf die Rechte des Ordners achten, falls ihr einen neuen anlegt. (777)
      2. JavaScript Adapter muss ebenfalls den exec Befehl erlauben
        9e9b5f7d-2539-4210-9d0a-ee67e926bfbc-image.png

      Offene Punkte:

      • Es kann sein, dass die Grafik gepuffert wird - dann muss man die Datei jeweils dynamisch benennen.
      • Man sollte die PNGs wohl irgendwann auch wieder löschen

      Vermutlich bekommt der eine oder andere Linux Halbgott einen Anfall, dass hier fast alles mit "sudo su" installiert wurde.
      Falls dem so ist --> gerne die Doku verbessern, aber bitte keine Security-Triaden hier posten.

      Viel Spaß damit.
      Diese Funktion hat mir seit meinem Wechsel von FHEM immer gefehlt.

      Wichtigste Quellen:
      https://mattionline.de/grafana-api-export-graph-as-png/#get-the-graph-url
      https://community.openhab.org/t/tutorial-grafana-rendering-on-raspberry-pi/71777/58
      https://www.verdrahtet.info/2020/02/14/installation-von-influxdb-grafana-inkl-verbindung-zu-iobroker/

      Asgothian 1 Reply Last reply Reply Quote 1
      • Asgothian
        Asgothian Developer @Achim Weis last edited by

        @Achim-Weis

        Eine Frage zu deinem (sehr interessanten) Showcase:

        läuft der PI bei Dir mit grafischer Oberfläche, oder geht das ganze auch wenn keine Oberfläche installiert ist ?

        A.

        Achim Weis 1 Reply Last reply Reply Quote 0
        • Achim Weis
          Achim Weis @Asgothian last edited by

          @Asgothian
          Keine GUI installiert. Chrome wird nur im headless Modus aufgerufen.

          1 Reply Last reply Reply Quote 0
          • RK62
            RK62 last edited by

            zur Info: Ab Grafana V7.x wird PhantomJS nicht mehr offiziell unterstützt:
            https://grafana.com/docs/grafana/latest/administration/image_rendering/

            Ich habe das daher wie empfohlen mit einem separaten Docker Container umgesetzt:

            • Diesen Docker Container zusätzlich implementieren:
              https://hub.docker.com/r/grafana/grafana-image-renderer

            • Im Grafana-Container dieses Environment setzen:
              https://github.com/grafana/grafana-image-renderer/blob/master/docs/remote_rendering_using_docker.md

              GF_RENDERING_SERVER_URL: http://<IP Renderer>:<PORT Renderer>/render
              GF_RENDERING_CALLBACK_URL: http://<IP Grafana>:<PORT Grafana>/
              GF_LOG_FILTERS: rendering:debug

            • Link für Grafik ermitteln unter Panel/Share/Direct link rendered image

            • Das Bild erzeuge ich dann via JavaScript und lege es in 0_userdata.0 ab damit es vom iobroker genutzt werden kann:

            const LogLevel = 'warn';
            const fs       = require('fs');
            
            function GetGrafanaBild(pPic, pURL) {
            
                const GrafanaBild = 'iobroker-data/files/0_userdata.0/tmp/' + pPic;
                const GrafanaURL  = 'http://<IP+PORT Garafana>/render/d-solo/' + pURL;
            
                request.get({url: GrafanaURL, encoding: "binary"},function(error,response,body){
                    fs.writeFile(GrafanaBild, body, "binary", function(err){
                        if (err) log('Fehler beim Bild speichern: ' + err, 'warn');
                        var vFileContent = fs.readFileSync(GrafanaBild);
                        writeFile('0_userdata.0', pPic, vFileContent, function (error) {
                            if (err) log('Fehler beim Bild kopieren: ' + err, 'warn');
                            else     log('Grafana Rendering Bild ' + pPic + ' abgeschlossen', LogLevel);
                        });
                    });
                });
            }    
            
            GetGrafanaBild('GrafanaRender_TEST1.png', 'hRtUTVaGk/heizung-temp?orgId=1&from=now-6h&to=now&var-Raum=All&panelId=2&width=300&height=200');
            

            Habe allerdings irgendwo gelesen, dass die Lösung mit dem Container für Rasberry's zu CPU-intensiv ist. Auf der Synology funktioniert es einwandfrei.

            1 Reply Last reply Reply Quote 1
            • R
              RkcCorian last edited by

              Sehr interessant!!

              Eine Frage hätte ich noch, die nicht komplett das Thema trifft, aber evtl. sind hier die "Richtigen" 🙈... es können unter Telegram Nachrichten auch Buttons angezeigt werden. Diese Buttons können über die Schriftart "Segoe UI Emoji" auch Symbole bekommen. Geht das auch mit png-Dateien? Was ich erreichen will... in meiner VIS habe ich bestimmte Symbole verwendet (png-Dateien) und es wäre schick, wenn ich mir eine Nachricht aufs Handy schicke, dass dann auf dem Button auch das passende Symbol erscheint und nicht ein nicht dazu passendes.
              Viiiiielen Dank im Voraus! Falls ich hier falsch bin bitte Teeren und Federn...

              1 Reply Last reply Reply Quote 0
              • First post
                Last post

              Support us

              ioBroker
              Community Adapters
              Donate

              695
              Online

              31.9k
              Users

              80.1k
              Topics

              1.3m
              Posts

              grafana telegram
              4
              5
              3072
              Loading More Posts
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes
              Reply
              • Reply as topic
              Log in to reply
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
              The ioBroker Community 2014-2023
              logo