Quantcast
Channel: ProNAS - forum serwerów plików NAS i dysków sieciowych
Viewing all articles
Browse latest Browse all 817

Synology jako serwer monitoringu temperatury pomieszczeń

$
0
0
Witam wszystkich po długiej przerwie ;)

Chciałbym podzielić się z Wami moją nową zabawką, jaką wdrożyłem na Synology mojego taty.
W telegraficznym skrócie omówię sposób instalacji oraz funkcjonalność systemu monitoringu temperatury pomieszczeń,
zbudowanego na bazie czujników temperatury DS18b20 firmy Dallas pracujących w technologii 1-Wire.
Pomysł zrodził się z potrzeby biznesowej, a dopiero potem został zaadoptowany do warunków domowych ;) Ale do rzeczy.

[Nieprawidłowy link obrazu]:https://lh6.googleusercontent.com/-JG4Up7NfsgU/T4x8deicHQI/AAAAAAAABSc/fk6CIQjeMGA/s912/temp1.jpg
alh3.googleusercontent.com__nwwTtioToM8_T4x8fHG_VPI_AAAAAAAABSk_ozRgPUegJWo_s912_temp2.

Co będzie nam potrzebne:

sprzęt:
- czujniki temperatury DS18B20 (koszt około 4PLN za sztukę na Allegro)
- adapter DS9097E do obsługi tych czujników (koszt to kilka złotych za elementy, głównie diody, najdroższa była wtyczka COM z obudową ;) )
- adapter/przejściówka USB->COM aby móc podłączyć całość do naszego Synka, koniecznie na bazie chipsetu FTDI, ja osobiście wykorzystałem model DIGITUS DSUB9P FTDI
- kilka(naście/dziesiąt) metrów dwużyłowego przewodu (ja wypatroszyłem skrętkę sieciową ;) )
- cyna, kalafonia, lutownica, koszulki termokurczliwe

soft:
- przede wszystkim zainstalowany pakiet IPKG
- moduły do kernela: kernel-module-usbserial, kernel-module-ftdi-sio
- pakiet module-init-tools
- digitemp do zarządzania całym tym ustrojstwem ;)
- php minimum w wersji 4

Adapter DS9097E zbudowałem na bazie tego schematu:
http://kml.jogger.pl/2009/10/29/termome ... com-i-usb/
Sprawa jest banalna, nie ma sensu się nad tym dłużej rozpisywać ;)

Jedynym problemem w zasadzie było zmuszenie Synka do tego, aby zechciał "mieć" port COM ;)
Do tego potrzebne będą nam właśnie moduły kernelna zainstalowane z paczek IPKG oraz adapter USB->COM.

Instalacja modułów:

Kod (Text):
  1. Synology> ipkg install kernel-module-usbserial
  2. Synology> ipkg install kernel-module-ftdi-sio
oraz dodatkowe narzędzia do ich konfiguracji:

Kod (Text):
  1. Synology> ipkg install module-init-tools
Po zainstalowaniu modułów a przed ich uruchomieniem w systemie musiałem dodać dowiązanie symboliczne
do /lib/modules dla folderu /opt/lib/modules/2.6.15/ w następujący sposób:

Kod (Text):
  1. Synology> cd /lib/modules
  2. Synology> ln -s /opt/lib/modules/2.6.15 2.6.15
  3.  
po czym wykonać komendę:
Kod (Text):
  1.  
  2. Synology> depmod
teraz możemy spróbować uruchomić nasze moduły w systemie:
Kod (Text):
  1.  
  2. Synology> insmod usbserial.ko
  3. Synology> insmod ftdi_sio.ko
Sprawdzamy, czy się nam udało załadować moduły do systemu komendą:

Kod (Text):
  1. Synology> lsmod |grep usbserial
Jeśli mamy na liście nasze moduły, to w zasadzie najtrudniejsza część za nami ;)

Kolejnym krokiem będzie utworzenie naszego portu szeregowego komendą:

Kod (Text):
  1. Synology> mknod /dev/usb/ttyUSB0 c 188 0
Teraz nie pozostaje nam nic innego jak podłączyć nasz interfejs USB->COM do portu USB naszego synka i sprawdzić, czy został wykryty:

Kod (Text):
  1. Synology> dmesg |grep FTDI
Po tej komendzie naszym oczom powinien ukazać się między innymi taki wpis:

Kod (Text):
  1. usb 1-1.1: FTDI USB Serial Device converter now attached to ttyUSB0
Od tej pory środowisko sprzętowe mamy przygotowane do pracy. Możemy zabierać się za konfigurowanie oprogramowania.
Przede wszystkim musimy zaisntalować pakiet digitemp do obsługi naszych termometrów:

Kod (Text):
  1. Synology> ipkg install digitemp
W skład pakietu wchodzi kilka modułów, nas interesował będzie tylko jeden: digitemp_DS9097

Zanim zaczniemy zabawę z konfiguracją musimy podłączyć zbudowany przez nas interfejs DS9097E do przejściówki USB->COM,
a do owego interfejsu nasze czujniki temperatury. Następnie należy zainicjować naszą sieć 1-wire w następujący sposób:

Kod (Text):
  1. Synology> digitemp_DS9097 -s /dev/usb/ttyUSB0 -a -i
Po tej komendzie w folderze /root/ zostanie utworzony plik konfiguracyjny .digitemprc
Mój plik wygląda następująco:

Kod (Text):
  1. TTY /dev/usb/ttyUSB0
  2. READ_TIME 1000
  3. LOG_TYPE 1
  4. LOG_FORMAT "%d.%m.%Y; %H:%M:%S; %.2C"
  5. CNT_FORMAT "%d.%m.%Y; %H:%M:%S; %.2C"
  6. HUM_FORMAT "%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F H: %h%%"
  7. SENSORS 5
  8.  
  9. ROM 0 0x28 0xD8 0x71 0xA9 0x03 0x00 0x00 0x05
  10. ROM 1 0x28 0x92 0x5D 0x9F 0x03 0x00 0x00 0x27
  11. ROM 2 0x28 0x07 0x7E 0xA9 0x03 0x00 0x00 0x8A
  12. ROM 3 0x28 0x07 0x41 0x9F 0x03 0x00 0x00 0x20
  13. ROM 4 0x28 0xC7 0x8E 0x9F 0x03 0x00 0x00 0xF2
W stosunku do domyślnego pliku konfiguracyjnego zmianie uległy dwa wpisy, mianowicie LOG_FORMAT oraz CNT_FORMAT
Pierwszy z nich odpowiedzialny jest za format składowanych w logu odczytów i jest bardzo istotny z punktu widzenia funkcjonowania całego systemu.
Powinniście zmienić go na taki, jak jest u mnie.
Drugi wpis odpowiada za to co nam się wyświetli w linii komend i nie ma już w zasadzie żadnego wpływu na funkcjonowanie systemu ;)

Teraz możemy sprawdzić, czy nasza mini sieć działa ;) Wydajmy komendę:

Kod (Text):
  1. Synology> digitemp_DS9097 -a
Powinniśmy zobaczyć jak nasz Synek odczytuje temperatury z poszczególnych czujników podłączonych do naszego interfejsu, mniej więcej coś takiego:

Kod (Text):
  1. DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane
  2. GNU Public License v2.0 - http://www.digitemp.com
  3. 15.04.2012; 22:28:15; 8.00
  4. 15.04.2012; 22:28:16; 7.75
  5. 15.04.2012; 22:28:18; 20.38
  6. 15.04.2012; 22:28:19; 19.69
  7. 15.04.2012; 22:28:21; 19.81
Jeśli widzimy odczyty, znaczy się, że udało nam się skonfigurować część sprzętową do pracy i powoli finiszujemy ;)

Przygotujmy więc naszego Synka do zbierania odczytów z czujników. W tym celu stwórzmy folder:
/volume1/web/temperatura/logs/ Tutaj będą składowane logi poszczególnych sensorów.

plik temperatura.sh umieśćmy w folderze /roor/ i nadajmy mu atrybut wykonywalności komendą:

Kod (Text):
  1. Synology> chmod 755 temperatura.sh
Wyedytujmy ów plik o ile jeszcze tego nie zrobiliśmy. Powinno się w nim znaleźć tyle wpisów, ile czujników jest w naszej instalacji.
W moim przypadku jest ich akurat 5. Skrypt ten należy dopisać do /etc/crontab
U mnie taki wpis wygląda następująco:

Kod (Text):
  1.  */1        *        *        *        *        root        /root/temperatura.sh
Co oznacza, że pomiary wykonywane będą co jedną minutę.

Wrzućmy resztę plików z paczki do folderu /volume1/web/temperatura/ i wyedytujmy plik config.php.
Podobnie jak w poprzednim, tak i w tym pliku należy doprowadzić wpisy do stanu rzeczywistego naszej instalacji.

Kolejnym krokiem konfiguracyjnym będzie otworzenie w przeglądarce strony konfigurator.php, gdzie będziemy mogli zdefiniować przede wszystkim nazwy
naszych czujników. W pierwszym kroku po uruchomieniu strony konfigurator.php wykonajmy zapis wartości domyślnych systemu
uruchamiając przyciski Zapisz ustawienia oraz Zapisz alarmy. Po tej czynności możemy przystąpić do personalizacji naszego środowiska.

alh5.googleusercontent.com__fB4LrGzTUwc_T4x8j51RwnI_AAAAAAAABS0_M6Zye9lVlAE_s780_temp4.

Ostatnią czynnością, jaką należy wykonać, to dodanie wpisu do crona z czasowym wykonywaniem skryptu alarm.php odpowiedzialnym za sprawdzanie,
czy przypadkiem nie wystąpił jakiś alarm na którymś z czujników oraz wysłanie stosowanego powiadomienia zgodnie ze zdefiniowanymi parametrami.
Wpis w pliku /etc/crontab w moim przypadku wygląda następująco:

Kod (Text):
  1.  */5        *        *        *        *        root        /volume1/web/temperatura/alarm.php
co oznacza, że co 5 minut system będzie sprawdzał, czy nie wystąpił jakiś alarm na którymś z czujników.

I to w zasadzie tyle ;)

Powyższy tutorial pisałem z pamięci po kilku tygodniach od wdrożenia na Synku, mam nadzieję, że o niczym nie zapomniałem, ale jakby co,
to wszystko wyjdzie w praniu ;)


Co system potrafi na dzień dzisiejszy?

1. Prezentacja na wykresie zbiorczym lub wykresach pojedynczych temperatury z poszczególnych czujników w zadanym okresie czasu
2. Definiowanie wartości progowych temperatury, dla których generowany będzie alarm
3. Powiadomienia o wystąpieniu alarmu na danym czujniku poprzez email lub/oraz poprzez SMS (tylko sieć Orange)
4. Prezentacja alarmów na wykresie zbiorczym oraz wykresach pojedynczych
5. Alarmy dla czujników, z których nie spływają dane
6. Korekcja błędnych odczytów
7. Definiowanie nazw poszczególnych czujników oraz kolorów wykresów
8. Przeglądanie danych historycznych z poszczególnych czujników

W paczce załączyłem również pliki logów, tak aby można było na szybko pobawić się aplikacją bez warstwy sprzętowej.

Może się komuś przyda ;)

Pozdrawiam serdecznie

Piotr

Aktualizacja 18.12.2012r.

Tak jak obiecałem, wrzucam najświeższą wersję systemu do monitoringu temperatury. Wszystkim, którzy zechcą skorzystać z aktualizacji proszę wcześniej o wykonanie kopii bezpieczeństwa aktualnych plików systemu ze szczególnym naciskiem na takie pliki jak:
.digitemp
temperatura.sh
config.php
alarm_cfg.php


Z najistotniejszych zmian w stosunku do wersji tu zaprezentowanej wcześniej warto wspomnieć o:

1) Obsługa danych z bazy mysql (wymagany digitemp skompilowany z obsługą zapisu do bazy mysql)
2) Dodatkowe funkcje konfiguracji alarmów w konfigurator.php

alh4.googleusercontent.com__0O3g4QKzxtg_UNDnkIUbCGI_AAAAAAAABUA_YPhQ3F7qGV8_s720_temp_3.

3) Nowy podgląd ostatnich pomiarów w postaci graficznej wybranych czujników simple.php

alh3.googleusercontent.com__Dm3R_Z0fjrQ_UNDnflPgXEI_AAAAAAAABT4_fLexd0HtG3U_s912_temp_1.

4) Zmodyfikowane menu opcji ustawień podglądu zbiorczego wysuwane z lewej krawędzi ekranu index.php

alh4.googleusercontent.com__zAW7Kg30SHY_UNDnliqRkVI_AAAAAAAABUI_S6nBllsDucs_s912_temp_2.

5) Skala oraz przesunięcie w menu ustawień podglądu teraz realizowane jest poprzez wprowadzanie danych w postaci czasu, według następującego szablonu:

d.hh:mm
d- dzień
hh- godziny
mm- minuty

np: 2.12:30 wpisane w pole przesunięcie oznaczać będzie przesunięcie widoku o 2 dni, 12 godzi i 30 minut wstecz względem ostatniego pomiaru

6) Dodatkowe definicje stałych w pliku config.php

Kod (Text):
  1.  
  2. <?php
  3. define("DB_NAME", "digitemp");              // nazwa bazy
  4. define("DB_USER", "digitemp");              // nazwa użytkownika bazy
  5. define("DB_PASS", "password");              // hasło bazy
  6. define("DB_HOST", "localhost");             // adres dostępu do bazy
  7. define("DB_TABLE_PREFIX", "");
  8.  
  9. $sensor[0] = "sensor_0.txt";//Salon
  10. $sensor[1] = "sensor_1.txt";//Sypialnia
  11. $sensor[2] = "sensor_2.txt";//Dziecięcy
  12. $sensor[3] = "sensor_3.txt";//Salon G1
  13. $sensor[4] = "sensor_4.txt";//Salon G2
  14. $sensor[5] = "sensor_5.txt";//Sypialnia G1
  15. $sensor[6] = "sensor_6.txt";//Dziecięcy G1
  16. $sensor[7] = "sensor_7.txt";//Za oknem
  17.  
  18. define(KONFIGURATOR, true); //pozwalamy lub zabraniamy uruchamianie konfiguratora
  19. define(PATH, '/var/www/temperatura/'); // ścieżka bezwzględna do folderu głównego
  20. define(LOGS, '/var/www/temperatura/logs/'); // ścieżka bezwzględna do folderu z logami (zapis może być np. na napęd USB)
  21. define(CRON, 1); //Co ile minut odbywają się pomiary temperatur
  22. define(OS, 1); // Który sensor do danych dla osi X
  23. define(LINIA, 30); // Długość pojedynczej linii pomiaru
  24. define(BAZA, "text"); // Rodzaj bazy danych ( text lub mysql )
  25. ?>
Tak dla ciekawości podam, moja baza danych z 8 czujnikami temperatury, zbierana od maja tego roku ma już blisko 3 miliony rekordów i zajmuje ponad 230MB :-)

Aktualizacja 30.12.2012r.

Dodałem funkcję linii trendu rysowaną na wykresie wspólnym , lub uwidocznioną w widoku simple.
Funkcję można włączyć lub wyłączyć w konfiguratorze.

Aktualizacja 10.01.2013r.

Kolejna aktualizacja przynosi nieco odświeżony wygląd wykresu zbiorczego oraz konfiguratora :-)

alh4.googleusercontent.com__JA9dDzYSdvE_UO86M2xJ6DI_AAAAAAAABUc_YdOF1xVsYvc_s1000_term1.

alh6.googleusercontent.com__9AdxTMbKTMU_UO87M44fK3I_AAAAAAAABU0_Qs5R68n_mMc_s949_term2.

Doszło kilka funkcji w samym konfiguratorze, między innymi możliwość definiowania wymiarów wykresu zbiorczego oraz ustalanie kolejności prezentacji pomiarów w widoku simple.php oraz w widoku osobno.php.

Ponadto można ustalać kolorystykę dla poszczególnych czujników nie tylko według predefiniowanych nazw kolorów, ale również według notacji HTML, czyli np.: #ffd3cc
Na belce określającej nazwy kolumn pojawiły się podpowiedzi czego dana opcja dotyczy.

System optymalizowany jest pod przeglądarki FireFox, Chrome i Opera, natomiast nie gwarantuję poprawności działania na Internet Explorerze, szczególnie jeśli chodzi o wygląd poszczególnych składników systemu. Ten "wynalazek" Microsoftu jest na tyle odporny na niektóre składnie html, że postanowiłem nie zawracać sobie więcej głowy problemami z rozjeżdżaniem się niektórych elementów na tej przeglądarce.

Aktualizacja 11.01.2013r.

W załączeniu do tego postu podsyłam pakiet autch, dzięki któremu będziemy mogli zabezpieczyć dostęp do wybranych stron loginem i hasłem. Po umieszczeniu odpowiedniego wpisy w pliku strony, do której chcemy ograniczyć dostęp, system będzie prosił o podanie loginu oraz hasła.
W załączniku jest folder auth, oraz zrzut bazy danych MySQL wraz z użytkownikiem admin (hasło: admin).

W pierwszej kolejności należy utworzyć bazę danych zgodnie z plikiem auth.sql, następnie wrzucamy folder auth wraz z całą zawartości na Synka po czym przechodzimy do konfiguracji pliku config.php. W nim poprawiamy ścieżki, login oraz hasło do bazy. Teraz możemy spróbować zalogować się do systemu:
http://<nr ip synka>/auth/useradmin.php
Po prawidłowym zalogowaniu się możemy dodawać użytkowników do systemu itp.

I teraz przykład. Powiedzmy, że chcemy zabezpieczyć dostęp do strony konfigurator.php. Aby to zrobić, należy w pierwszej linii tego pliku dodać wpis:

Kod (Text):
  1.  
  2. <?php
  3. require ("/volume1/web/auth/auth.inc");
  4.  
Każdą inną stronę można w taki sposób zabezpieczyć. Ponadto w pliku INSTALL.txt jest instrukcja w jaki sposób zabezpieczyć całe witryny jeśli to komuś potrzebne ;)


Zapraszam do pobierania, w razie pytań, śmiało, będziemy walczyć :-)

Pozdrawiam serdecznie

Piotr

Viewing all articles
Browse latest Browse all 817

Trending Articles


TRX Antek AVT - 2310 ver 2,0


Автовишка HAULOTTE HA 16 SPX


POTANIACZ


Zrób Sam - rocznik 1985 [PDF] [PL]


Maxgear opinie


BMW E61 2.5d błąd 43E2 - klapa gasząca a DPF


Eveline ➤ Matowe pomadki Velvet Matt Lipstick 500, 506, 5007


Auta / Cars (2006) PLDUB.BRRip.480p.XviD.AC3-LTN / DUBBING PL


Peugeot 508 problem z elektroniką


AŚ Jelenia Góra