Schlagwort: Grafana

  • Powerinterface für Nedap Powerrouter

    Wer eine Solaranlage auf dem Dach hat und zufällig vor ein paar Jahren einen Powerrouter der Firma Nedap gekauft hat, kennt das Problem: Die Firma ist pleite gegangen und seitdem ist der Support irgendwo zwischen katastrophal und nicht vorhanden. Am schlimmsten ist, dass die Nedap Powerrouter ihre aktuellen Produktionsdaten nur an eine spezielle Internetseite unter www.mypowerrouter.com senden und per se keine Möglichkeit bieten, diese lokal zu empfangen, bzw. einzusehen. Zu allem Übel scheint es sich seit Januar 2021 abzuzeichnen, dass auch diese Internetseite früher oder später den Betrieb ganz einstellen wird, womit die ehemaligen Kunden der Firma Nedap vollends im Regen stehen.

    In Anbetracht dieser Umstände, haben sich seit einiger Zeit Betroffene intensiv Gedanken gemacht, wie man die Daten lokal abfangen, in einer Datenbank aufzeichnen und über ein passendes Interface graphisch darstellen kann. Es gibt auf photovoltaikforum.com einen längeren Thread zu diesem Thema, in dem der aktuelle Stand der Erkenntnisse verfolgt werden kann.

    Nicklas Grießer (ngrie) hat einen Webdienst entwickelt, der in der Lage ist, die Daten des Powerrouters lokal zu empfangen und anzuzeigen. Dave Mallou hat darum herum ein fertiges Image für den Raspberry Pi gebaut hat, das die Daten in einer InfluxDB speichert und mit Grafana anzeigt. Aufbauend auf dieser hervorragenden Vorarbeit habe ich hier eine Weiterentwicklung dieses Ansatzes zusammengestellt, bei dem ich im wesentlichen 2 Dinge geändert habe:

    1. Keine zusätzliche externe USB-Netzwerkkarte nötig
    2. AdGuard ist durch Pi-Hole ersetzt. Dies ist meine subjektive Präferenz, da ich Pi-Hole schon lange im Einsatz habe und einfach kenne und liebe. Soweit ich das überblicke, gibt es kaum echte objektive Argumente, die AdGuard hinter Pi-Hole zurückfallen lassen. Ist wohl eher frei nach dem Motto „Was der Bauer net kennt, …“ 😉
    3. Ich stelle (bisher) kein fertiges Image zur Verfügung, da ich der Meinung bin, dass die Schritte zur Installation nicht weiter kompliziert sind. Außerdem hat man durch das Selbermachen den großes Vorteil, dass man sein System genau kennt und leicht in einzelnen Details an seine Bedürfnisse/sein Umfeld anpassen kann.

    Grundkonzept

    Im lokalen LAN wird ein eigener DNS-Server eingerichtet (z.B. Pi-Hole, AdGuard, dnsmasq, bind9, o.ä.), der für die Webadresse „logging1.powerrouter.com“ (an die der Nedap Powerrouter seine Daten schicken möchte) eine lokale IP-Adresse ausgibt, unter der der Webdienst von Niklas läuft, der die Daten des Powerrouters entgegennimmt und in eine Datenbank (InfluxDB) schreibt. Auf diese DB kann dann ein graphisches Anzeigesystem (Grafana) zugreifen, um die Daten wieder im lokalen LAN als Webpage zur Verfügung zu stellen. All diese Dienste können auf einem einzigen kleinen Linux-Rechner (z.B. ein Raspberry Pi, oder eine VM) laufen.

    Im folgenden führe ich Schritt für Schritt durch die Installation.

    Installation und Einrichtunbg

    Raspberry OS installieren

    Das kleinste Image, ohne Desktop reicht völlig aus, der Server läuft eh im Prinzip „headless“, d.h. ohne Monitor, Maus und Tastatur. Sollte SSH aber nicht auf Anhieb funktionieren, dann ist zur Installation ein Monitor und eine Tastatur extrem hilfreich! In meinem Fall war der Raspi etwas wählerisch mit dem Netzwerkkabel…🥴

    • aktuelles RaspberryOS-Image installieren
      • am besten mit dem „Raspberry Pi Imager“ die SD-Karte/USB-Stick vorbereiten
      • Das Image kann über das verstecktes Menü (Shift+Cmd+X) vorkonfiguriert werden:
        • WLAN und SSH-Passwort ändern bzw. anpassen
        • Rechnername auf „powerinterface“ setzen
      • Dann Image auf die SD-Karte schreiben
    • Raspi booten und aktualisieren
      • apt update
      • apt full-install
    • feste LAN-IP-Adresse vergeben
      • Entweder im Router-DHCP die IP fest auf die MAC-Adresse des Raspi eintragen
      • Oder DHCP im Router komplett deaktivieren und den DHCP-Dienst im Pi-Hole aktivieren (s.u.)
        • In diesem Fall dann hier eine feste IP für die MAC des Raspi eintragen
      • Oder dem Raspi selbst über /etc/interfaces eine feste IP-Adresse geben
      • Auf jeden fall sicherstellen, dass keine IP-Adresse doppelt vorkommen kann, das wäre absolut tödlich für das ganze LAN!!!
        • => Die feste IP-Adresse darf nicht im Adressbereich liegen, den der DHCP an Clients verteilt!!!

    Pi-Hole

    Pi-Hole ist ein DNS-Server, der eigentlich zum filtern von Werbung im ganzen LAN gebaut ist. Er kann über den DHCP-Service auch die Verteilung der IP-Adressen übernehmen.

    Details siehe hier: https://pi-hole.net

    installieren

    curl -sSL https://install.pi-hole.net | bash

    ..und den Anweisungen folgen.

    konfigurieren:

    1. Passwort für Pi-Hole Admin-Site löschen: pihole -a -p
    2. Unter „Local DNS“ die Domain „logging1.powerrouter.com“ auf die IP des Raspi setzen
    3. Dafür sorgen, dass der Pi-Hole als DNS-Server im LAN per DHCP verteilt wird:
      1. Entweder in den DHCP-Einstellungen des Routers die IP des Raspi als lokalen DNS-Server eintragen
      2. Oder DHCP im Router deaktivieren und im Pi-Hole aktivieren.

    Pi-Hole Port 80 ändern

    Standardmäßig läuft die Admin-Seite des Pi-Hole auf Port 80. Da aber unter diesem Port das Webinterface für den Nedap Powerrouter laufen muss (der schickt die Daten nämlich nur an Port 80), müssen wir das Admin-Interface des Pi-Hole auf was anderes legen. Glücklicherweise installiert der Pi-Hole mit lighttpd einen vollwertigen Web-Server. Über den bieten sich gleich mehrere Lösungen:

    1. Gesamten lighttpd server auf einem anderen Port laufen lassen, z.B. 8080
      • nano /etc/lighttpd/lighttpd.conf
      • Zeile „server.port = 80“ ändern auf z.B. 8080
      • systemctl restart lighttpd
        • Die Pi-Hole Admin-Seite wird damit somit so aufgerufen: http://<ip-vom-Raspi>:8080/admin
    2. Für die Admin-Seite einen Vhost mit Subdomäne einrichten, in der Form „http://pihole.powerinterface“
      • (bitte separat googeln)

    Am Schluß muss der Nedap Powerrouter neu gestartet werden, damit er sich den geänderten DNS-Server per DHCP holt. Über das lokale Menü am Gerät sicherstellen, dass der DNS-Server jetzt die IP-Adresse des powerinterface ist.

    InfluxDB installieren

    • Repository einbinden
      • wget -qO- https://repos.influxdata.com/influxdb.key | sudo apt-key add -
      • source /etc/os-release
      • echo "deb https://repos.influxdata.com/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
    • Influx installieren
      • apt update
      • apt install influxdb
      • systemctl unmask influxdb.service
      • systemctl start influxdb.service
      • systemctl enable influxdb.service
    • Datenbank vorbereiten (jede Zeile ein neuer Befehl)
      • influx
        create database home
        use home
        create user grafana with password '<eigenes Passwort vergeben>'
        grant all on home to grafana


        show databases
        show users
        show grants for grafana

        quit

    Webdienst (ngrie)

    Node.js installieren

    RaspberryOS kommt entweder mit gar keinem Node.js installiert, oder mit einer alten Version, die man erst deinstallieren muss.

    apt remove node nodejs

    • Repository einbinden (alternativ kann auch gleich die neue Version 16 genommen werden mit „…/setup_16.x
      • curl -sSL https://deb.nodesource.com/setup_14.x | sudo bash -
    • Node.js installieren
      • apt install nodejs
      • node -v
      • npm -v

    installieren

    cd /srv
    git clone https://github.com/ngrie/powerinterface.git
    cd powerinterface
    npm install

    Konfiguration

    nano config.yml

    Folgenden Inhalt in die Datei kopieren, danach speichern und schließen:

    forwardRequests: true
    actions:
      - type: influxdb
        host: 127.0.0.1
        database: home
        username: grafana
        password: <Passwort von oben eintragen>
        port: 8086

    Autostart-Dienst erstellen

    nano /etc/systemd/system/powerinterface.service

    folgenden Inhalt in die Datei kopieren:

    [Unit]
    Description=Powerinterface
    Documentation=https://github.com/ngrie/powerinterface
    After=network.target [Service]
    Type=simple
    User=root
    WorkingDirectory=/srv/powerinterface
    ExecStart=/usr/bin/node /srv/powerinterface/server.js
    Restart=on-failure

    [Install]
    WantedBy=multi-user.target

    Datei speichern und schließen.

    systemctl daemon-reload
    systemctl enable powerinterface
    systemctl start powerinterface

    Grafana

    installieren

    • Repository hinzufügen
      • wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
      • echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
    • installieren
      • sudo apt update
      • sudo apt install grafana
      • systemctl enable grafana-server

    konfigurieren

    Im Browser aufrufen: (Port 3000 auf der IP-Adresse des Raspi)
    http://powerinterface.local:3000

    Benutzer: admin
    Passwort: admin

    Man wird aufgefordert, das Passwort zu ändern.

    Configuration -> Add Datasource -> InfluxDB
    HTTP -> URL: http://powerinterface:8086/

    Database: home
    User: grafana
    Password: <siehe oben>

    Dashboards importieren

    Die drei Dashboards von Dave Mallou runterladen und entpacken.

    Aktuelle Daten
    Powerrouterdaten
    Statistik

    Unter Dashboards -> Manage Dashboards -> Import die drei json-Dateien importieren.

    Anwendung

    Interface

    Es gibt zwei Interfaces, die von Interesse sind. Das native Webinterface von ngrie, sowie die Diagramme, die über Grafana angezeigt werden.

    natives Webinterface von ngrie

    Hier werden die wichtigesten Live-Daten angezeigt, ähnlich wie auf der Übersichtsseite von mypowerrouter.com.

    Aufruf über:

    http://powerinterface.local/
    http://<ip-vom-Raspi>:80/

    Port 80 kann auch weggelassen werden.

    Im Hintergrund schreibt das Interface die Daten auch in die Influx-Datenbank.

    Grafana-Interface

    Auf diesem Interface werden die angespeicherten Daten aus der Datenbank dargestellt.

    Aufruf über:

    http://powerinterface.local:3000/
    http://<ip-vom-Raspi>:3000/

    Troubleshooting

    Bitte der Versuchung widerstehen, das ganze Setup in einem anderen LAN als dem endgültigen vorzubereiten, da u.a. der Pi-Hole bei der Installation sich die aktuelle IP-Adresse Raspberry Pi in die Konfiguration schreibt.

    Wenn dennoch etwas nicht funktioniert, am besten schrittweise den Fehler eingrenzen:

    Sicherstellen, dass die Dienste laufen

    service pihole-FTL status
    service influxdb status
    service powerinterface status
    service grafana-server status

    Der Status sollte jeweils grün sein und die Dienste sollten laufen. Wenn nicht, genau die Fehlermeldungen lesen und die entsprechenden Probleme beheben. Mit tail -fn1000 /var/log/syslog sieht man ev. mehr Details.

    Sicherstellen, dass der Powerrouter den Pi-Hole als DNS-Server verwendet

    Dazu lokal am Gerät über das Menü Wartung -> Status -> Internetanschluß -> DNS-Server prüfen, ob die IP des Raspi angezeigt wird.

    Sicherstellen, dass der Powerrouter den Pi-Hole als DNS-Server verwendet

    Dazu im Admin-Webinterface vom Pi-Hole im Menü „Query Log“ prüfen, ob es ca. 1 mal pro Minute eine DNS-Anfrage vom Client „PowerRouter“ an die Domäne „logging1.powerrouter.com“ gibt.

    Außerdem in einer Dos-box mit ping logging1.powerrouter.com prüfen, ob der Pi-Hole die „richtige“ IP-Adresse ausliefert – nämlich seine eigene!

    Prüfen, ob der Webdienst Daten bekommt

    Dazu den Webdienst im Browser aufrufen http://powerinterface, er sollte die live-Daten des Powerrouter anzeigen.

    Prüfen, ob die Daten in die InfluxDB gespeichert werden

    influx
    use home

    show series
    show measurements

    Bei den letzten beiden Befehlen sollte jeweils eine längere Liste von Daten angezeigt werden.

    Prüfen, ob Grafana auf die richtigen Daten zugreift

    Unter http://powerinterface:3000 -> Configuration -> Datasource -> InfluxDB alle Werte genauestens prüfen, insbesondere den Datenbank-Namen, Benutzer und Passwort.

    Ausblick

    Ihr dürft gerne in den Kommentaren schreiben, wenn irgend etwas nicht gut beschrieben ist, oder nicht funktioniert. Ich kann zwar keinen echten Support für jeden liefern, aber ich versuche schon, die Anleitung aktuell zu halten.


This website stores cookies on your computer. These cookies are used to provide a more personalized experience and to track your whereabouts around our website in compliance with the European General Data Protection Regulation. If you decide to to opt-out of any future tracking, a cookie will be setup in your browser to remember this choice for one year.

Accept or Deny