Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

"Mądrzejszy" termometr, część 2

Ok, czyli w poprzednim odcinku połączyłem termometr cyfrowy DS18B20 z moim Raspberry Pi. Mam "wirtualny" plik, który zawiera między innymi odczyt temperatury z czujnika. Czas udostępnić tę informację światu.

Bez problemów można napisać skrypt, np. w PHP, który wyciągnie odpowiednią informację z pliku i wyświetli w postaci odpowiedzi na żądanie HTTP do jakiegoś serwera. Prosta forma tekstowa była by najwygodniejsza... przypominam jednak, że docelowo chciałbym zbudować aplikację dla Windows 8. Aby aktualizować "kafelek" aplikacji najwygodniej będzie generować specjalny plik XML. Skoro mamy dwie formy prezentacji danych to można dorzucić w sumie np. jeszcze JSON, do współpracy pomiędzy systemami.

No i warto też pomyśleć o obsłudze wielu czujników, a nie tylko jednego, prawda? No i wypada je jakoś nazywać, zamiast posługiwać się ich identyfikatorami.

Jak to zwykle bywa w projektach programistycznych, wymagania rosną. Zdecydowałem się zatem na napisanie prostego skryptu PHP, który odpowie na żądania do adresów postaci:

http://example.com/Temperature/<nazwa czujnika>.<format>

Tak naprawdę, to skrypt reaguje na adresy posiadające parametry przekazane metodą GET - sensor oraz format, a "ładna" forma adresu URI realizowana będzie przez magię mechanizmów mod_rewrite lub podobnych. No i tak naprawdę, to nie jest tak prosty na pierwszy rzut oka, ale działa poprawnie. Dwuplikowy skrypt (główny + konfiguracja) dostępny jest na moim GitHubie jako TemperatureRestService, na wolnej licencji MIT.

Aby go uruchomić, na moim Raspberry Pi mam serwer HTTP nginx wraz z PHP pracującym w trybie FastCGI (przez php-fpm). Wszystko skonfigurowane zgodnie z opisem z wiki Arch Linuksa. Prosta (?) reguła rewrite zapewnia przekształcenie formatu pokazanego wyżej do czegoś w rodzaju index.php?sensor=&format=.

location /TemperatureRestService { index index.php; if (!-e $request_filename) { rewrite ^/TemperatureRestService/([a-z0-9]*)\.?([a-z]*)$ /TemperatureRestService/index.php?sensor=$1&format=$2 last; break; } }

W ten sposób mam możliwość aby pod adresem mojego serwera dostać się np. do adresu http://leia.ktos.me/TemperatureRestService/main.txt aby dostać temperaturę w postaci prostego kawałka tekstu. Mechanizm domyślnie zwraca format czystego tekstu. W przypadku błędów - nieobsługiwanego formatu zwraca błąd HTTP 400. W przypadku nieznanego czujnika - błąd 404 i tak dalej, przez co można uznać, że jest to ogólnie zgodne z podejściem REST.

Jednym z formatów, który prezentuje moja aplikacja, jest "format" WNS - Windows Notification Service. Pliki XML zgodne z definicjami opisanymi na MSDN mogą być wykorzystane do aktualizowania "kafelków", powiadomień "toast" oraz "znaczników" aplikacji Windows 8. W następnej części mam nadzieję opisać jak wygląda moja aplikacja dla Windows 8 i w jaki sposób działa. Na razie testuję i jestem zachwycony, bo póki co działa poprawnie :-)

Obecnie pokazuje temperaturę z pojedynczego czujnika w pokoju obok. 

linux hobby

Komentarze

0 nowych
MiL-   9 #1 28.01.2014 14:11

Masz za ciepło w pokoju.

mati75   6 #2 28.01.2014 14:45

Osobiście zrobiłem takie coś: http://mati75.rzeszow.pl i całkiem fajnie to działa.

TadueusTaD   8 #3 28.01.2014 15:45

@mati75
"Temperatura otoczenia: Czujnik ukradli!"
Padłem!!! :)

dendrytus   5 #4 28.01.2014 17:58

""Mądrzejszy" termometr" - mądrzejszy ale od kogo?

mktos   10 #5 28.01.2014 18:28

@MiL-:
Czujnik jest przy kaloryferze ;-)

@dendrytus:
Mam nadzieję, że póki co nie ode mnie.
A na serio - to zabawa z określeniem "smart".

  #6 29.01.2014 01:28

Zastanawia mnie zastosowanie Rpi tylko jako termometru ;)
Mozna przeciez sterowac oswietleniem, silnikami krokowymi, sterowanie glosem itd.
Np.:
http://i61.tinypic.com/33vk9s6.png

Moze sie skusze i napisze jakis poradnic co i jak...

dendrytus   5 #7 29.01.2014 11:01

A na serio - to zabawa z określeniem "smart".

Tylko, że do określenie smart to się nawet nie zbliżyłeś.

mktos   10 #8 02.02.2014 22:48

Dlatego nie twierdzę, że to co robię podpada pod wszystkie "mądre" urządzenia, tylko jest co najwyżej nieco mądrzejsze niż termometr pokojowy z wyświetlaczem.

Ale samo określenie "smart" jest jak dla mnie bardzo płynne i już widziałem "mądre" termometry oraz "inteligentny kurz" :-)

#r2d2#   11 #9 03.02.2014 18:21

@mati75 Możesz podać skrypt, który to generuje?