[BETA] Wykres temperatury po WWW – Malinowy projekt użytkowy

Witajcie cześć i czołem!

[Uwaga! Projekt w wersji beta, czyli autor był zbyt leniwy by go uporządkować i pousuwać bugi.]

Mieszkając w domu jednorodzinnym do grzania przeważnie mamy piec C.O. Pracę tego pieca trzeba nadzorować, mieć pogląd na temperaturę, co się dzieję, czy się nie zagotował. Do tej pory w moim domu służył do tego celu dedykowany pecet, stara dobra Dell’ka z rodziny Optiplexów w połączeniu z jakimś termometrem z wykresem na USB od chińczyka z non stop bugującą się aplikacją. Sezon grzewczy mamy dość długi, ok. 4-5 miesięcy, a pecet chodził 24h na dobę. Przydałoby się tu rozwiązanie mniej prądożerne i tu przyszło mi do głowy zastosować malinę.

Nadruk na obrazku przy alarmie?
Czemu nie:)

Założenia projektu: Generator wykresów z dwóch termometrów, z jakąś formą alarmu, czy to sms, czy to miganie dźwięk, cokolwiek. Nie wiedziałem jeszcze co to będzie, ale wiedziałem że tablet zostanie użyty jako mobilny podgląd tychże wykresów, z włączanym ekranem na stałe.

Podłączanie i implementacja czujników DS18B20 w Raspberry Pi jest bajecznie prosta, plug and play i mamy pomiar automagicznie.
Z wykresem jest pewna rozkmina. Jakiś program okienkowy, czy w terminalu czy co? Z pisaniem softu stricte pod PC nie mam żadnego doświadczenia więc szukałem jakiegoś prostego rozwiązania. Znalazłem, ba, nawet zalążek projektu który chciałem uzyskać. Posłużył mi on za bazę do mojego zastosowania.
http://webshed.org/wiki/RaspberryPI_DS1820
Na powyższej stronie znajdziemy także jak sprawdzić czy podłączone czujniki działają i parę innych podstaw.

Wykres na tablecie? Czemu nie!

Mój projekt bazujący na powyższym zalążku składa się z 3 elementów:
skryptu Pythona stanowiącego główną bazę zlecającego wykonanie pomiaru, narysowanie wykresu, sprawdzenie czy Malina wciąż jest połączona z siecią i paroma innymi dodatkami
programu RRDtool wykonującego wykresy na podstawie wartości pomiarów
Strona programu: http://oss.oetiker.ch/rrdtool/
serwera www z obsługą PHP

Każdy postaram się omówić w miarę szczegółowo, aby każdy mógł zrozumieć jak to działa. Działam na Raspbianie, Python w wersji 2.7.3, wiadomo standard. Jest to wersja rozwojowa, można sporo rzeczy poupraszczać, ale jest sprawna. Ja tam żyję zasadą jeśli coś jest głupie, ale działa, to nie jest głupie 😀

Zacznijmy od wgrania zależności komendami w terminalu:
sudo apt-get update (opcjonalnie, jeśli kolejne komendy nam nie ruszają z miejsca)
sudo apt-get install rrdtool (program odpowiedzialny za tworzenie wykresów)
sudo apt-get install apache2 php5 php5-gd (serwer www + php5 z jednym modułem który nam się przyda)

Wrzuć poniższą paczkę ode mnie [link]: http://goo.gl/8E8fLC

Zawartość folderu www do /var/www/, pozostałe pliki wraz z folderem term do /home/pi/
Podpinamy dwa czujniki DS18B20 zgodnie z instrukcją. Odczytujemy ich numery ID z konsoli po wklepaniu komendy:
cat /sys/bus/w1/devices/w1_bus_master1/w1_master_slaves
Powinniśmy otrzymać tyle wyników w formie np. 28-000004c00e62 ile podpięliśmy czujników. Wpisujemy numerek pierwszego do pliku get_temp.pl i drugiego get_temp2.pl w folderze term.
Odpalamy terminal, wpisujemy komendę:
sudo python temp.pyPlik generuj_baze.sh tworzy wzorcową bazę (jeden plik dla jednego czujnika) do której będą zapisywane wyniki pomiarów z czujników temperatury. Ja w paczce dorzuciłem wygenerowane od siebie, niemniej sprawdź jak się je wytwarza.

Po odpaleniu skrypt sprawdza kolejno:
1. Czy Malina wciąż jest połączona przez WiFi – jeśli nie, ponawia połączenie i zapisuje godzinę rozłączenia. Tak chciałem sprawdzić o której godzinie router dobiera nowe ip. Wszystko pod net.sh
2. Odpytuje czujniki DS18B20. get_temp.pl get_temp2.pl
3. Zleca wykonanie dwóch wykresów przez RRDTool. graph_temp.sh Oraz generowanie dwóch czarnych wykresów (opcjonalnie, do popróbowania) graph_temp_black.sh
Takie cudo.

4. Sprawdza czy nie jest przekroczona temperatura, jeśli jest, zmienia zawartość strony z wykresem ze zwykłej na alarmową.

Wchodzimy na stronę [ip_naszej_maliny]/temp.php i jeśli wszystko jest w porządku naszym oczom powinny ukazać się dwa wykresy jak u mnie. Strona automatycznie odświeża się co pół minuty, czyli co tyle co ile generowany jest nowy pomiar.
Możemy także wejść na [ip_naszej_maliny]/black.php i zobaczyć wykresy w wersji czarnej. Sam do końca nie wiem które są lepsze, zależy od sytuacji.
Jak działa alarm? Po krótce opisze.
Po sprawdzeniu warunku komenda bashowa kopiuje wzór alarmowy strony z wykresami do strony domyślnej. Alarm.php -> Temp.php Wzór ten nadrukowuje na wykresie napis ALARM i sprawia że wykres ten miga.
Nie rozkminiałem za bardzo PHPa, ale takim prostym mykiem nie potrzebujemy tworzyć niesamowitych skryptów w tym języku, które by sprawdzały czy cośtam nie zgłosiło potrzeby zmiany obrazka etc…
Jedynie musiałem rozwiązać problem nadrukowania obrazka na obrazek, przegniłem deko czasu, ale udało się 🙂 Jak to zrobić, prześledz kod stron po kolei. Kiedy alarm minie, skrypt kopiuje z powrotem wzór normalny do normal.php -> temp.php.
Patent jest fajny, można użyć go jako dodatku do domu inteligentnego czy innych bajerków 🙂 Nie jest to jedyna droga, widziałem już na internecie parę projektów pokrewnych, dla każdego coś dobrego.
Planuje go jeszcze rozszerzyć pod kątem konfiguracji strony z wykresem, generowanie wykresu czarnego co też jest niezłym patentem. Trzeba go dopracować, poskładać może te skrypty sh w jeden. Niemniej patent działa, testowałem go u siebie przy C.O. przez parę dni.Na koniec wszystkie linki:
Paczka z projektem ode mnie http://goo.gl/8E8fLC
Bardzo fajna dokumentacja do RRDTool, tam można konfigurować sobie do woli serio https://calomel.org/rrdtool.html
Projekt z którego zerżnąłem szkielet http://webshed.org/wiki/RaspberryPI_DS1820
Fanpage AvrLand, sporo warsztatowych zajawek ode mnie, czasem wrzucam ciekawostki na które natrafię w sieci etc… zachęcam do lubienia 🙂 https://www.facebook.com/avrland
Mój nowy projekt na VPS: vps.avrland.ovh

Może trochę chaotycznie, jak coś nie halo pytajcie śmiało 🙂
Pozdrawiam,
Marcin