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

Kamera z telefonu jako narzędzie do monitoringu mieszkania w Domoticzu.

Jeżeli masz w szufladzie telefon z Androidem i nie masz pomysłu co z nim zrobić, proponuje połączyć go z Domoticzem i użyć do monitoringu mieszkania. Nie będzie to oczywiście profesjonalne rozwiązanie i nie polecam go jako głównego elementu sytemu ochrony, jednakże warto sprawdzić i wypróbować to rozwiązanie

Podłączenie kamery USB opisałem już w poście Obsługa kamer USB w Domoticzu. Teraz czas na łączność bezprzewodową. Moja „profesjonalna” kamera IP jest już w drodze, więc poniższy wpis można potraktować jako  trening. Wykorzystamy do tego aplikacje IP Webcam, zamieniającą twój telefon w kamerę sieciową z wieloma dostępnymi widokami. Za jej pomocą  możemy oglądać obraz ze swojej kamery na różnych platformach.

Znalezione obrazy dla zapytania ip web cam

Po uruchomieniu aplikacji ustawiamy port ( domyślnie 8081 ).

screenshot-jan-15-2017-11_03_08

Uruchamiamy serwer. Ostatnia zakładka na dole strony !

befunkyphoto

Efekt jak poniżej. Na dole widzimy adres i port, po którym będzie komunikowała się nasza kamera z Domoticzem.

Screenshot_20170115-095603(1).png

Wchodzimy do Konfiguracja/Więcej opcji/KameraScreenshot_20170116_180459.png

Dodajemy kamerę.

screenshot_20170116_182642

Po naciśnięciu „Testuj połączenie” w okienku obok zobaczymy obraz z telefonu. Czasami należy zmienić ImageURL na /shot.jpg. W podglądzie obraz może jedynie mignąć ale jest to prawidłowa reakcja.

Screenshot_20170116_182901.png

Po naciśnięciu ikonki aparatu zrobimy zdjęcie, a po naciśnięciu ikony kamerki zobaczymy obraz na żywo. U mnie kamera w telefonie działa również na wygaszonym ekranie. Po ustawieniu telefonu w uchwycie i pozostawieniu go podłączonego do ładowarki może dać nam namiastkę systemu monitoringu.

Monitorowanie czasu pracy urządzeń podłączonych do sieci w Raspberry Pi i Domoticzu.

Mój domowy system oparty na Domoticzu sukcesywnie się rozbudowuje. Coraz więcej urządzeń wysyła i odbiera dane. Z każdym tygodniem wzrasta ilość podłączonych do sieci czujników i przekaźników. W poniższym wpisie pokaże w jaki sposób monitorować, jak długo dane urządzenie jest aktywne. Może się to przydać np. do określenia jak długo dzieci oglądały TV lub grały na Playstation czy ile czasu było włączone oświetlenie zewnętrzne.

Wykorzystamy do tego prosty skrypt w języku LUA. Na początku dodajemy nowy sprzęt System Alive Checker i konfigurujemy ustawienia. Sprawdza on po prostu, przy pomocy pinga czy urządzenie jest aktywne w sieci.

Screenshot_20170108_160031.png

Screenshot_20170119_214236.png

Następnie dodajemy wirtualny czujnik, który będzie odpowiedzialny za wizualizacje danych.

Screenshot_20170108_160437.png

Ustawiamy typ czujnika na „licznik przyrostowy”

Screenshot_20170108_160735.png

Sprawdzamy jakie idx zostało przydzielone dla nowego czujnika. Przechodzimy do katalogu domoticz/scripts/lua i tworzymy nowy skrypt

local timer_device_ID = 52

commandArray = {}
commandArray['UpdateDevice'] = timer_device_ID .. '|0|0'

local TotalMinutesOn = otherdevices_svalues['Licznik']
if otherdevices['OSMC'] == 'On' then
TotalMinutesOn = TotalMinutesOn + 1
end
commandArray['UpdateDevice'] = timer_device_ID .. '|0|' .. tostring(TotalMinutesOn)

return commandArray

gdzie:

XX – idx czujnika, Media center timer – nazwa licznika, Czas pracy media center – nazwa urządzenia

W zakładce Urządzenia pojawi się nasz licznik. Uzupełniamy pola jak poniżej.

Screenshot_20170108_161540.png

Efekt końcowy wygląda jak poniżej. Oczywiście pamiętamy o restarcie systemu.

Miłego szpiegowania 🙂

Monitoring i pomiar szybkości łącza internetowego w Domoticzu

Znalezione obrazy dla zapytania speedtest

Jeżeli u kogokolwiek występują problemy z dostępem do internetu proponuje użycie Domoticza do monitorowania parametrów łącza. Nie jest to może kluczowa użyteczność domu inteligentnego ale warta uruchomienia. Jeżeli zgromadzimy większą liczbę odczytów będziemy mogli określić czy w określonych porach nie spada nam transfer.

1.Instalujemy speedtest

sudo apt-get install speedtest-cli

2. Tworzymy 3 wirtualne sensory ( np. ping, download, upload ). Ustawiamy typ czujnika na Castom Sensor a Etykieta Axis to nasza jednostka miary.

screenshot_20170103_200128

Oczywiście zapamiętujemy idx z zakładki Urządzenia do użycia w skrypcie.

3. Tworzymy skrypt ( np. st2domo.sh ).

$ sudo nano st2domo.sh

#!/bin/bash

#setup
host=192.168.2.21
port=8080
username=
password=
pingidx=34
downloadidx=35
uploadidx=36

# no need to edit
speedtest-cli --simple > output.txt
ping=$(cat output.txt | sed -ne 's/^Ping: \([0-9]*\.[0-9]*\).*/\1/p')
download=$(cat output.txt | sed -ne 's/^Download: \([0-9]*\.[0-9]*\).*/\1/p')
upload=$(cat output.txt | sed -ne 's/^Upload: \([0-9]*\.[0-9]*\).*/\1/p')

#output if you run it manually
echo "ping = $ping ms"
echo "download = $download Mbps"
echo "upload = $upload Mbps"

curl -s -i -H "Accept: application/json" "http://$username:$password@$host:$port/json.htm?type=command&param=udevice&idx=$pingidx&svalue=$ping"
curl -s -i -H "Accept: application/json" "http://$username:$password@$host:$port/json.htm?type=command&param=udevice&idx=$downloadidx&svalue=$download"
curl -s -i -H "Accept: application/json" "http://$username:$password@$host:$port/json.htm?type=command&param=udevice&idx=$uploadidx&svalue=$upload"

4. Uzupełniamy skrypt o nasze unikalne dane.

host = adres serwera domoticz (. np. 192.168.1.158)
port = port (np. 8080)
username = nazwa użytkownika w systemie ( może zostać puste )
password = hasło użytkownika w systemie ( może zostać puste )
pingidx = numer idx dla czujnika „ping”
downloadidx = numer idx dla czujnika „download”
uploadidx = numer idx dla czujnika „upload”

5. Nadajemy prawa do wykonywania pliku.

$ chmod +x st2domo.sh

6. Edytujemy crona, aby skrypt wykonywał się cyklicznie ( u mnie co godzinę )

$ crontab -e

na końcu dopisujemy:

$ @hourly       /ścieżka/do/skryptu/st2domo.sh

7. Restartujemy system i co godzinę otrzymamy odczyty jakości połączenia internetowego.

Po uruchomieniu skryptu st2domo.sh powinniśmy otrzymać:

screenshot_20170103_195744

Natomiast w zakładce „użytkowe” zobaczymy dane na kafelkach.

screenshot_20161221_183637