Webserver

Raspberry Pi Sensordaten mit ThingSpeak loggen und auswerten

Häufig fallen in Projekten, die rund um die Uhr laufen, eine Menge Daten an. Um diese dauerhaft zu speichern ist ein Weg, die Daten in einer lokalen Datenbank zu speichern. Jedoch gibt es auch einige Gründe, die dagegen sprechen. Um die gemessenen Daten (z.B. aus einer Wetterstation) auch in Zukunft verfügbar zu halten, kann man auch verschiedene Online Dienste ausweichen.

Einer dieser Anbieter ist ThingSpeak. Hier kann man für kleinere Anwendungen einen kostenlosen Account erstellen und seine Daten sehr einfach übertragen. Und genau darum geht es in diesem Tutorial: Wie man Sensordaten zu ThingSpeak überträgt und diese später auswertet.

 

Zubehör

Alles was du benötigst ist einen Raspberry Pi mit Internetanschluss und einen Sensor, dessen Daten du misst. Aber selbst die CPU Aktivität kann protokolliert werden. In diesem Tutorial nutze ich einen DHT22, mit Hilfe dessen ich die Temperatur und Luftfeuchtigkeit messe und logge.

Für eine Wetterstation wären folgende Sensoren und Module sinnvoll:

Eine Auflistung von weiteren Komponenten findest du in diesem Artikel: 50 der wichtigsten Raspberry Pi Sensoren und Module

 

ThingSpeak Account einrichten

Bevor wir loslegen, wird ein Account bei ThingSpeak benötigt. Erstelle dir dazu hier einen Account, sofern du noch keinen hast. Anschließend erstellst du unter https://thingspeak.com/channels einen neuen Channel.

Hier vergibst du einen Namen für den Channel sowie welche Felder du nutzen willst. Insgesamt können bis zu 8 Felder genutzt werden. Die vergebenen Namen haben keinen Einfluss auf die Übertragung der Daten, da wir nur „field1“, „field2“, usw. angeben. Alle diese vergebenen Namen sind auch später noch veränderbar.

thingspeak_neuer_channel

Nachdem du den Channel unten gespeichert hast, wirst du automatisch in den Reiter „Private View“ weitergeleitet. Hier werden die vergebenen Felder als Diagram angezeigt. Etwas weiter oben findest du die „Channel ID„. Diese werden wir gleich noch brauchen.

Anschließend wechseln wir noch in den Reiter „API Keys“. Die beiden Werte von „Write API Key„, sowie „Read API Key“ werden ebenso gleich benötigt, damit wir Daten schreiben bzw. abrufen können.

 

Temperatursensor anschließen und einrichten

Falls du den DHT11 bzw. DHT22 nicht nutzen willst, kannst du dieses Kapitel überspringen.

Auf die beiden Sensoren bin ich im Detail bereits hier eingegangen, daher nur noch einmal die Verbindung als Erinnerung (10kΩ Widerstand):

luftfeuchtigkeit_DHT11_Steckplatine

Sofern du den Sensor vorher nie benutzt hast und auch die entsprechende Bibliothek noch nicht installiert ist, müssen wir erst einmal diese installieren. Dafür sind einige Pakete vonnöten:

sudo apt-get update
sudo apt-get install build-essential python-dev python-openssl git

Nun installieren wir noch die Bibliothek zum Auslesen des DHT11/22 Sensors:

git clone https://github.com/adafruit/Adafruit_Python_DHT.git && cd Adafruit_Python_DHT
sudo python setup.py install

Ist alles ohne Fehler durchgelaufen, können wir bereits fortfahren.

 

Raspberry Pi ThingSpreak Bibliothek nutzen

Um den Service nutzen zu können ist ein einfaches Senden der Daten per „POST“ bzw. abrufen per „GET“ möglich. Funktionen dazu sind in so gut wie jeder Programmiersprache vorhanden und mit ein wenig Kenntnis sollte die Datenübertragung schnell gebaut sein. Die Antworten sind prinzipiell in JSON.

Wer (noch) nicht über genug Erfahrung dazu besitzt oder einfach keine Lust hat es selbst zu schreiben kann auch die ThingSpeak Bibliothek nutzen. Dazu installieren wir sie einfach per pip:

pip install thingspeak

Hierbei wird einerseits eine Python Bibliothek erstellt und zusätzlich eine Terminal-Anwendung. Du kannst thingspeak also auch über die Konsole aufrufen (bzw. aus einem anderen C++/Java Programm).

 

Fangen wir also an. Unser kleines Python Skript soll alle 15 Sekunden die Temperatur und Luftfeuchtigkeit des DHT22 auslesen und diese an unseren Channel senden. Außerdem sollen die Daten danach nochmal abgefragt werden (dies wird in Anwendungen, die nur Daten senden, nicht nötig sein; daher ist es nur ein Demonstrationsbeispiel).
Wir erstellen eine neue Datei,

sudo nano thingspeak_example.py

welche folgenden Inhalt bekommt (Speichern und Beenden mit STRG+O, STRG+X):

Die Zeilen 5 bis 7 musst du entsprechend anpassen. Zeile 8 muss lediglich verändert werden, sofern du einen anderen GPIO für den Sensor nutzt.

Falls du den DHT22 Sensor nicht nutzt, so muss der Code natürlich ein wenig angepasst werden.

 

Daten im Webpanel und per API abrufen

thingspeak_view

Die Daten des Panels werden mit wenigen Sekunden Verzögerung „quasi live“ angezeigt. Du kannst die Panels individualisieren (Aussehen und Datenanzeige) und sogar eigene Ansichten für die Daten schreiben. Für diese sogenannten Apps musst du lediglich ein wenig HTML, CSS und Javascript beherrschen. Alternativ kannst du dir auch Plugins aus dem Forum laden.

 

Falls du die Daten per API aufrufen möchtest, kannst du dies auch einfach per JSON. Dabei musst du deine Channel ID (bei mir: 206897) sowie deinen „Read API Key“ (bei mir: 9EZ7E0918UVVAGAY) in folgendem Link ersetzen:

https://api.thingspeak.com/channels/206897/feeds.json?api_key=9EZ7E0918UVVAGAY

Darüber hinaus gibt es noch eine Menge weiterer Parameter, die du zur Eingrenzung, Summierung oder Filterung der Daten angeben kannst. Du findest sie im MathWorks Wiki.

 

Als Schlusswort möchte ich dennoch darauf hinweisen, dass man sich immer bewusst sein sollte, was genau man überträgt. Auch wenn es sich bei ThingSpeak um einen seriösen Anbieter handelt, sollte man besonders sensible Daten u.U. selbst speichern, auch wenn dies etwas umständlicher und weniger ausfallsicher ist. Für unkritische Projekte wie Wetterstationen oder bspw. die Überwachung eines Aquariums sehe ich jedoch keine Gefahr.

, , , , , , , , ,


35 Kommentare

  1. Rene Gürtler sagt:

    Habe jetzt mal die Links zu den Modulen usw. angesehen.
    Muss man die von Amazon benutzen, oder gehen die Breadboards, Sensoren , Jumpwires usw.
    von diesem Shop auch?
    ramser-elektro.at/shop/

    Wenn nein: Was ist da der Unterschied?
    Irgendwie sehen die Teile gleich aus, wie bei Amazon.

  2. Lennart sagt:

    könntest du mal zeigen wie man dies ohne einen externen anbieter macht ? also sqlite db auf dem raspberry und dann einbindung auf eine onlineoberfläche.

    • Gunter sagt:

      Da ein Internetanschluss bei einem pi der außen am Haus oder gar im Garten als Wetterstation seinen Dienst tut, wohl eher selten vorkommt, ist dieses Tuturial wohl eher als Hilfe beim Speichern von Daten gedacht und weniger als Wetterstations-Tutorial.
      Lokal auf der Sd Karte des Pi haben solch Daten ja auch nichts verloren, die Karte wird schnell ihr Schreibzyklus-Limit erreicht habe und den Dienst verweigern. Deshalb der Ansatz mit dem externen Cloudspeicher. Als lokale Alternative bietet sich der Einsatz von rrdb oder ähnlichem auf einem usb stick an. Man kann beim Pi aber auch den ganzen Arbeitsbereich von der Sd Karte auf ein usb lauferk (Stick) auslagern, dann wird die Karte nur noch zum Boot benötigt.

    • Felix sagt:

      Im eigenen Garten ist es nicht so unwahrscheinlich, dass man noch ein WLAN Signal empfängt. Und mit einem Pi 3 braucht man auch keinen Wifi Adapter mehr. Aber du hast dennoch Recht: Die Wetterstation dient nur als Beispiel zum loggen der Daten.

  3. Friedel sagt:

    Vielen Dank für das Tutorial. Da ich ein ziemlicher Laie bin, habe ich folgende Fragen:
    Ich habe 3 Dallas-Sensoren (DS 18B20), die ich alle auf der Konsole einzeln auslesen kann.
    1.)Wie binde ich sie in die Datei „thingspeak_example.py“ ein ?
    2.)Was bedeutet „pin“ in dieser Datei (Pin-Ziffer od. GPIO-Ziffer)?
    vermutl. ja GPIO
    3.)In welches Verzeichnis wird diese Datei gelegt?

  4. Reinhard sagt:

    Hallo.

    Ich bekomme beim Aufruf von der thingspeak python Lib folgende Fehlermeldung:
    AttributeError: ‚module‘ object has no attribute ‚Channel‘

    Auch wenn ich direkt in der python commandozeile nur „import thingspeak“ eingebe kommt dieselbe Meldung

    Hast du eine Idee?
    Danke & LG
    Reinhard

  5. Kresi sagt:

    Habe fast dasselbe problem. Wenn ich das script in python 2.7.9 (rasp pi 3) laufen lasse bekomme ich auch die Fehlermeldung ´module` object has no attribute `Channel`

  6. Reinhard sagt:

    @Felix: Vielleicht kannst du das nochmals mit einem neu aufgesetztem Raspberry versuchen?
    Vielleicht tritt dann der Fehler bei Dir auch auf?
    Danke & LG
    Reinhard

  7. Reinhard sagt:

    Hallo.
    Ich habe das Problem gefunden: Ich testete zuerst mit einem python Script mit Namen „thingspeak.py“. Dieses wurde zu thingspeak.pyc kompiliert und das folgende Testscript
    importierte genau dieses file anstelle des regulären thingspeak Moduls
    Sprich: Man darf sein Script nicht(!) „thingspeak.py“ nennen!
    LG

    • Felix sagt:

      Ihr seid ja schneller, als ich es selbst noch einmal testen konnte 🙂
      Freut mich, dass es nun bei euch funktioniert!

  8. Kresi sagt:

    Ich schäme mich so, aber wenn man nachdenkt „ja, nee, ist klar“

  9. Reinhard sagt:

    Und die Fehlermeldung macht (im Nachhinein) auch Sinn….. 😉

  10. Marcel sagt:

    Hi Felix,

    echt tolle Seite von dir es funktioniert voll geil – stay tuned

  11. Ingo sagt:

    Cool, genau sowas habe ich gesucht.
    Hat sofort geklappt…
    Nur der A2302 hat ne Macke und zeigt 100% Luftfeuchte an…
    Da muss ich wohl noch mal ran… 🙂
    Gruß Ingo

  12. Nicolas sagt:

    Hallo,
    Ich habe ein Problem beim installieren von Thingspeak wenn ich „pip install thingspeak“ eingebe kommt nach kurzer Zeit Cleaning up… und dann in rot ein langer Fehler Code.
    Vielen Dank für die Hilfe im vorraus.
    Gruß Nicolas

    • Nicolas sagt:

      Und davor steht: „error: could not create ‚/usr/local/lib/python2.7/dist-packages/thingspeak‘: Per mission denied“

      Gruß Nicolas

  13. Jürgen sagt:

    Das Tutorial hat Prima funktioniert hab aber drei versuche gebraucht, hab es zweimal über SSH versucht wo es nicht geklappt hat und einmal direkt am Pi da hat es hin gehauen.

  14. Jay sagt:

    Wenn ich das Script ausführen möchte bringt er mir in der Linie 13 einen Fehler.
    Folglich hab ich auch keine Auswertung bei thingspeak 🙁

    irgendwo dort hab ich nen Hacken drin ich hoff hier kann mir wer weiterhelfen

  15. Hugi sagt:

    wenn ich „check Module“ eingebe kommt eine Fehlermeldung: There`s an error in your program: invalid syntax
    Rot unterlegt ist except:
    Ich muß dazu sagen, daß ich mich nicht auskenne und nicht weiter weiß.
    Ich bin auf eure Hilfe angewiesen 🙂

    • Hugi sagt:

      Fehler gefunden. Ein paar blanks zuviel vor expect. Nun kommt Error import thingspeak No module named thingspeak.
      Jetzt muß ich suchen bzw. wenn einer ein Tipp hat, immer her damit.
      Danke

    • Felix sagt:

      Der Fehler besagt, dass es wahrscheinlich nicht installiert ist.

  16. Hugi sagt:

    Genau. Mit sudo pip install thingspeak hat es dann funktioniert. Jetzt kommt aber die Meldung connection failed. Mit demTestprogramm und dem Befehl
    sudo ./AdafruitDHT.py 22 4 hat das Auslesen der Daten funktioniert. Wo muß/kann ich noch eingreifen?

  17. Hugi sagt:

    Mit URL bin ich nicht weitergekommen. Ich teste das Programm mit einem Raspberry 3 mit Python 2.7.9 . Ruf das Programm /home/pi/Adafruit_Python_DHT/thingspeak_example.py auf und starte das Programm Run Module ( F5). Dann kommt die Meldung connection failed alle 15 sec.
    Channel ID und keys hab ich schon xmal überprüft.

  18. Hugi sagt:

    Hurra es funktioniert. Fehler war: das Programm war im Ordner Adafruit_Python_DHT. Muß aber anscheinend in den Ordner Adafruit_Python_DHT/Adafruit_DHT.
    Probieren geht über studieren 🙂
    #Felix danke für die Hilfe
    Gruß Hugi

  19. Hugi sagt:

    Jetzt muß ich es nur noch hinbekommen, dass das Programm beim Einschalten des Raspis startet. Vielleicht gibt es ein paar Hinweise 🙂
    Danke

  20. Maretiurus sagt:

    Bei mir funktioniert soweit alles, ich bekomme auch die werte (von meinem DHT11) bei Thingspeak angezeigt, jedoch liegen die alle so bei ca. 600-1200 (und so warm ist es bei mir nun mal nicht)… vllt. hat einer ja das selbe Problem oder kennt eine Lösung. Ich bedanke mich im voraus.

    vllt. ist ja auch der Sensor kaputt???

  21. Hugi sagt:

    #Felix
    Ich hab „so lösen“ gewählt. Leider kommt beim Test „Start “ eine Reihe Fehlermeldungen; z.B. dass „Import… “ usw. nicht gefunden wird. Ruf ich das Programm thingspeak_example.py direkt auf funktionierts. Hast du einen Tipp für mich?
    Vielen Dank
    Gruß Hugi

  22. Hugi sagt:

    #INGO Vielen Dank. Hat ein wenig gedauert bis es lief, aber ich hab auch was dabei gelernt.

Schreibe einen Kommentar

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

Blog abonnieren

Abonniere Tutorials-RaspberryPi, um kein Tutorial mehr zu verpassen!