Ankündigung

Einklappen
Keine Ankündigung bisher.

Grafana und InfluxDB neben Edomi. Installation und Best Practice

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #61
    Du siehst...keiner sagt was . Mach es nicht. Nimm eine extra Hardware oder eine VM (virtuelle Maschine) dafür her und mach dann Deine ersten Versuche mit ioBroker. Nicht auf EDOMI. Nicht unter centOS.

    Es gibt unzählige Youtuber die Dir den Einstieg in ioBroker und die Installation erleichtern werden/können.

    Kommentar


      #62
      Moin,
      das hätte ich auch vorgeschlagen...
      Nach Möglichkeit alle Services einzeln virtualisierten.
      Ob Proxmox, VMWare, Hyper-V und/oder Docker Container auf Alpine. Alles ist Möglich!
      Denk aber bitte an das Backup und mach auf jeden Fall ein Recovery-Test, um dein Backupkonzept zu verifizieren!

      ​​​​​Gruß
      Eddii

      Kommentar


        #63
        Ohje. Dann werd ich mir wohl einen alten RPI aus der Kiste holen und mal anfangen zu üben bevor ich direkt ans live System gehe. Ich hab es fast befürchtet das so eine Antwort kommt. Hatte aber gehofft das nicht.

        Ich danke für die Antworten durchs nicht antworten.

        Kommentar


          #64
          Zitat von stonie2oo4 Beitrag anzeigen

          Hab mich jetzt dank eurem Input dazu entschieden dies auf einem extra Server unabhängig von Edomi zu installieren.
          Es handelt sich dabei um ein Debian 11. Falls jemand eine einfache Anleitung benötigt, bin ich hier fündig geworden:
          https://computingforgeeks.com/how-to...-debian-linux/
          https://computingforgeeks.com/how-to...-debian-linux/
          Ich möchte InfluxDB und Grafana auf Proxmox in einem eigenen Container erstellen, und wollte hier nach obiger Anleitung vorgehen.
          Dafür habe ich Debian11 geladen und danach den Container "influx" erstellt, und Debian11 als Template ausgewählt.

          Der Container läuft und ich wechsle in die Konsole um die oben verlinkten Befehle einzutragen.
          Beim Befehl "sudo apt update" erscheint die Fehlermeldung "-bash: sudo: command not found"

          Wenn ich sudo nicht davorschreibe: "E: Malformed entry 1 in list file /etc/apt/sources.list.d/influxdb.list (Component)
          E: The list of sources could not be read".​

          Hab ich hier einen groben Denkfehler, und ich muss ganz anders vorgehen, also eine andere Installationsweise wählen?
          Oder muss ich den Umweg über VM/darin Docker installieren/ und dort die Container für Influx und Grafana erstellen?

          Liebe Grüße
          Zuletzt geändert von fudi6489; 09.01.2023, 12:35.

          Kommentar


            #65
            Zitat von fudi6489 Beitrag anzeigen
            Hab ich hier einen groben Denkfehler
            Du solltest einen Influx Container installieren, nicht einen Debian 11 Container und dann versuchen den als VM zu verwenden, um manuell Influx darein zu bringen..

            Ich kenn mich mit Proxmox nicht aus, ggf. kann Proxmox nativ docker Container.

            Ich habe bei mir in ESXi eine VM als Docker Host mit Debian. Darauf läuft docker und docker-compose.
            Zur Verwaltung der Container verwende ich Portainer (auch als Container). Damit kann man problemlos einen Influx Container und einen Grafana Container installieren.

            Schritte wären also:
            - Docker Host als VM auf Basis von Debian aufsetzen
            - In dieser VM docker + docker compose installieren
            - Portatiner als Container aufsetzen
            - Über das Portainer Webinterface
            - Influx Container installieren
            - Grafana Container installieren

            Kommentar


              #66
              Es gibt ja immer verschiedene Wege. Also ich habe mit Proxmox ein Debian 11 LXC Container erstellt und dort dann InfluxDB und Grafana installiert. Da ich eh grad am Testen bin, habe ich mal die Schritte etwas dokumentiert. Ob es der "richtige" oder "bessere" Weg ist, kann ich nicht sagen.

              Im Proxmox einen neuen Container erstellen. Falls das Debian 11 Template noch nicht installiert wurde, zuerst downloaden:
              grafik.png

              Dann den Container erstellen:
              grafik.png

              Ich habe jetzt mal 15 GB für die Disk zugewiesen. (Grösser machen ist easy, kleiner manchmal nicht so ganz...)
              grafik.png

              Beim Memory habe ich 2 GB zugewiesen, weil InfluxDB z.T. schon etwas RAM benötigt. (Zumindest bei meinem Test Import von Edomi Datenarchiven kam ich über 1 GB)
              grafik.png

              Optional kann kann man noch folgende Optionen anpassen:
              grafik.png

              Danach den Container starten und sich mit root anmelden (Passwort ist das, was man beim Erstellen des Containers definiert hat).

              Da man nun mit root angemeldet ist, kann man auf SUDO verzichten.

              Wie üblich als erstes Linux updaten:
              Code:
              apt update && apt upgrade -y
              Danach ein paar weitere benötigte Pakete installieren:
              Code:
              apt install -y gnupg2 curl wget
              Mit den folgenden Befehlen wird InfluxDB und InfluxDB Client installiert und am Ende die Erstkonfiguration gestartet. Die Versionsnummer muss man halt jeweils anpassen. Aktuell ist 2.6.1:
              Code:
              wget https://dl.influxdata.com/influxdb/releases/influxdb2-2.6.1-amd64.deb
              sudo dpkg -i influxdb2-2.6.1-amd64.deb
              sudo service influxdb start
              sudo service influxdb status   # Optional zum Prüfen, mit Q beenden
              
              wget https://dl.influxdata.com/influxdb/releases/influxdb2-client-2.6.1-linux-amd64.tar.gz
              tar xvzf ./influxdb2-client-2.6.1-linux-amd64.tar.gz
              sudo cp influxdb2-client-2.6.1-linux-amd64/influx /usr/local/bin/
              
              influx setup​
              Hier kann man einen Account für InfluxDB und ein erster "Bucket" (ähnlich einer DB) erstellen. Dies waren meine Test-Eingaben (Retention=0 heisst, dass der Bucket nie gelöscht/überschrieben wird):
              grafik.png

              Danach kann man schon via Browser auf InfluxDB zugreifen: http://ip-adresse:8086
              grafik.png

              Damit später Edomi auf InfluxDB zugreifen kann, muss noch ein API-Token erstellt werden:
              grafik.png

              Rechts auf "Generate API Token" klicken und "All Access API Token" auswählen:
              grafik.png

              Dem API Token einen Namen vergeben (kann später geändert werden) und auf Save klicken:
              grafik.png

              Es wird nun ein Token erzeugt und angezeigt. Achtung: Dieser Token wird nur jetzt einmal angezeigt und kann später nicht mehr angezeigt werden! Unbedingt den Token (Text) markieren und irgendwo sicher abspeichern. (Der Befehl "Copy to Clipboard" hat bei mir ein Screenshot und nicht den Token-Text gespeichert! Könnte ein Bug sein. Empfehle den Token zu markieren und ihn als Text mit CTRL+C zu kopieren.)
              grafik.png
              Zuletzt geändert von rdeckard; 09.01.2023, 21:27.

              Kommentar


                #67
                Hier gehts weiter mit der Installation und Konfiguration des InfluxDB Data Archive LBS:

                In Edomi den LBS installieren:
                grafik.png
                grafik.png

                Beim Proxmox LXC Rocky Linux Edomi Container von startwarsfan muss noch folgendes in der Edomi Container Konsole eingegeben werden (Achtung: dies gilt nur für diesen Edomi-Container. Bei anderen "normalen" Edomi-Installationen den Instruktionen des LBS folgen!)

                Code:
                cd /usr/local/edomi/www/admin/include/php/  
                mkdir influx-client  
                cd influx-client/  
                composer require influxdata/influxdb-client-php​
                composer require php-http/guzzle7-adapter
                In Edomi eine neue Logikseite erstellen und den InfluxDB LBS einfügen. Jetzt können wir den LBS konfigurieren:
                grafik.png
                E2: Log-Level bei einem sehr grossen Full Copy evtl. auf 5 reduzieren (ist Default auf 8). Kann sonst u.U. sehr grosse Log-Dateien erzeugen!
                E3: URL von InfluxDB eingeben (unseren vorher erzeugten Proxmox-Container)
                E4: Den API-Token einfügen
                E5: Die Influx Org (in meinem Beispiel homelab)
                E6: Den Influx Bucket (in meinem Beispiel sensors_ever)

                Achtung: Falls man zuerst einfach mal ALLE bestehenden Edomi-Datenarchive zu InfluxDB EINMALIG kopieren möchte, muss man den unteren Teil konfigurieren (hier "Full Copy" gekennzeichnet).
                E10 kopiert alle Archive vom ersten möglichen Datum (E11 Default) bis zum letzten Eintrag (E12 leer lassen).
                E10 sollte man nicht fix eintragen, da sonst bei jedem Edomi-Start wieder ALLES nach InfluxDB kopiert wird. Also entweder über ein iKO verknüpfen oder wenn man es (wie in meinem Fall) fix einträgt unbedingt nach dem erfolgreichen Export wieder löschen (E10).

                E7 und E8 beziehen sich dann später auf den Sync von NEUEN Einträgen in Edomi Datenarchive. Das kann uns für den ersten Test noch egal sein. (Darauf achten, dass für diesen Test keine neuen Einträge in ein Edomi Datenarchiv geschrieben werden.)

                Nun müssen wir noch das Edomi Projekt aktivieren, da wir ja vorher noch paar Befehle in der Konsole eingegeben haben.

                In meinem Beispiel hatte ich übrigens 16 Mio. Edomi-Datenarchiveinträge.

                ​​grafik.png

                Möglicherweise wird Edomi bei sehr vielen Datenarchiv-Einträgen die folgende Fehlermeldung ausgeben und die Daten nicht kopieren:
                Code:
                Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19002576.php | Fehlercode: 1 | Zeile: 213 | Allowed memory size of 134217728 bytes exhausted (tried to allocate 114554112 bytes)    FATALERROR

                In diesem Fall kann man als Workaround das Memory_Limit von PHP temporär erhöhen:
                Code:
                nano /etc/php.ini
                Den Standardwert "memory_limit = 128M" auf "memory_limit = 1024M" erhöhen. (Diesen Wert nach dem erfolgreichen Export wieder zurücksetzen, da es im normalen Betrieb nicht notwendig ist.)
                Edomi Server neu starten, damit dieser Wert übernommen wird.

                Bei mir hat übrigens (auf meiner Proxmox Hardware mit Intel i3) das Ganze ca. 20 Min. gedauert.
                Zuletzt geändert von rdeckard; 10.01.2023, 08:19.

                Kommentar


                  #68
                  In InfluxDB prüfen, ob der Edomi Export (Full Copy) funktioniert hat.

                  Nachdem der in meinem letzten Beitrag beschriebene Edomi Export (Full Copy aller Datenarchive) hoffentlich geklappt hat, möchte man natürlich mal sehen, ob das in InfluxDB angekommen ist.

                  Dazu meldet man sich in InfluxDB an und klickt links auf das "Data Explorer" Symbol. Da mich zu Beginn vorallem die Anzahl Datensätze und noch kein Diagramm interessiert, klicke ich rechts auf "Script Editor".
                  grafik.png

                  Nun kann ich folgendes Flux Query Script eingeben:
                  Code:
                  from(bucket: "sensors_ever")
                    |> range(start: 1970-01-01)
                    |> group()  
                    |> count()​
                  Den Bucket-Namen (hier "sensors_ever") muss man natürlich anpassen. Als Datum wurde 1.1.1970 gewählt, da dies in Linux das älteste Datum darstellt. Somit ist gewährleistet, dass wirklich ALLE Datensätze berücksichtigt werden.
                  Unbedingt noch den "View Raw Data" Schalter aktivieren und danach rechts auf "Submit" klicken.
                  grafik.png

                  Es sollte nun die Gesamtanzahl Datensätze in diesem Bucket (über alle möglichen Tabellen) angezeigt werden. Diese kann man z.B. mit der Anzahl Datensätze im Edomi Datenarchiv vergleichen. Somit hat man eine Kontrolle, ob wirklich alle Datensätze kopiert wurden.

                  grafik.png

                  Falls in einem Bucket mehrere Tabellen/ Measurements vorkommen (was meist der Fall sein dürfte), dann kann man optional mit diesem Flux Script ein Total pro Tabelle anzeigen lassen (es wird auf die group Funktion verzichtet):
                  Code:
                  from(bucket: "sensors_ever")
                    |> range(start: 1970-01-01)
                    |> count()​
                  grafik.png

                  Wer wieder normale Diagramme (grafisch) in InfluxDB anzeigen lassen möchte, deaktiviert den "View Raw Data" Schalter und wechselt rechts auf den "Query Builder".

                  Wen es übrigens interessiert, wieviel diese InfluxDB Daten eigentlich Platz auf der Disk verbrauchen, kann sich in der Konsole mit root anmelden (z.B. direkt im Proxmox) und folgenden Befehl eingeben:
                  Code:
                  du -sh /var/lib/influxdb/engine/data
                  (Dies ist üblicherweise das Verzeichnis, wo InfluxDB seine Daten speichert. Wer den Speicherbedarf nur für ein bestimmtes Bucket sehen möchte, muss den Befehl für die jeweilige Bucket-ID (ist in diesem data Verzeichnis ein Unterverzeichnis) erweitern.)

                  In meinem Beispiel existieren 2 Buckets (wobei einer davon ein kleiner System-Bucket ist). Beide Buckets zusammen (der System-Bucket und mein "sensors_ever" Bucket mit ca. 16 Mio. Einträgen) brauchen offenbar "nur" 160 MB Diskkapazität. Somit sollte man glaub keine Angst haben, dass die Datenbank die Disk füllt. Trotzdem kann man das etwas im Auge behalten, damit man ein Gefühl bekommt, wieviel man eigentlich so in InfluxDB reinschreiben bzw. vorhalten (Thema Retention!) möchte.
                  grafik.png

                  Morgen werde ich noch bisschen auf Grafana eingehen und dann wäre diese kleine Serie abgeschlossen.

                  Kommentar


                    #69
                    Danke und schönen Gruß in die Schweiz, die Installation von Influx hat einwandfrei funktioniert.

                    Hast du denn auch schon Grafana installiert, und auch so eine feine Anleitung ?

                    Grüße Jürgen

                    Edit: Meine Seite war noch nicht aktualisiert, deswegen die Frage zu Grafana obwohl du es eh erwähnst.

                    @Moderatoren vielleicht kann jemand meinen Beitrag löschen, sodass diese wertvollen Tipps von rdeckard schön beisammen bleiben.
                    Zuletzt geändert von fudi6489; 10.01.2023, 22:37.

                    Kommentar


                      #70
                      Installation Grafana in Debian 11 LCX Container (Proxmox)

                      Ich verwende hier den bereits für InfluxDB erstellten LCX Proxmox Container, da ich InfluxDB und Grafana nicht in zwei separaten VMs/Container laufen lassen möchte. (Wer will, kann das natürlich tun.) InfluxDB und Grafana gehören für mich thematisch zueinander und von den Ressourcen sollte Grafana locker auf einer bestehenden InfluxDB-Instanz laufen können.

                      Zuerst meldet man sich wieder mit root in der Container Konsole an (direkt in Proxmox). Somit müssen wir hier keine SUDO-Befehle eingeben.

                      Wie immer zuerst mal sicherheitshalber Linux updaten:
                      Code:
                      apt update && apt upgrade -y
                      Hier nun die Befehle, wie sie auch offiziell auf der Grafana Website angegeben sind. Die Versionsnummer muss man halt jeweils anpassen. Aktuell ist 9.3.2:
                      Code:
                      apt install -y adduser libfontconfig1
                      wget https://dl.grafana.com/enterprise/release/grafana-enterprise_9.3.2_amd64.deb
                      dpkg -i grafana-enterprise_9.3.2_amd64.deb
                      
                      systemctl daemon-reload
                      systemctl enable grafana-server
                      systemctl start grafana-server
                      systemctl status grafana-server   # Optional zum Prüfen, mit Q beenden
                      Nun sollte man bereits via Browser auf Grafana zugreifen können: http://ip-adresse:3000

                      Standardmässig ist username admin mit Passwort admin gesetzt.

                      grafik.png

                      Als erstes erstellen wir unsere data source (InfluxDB in diesem Fall). Dazu klicken wir links unten auf das Zahnrad-Symbol und danach im "Data sources" Tab auf den grossen "Add data source" Button.
                      grafik.png

                      Wir wählen nun "InfluxDB" aus der Liste aus und müssen das Ganze gemäss unserer InfluxDB Installation noch konfigurieren.

                      Wir wechseln oben die Query Language auf "Flux", weil dies bei InfluxDB 2 neu der Standard ist. Grafana schreibt zwar, dass Flux in Grafana noch im Beta-Stadium sei, aber ich denke, es sollte für unsere Zwecke funktionieren.
                      Bei der URL in der HTTP-Sektion geben wir unsere IP (inkl. Port 8086) des InfluxDB-Servers ein. In unserem Fall ist das ja der gleiche Server wie Grafana selber.
                      In der Auth-Sektion deaktivieren wir alle Optionen!
                      Und nun der wichtigste und etwas knifflige Teil: In der Custom HTTP Headers Sektion geben wir bei Header das Wort "Authorization" ein und als Value "token 55jW2vDawfAZIZjzxpJ-.......Mb9qy9Oezg==" Dies ist natürlich der API Token, den wir in InfluxDB bereits zu Beginn erzeugt haben und den man sich hoffentlich irgendwo gespeichert hat. Wichtig ist, dass im Value-Feld das Wort "token", gefolgt von einem Leerzeichen und dann der komplette Token eingefügt werden muss. Leider wird das Feld mit Sternchen ausgefüllt, sodass man nicht wirklich sieht, was man eingegeben hat. (Ich empfehle den kompletten Text zuerst in einem Texteditor zu erstellen und dann mit Copy/Paste einzufügen.)

                      grafik.png

                      Im unteren "InfluxDB Details"-Teil müssen wir noch zwingend die InfluxDB Organization eingeben. In meinem Fall war das "homelab". Den Default Bucket kann man angeben, aber auch leerlassen.
                      grafik.png

                      Mit Klick auf den "Save & test" Button erkennen wir dann schnell, ob wir alles richtig eingegeben haben. Wenn ja, müsste dies mit einer entsprechenden Meldung bestätigt werden.

                      Somit hat Grafana nun eine Verbindung zu unserem InfluxDB Server!
                      Zuletzt geändert von rdeckard; 12.01.2023, 10:57.

                      Kommentar


                        #71
                        Grafana Graph erstellen und in Edomi einbinden

                        Ich muss zuerst erwähnen, dass ich kein InfluxDB und kein Grafana-Experte bin. Gerade bei den Graphen (Diagrammen) gibt es unzählige Einstellungen und vermutlich auch verschiedene Wege, um ans Ziel zu kommen.
                        Die nachfolgende Beschreibung hat einfach das Ziel, ein Grafana Graph in Edomi anzeigen zu können. (Es entspricht meinem aktuellen Wissensstand, der noch sehr klein ist.)

                        Wir melden uns per Browser in Grafana an und klicken links im Dashboard Icon auf "+ New dashboard". (Falls wir schon ein Dashboard erstellt haben, können wir dies überspringen.):
                        grafik.png

                        Danach klicken wir auf "Add a new panel".

                        Wir müssen nun unser Grafana Diagramm (Graph/Panel) erstellen. Leider habe ich noch keinen Weg gefunden, wir man dies interaktiv zusammenklicken kann. Ich kenne aktuell nur den Weg über ein Flux-Query. Da ich Flux jetzt nicht unbedingt auswendig kenne, gehe ich zuerst den Umweg über InfluxDB, da man dort ein Query interaktiv erstellen kann.

                        Also melden wir uns in einem zweiten Browser-Tab in InfluxDB an und gehen in den "Data Explorer". Dort klicken wir unsere Felder (Measurements) zusammen:
                        grafik.png
                        In meinem Fall ist es wieder der "sensors_ever" Bucket, von dem ich jetzt die beiden Measurements "WP Temp Aussen" und "WP Temp Innen" und das Field "value" markiere. Bei euch werden natürlich die Measurements anders lauten.
                        Oben nicht vergessen, die Zeitperiode zu definieren. (Ich habe zum Test einfach mal 1.11.22 bis 1.12.22 genommen.) Am Schluss auf den "Submit" Button klicken, damit ihr seht, ob überhaupt ein Diagramm angezeigt wird. (Bei falschen Measurements oder einer falschen Zeitperiode kann u.U. nichts rauskommen.)
                        Das war jetzt der interaktive (und leichte) Teil. Uns interessiert nun, was da überhaupt für ein Flux-Query im Hintergrund steckt.

                        Also klicken wir auf den "Script Editor" Button, um in den Script Editor zu wechseln:
                        grafik.png
                        Das sieht bei mir so aus. Die rot markierten Bereiche sind meine Measurements. Man könnte diese hier direkt im Flux-Query ändern, sofern man die genauen Bezeichnungen kennt. Auf Zeile 2 (range) wird die Zeitperiode definiert. In diesem Fall ist sie nicht fix im Query hinterlegt (das könnte man auch machen!), sondern wird jeweils von den Werten übernommen, die man in InfluxDB (später auch Grafana) per Maus angibt.

                        Da Grafana dieses InfluxDB Flux-Query versteht, können wir das Query markieren und in Grafana einfügen. Hier noch der Text meines Queries, falls es jemanden was bringt. (Muss natürlich angepasst werden.)
                        Code:
                        from(bucket: "sensors_ever")
                          |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
                          |> filter(fn: (r) => r["_measurement"] == "WP Temp Aussen" or r["_measurement"] == "WP Temp Innen")
                          |> filter(fn: (r) => r["_field"] == "value")
                          |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
                          |> yield(name: "mean")​
                        Nun wechseln wir wieder in unser Grafana Tab und fügen dieses Flux-Query 1:1 ein:
                        grafik.png

                        Auch hier nicht vergessen, die gewünschte Zeitperiode zu definieren, da sie ja nicht im Query selber gesetzt ist.
                        Einfach oben auf das Uhrsymbol (bzw. die Zeitangabe rechts daneben) klicken und dann eine Zeitperiode definieren. Ich habe hier wieder 1.11.22 bis 1.12.22 zum Testen ausgewählt. Anschliessend auf "Apply time range" klicken.
                        grafik.png

                        Gebt dem Graphen/Panel unter "Panel options > Title" am besten auch einen passenden Namen:
                        grafik.png

                        Wenn alles richtig gemacht wurde, sollte nun in Grafana schon der Graph erscheinen (ungefähr gleich wie der Graph, den wir vorhin in InfluxDB zusammengeklickt haben.)
                        grafik.png

                        Sieht gar nicht mal so übel aus. Nur die Legende ist nicht so schön. (Vorallem "value 11" bzw. "value 14" in meinem Fall.) Dies kann man aber mit sogenannten Overrides korrigieren.

                        Dazu klicken wir rechts oben auf "Overrides" und danach auf "+ Add field override":
                        grafik.png

                        Anschliessend muss man via "+ Add override property" einige Optionen aus Listen raussuchen. Ich zeige hier nur das Endergebnis:
                        grafik.png
                        Wichtig ist, dass ihr "Standard options > Display name" wählt und dort dann den gewünschten Legenden-Text für das jeweilige Feld eingibt.
                        Da wir in meinem Beispiel zwei Datenreihen im Graph haben, müssen wir das "+ Add field override" zweimal durchführen. (Was dann eben ein Override 1 und ein Override 2 erzeugt.)​

                        Jetzt sieht es schon viel besser aus:
                        grafik.png

                        Mit "Save" wird das Dashboard gespeichert. Mit "Apply" wird (noch) nicht gespeichert, aber zumindest übernommen:
                        grafik.png

                        Und so sieht es nun fertig in Grafana aus:
                        grafik.png

                        So, jetzt möchten wir das Ganze aber natürlich gerne in Edomi abbilden. Zuerst klicken wir auf das Kontextmenü im Titel des Grafana-Panels und wählen dort "Share" aus:
                        grafik.png

                        Im Share Panel klicken wir auf das "Embed" Tab und sehen unten den HTML-Code, den wir anschliessend in Edomi benötigen.
                        grafik.png​​​
                        Wir brauchen nicht den ganzen Link, sondern nur den Teil zwischen den beiden Anführungszeichen (ohne das erste Anführungszeichen!).
                        Mit "Theme" kann man noch wählen, ob der Graph als Dark oder Light Mode erstellt werden soll. Je nach Visu-Design in Edomi passt das eine oder andere besser.
                        Wichtig: Wie man hier sieht, ist in diesem Link eine fixe Zeitperiode ("from" "to") definiert. Die langen Zahlen sind Unix Timestamps, welche ein bestimmtes Datum als Zahl darstellen (kann man mit geeigneten Tools umwandeln)​. Dies bedeutet, dass dieser Graph später in Edomi immer die gleiche Zeitperiode abdeckt, was oft nicht erwünscht ist. Dieses Problem könnte man in Edomi mit Variablen anstatt dieser fixen Zahlen lösen. Leider habe ich dazu noch keine Erfahrung, wie man das umsetzt.

                        Nun wechseln wir zu Edomi und fügen in einer Visuseite ein "Bild-URL/Webseite"-Element hinzu. In dieses Element geben wir in das URL-Feld den oben markierten Link-Text (ohne iframe Tag) ein.
                        grafik.png
                        Bei URL-Typ wählen wir "Webseite" und bei "Webseite: Hintergrund" = kein Hintergrund (transparent). (Der letzte Punkt wird leider nicht von Grafana unterstützt. Zumindest nicht ohne CSS-Hacks.)

                        Nachdem nun das Edomi-Projekt aktiviert wurde, erscheint leider auf der Visuseite nicht das gewünschte Diagramm, sondern eine Fehlermeldung (...hat die Verbindung abgelehnt.):
                        grafik.png

                        Das hat damit zu tun, dass Grafana standardmässig keinen externen Zugriff von anderen Programmen/Webseiten erlaubt. Das müssen wir zuerst aktivieren.
                        Melde dich dazu mit dem root Account in der Grafana Container Konsole an (z.B. via Proxmox) und editiere mit dem folgenden Befehl die Grafana Config-Datei:
                        Code:
                        nano /etc/grafana/grafana.ini
                        In der grafana.ini müssen folgende Stellen gesucht und entsprechend geändert werden. (Meist nur das Semikolon am Zeilenanfang entfernen, z.T. aber auch false auf true setzen)
                        Code:
                        #################################### Security #################################>
                        [security]
                        # set to true if you want to allow browsers to render Grafana in a <frame>, <if>
                        allow_embedding = true
                        
                        #################################### Anonymous Auth ######################
                        [auth.anonymous]
                        # enable anonymous access
                        enabled = true
                        
                        # specify role for unauthenticated users
                        org_role = Viewer
                        
                        # mask the Grafana version number for unauthenticated users
                        hide_version = true​
                        Hier nochmals zusammengefasst alle notwendigen Anpassungen:
                        Code:
                        allow_embedding = true
                        enabled = true
                        org_role = Viewer
                        hide_version = true​
                        Mit dem folgenden Befehl wird Grafana neu gestartet und somit dieses Änderungen übernommen:
                        Code:
                        systemctl restart grafana-server
                        Nun sollte Edomi auf Grafana zugreifen können und das Diagramm wird erstellt/angezeigt:
                        grafik.png

                        Gratulation! Wir haben unser erstes Grafana-Diagramm live in Edomi angezeigt bekommen!
                        Zuletzt geändert von rdeckard; 12.01.2023, 14:02.

                        Kommentar


                          #72
                          Besten Dank für die Anleitung und die detaillieren Schritte. Das hat mir das Einbinden sehr einfach gemacht.
                          Als Alternative zu den Overrides kann man auch in "Transform" und dann "Organize Fields" die Kurven umbenennen oder ausblenden, wenn sie nur zum berechnen verwendet worden sind: (Es ist auch noch eine Berechnung zu sehen, die braucht es natürlich nicht)
                          230115 22_39_14-Window000033.png


                          Kommentar


                            #73
                            Zitat von bigbear2nd Beitrag anzeigen
                            Als Alternative zu den Overrides kann man auch in "Transform" und dann "Organize Fields" die Kurven umbenennen oder ausblenden, wenn sie nur zum berechnen verwendet worden sind: (Es ist auch noch eine Berechnung zu sehen, die braucht es natürlich nicht)
                            Oder einfach ein

                            Code:
                              |> group(columns: ["_measurement"])
                            Im Flux Skript nach dem filter-Statement. Dann erscheint der Name den man in EDOMI dem Datenarchiv gegeben hat.

                            Beispiel:

                            Code:
                            from(bucket: "EDOMI")
                              |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
                              |> filter(fn: (r) => r["_measurement"] == "PV Gartenhaus - Leistung - AC" or r["_measurement"] == "PV Gartenhaus - Leistung - Modul 1" or r["_measurement"] == "PV Gartenhaus - Leistung - Modul 2")
                              |> group(columns: ["_measurement"])
                              |> aggregateWindow(every: 1m, fn: mean, createEmpty: false)
                              |> yield(name: "mean")​

                            Kommentar


                              #74
                              Toll was hier geht, ich brauch das auch

                              Ich möchte influx, telegraf und grafana als docker auf meinem Synology NAS laufen lassen und dann Grafiken ins edomi einbinden.

                              influxdb läuft.
                              Jetzt wollte ich mit Telegraf und knxlistener mal erste Daten einfüllen.
                              Hier scheitere ich jedoch:

                              nutze das offizielle docker image von telegraf und bekomme beim start des containers ein:
                              Undefined but reuested input: knx_listener
                              muss ich das input plugin irgendwie installieren? wenn ja - wie?
                              NanoBCU and other OpenKNX Hardware now availible here!

                              Kommentar


                                #75
                                Ich nutze es nicht im Docker sondern als normale Installation. Bzw. meinst du mit knxlistener = knx input plugin?
                                Installieren musste ich nichts, ich bin einfach unter dem Reiter Sources auf das knx plugin und dann links auf "create new configuration".
                                Bei mir erscheint die config dann im influxdb dashboard unter dem Reiter Telegraf?
                                Meine sieht folgendermaßen aus:
                                Code:
                                # Configuration for telegraf agent
                                [agent]
                                  ## Default data collection interval for all inputs
                                  interval = "10s"
                                  ## Rounds collection interval to 'interval'
                                  ## ie, if interval="10s" then always collect on :00, :10, :20, etc.
                                  round_interval = true
                                
                                  ## Telegraf will send metrics to outputs in batches of at most
                                  ## metric_batch_size metrics.
                                  ## This controls the size of writes that Telegraf sends to output plugins.
                                  metric_batch_size = 1000
                                
                                  ## Maximum number of unwritten metrics per output.  Increasing this value
                                  ## allows for longer periods of output downtime without dropping metrics at the
                                  ## cost of higher maximum memory usage.
                                  metric_buffer_limit = 10000
                                
                                  ## Collection jitter is used to jitter the collection by a random amount.
                                  ## Each plugin will sleep for a random time within jitter before collecting.
                                  ## This can be used to avoid many plugins querying things like sysfs at the
                                  ## same time, which can have a measurable effect on the system.
                                  collection_jitter = "0s"
                                
                                  ## Default flushing interval for all outputs. Maximum flush_interval will be
                                  ## flush_interval + flush_jitter
                                  flush_interval = "10s"
                                  ## Jitter the flush interval by a random amount. This is primarily to avoid
                                  ## large write spikes for users running a large number of telegraf instances.
                                  ## ie, a jitter of 5s and interval 10s means flushes will happen every 10-15s
                                  flush_jitter = "0s"
                                
                                  ## By default or when set to "0s", precision will be set to the same
                                  ## timestamp order as the collection interval, with the maximum being 1s.
                                  ##   ie, when interval = "10s", precision will be "1s"
                                  ##       when interval = "250ms", precision will be "1ms"
                                  ## Precision will NOT be used for service inputs. It is up to each individual
                                  ## service input to set the timestamp at the appropriate precision.
                                  ## Valid time units are "ns", "us" (or "µs"), "ms", "s".
                                  precision = ""
                                
                                  ## Log at debug level.
                                  # debug = false
                                  ## Log only error level messages.
                                  # quiet = false
                                
                                  ## Log target controls the destination for logs and can be one of "file",
                                  ## "stderr" or, on Windows, "eventlog".  When set to "file", the output file
                                  ## is determined by the "logfile" setting.
                                  # logtarget = "file"
                                
                                  ## Name of the file to be logged to when using the "file" logtarget.  If set to
                                  ## the empty string then logs are written to stderr.
                                  # logfile = ""
                                
                                  ## The logfile will be rotated after the time interval specified.  When set
                                  ## to 0 no time based rotation is performed.  Logs are rotated only when
                                  ## written to, if there is no log activity rotation may be delayed.
                                  # logfile_rotation_interval = "0d"
                                
                                  ## The logfile will be rotated when it becomes larger than the specified
                                  ## size.  When set to 0 no size based rotation is performed.
                                  # logfile_rotation_max_size = "0MB"
                                
                                  ## Maximum number of rotated archives to keep, any older logs are deleted.
                                  ## If set to -1, no archives are removed.
                                  # logfile_rotation_max_archives = 5
                                
                                  ## Pick a timezone to use when logging or type 'local' for local time.
                                  ## Example: America/Chicago
                                  # log_with_timezone = ""
                                
                                  ## Override default hostname, if empty use os.Hostname()
                                  hostname = ""
                                  ## If set to true, do no set the "host" tag in the telegraf agent.
                                  omit_hostname = false
                                [[outputs.influxdb_v2]]
                                  ## The URLs of the InfluxDB cluster nodes.
                                  ##
                                  ## Multiple URLs can be specified for a single cluster, only ONE of the
                                  ## urls will be written to each interval.
                                  ##   ex: urls = ["https://us-west-2-1.aws.cloud2.influxdata.com"]
                                  urls = ["http://thor.home.lan:8086"]
                                
                                  ## Token for authentication.
                                  token = "yHaDgzb3ZKU_45UTMQLYnukD1qmjhkbfkjsbvfkjsbkjshfdsnwzi9Qlr1vwbMmjctYghZ16g=="
                                
                                  ## Organization is the name of the organization you wish to write to; must exist.
                                  organization = "home"
                                
                                  ## Destination bucket to write into.
                                  bucket = "knx"
                                
                                  ## The value of this tag will be used to determine the bucket.  If this
                                  ## tag is not set the 'bucket' option is used as the default.
                                  # bucket_tag = ""
                                
                                  ## If true, the bucket tag will not be added to the metric.
                                  # exclude_bucket_tag = false
                                
                                  ## Timeout for HTTP messages.
                                  # timeout = "5s"
                                
                                  ## Additional HTTP headers
                                  # http_headers = {"X-Special-Header" = "Special-Value"}
                                
                                  ## HTTP Proxy override, if unset values the standard proxy environment
                                  ## variables are consulted to determine which proxy, if any, should be used.
                                  # http_proxy = "http://corporate.proxy:3128"
                                
                                  ## HTTP User-Agent
                                  # user_agent = "telegraf"
                                
                                  ## Content-Encoding for write request body, can be set to "gzip" to
                                  ## compress body or "identity" to apply no encoding.
                                  # content_encoding = "gzip"
                                
                                  ## Enable or disable uint support for writing uints influxdb 2.0.
                                  # influx_uint_support = false
                                
                                  ## Optional TLS Config for use on HTTP connections.
                                  # tls_ca = "/etc/telegraf/ca.pem"
                                  # tls_cert = "/etc/telegraf/cert.pem"
                                  # tls_key = "/etc/telegraf/key.pem"
                                  ## Use TLS but skip chain & host verification
                                  # insecure_skip_verify = false
                                
                                ## Drop other Measurements than KNX
                                   namedrop = ["cpu*","disk*","kernel","mem*","processes*","swap*","system*"]
                                 
                                # Listener capable of handling KNX bus messages provided through a KNX-IP Interface.
                                [[inputs.knx_listener]]
                                  ## Type of KNX-IP interface.
                                  ## Can be either "tunnel" or "router".
                                  service_type = "tunnel"
                                
                                  ## Address of the KNX-IP interface.
                                  service_address = "10.10.45.4:3671"
                                
                                  ## Measurement definition(s)
                                [[inputs.knx_listener.measurement]]
                                  #   ## Name of the measurement
                                     name = "Temperatur EG"
                                  #   ## Datapoint-Type (DPT) of the KNX messages
                                     dpt = "9.001"
                                  #   ## List of Group-Addresses (GAs) assigned to the measurement
                                     addresses = ["6/3/0","6/3/1","6/3/2","6/3/3","6/3/4","6/3/6","11/0/1","11/0/6"]
                                
                                [[inputs.knx_listener.measurement]]
                                  #   ## Name of the measurement
                                     name = "Temperatur OG"
                                  #   ## Datapoint-Type (DPT) of the KNX messages
                                     dpt = "9.001"
                                  #   ## List of Group-Addresses (GAs) assigned to the measurement
                                     addresses = ["6/3/8","6/3/9","6/3/10","6/3/11","6/3/12","6/3/13","6/3/14","11/0/15","11/0/16","11/0/17","11/0/19","11/0/120"]​
                                Zu ändern sind:
                                urls
                                token
                                organization
                                bucket

                                (service typ)
                                service_address

                                Und unten dann nach "inputs.knx_listener.measurement" eben der Name, Datenpunkt und die Ga's aufs eigene Sytem anpassen.
                                Bin mir nicht mehr sicher ob man telegraf danach neu starten muss, aber schaden wird es nicht.
                                Gruß Ben

                                Kommentar

                                Lädt...
                                X