Przesyłanie danych z Raspberry Pi do serwisu ThingSpeak

W przypadku , gdy zachodzi potrzeba, udostępnienia określonego, niewielkiego zakresu danych pobranych z czujników Raspberry Pi, stawianie całego Domoticza wydaje się bezzasadne. Z pomocą przychodzą serwisy gromadzące i analizujące dane takie jak np. popularny https://thingspeak.com/. Dzięki temu portalowi możemy w prosty sposób uruchomić np. termometr, wysłać dane na serwer, wizualizować i śledzić na bieżąco zmiany. Serwis ThingSpeak to także, albo głównie , narządzie służące do analizy przesłanych danych, ale o tym może innym razem.

Założenie konta w serwisie ThinkSpeak

Screenshot_20170130_131332.png

screenshot_20170130_131359

Po potwierdzeniu adresu email logujemy się na konto.

screenshot_20170130_131429

Dodanie kanału do gromadzenia danych

Następnie zakładamy nowy kanał, do którego będziemy wysyłać dane.

screenshot_20170130_131533

Na próbę postanowiłem przesłać dane o temperaturze wewnętrznej Raspberry Pi. Wypełniamy poniższe pola.

Screenshot_20170130_131728.png

Pamiętajmy o zapisaniu danych.

Pobranie klucza API

Przechodzimy do swojego kanału i wybieramy „API Keys”. Na początku będziemy potrzebowali  klucza „Write”

Screenshot_20170131_163842.png

Screenshot_20170131_163908.png

Skrypt przekazujący dane

Teraz możemy przejść do modyfikacji skryptu przesyłającego dane. Autorem kodu jest ‚skunda’.


#!/usr/bin/env python
import httplib, urllib
import time
sleep = 60 # ile sekund ma upłynąć pomiędzy odczytami
key = 'XXXXXXXXXXXXXXXXX'  # klucz API do kanału Thingspeak 

def thermometer():
    while True
        temp = int(open('/sys/class/thermal/thermal_zone0/temp').read()) / 1e3
        params = urllib.urlencode({'field1': temp, 'key': key})
        headers = {"Content-typZZe": "application/x-www-form-urlencoded","Accept": "text/plain"}
        conn = httplib.HTTPConnection("api.thingspeak.com:80")
        try:
            conn.request("POST", "/update", params, headers)
            response = conn.getresponse()
            print temp
            print response.status, response.reason
            data = response.read()
            conn.close()
        except:
            print "connection failed"
        break
if __name__ == "__main__":
        while True:
                thermometer()
                time.sleep(sleep)

Informacje jak ustawić uruchamianie skryptu przy starcie można znaleźć tu.

Wizualizacja danych

Po uruchomieniu skryptu powinniśmy otrzymać wykres z naszymi danymi.

Screenshot_20170130_131755.png

Aplikacje na Androida.

Jeżeli zależy nam na byciu na bieżąco z danymi proponuje użyć aplikacji na telefon. Polecam dwie z nich ThingView oraz IoT ThingSpeak Monitor Widget. Do tego drugiego programu potrzebowali będziemy klucza „Read” z zakładki „API Keys” kanału.

screenshot_20170131-175648