Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Gartenautomation
  • Mikrocontroller
    • Arduino
    • ESP32 & Co.
    • Calliope Mini
    • Raspberry Pi & Pico
  • Solo Mining
  • Deutsch
  • English
Menu

Shelly Energie-Dashboard mit Node-RED – Teil 2: Daten visualisieren & Dashboard erstellen

Veröffentlicht am 27. März 202625. März 2026 von Stefan Draeger

In diesem Node-RED Tutorial zeige ich dir, wie du ein Shelly Dashboard erstellst und deine Energiedaten visualisierst.

Im ersten Teil dieser Reihe hast du bereits gesehen, wie du deine Energiedaten aus der Shelly Cloud exportierst und sauber in einer SQLite-Datenbank speicherst. Damit hast du die Grundlage geschaffen, um deine Daten unabhängig von der Cloud zu verwalten und langfristig auszuwerten.

Doch Daten allein sind noch nicht wirklich hilfreich – erst durch eine übersichtliche Visualisierung wird daraus ein echtes Energie-Dashboard.

In diesem zweiten Teil gehen wir genau diesen Schritt: Wir laden die gespeicherten Werte aus der SQLite-Datenbank und visualisieren sie in einem Node-RED Dashboard. Zusätzlich holen wir uns aktuelle Live-Daten direkt vom Shelly per RPC-Call, sodass du jederzeit den aktuellen Zustand im Blick hast.

Shelly Energie-Dashboard mit Node-RED – Teil 2: Daten visualisieren & Dashboard erstellen
Dieses Video auf YouTube ansehen.
Node-RED - Flows für das Shelly BKW Dashboard
Node-RED – Flows für das Shelly BKW Dashboard
Node-RED - Dashboard mit aktuellen Werten ,Diagram und Tabelle
Node-RED – Dashboard mit aktuellen Werten ,Diagram und Tabelle
Node-RED Flows für das Shelly DashboardHerunterladen

Am Ende dieses Beitrags hast du dein eigenes, interaktives Shelly Energie-Dashboard, das nicht nur gut aussieht, sondern dir auch wirklich hilft, deinen Verbrauch besser zu verstehen.

Inhaltsverzeichnis

  • Überblick: Was wir in diesem Beitrag bauen
  • Daten aus SQLite laden
  • Diagramm erstellen
    • Grundeinstellungen
    • Achsen konfigurieren
    • Datenzuordnung (sehr wichtig!)
    • Ergebnis
  • Daten in einer Tabelle anzeigen
    • Einstellungen für das Diagramm
  • Abrufen der Live-Daten vom Shelly
    • Flow zum abrufen der Daten
      • extrahieren der Daten via JavaScript
  • darstellen der Daten in Kacheln
  • Fazit
  • Ausblick

Überblick: Was wir in diesem Beitrag bauen

Inhalt der Tabelle shelly_energy_monthly nach dem Import der Daten
Ausgabe des Inhalts export.csv in der Konsole

Im letzten Beitrag Shelly Energie-Dashboard mit Node-RED – Teil 1: SQLite & Datenimport haben wir die Energiedaten aus der Shelly Cloud exportiert und in eine SQLite-Datenbank importiert. Damit ist die Grundlage geschaffen, um die Daten unabhängig von der Cloud weiterzuverarbeiten und auszuwerten.

In diesem Beitrag gehen wir nun den nächsten Schritt und machen die Daten sichtbar. Ziel ist es, ein übersichtliches Dashboard mit Node-RED zu erstellen, das dir sowohl historische Verläufe als auch aktuelle Messwerte anzeigt.

Die gespeicherten Daten aus der Datenbank werden dabei in einem Liniendiagramm visualisiert, sodass du Entwicklungen über die Zeit direkt erkennen kannst. Zusätzlich stellen wir die Werte in einer Tabelle dar, um auch einzelne Datensätze im Detail betrachten zu können.

Dashboard in Node-RED mit Verlaufsdaten eines Shelly Plus 1PM am Balkonkraftwerk
Dashboard in Node-RED mit Verlaufsdaten eines Shelly Plus 1PM am Balkonkraftwerk

Im oberen Bereich des Dashboards zeigen wir außerdem die aktuellen Messwerte deines Shelly Plus 1PM an – darunter Strom, Spannung, Leistung und die insgesamt gemessene Energie. Diese Daten holen wir uns live vom Gerät, sodass dein Dashboard immer auf dem neuesten Stand ist.

aktuelle Werte eines Shelly Plus 1PM
aktuelle Werte eines Shelly Plus 1PM

Das Beste daran: All das lässt sich mit Node-RED ohne großen Aufwand umsetzen – wie du im weiteren Verlauf sehen wirst.

Daten aus SQLite laden

Im ersten Schritt laden wir die zuvor gespeicherten Energiedaten aus der SQLite-Datenbank in Node-RED. Dafür nutzen wir eine Kombination aus einer Inject-Node und einer SQLite-Node.

Die Inject-Node dient dabei als Trigger und stößt die Abfrage manuell oder automatisiert an. Von dort aus wird die SQL-Abfrage an die SQLite-Node übergeben.

Das eigentliche SQL-Statement hinterlegen wir in der msg.topic:

SELECT 
    id, 
    timestamp, 
    ROUND(energy_wh / 1000.0, 3) AS energy_kwh 
FROM shelly_energy_monthly;

Hier passiert bereits ein wichtiger Schritt:
Wir lesen nicht nur die Daten aus der Datenbank, sondern bereiten sie direkt auf. Der gespeicherte Energieverbrauch liegt in Wattstunden (Wh) vor und wird im selben Schritt in Kilowattstunden (kWh) umgerechnet. Zusätzlich runden wir den Wert auf drei Nachkommastellen, um eine saubere Darstellung im Dashboard zu gewährleisten.

Nach der Ausführung der Abfrage liefert die SQLite-Node ein Array mit den Ergebnissen zurück. Jeder Eintrag im Array entspricht dabei einem Datensatz aus der Datenbank und besteht aus Key-Value-Paaren.

Die Keys entsprechen den Spaltennamen der Abfrage:

  • id
  • timestamp
  • energy_kwh

Diese Struktur ist ideal, um die Daten im nächsten Schritt weiterzuverarbeiten und für die Visualisierung im Dashboard aufzubereiten.

Node-RED - Flow zum laden von Daten aus einer SQLite Datenbank
Node-RED – Flow zum laden von Daten aus einer SQLite Datenbank
Node-RED – Flow zum laden von Daten aus einer SQLite DatenbankHerunterladen

Diagramm erstellen

Nachdem wir die Daten erfolgreich aus der Datenbank geladen haben, können wir diese nun im Dashboard visualisieren. Dafür nutzen wir die Diagramm-Node im Node-RED Dashboard.

Zunächst platzierst du eine Chart-Node in deinem Flow und verbindest sie mit der SQLite-Node bzw. der zuvor aufbereiteten Datenquelle.

In den Einstellungen der Diagramm-Node nimmst du folgende Konfiguration vor:

Grundeinstellungen

  • Gruppe:
    Wähle eine bestehende Gruppe oder erstelle eine neue (z. B. „Energie Dashboard“)
  • Beschriftung:
    Balkonkraftwerk - Verlauf
  • Typ:
    Linie (Standard)
    → ideal, um zeitliche Verläufe darzustellen
Node-RED - Diagramm konfigurieren - Step 1  - Gruppe und Titel
Node-RED - Diagramm konfigurieren - Step 2  - Typ

Achsen konfigurieren

  • X-Achsen-Typ:
    Zeitachse (Standard)
  • Format:
    {dd}.{M}.{yyyy}
    → sorgt für eine saubere Darstellung der Datumswerte
  • X-Achsen-Beschriftung:
    Zeit
  • Y-Achsen-Beschriftung:
    kWh
Node-RED - Diagramm konfigurieren - Step 3  - Achsen Konfiguration
Node-RED – Diagramm konfigurieren – Step 3 – Achsen Konfiguration

Datenzuordnung (sehr wichtig!)

Damit das Diagramm korrekt funktioniert, müssen die Datenfelder richtig zugeordnet werden:

  • Serien:
    String → kWh
  • X-Wert:
    Schlüssel: timestamp
  • Y-Wert:
    Schlüssel: energy_kwh
Node-RED - Diagramm konfigurieren - Step 3a  - Zuordnung der Daten
Node-RED – Diagramm konfigurieren – Step 3a – Zuordnung der Daten

Hier greift die Diagramm-Node direkt auf die Struktur der Daten zu, die wir zuvor aus der SQLite-Datenbank geladen haben.

Ergebnis

Nach der Konfiguration wird der Energieverlauf als Liniendiagramm im Dashboard dargestellt. Du kannst nun auf einen Blick erkennen, wie sich dein Energieverbrauch bzw. deine Einspeisung über die Zeit entwickelt hat.

Node-RED - Liniendiagramm mit Verlaufsdaten aus der Shelly Cloud
Node-RED – Liniendiagramm mit Verlaufsdaten aus der Shelly Cloud

💡 Tipp: Falls im Diagramm keine Werte angezeigt werden, überprüfe mit einer Debug-Node, ob die Keys (timestamp, energy_kwh) korrekt gesetzt sind und die Daten im richtigen Format vorliegen.

Daten aus der Datenbank im Debug-Tab
Daten aus der Datenbank im Debug-Tab

Daten in einer Tabelle anzeigen

Neben dem Diagramm bietet es sich an, die Daten zusätzlich in Tabellenform darzustellen. So behältst du nicht nur den Verlauf im Blick, sondern kannst auch einzelne Werte direkt und übersichtlich ablesen.

In meinem Fall wird unter dem Diagramm eine Tabelle angezeigt, die die zuvor selektierten Daten aus der SQLite-Datenbank ausgibt. Dafür kannst du einfach eine Table-Node aus dem Dashboard verwenden und diese mit den gleichen Daten verbinden, die auch in das Diagramm fließen.

Node-RED - Tabelle mit Verlaufsdaten aus der Shelly Cloud
Node-RED – Tabelle mit Verlaufsdaten aus der Shelly Cloud

Der Vorteil dieser Kombination liegt auf der Hand:
Während das Liniendiagramm dir einen schnellen visuellen Überblick über den Verlauf gibt, ermöglicht die Tabelle einen genaueren Blick auf die einzelnen Datensätze – inklusive der jeweiligen Zeitstempel und Werte.

Zwar kannst du im Diagramm durch das Hover über die einzelnen Punkte ebenfalls Details einsehen, jedoch ist die tabellarische Darstellung deutlich komfortabler, wenn du gezielt Werte vergleichen oder nach bestimmten Zeitpunkten suchen möchtest.

Daten im Popup Fenster im Diagramm

Einstellungen für das Diagramm

Die Tabelle wird der Gruppe „[Shelly Dashboard] Shelly Dashboard“ hinzugefügt und hat eine Größe von „auto“.

Node-RED - Konfiguration der Tabelle
Node-RED – Konfiguration der Tabelle

Im unteren Bereich müssen wir nun die Spalten definieren, Standardmäßig würden sonst die Spaltenüberschriften aus der Datenbank übernommen.
Die erste Spalte ist die ID welche fortlaufend ist:
– Beschriftung: ID
– Typ: Row Number
Die zweite und dritte Spalte sind der Zeitstempel sowie die Werte in kWh:
– Beschriftung: Zeitstempel / Monatswerte (kWh)
– Typ: Text

Node-RED - Konfiguration der Tabellenspalten
Node-RED – Konfiguration der Tabellenspalten

Abrufen der Live-Daten vom Shelly

Über einen RPC-Call zum Shelly Plus 1PM kann man die aktuellen Daten vom angeschlossenen Verbraucher abrufen.

http://<IP-Adresse>/rpc/Shelly.GetStatus

Das Datenformat ist JSON dieses lässt sich wie bereits mehrfach erwähnt in Node-RED sehr einfach verarbeiten.

Folgende Werte sind für uns interessant:

  • apower: Leistungsaufnahme in Watt
  • voltage: Netzspannung in Volt
  • current: Spannungsaufnahme in Ampere
  • aenergy.total: gesamt pro Monat

Zusätzlich können wir auch die letzten Werte der Leistungsaufnahme der letzten drei Minuten auslesen, diese sind im Array „by_minute“ abgelegt.

"switch:0": {
    "id": 0,
    "source": "HTTP_in",
    "output": true,
    "apower": 17.4,
    "voltage": 227.6,
    "current": 0.181,
    "aenergy": {
      "total": 91102.133,
      "by_minute": [77.739, 298.57, 290.027],
      "minute_ts": 1774425735
    }

Flow zum abrufen der Daten

Der Flow zum abrufen der Daten startet erstmal manuell kann aber später mit wenigen klicks auf ein Intervall umgestellt werden.

5 Sekunden Intervall für die Wiederholung der Injection Node
Node-RED - Flow zum abrufen der aktuellen Daten vom Shelly via RPC-Call
Node-RED – Flow zum abrufen der aktuellen Daten vom Shelly via RPC-Call
Node-RED – Flow zum abrufen der aktuellen Daten vom Shelly via RPC-CallHerunterladen

extrahieren der Daten via JavaScript

Mit der Function-Node extrahieren wir die Daten aus dem JSON. Da uns wie erwähnt nur die Werte von apower, voltage, current und aenergy.total interessieren fassen wir diese in ein JSON zusammen.

Ausgabe extrahierter Daten im Debug-Tab
const data = msg.payload;

const apower = data["switch:0"].apower;
const voltage = data["switch:0"].voltage;
const current = data["switch:0"].current;
const aenergy_total = data["switch:0"].aenergy.total / 1000;

msg.payload = {
    apower: apower,
    apower_total: aenergy_total.toFixed(3),
    voltage: voltage,
    current: current,
};

return msg;

darstellen der Daten in Kacheln

Die Daten möchte ich nicht einfach nur als Text anzeigen sondern grafisch in einer Kachel (deutlich ansehnlicher). Hier verwende ich die Node template in welche HTML, CSS und auch JavaScript ausführen/anzeigen kann.

Node-RED - template Node
Node-RED – template Node
aktuelle Leistungsdaten des Shellys
aktuelle Leistungsdaten des Shellys
<template>
    <div class="energy-card">
        <fieldset>
            <legend>⚡ Aktuelle Werte</legend>

            <div class="grid">

                <div class="item">
                    <div class="label">Strom</div>
                    <div class="value">{{msg.payload.current}}</div>
                    <div class="unit">A</div>
                </div>

                <div class="item">
                    <div class="label">Spannung</div>
                    <div class="value">{{msg.payload.voltage}}</div>
                    <div class="unit">V</div>
                </div>

                <div class="item">
                    <div class="label">Leistung</div>
                    <div class="value">{{msg.payload.apower}}</div>
                    <div class="unit">W</div>
                </div>

                <div class="item">
                    <div class="label">Energie gesamt</div>
                    <div class="value">{{msg.payload.apower_total}}</div>
                    <div class="unit">kWh</div>
                </div>

            </div>
        </fieldset>
    </div>
</template>

<style>
    .energy-card fieldset {
        border: 1px solid #ccc;
        border-radius: 8px;
        padding: 15px;
    }

    .energy-card legend {
        font-weight: bold;
        padding: 0 10px;
    }

    .grid {
        display: grid;
        grid-template-columns: repeat(4, 1fr);
        gap: 15px;
    }

    .item {
        text-align: center;
        background: #f5f5f5;
        border-radius: 6px;
        padding: 10px;
    }

    .label {
        font-size: 12px;
        color: #666;
    }

    .value {
        font-size: 20px;
        font-weight: bold;
    }

    .unit {
        font-size: 12px;
        color: #999;
    }
</style>

Fazit

Mit Node-RED lässt sich mit wenigen Nodes ein leistungsfähiges und übersichtliches Energie-Dashboard für deine Shelly Geräte aufbauen. Durch die Kombination aus historischen Daten aus der SQLite-Datenbank und der Visualisierung im Dashboard erhältst du einen klaren Überblick über deinen Energieverbrauch bzw. deine Einspeisung.

Besonders praktisch ist dabei die grafische Darstellung im Liniendiagramm sowie die ergänzende Tabelle, die dir einen detaillierten Blick auf einzelne Zeitpunkte ermöglicht. So kannst du Trends erkennen, Werte vergleichen und deine Daten deutlich besser verstehen als in einer reinen CSV-Datei.

Ausblick

Im nächsten Teil der Reihe gehen wir noch einen Schritt weiter:
Wir erweitern unser Dashboard und kümmern uns darum, die aktuellen Daten direkt vom Shelly auszulesen und automatisch in der SQLite-Datenbank zu speichern.

Dafür passen wir die bestehende Struktur an, sodass die Daten korrekt berechnet und sinnvoll weiterverarbeitet werden können. Ziel ist es, ein vollständig automatisiertes System aufzubauen, das sowohl historische als auch aktuelle Werte kontinuierlich erfasst.

Letzte Aktualisierung am: 25. März 2026

Foto von Stefan Draeger
Über den Autor

Stefan Draeger — Entwickler & Tech-Blogger

Ich zeige praxisnah, wie du Projekte mit Arduino, ESP32 und Smarthome-Komponenten umsetzt – Schritt für Schritt, mit Code und Schaltplänen.

Mehr Artikel von Stefan →

Schreibe einen Kommentar Antwort abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • QR-Code Generator
  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen
Tel.: 015565432686
E-Mail: info@draeger-it.blog

Folge mir auf

link zu Fabook
link zu LinkedIn
link zu YouTube
link zu TikTok
link zu Pinterest
link zu Instagram
  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2026 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
  • Optionen verwalten
  • Dienste verwalten
  • Verwalten von {vendor_count}-Lieferanten
  • Lese mehr über diese Zwecke
Einstellungen anzeigen
  • {title}
  • {title}
  • {title}