Zum Inhalt

ThingSpeak

Wenn die Daten des Stromzählers mit dem WattWächter WiFi/USB ausgelesen werden, kommt natürlich der Wunsch auf, diese Daten zu speichern und zu visualisieren. Nicht jeder betreibt ein Hausautomationssystem, das dies übernehmen kann. In dem Fall besteht die Möglichkeit, die Daten in die Cloud von ThingSpeak hochzuladen und dort zu verarbeiten.

Nachfolgend ist die nötige Einrichtung in 3 Schritten beschrieben. Weitere Möglichkeiten die Daten zu verarbeiten und darzustellen sind unter den Schritten 4 und 5 zu finden:

  1. Anmeldung bei ThingSpeak
  2. Einen Kanal anlegen
  3. Das Skript anpassen
  4. Balkendiagramme erzeugen
  5. Daten exportieren
  6. App ThingView

Anmeldung bei ThingSpeak

Um einen neuen Account bei ThingSpeak anzulegen, öffnen Sie die Seite www.ThingSpeak.com und klicken Sie auf die Schaltfläche "Get Started For Free".

ThingSpeak Startseite

Auf der nächsten Seite muss über den Link "No Account? Create one" ein neuer Account angelegt werden. Anschließend sind die persönlichen Daten einzutragen und mit "Continue" zu bestätigen.

Account erstellen

Persönliche Daten

Falls der Hinweis "Personal Email Detected" erscheint, den Haken bei "Use this email for my MathWorks Account" setzen und erneut mit "Continue" bestätigen.

Personal Email Detected

Danach wird eine Verifikations-E-Mail an die angegebene E-Mail-Adresse verschickt. In dieser E-Mail muss die Schaltfläche "Verify email" angeklickt werden, um die Adresse zu verifizieren. Anschließend kann durch einen Klick auf "Continue" ein Passwort vergeben werden.

Verifikation

Passwort

Nun erscheint die Seite "Sign-up successful" und nach einem Klick auf "OK" landet man auf der Übersichtsseite von ThingSpeak.


Einen neuen Kanal anlegen

Um einen neuen Kanal anzulegen, klicken Sie in der Übersichtsseite von ThingSpeak auf die Schaltfläche "New Channel".

ThingSpeak Übersicht

Hier kann nun ein Name für den Kanal und optional eine Beschreibung vergeben werden. In jedem Kanal können bis zu acht Felder definiert werden. Im nachfolgenden Beispiel wurden vier Felder für den Bezug, die Leistung, die Einspeisung und den Strom definiert. Mit einem Klick auf "Save Channel" werden die Eingaben gespeichert.

Kanal erstellen

Es öffnet sich die Übersicht des Kanals, in der bereits die Trends für den Kanal angelegt wurden.

Leerer Kanal


Skript anpassen

Nun muss das Skript angepasst werden, damit die Daten in die Cloud von ThingSpeak übertragen werden. Dazu im Menü "Tools" => "Edit Script" aufrufen. Im folgenden Beispiel wird ein Skript für den Hager EHZ361-Zähler verwendet.

Skript unbearbeitet

Hier muss folgender Code-Block zwischen >S und >M 1 eingefügt werden:

>S
if upsecs%30==0
  then
    =>WebSend [api.thingspeak.com] /update.json?api_key=WriteKey&field1=%sml[1]%&field2=%sml[2]%&field3=%sml[3]%&field4=%sml[4]%
endif

Im Code-Block sind einige Angaben anzupassen:

  • 30 -- Hiermit wird festgelegt, wie oft die Werte an ThingSpeak übertragen werden (in Sekunden).

    Achtung

    Für den kostenlosen Account bei ThingSpeak darf dieser Wert nicht kürzer als 15 Sekunden sein.

  • WriteKey -- Hier muss der Schlüssel eingetragen werden, der es erlaubt, in den Kanal zu schreiben. Diesen findet man in ThingSpeak unter "API Keys".

    Write API Key

  • field1-X -- Entspricht den Feldern des Kanals, die weiter oben angelegt wurden.

    Channel Fields

  • sml[1-X] -- Entspricht den Zeilen des Dekodierungsteils im Skript.

    Skript SML-Zeilen

Die Felder im Kanal und die Zeilen des Skripts müssen nun richtig zugeordnet werden:

Messwert Kanal-Feld Skript-Zeile
Bezug field1 sml[1]
Leistung field2 sml[5]
Spannung field3 sml[3]
Strom field4 sml[4]

Hinweis

Das folgende Beispiel dient nur zur Veranschaulichung. Sie benötigen Ihren eigenen API-Key und vermutlich eine andere Zuordnung.

>S
if upsecs%30==0
  then
    =>WebSend [api.thingspeak.com] /update.json?api_key=86OBJRNKSXA9LSOG&field1=%sml[1]%&field2=%sml[5]%&field3=%sml[3]%&field4=%sml[4]%
endif

Das komplette Skript stellt sich in Tasmota dann so dar:

Skript bearbeitet

In der Konsole (Hauptmenü => Tools => Console) lässt sich nun beobachten, wie alle 30 Sekunden ein Datensatz an ThingSpeak übertragen wird:

Konsole

Diese Daten werden in ThingSpeak nach einem Klick auf "Private View" als Kurven dargestellt:

Konfigurierter Kanal


Balkendiagramme erzeugen

Möchte man Balkengrafiken mit dem stündlichen Verbrauch der letzten 24 Stunden oder mit dem täglichen Verbrauch der letzten 10 Tage erzeugen, so lässt sich dies mit der integrierten MATLAB-Funktionalität realisieren.

Balkendiagramme

Um dies zu erzeugen, nutzt man im Kanal die Schaltfläche "MATLAB Visualization".

MATLAB Visualization

Im nachfolgenden Dialog einfach die Standardeinstellung "Custom" belassen und auf "Create" klicken.

Create MATLAB Visualization

Im nächsten Dialog muss ein Name für das Modul vergeben und der entsprechende MATLAB-Code eingefügt werden. Im Code müssen in den ersten drei Zeilen die channelID, die fieldID und der readAPIKey angegeben werden. Die Field-ID muss sich auf das Feld beziehen, das die bezogenen kWh speichert (im Beispiel Feld 1: Bezug).

Code einfügen

MATLAB-Code für stündliche Balken
% ThingSpeak Kanal-Parameter
channelID = DEINE_CHANNELID;  % Ersetze mit deiner Channel-ID
fieldID = 1;          % Das Feld mit den Stromverbrauchsdaten
readAPIKey = 'DEIN_API_KEY'; % Ersetze mit Deinem API Key

noHours = 24; % Anzahl der Stunden, die angezeigt werden sollen
currentTime = datetime('now', 'TimeZone', 'Europe/Berlin');
currentTime = dateshift(currentTime, 'start', 'hour');
startTime = currentTime - hours(noHours);

hourlyTimestamps = [];
hourlyConsumption = [];

for h = 1:noHours
    hourStart = startTime + hours(h);
    hourEnd = hourStart + hours(1);

    if hourEnd > datetime('now', 'TimeZone', 'Europe/Berlin')
        hourEnd = datetime('now', 'TimeZone', 'Europe/Berlin');
    end

    data = thingSpeakRead(channelID, 'Fields', fieldID, 'DateRange', [hourStart, hourEnd], ...
                          'ReadKey', readAPIKey, 'OutputFormat', 'table');

    if ~isempty(data)
        firstValue = data.(2)(1);
        lastValue = data.(2)(end);
        consumption = lastValue - firstValue;
    else
        consumption = 0;
    end

    hourlyTimestamps = [hourlyTimestamps; hourStart];
    hourlyConsumption = [hourlyConsumption; consumption];
end

figure;
bar(hourlyTimestamps, hourlyConsumption, 'b');
xlabel('Zeit (MESZ)');
ylabel('Verbrauch (kWh)');
title(sprintf('Stromverbrauch der letzten %d Stunden', noHours));
grid on;
datetick('x', 'HH:MM', 'keeplimits');
MATLAB-Code für tägliche Balken
% ThingSpeak Kanal-Parameter
channelID = DEINE_CHANNELID;  % Ersetze mit deiner Channel-ID
fieldID = 1;          % Das Feld mit den Stromverbrauchsdaten
readAPIKey = 'DEIN_API_KEY'; % Ersetze mit Deinem API Key

noDays = 10; % Anzahl Tage, die angezeigt werden sollen
currentTime = datetime('now', 'TimeZone', 'Europe/Berlin');
currentTime = dateshift(currentTime, 'start', 'day');
startTime = currentTime - days(noDays);

dailyTimestamps = [];
dailyConsumption = [];

for d = 1:noDays
    dayStart = startTime + days(d);
    dayEnd = dayStart + days(1);

    if dayEnd > datetime('now', 'TimeZone', 'Europe/Berlin')
        dayEnd = datetime('now', 'TimeZone', 'Europe/Berlin');
    end

    data = thingSpeakRead(channelID, 'Fields', fieldID, 'DateRange', [dayStart, dayEnd], ...
                          'ReadKey', readAPIKey, 'OutputFormat', 'table');

    if ~isempty(data)
        firstValue = data.(2)(1);
        lastValue = data.(2)(end);
        consumption = lastValue - firstValue;
    else
        consumption = 0;
    end

    dailyTimestamps = [dailyTimestamps; dayStart];
    dailyConsumption = [dailyConsumption; consumption];
end

figure;
bar(dailyTimestamps, dailyConsumption, 'b');
xlabel('Datum (MESZ)');
ylabel('Verbrauch (kWh)');
title(sprintf('Täglicher Stromverbrauch der letzten %d Tage', noDays));
grid on;
datetick('x', 'dd-mmm', 'keeplimits');

Mit einem Klick auf "Save and Run" kann man prüfen, ob alles geklappt hat.

Save and Run

Über die Navigation "Channels" => "My Channels" kommt man zurück zum Kanal.

My Channels

Nach Anwahl des Kanals lässt sich die gerade erzeugte Anzeige durch einen Klick auf "Add Visualization" in die Übersicht aufnehmen.

Add Visualization

Durch Anklicken des entsprechenden Charts und einen anschließenden Klick auf "Save" wird das neue Diagramm in die Übersicht aufgenommen.

Visualization auswählen

Das Endergebnis sollte dann wie folgt aussehen:

Ergebnis


Daten exportieren

Möchte man die Daten, die an ThingSpeak übertragen wurden, exportieren, um sie z.B. in Excel auszuwerten, so ist dies im Bereich "Data Import / Export" des Kanals möglich. Durch einen Klick auf die Schaltfläche "Download" im Bereich "Export" können alle bisher gespeicherten Daten des Kanals als CSV-Datei heruntergeladen werden.

Daten exportieren


App ThingView

Die ThingSpeak-Webseite ist weltweit per Browser aufrufbar. Wer einen einfacheren Zugriff möchte, kann sich die kostenpflichtige ThingView-App herunterladen:

Auf der Startseite der App lässt sich durch einen Klick auf das "+" ein neuer Kanal anlegen.

ThingView Start

Die nötige Channel ID lässt sich in ThingSpeak direkt unterhalb des Kanalnamens finden. Da es sich standardmäßig um einen privaten Kanal handelt, ist die Auswahl "Public" zu deaktivieren und der Lese-Schlüssel aus ThingSpeak einzutragen. Dieser befindet sich unter "API Keys" im Bereich "Read API Keys".

Read API Key

Kanal hinzufügen

Nach einem Klick auf "Search" öffnet sich eine neue Seite, in der der Kanal bestätigt werden muss. Im nächsten Fenster muss dann noch einmal der Kanal ausgewählt werden.

Kanal bestätigen

Kanal auswählen

Nun werden die Trends in der App angezeigt:

ThingView Ergebnis