Blog (105)
Komentarze (523)
Recenzje (0)
@deeponeMonitorowanie temperatury

Monitorowanie temperatury

26.06.2013 09:03

Kiedyś zaprezentowałem czujnik temperatury (nie było to nic mocno odkrywczego) i postanowiłem trochę zmienić sposób zbierania i wyświetlania danych. Aktualnie wystarcza mi do tego prosta strona www - nie posiada żadnych wodotrysków - w czasie dorobię jakieś filtrowanie po dacie i rysowanie wykresów.

Co potrzebujemy?

Gotowy czujnik lub czujniki DS18B20 (można skorzystać spokojnie z mojego poprzedniego wpisu jak to poskładać w całość) - na jednym porcie COM można spokojnie podłączyć ich więcej. Maszynę do zbierania danych - u mnie całość stoi na Debianie, baza MySQL i PHP. To jest w zasadzie wszystko.

Składamy wszystko w jedną całość

W przypadku Debiana potrzebne będzie zainstalowanie pakietu digitemp

[code=]apt-get install digitemp[/code]

Kolejna kwestia to stworzenie bazy danych:

[code=]CREATE TABLE IF NOT EXISTS `celsjusz` ( `data` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `numer_seryjny` text, `temperatura` decimal(5,2) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1;[/code]

Mając bazę danych możemy zacząć zbierać do niej dane, do tego stworzyłem prosty skrypt:

[code=]#!/bin/sh cd /home/celsjusz mysql -‑host=localhost -‑user=ds18b20 -‑password=trudnehaslo celsjusz << EOF insert into celsjusz (numer_seryjny, temperatura) values(`digitemp_DS9097 -q -s /dev/ttyS0 -a -o"'%R', '%.2C'"`); EOF[/code]

Ustawiłem to aby wykonywało się cyklicznie co 10 minut przy użyciu CRONa:

[code=]*/10 * * * * /home/celsjusz/celsjusz.sh[/code]

Wypadałoby to jeszcze wyświetlić w jakieś strawnej dla każdego oka formie. Stworzyłem do tego 2 pliki config.php i temp.php jednak każdy może to zrobić po swojemu:

Plik config.php - zawiera konfiguracje z użytkownikiem, hasłem i nazwą bazy. Dorobiłem jeszcze parametr warn_temp, przy którym pola z przekroczoną tą wartością są oznaczane na czerwono:

<?
$user = 'ds18b20';
$password = 'trudnehaslo';
$database = 'celsjusz';

mysql_connect('localhost', $user, $password);

//ostrzeganie o wysokiej temperaturze
$warn_temp = 23;

?>

Pozostaje plik główny, który będzie nam generował stronę z wynikami: Plik temp.php

DataNumer seryjnyTemperatura
$data$numer_seryjny$temperatura$data$numer_seryjny$temperatura

";echo "";echo "Strona $page z $total_pages";if ($page == 1) {$next=$page+1;echo "<font color=\"grey\">poprzednia</font>, następna";};if (($page > 1) and ($page poprzednia, następna";}if ($page == $total_pages){$prev=$page-1;echo "poprzednia, <font color=\"grey\">następna</font>";}?>[/code]

Tak to wygląda u mnie:

105813
105814

Podsumowanie

Pewnie można było to zrobić prościej i lepiej, ale mnie interesowało zrobienie tego szybko, to nie jestem coś co działa w elektrowni atomowej. Nie dodałem wcześniej informacji ale należy pamiętać, że wypadałoby potworzyć odpowiednie konta do bazy danych. Ze zmian oprócz filtrowania po dacie czy temperaturze dodam jeszcze tabelę z numerami seryjnymi czujników i przypiszę im nazwy - tak by wyświetlać nazwę a nie numer seryjny. Jak ktoś ma sugestie to z chęcią przeczytam.

Wybrane dla Ciebie
Komentarze (10)