Datenverarbeitung mit ThingSpeak

Einführung

Bislang haben wir in diesem Artikel gesehen, wie Sensordaten auf der seriellen Konsole angezeigt werden können. Dies ist jedoch für die meisten Anwendungen nicht besonders bequem oder nützlich. Es wäre viel nützlicher, wenn wir diese Werte auf einer externen Plattform aufzeichnen würden, auf die wir jederzeit Zugriff haben, die Daten verarbeiten und visualisieren können. Eine solche Plattform ist ThingSpeak. Aber was ist das?

ThingSpeak – IoT-Plattform

ThingSpeak ist eine Online-Plattform für die Speicherung, Analyse und Visualisierung von Daten aus dem Internet der Dinge (IoT). Dieser Dienst bietet leistungsstarke Funktionen zur Erfassung und Verarbeitung von Daten aus verschiedenen IoT-Geräten wie Sensoren, Mikrocontrollern und mehr.

Einer der Hauptvorteile von ThingSpeak ist die einfache Integration mit verschiedenen IoT-Geräten und Plattformen. Benutzer können Messwerte über HTTP- oder MQTT-Protokolle an ThingSpeak senden. Dies macht die Plattform für eine breite Palette von Geräten und Anwendungen zugänglich.

Zu den Kernfunktionen von ThingSpeak gehört die Möglichkeit, Daten zu speichern, Daten in Echtzeit zu visualisieren und Diagramme für die Analyse zu erstellen. Benutzer können Grafiken und Diagramme in Abhängigkeit von bestimmten Bedingungen konfigurieren. Die Plattform bietet auch eine kostenlose Integration mit MATLAB von MathWorks, ohne dass eine Lizenz erforderlich ist. Dieser Aspekt macht ThingSpeak zu einer geeigneten Lösung für die Überwachung, Verwaltung von IoT-Geräten und die Analyse der von ihnen gesammelten Werte.

Die Plattform bietet auch Optionen zum Senden von Benachrichtigungen und automatischen Aktionen, die ausgelöst werden, wenn bestimmte Bedingungen erfüllt sind. Dies kann für die Reaktion auf Ereignisse in Echtzeit und die Systemverwaltung nützlich sein.

Aus der Sicherheitsperspektive verfügt ThingSpeak über Zugangskontroll- und Datenschutzfunktionen. Benutzer können Zugriffsrechte festlegen und Datenverschlüsselung verwenden, was ein hohes Maß an Sicherheit bei der Verarbeitung und Speicherung von Informationen bietet.

Der Grundgedanke, den die Plattform verfolgt, ist folgender:

  • Sammeln von Daten aus mehreren möglichen Quellen (Sensoren, Sensoren, Systemstatus oder externe Ereignisse)
  • Datenanalyse durch mathematische Analysen und Algorithmen
  • Reaktion auf bestimmte Ergebnisse, die eine Folge der Analyse sind

Aber wie viel kostet die Plattform? Auf der Seite finden wir die Antwort:

Als kommerzieller Nutzer können wir uns einmalig für eine begrenzte Zeit registrieren und die Plattform während dieser Zeit kostenlos nutzen. So haben wir Möglichkeit zu testen. Alle anderen kommerziellen Nutzungen erfordern eine kommerzielle Standardlizenz. Nicht-kommerzielle Nutzer können ThingSpeak unter bestimmten Einschränkungen kostenlos nutzen. Nutzer, die ThingSpeak kostenlos nutzen, dürfen nicht mehr als 3 Millionen Nachrichten pro Jahr (etwa 8200 Nachrichten pro Tag) an die Plattform und 4 Kanäle senden. Das Aktualisierungsintervall für Nachrichten bleibt auf 15 Sekunden begrenzt. Eine Nachricht ist definiert als ein Datensatz mit bis zu 8 Datenfeldern pro Kanal. Ein Kanal, der eine Wetterstation repräsentiert, kann zum Beispiel die folgenden 8 Datenfelder enthalten: Temperatur, Luftfeuchtigkeit, Luftdruck, Windgeschwindigkeit, Windrichtung, Niederschlag, Batteriestand und Lichtstärke. Jede Nachricht darf 3000 Bytes nicht überschreiten. Auch als Beispiel für die Nachrichten können wir haben:

  • Schreiben in den Kanal über die REST-API oder ThingSpeak’s zweckgebundene Bibliotheken
  • Aufzeichnung auf dem Kanal über MQTT
  • Schreiben in den ThingSpeak-Kanal aus MATLAB mit thingspeakwrite oder der REST API
  • Schreiben in den Kanal von ThingSpeak zu ThingSpeak mit den Anwendungen MATLAB Analysis oder MATLAB Visualizations
  • Alle ThingSpeak-Einträge ausgelöst durch React oder Timecontrol
  • Aufzeichnung in einem Bildkanal in ThingSpeak. Jede erfolgreiche Aufnahme in einem Bildkanal verbraucht 100 Nachrichten

Ausführlichere Informationen finden Sie auf der Seite.

Einige praktische Beispiele

Das macht ThingSpeak zu einer idealen Plattform für ein kleines IoT-Projekt im Haushalt. Aber lassen Sie uns versuchen, etwas Code zu implementieren und einige der Vorteile der Plattform zu nutzen. So bekommen wir eine bessere Vorstellung davon, wie sie verwendet wird und was sie leisten kann.

Wählen Sie im Menü von Arduino IDE 1.8.x File->Examples->WiFi->WiFiClient

Zu unserem Glück ist das Senden von Daten an ThingSpeak bereits in diesem Beispiel integriert. Um es zu nutzen, müssen wir ein paar Dinge im Voraus tun.

  • Sie müssen sich auf der Seite registrieren oder anmelden
  • Wir müssen einen Kanal erstellen. Dies geschieht durch:

Gehen wir zu My Channels

Und wenn wir dort sind, um einen Kanal zu erstellen, indem wir auf die Schaltfläche „New Channel“ klicken.

Im nächsten Menü können wir verschiedene Werte eingeben

Und klicken Sie auf „Kanal speichern“.

Fügen wir nun einige Werte in den ESP32 in Arduino IDE Code ein.

  • Geben Sie Ihren WiFi-Netzwerknamen und Ihr Passwort ein. Diese werden in den Feldern ssid und password anstelle von „your-ssid“ und „your-password“ ersetzt.
  • Sobald wir damit fertig sind, ersetzen wir die Werte channelID, writeApiKey und readApiKey. Wir können diese Schlüssel in ThingSpeak finden
  • Ändern wir den Code wie folgt:
#include 
#include "driver/temp_sensor.h"
const char* ssid     = "An****"; // Change this to your WiFi SSID
const char* password = "******"; // Change this to your WiFi password
const char* host = "api.thingspeak.com"; // This should not be changed
const int httpPort = 80; // This should not be changed
const String channelID   = "23*****"; // Change this to your channel ID
const String writeApiKey = "WZ**********"; // Change this to your Write API key
const String readApiKey = "E5**********"; // Change this to your Read API key
int numberOfResults = 3; // Number of results to be read
int fieldNumber = 1; // Field number which will be read out
void initTempSensor(){
    temp_sensor_config_t temp_sensor = TSENS_CONFIG_DEFAULT();
    temp_sensor.dac_offset = TSENS_DAC_L2;
    temp_sensor_set_config(temp_sensor);
    temp_sensor_start();
}
void setup()
{
    Serial.begin(115200);
    initTempSensor();
    while(!Serial){delay(100);}
    // We start by connecting to a WiFi network
    Serial.println();
    Serial.println("******************************************************");
    Serial.print("Connecting to ");
    Serial.println(ssid);
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }
    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
}
void readResponse(WiFiClient *client){
  unsigned long timeout = millis();
  while(client->available() == 0){
    if(millis() - timeout > 5000){
      Serial.println(">>> Client Timeout !");
      client->stop();
      return;
    }
  }
  // Read all the lines of the reply from server and print them to Serial
  while(client->available()) {
    String line = client->readStringUntil('\r');
    Serial.print(line);
  }
  Serial.printf("\nClosing connection\n\n");
}
void loop(){
  WiFiClient client;
 String footer = String(" HTTP/1.1\r\n") + "Host: " + String(host) + "\r\n" + "Connection: close\r\n\r\n";
  // WRITE --------------------------------------------------------------------------------------------
  if (!client.connect(host, httpPort)) {
    return;
  }
  float result = 0;
  temp_sensor_read_celsius(&result);
  client.print("GET /update?api_key=" + writeApiKey + "&field1=" + result + footer);
  readResponse(&client);
  // READ --------------------------------------------------------------------------------------------
  String readRequest = "GET /channels/" + channelID + "/fields/" + fieldNumber + ".json?api_key=" + writeApiKey + "&results=" + numberOfResults + " HTTP/1.1\r\n" +
                       "Host: " + host + "\r\n" +
                       "Connection: close\r\n\r\n";
  if (!client.connect(host, httpPort)) {
    return;
  }
  client.print(readRequest);
  readResponse(&client);
  // -------------------------------------------------------------------------------------------------
  delay(10000);
}

Zu dem Code aus dem Beispiel habe ich den Code aus dem Artikel hinzugefügt. Das Ziel des Programms ist, dass diese Werte nicht nur in ThingSpeak geschrieben werden, sondern auch einen Sinn ergeben. So schreiben wir die Temperatur des Boards selbst in die Plattform. Aber schauen wir uns doch mal an, was auf die serielle Konsole geschrieben werden soll:

******************************************************
Connecting to A********
.................................................................................................................................
WiFi connected
IP address:
192.168.25.226
HTTP/1.1 200 OK
Date: Thu, 30 Nov 2023 20:40:50 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 2
Connection: close
Status: 200 OK
Cache-Control: max-age=0, private, must-revalidate
Access-Control-Allow-Origin: *
Access-Control-Max-Age: 1800
X-Request-Id: add4611d-0b16-4645-be57-bc5f64e1fa54
Access-Control-Allow-Headers: origin, content-type, X-Requested-With
Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS, DELETE, PATCH
ETag: W/"98a3ab7c340e8a033e7b37b6ef942875"
X-Frame-Options: SAMEORIGIN
79
Closing connection

HTTP/1.1 200 OK
Date: Thu, 30 Nov 2023 20:40:52 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: close
Status: 200 OK
Cache-Control: max-age=7, private
Access-Control-Allow-Origin: *
Access-Control-Max-Age: 1800
X-Request-Id: a9c8c4ab-ea9d-47dc-acab-80e68e24053b
Access-Control-Allow-Headers: origin, content-type, X-Requested-With
Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS, DELETE, PATCH
ETag: W/"06693d374f4a0be260f2834b6fe7be04"
X-Frame-Options: SAMEORIGIN
1c6

{"channel":{"id":2******,"name":"ThingSpeak","description":"ThingSpeak demo channel","latitude":"0.0","longitude":"0.0","field1":"Internal temp","created_at":"2023-11-18T14:20:41Z","updated_at":"2023-11-18T14:20:41Z","last_entry_id":79},"feeds":[{"created_at":"2023-11-28T20:47:03Z","entry_id":77,"field1":"40.35"},{"created_at":"2023-11-28T20:47:29Z","entry_id":78,"field1":"39.04"},{"created_at":"2023-11-30T20:40:50Z","entry_id":79,"field1":"37.72"}]}
0
Closing connection

Wir können sehen, dass die Messungen gesendet werden und die Plattform die letzten 2 Ergebnisse zurückgibt.

Aber schauen wir uns doch einmal an, was im Plattformkanal passiert.

Auf der Seite ist die folgende Grafik zu sehen:

Hier sehen wir die Grafik der letzten 10 Ergebnisse.

Wie wäre es, eine E-Mail zu schicken?

Aber lassen Sie uns das Beispiel ein wenig praktischer gestalten. Stellen wir uns vor, dass wir die Temperatur überwachen und reagieren müssen, wenn sie zu hoch wird, zum Beispiel, um das Board abzuschalten. Dies ist eine der Standardfunktionen der Plattform. Sie kann uns per E-Mail benachrichtigen, wenn sich etwas an den Werten ändert. Angenommen, die Temperatur erreicht 40 Grad. Schauen wir uns an, wie das funktioniert.

Melden Sie sich auf der ThingSpeak-Seite an. Um fortzufahren, benötigen wir den API-Code für das Senden von Nachrichten. Wir finden ihn, indem wir auf das Profilsymbol gehen und auf „Mein Profil“ klicken.

Sie beginnt mit TAK. Kopieren Sie ihn, da wir ihn zum Senden einer E-Mail benötigen.

Gehen Sie dann zu Apps -> MATLAB Analysis. Klicken Sie dort auf die Schaltfläche „New“. Für den nächsten Schritt benötigen wir den API-Schlüssel von oben.

Hier “Custom (no starter code)” auswählen und drücken Sie “Create”.

In das MATLAB-Code-Feld müssen wir den folgenden Code eingeben und „alert_api_key“ durch den Schlüssel von oben ersetzen:

alert_body = 'This is the text that will be emailed';
alert_subject = 'This will be the subject of the email';
alert_api_key = 'TAK**************';
alert_url= "https://api.thingspeak.com/alerts/send";
jsonmessage = sprintf(['{"subject": "%s", "body": "%s"}'], alert_subject,alert_body);
options = weboptions("HeaderFields", {'Thingspeak-Alerts-API-Key', alert_api_key; 'Content-Type','application/json'});
result = webwrite(alert_url, jsonmessage, options);

wie diese:

Und drücken Sie Save.

Lassen Sie uns nun React erstellen.

Und richten Sie es so ein

Als Ergebnis erhalten wir die folgenden zwei Dinge

Führen wir nun das Board aus und sehen uns das Ergebnis an.

Wenn die Temperatur 40 Grad übersteigt, wird die folgende E-Mail empfangen:

In der E-Mail sind die Vorlagenwerte enthalten, die durch Text ersetzt werden können, um den Alarm und seine Bedeutung genauer zu beschreiben. Sie werden hier so belassen, um ein klareres Bild davon zu bekommen, welcher Text wo angezeigt wird.

Die Ergebnisse in der Tabelle sehen wie folgt aus:

Hier ist deutlich zu erkennen, dass die Werte die 40-Grad-Grenze um ein Vielfaches überschreiten.

Kurzes Fazit

Wie Sie sehen können, ist die ThingSpeak-Plattform ein leistungsfähiges IoT-Tool. Sie kann Informationen speichern, sie verarbeiten und auf bestimmte Werte oder Ergebnisse reagieren. Sie kann uns dabei helfen, verschiedene Dinge zu automatisieren. Sie kann auch verschiedene Werte wie Temperatur, Druck, Feuchtigkeit oder Stromverbrauch visualisieren und überwachen. Die Plattform bietet kostenlose Nutzung und leistungsstarke Automatisierungstools. Ich denke, wir haben heute einen weiteren kleinen Teil der Hausautomatisierung kennengelernt.

Spaß am Programmieren!

Comments

No comments yet. Why don’t you start the discussion?

Schreibe einen Kommentar

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