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:
- Anmeldung bei ThingSpeak
- Einen Kanal anlegen
- Das Skript anpassen
- Balkendiagramme erzeugen
- Daten exportieren
- 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".
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.
Falls der Hinweis "Personal Email Detected" erscheint, den Haken bei "Use this email for my MathWorks Account" setzen und erneut mit "Continue" bestätigen.
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.
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".
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.
Es öffnet sich die Übersicht des Kanals, in der bereits die Trends für den Kanal angelegt wurden.
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.
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". -
field1-X-- Entspricht den Feldern des Kanals, die weiter oben angelegt wurden. -
sml[1-X]-- Entspricht den Zeilen des Dekodierungsteils im Skript.
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:
In der Konsole (Hauptmenü => Tools => Console) lässt sich nun beobachten, wie alle 30 Sekunden ein Datensatz an ThingSpeak übertragen wird:
Diese Daten werden in ThingSpeak nach einem Klick auf "Private View" als Kurven dargestellt:
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.
Um dies zu erzeugen, nutzt man im Kanal die Schaltfläche "MATLAB Visualization".
Im nachfolgenden Dialog einfach die Standardeinstellung "Custom" belassen und auf "Create" klicken.
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).
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.
Über die Navigation "Channels" => "My Channels" kommt man zurück zum Kanal.
Nach Anwahl des Kanals lässt sich die gerade erzeugte Anzeige durch einen Klick auf "Add Visualization" in die Übersicht aufnehmen.
Durch Anklicken des entsprechenden Charts und einen anschließenden Klick auf "Save" wird das neue Diagramm in die Übersicht aufgenommen.
Das Endergebnis sollte dann wie folgt aussehen:
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.
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.
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".
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.
Nun werden die Trends in der App angezeigt:



























