Spisu treści:

Monitorowanie temperatury pomieszczenia kontrolowane przez Raspberry Pi z wyjściem obrazu Gnuplot i możliwością ostrzegania e-mailem: 7 kroków
Monitorowanie temperatury pomieszczenia kontrolowane przez Raspberry Pi z wyjściem obrazu Gnuplot i możliwością ostrzegania e-mailem: 7 kroków

Wideo: Monitorowanie temperatury pomieszczenia kontrolowane przez Raspberry Pi z wyjściem obrazu Gnuplot i możliwością ostrzegania e-mailem: 7 kroków

Wideo: Monitorowanie temperatury pomieszczenia kontrolowane przez Raspberry Pi z wyjściem obrazu Gnuplot i możliwością ostrzegania e-mailem: 7 kroków
Wideo: Integracja HACS Raspberry Pi Obsługa GPIO w Home Assistant 2024, Listopad
Anonim
Kontrolowane monitorowanie temperatury w pomieszczeniu przez Raspberry Pi z wyjściem obrazu Gnuplot i możliwością ostrzegania przez e-mail
Kontrolowane monitorowanie temperatury w pomieszczeniu przez Raspberry Pi z wyjściem obrazu Gnuplot i możliwością ostrzegania przez e-mail

Tam, gdzie pracuję, jest bardzo ważne pomieszczenie, w którym jest mnóstwo komputerów. Temperatura otoczenia w tym pomieszczeniu musi być bardzo niska, aby zoptymalizować wydajność tych systemów. Zostałem poproszony o wymyślenie systemu monitoringu, który ma możliwość wysyłania jakiejś formy alertu do kilku osób, które powiadomi ich, że coś jest nie tak z klimatyzacją w tym pomieszczeniu. oraz czujnik temperatury i wilgotności USB. Do monitorowania użyłem Gnuplot do wykreślenia trzech wykresów temperatury i stworzenia obrazu tych wykresów. Następnie utworzyłem dedykowaną stronę HTML, która będzie hostowana na Raspberry pi, więc obecne warunki, te wyjściowe obrazy gnuplot, mogą być monitorowane ze strony internetowej w naszej sieci. Aby uzyskać alerty, zdecydowałem się na Gmaila. Znalazłem przykładowy kod w magazynie Linux User. (Oczywiście możesz użyć dowolnego serwera pocztowego, gdy znasz niezbędne przypisania portów.) W tym celu utworzyłem dedykowane konto e-mail Gmail dla tych alertów. Dodatkową funkcją, gdy alarm został wyzwolony, jest dołączanie jednego wykresu do wiadomości e-mail, aby osoba otrzymująca wiadomość e-mail mogła zorientować się, jak drastyczny był wzrost, który spowodował alert.

Krok 1: Konfiguracja sprzętu

Konfiguracja sprzętu
Konfiguracja sprzętu

Nie ma zbyt wiele do skonfigurowania sprzętu. Raspberry pi działa pod kontrolą Raspiana, a czujnik temperatury USB po prostu podłącza się bezpośrednio do jednego z portów USB. Pobór mocy tego czujnika jest minimalny i w efekcie zasilałem go bezpośrednio z Raspberry pi. Jednak w przypadku urządzeń zasilanych przez USB o nieco większym poborze mocy zalecałbym zasilanie ich przez zasilany koncentrator USB, a nie bezpośrednio z portu USB Raspberry pi. Gdy czujnik temperatury jest zasilany, dostarcza szeregowy ciąg, który zawiera temperaturę i odczyty wilgotności aktualnych warunków. temperatura=20,9°C wilgotność=62,7% punkt rosy=13,0°CA skrypt Pythona analizuje ten ciąg i przechowuje wartości temperatury i wilgotności w trzech plikach tekstowych co pięć minut; pliki tekstowe dobowe, 24-godzinne i 48-godzinne (Różnice zostaną omówione później w sekcji HTML). Z tych plików Gnuplot wygeneruje wykresy, a następnie obrazy zestawu danych w każdym pliku. Zanim omówię skrypt w pythonie, opowiem o przygotowaniu Raspberry pi. Ponieważ monitorowanie ma odbywać się online, należy zainstalować serwer WWW. Próbowałem kilku z nich w swoim czasie na Raspberry pi, ale chociaż jest trochę duży, wolę Apache. Aby zainstalować Apache na swoim Raspberry pi, po prostu wpisz: sudo apt-get install apache2 Zostanie wyświetlony monit przed instalacją, naciśnij „y” na tak, a Apache zostanie zainstalowany kilka minut w zależności od twojego Raspberry pi. jest gotowe, musisz zainstalować dwie wtyczki Pythona: python-serial i wtyczkę python-gnuplot. (Chociaż zdałem sobie sprawę, że ostatnie kompilacje Raspiana mają standard wtyczki python-serial, ale dla bezpieczeństwa.) Aby zainstalować te, które wpisujesz: sudo apt-get install python-serial python-gnuplotPo raz kolejny po potwierdzeniu monitów te wtyczki -ins zostaną zainstalowane. I na tym konfiguracja sprzętu jest zakończona.

Krok 2: Konfiguracja oprogramowania - konfiguracja poczty e-mail i odbiorcy

Utwórz adres e-mailZanim zagłębimy się w oprogramowanie, teraz jest dobry moment, aby utworzyć konto Gmail, z którego będziesz wysyłać powiadomienia e-mail. (Ten przykład używa Gmaila, ale każdy serwer pocztowy może być używany, gdy znamy ustawienia portu SMTP) Kod Pythona jest dość prosty, ale potrzebne importy są krytyczne. Bez nich nic by nie działało.from time import *import time import serial import smtplib import Gnuplot import os import sysWreszcie lista mailingowa. Oczywiście musimy dodać odbiorców e-maila. Każdy adres e-mail jest zapisywany w zmiennej.from_address = '[email protected]'to_address1 = 'recipient1.mail.com' to_address2 = 'recipient2.mail.com'username = '[email protected]' password = 'custom_email_password'

Krok 3: Konfiguracja oprogramowania - konfiguracja portu szeregowego i parsowanie

Następnie przyjrzymy się konfiguracji szeregowej. To tylko kwestia ustawienia parametrów, które pasują do wyjścia szeregowego z czujnika. Czujnik wyprowadza ciąg szeregowy przy 9600 8 N 1, co jest standardowym formatem. Po odebraniu ciągu istnieje kilka sposobów na jego analizę w Pythonie i prawdopodobnie bardziej niezawodnie. Sposób, w jaki to robię, to szukanie znaków „temp” w ciągu szeregowym. Po zlokalizowaniu jest to po prostu kwestia wczytania kolejnych 46 znaków szeregowych do ciągu. Zebrany ciąg można teraz adresować jak elementy w tablicy. Żądane dane są analizowane z ciągu i zapisywane w trzech plikach wraz z odpowiadającym im znacznikiem czasu.timestamp = strftime("%d%b%Y %H:%M:%S ", localtime())

Krok 4: Konfiguracja oprogramowania - Gnuplot

Konfiguracja oprogramowania - Gnuplot
Konfiguracja oprogramowania - Gnuplot
Konfiguracja oprogramowania - Gnuplot
Konfiguracja oprogramowania - Gnuplot
Konfiguracja oprogramowania - Gnuplot
Konfiguracja oprogramowania - Gnuplot

Gnuplot to narzędzie graficzne wiersza poleceń. Po zapoznaniu się z podstawami może być dość potężnym narzędziem do graficznego wyświetlania zestawów danych. Gnuplot może wykreślać bezpośrednio z sformatowanego pliku tekstowego, a my tak się składa, że mamy taki z poprzedniego kroku parsowania. Po wskazaniu gnuplot, gdzie w pliku znajdują się dane, możemy wykreślić żądane wartości. Użyję czasu na osi X, a temperatury na osi Y. Wykreślanie czasu z mojego doświadczenia jest najtrudniejsze, ponieważ musisz ustawić format czasu w gnuplot, aby pasował do formatu pliku tekstowego. Gdy wszystkie opcje wykresu są kompletne i zgodnie z twoimi preferencjami, Gnuplot może następnie utworzyć obraz tego wykresu. Będzie to obraz, którego użyjemy później na naszej stronie internetowej. Zdecydowałem się na obraz.png, a ponieważ chcę zastąpić stary obraz na stronie internetowej, każdy obraz ma tę samą nazwę, więc ten wiersz kodu nie musi się zmieniać. Ustawienie rozmiaru obrazu jest powiązane z optymalizacją strony html. Najpierw bawiłem się standardowymi rozmiarami, a następnie eksperymentowałem, aby dopasować obraz do mojego ekranu. W przypadku tego projektu nie przechowuję starych obrazów, więc fizyczny rozmiar pliku w pamięci nie jest głównym czynnikiem cennej pamięci masowej Raspberry pi. Oto fragment kodu do tworzenia i przechowywania wykresu daily-p.webp

Krok 5: Konfiguracja oprogramowania - ustawienie progów i wysyłanie e-maili

Próg alertu musi być ustalony metodą prób i błędów w konfiguracji. pomieszczenie, w którym znajdują się systemy, nie ma okien, więc po wyłączeniu klimatyzacji może bardzo szybko się nagrzać. Początkowo patrzyłem na zestaw danych przez kilka dni i obserwowałem zmiany temperatury, zanim zdecydowałem się na wartość alertu 30 stopni C. Jest to ustawiona jako zmienna w scipcie Pythona. To może nie wydawać się zbyt wysokie, ale po uruchomieniu alertu nadal chcesz dać sobie czas na naprawienie problemu, zanim stanie się on krytyczny.

Dla uproszczenia wysyłam indywidualne e-maile na listę mailingową. Ponieważ lista mailingowa jest krótka, nigdy nie zawracałem sobie głowy wysyłaniem jednego e-maila do kilku odbiorców. Jedna rzecz, na którą należy zwrócić uwagę, ponieważ uruchamiam ten skrypt jako zadanie cron co 5 minut, nie chcesz wysyłać e-maili co 5 minut po uruchomieniu progu. Aby obejść ten problem, zapisuję datę i godzinę alertu w pliku i sprawdzam ten plik przed wysłaniem jakichkolwiek wiadomości e-mail, aby sprawdzić, czy system jest już w stanie alertu. Po przejściu w stan alertu będzie ponownie wysyłać wiadomość e-mail co godzinę po pierwszym wyzwoleniu, tak długo, jak system jest w stanie alertu. Dzięki temu Gmail nie blokuje wysyłania zbyt wielu e-maili w krótkim czasie.

Krok 6: Konfiguracja oprogramowania - HTML

Monitorowanie całego systemu odbywa się za pośrednictwem strony internetowej i potrzebny jest do tego bardzo prosty skrypt html. Obrazy, które stworzył Gnuplot, po prostu używam z powrotem w tych samych wymiarach obrazu. Uważam, że dla tych obrazów przeszedłem przez około 3 rozmiary, które najlepiej pasowały do mojego ekranu. Zanim stworzymy skrypt html, stwórzmy dla niego folder. Domyślnie folder hostingu WWW znajduje się w /var/www/. Chociaż jedynym celem Raspberry pi jest monitorowanie tego pokoju i wysyłanie powiadomień e-mail, dla dobrego utrzymania domu utworzyłem osobny folder w folderze /var/www/. Ponieważ ten folder należy do użytkownika root, musisz użyć sudo, aby utworzyć folder w tej lokalizacji. sudo mkdir /var/www/temperatureW tym przykładzie użyłem temperatury jako nazwy folderu, ale możesz użyć tutaj dowolnej nazwy, ale pamiętaj, że będzie ona musiała zostać wprowadzona w pasku adresu, aby wyświetlić tę stronę. Ta ścieżka jest przechowywana w zmiennej w skrypcie Pythona. Nawet jeśli lokalizacja hostingu musi zostać zmieniona lub skrypt musi zostać zmodyfikowany dla innego systemu, można go po prostu zmienić z tej jednej lokalizacji. Teraz możemy utworzyć nasz skrypt html w tym folderze, pamiętając o użyciu sudo przed dowolnymi poleceniami chcesz wykonać tutaj. Zalecam nazwanie skryptu HTML „index.html”, ponieważ uprościłoby to przy próbie znalezienia tej strony. Najważniejsze jest upewnienie się, że rozmiar obrazu jest taki sam, jak rozmiar obrazu z Gnuplot. Aby wyświetlić tę stronę, wystarczy wpisać adres IP Raspberry Pi, a następnie /temperature (lub jakkolwiek nazwałeś swój folder) Mam kilka systemów w pracy monitorujących różne rzeczy i wszystkie generują graficzne wyniki swoich wyników. Stworzyłem więc stronę, która zawiera linki do wszystkich tych stron, więc nie muszę się martwić wpisywaniem adresu za każdym razem, gdy chcę uzyskać dostęp do tych stron.

Krok 7: Żyję…

Użyłem tego do monitorowania temperatury w pomieszczeniu komputerowym, ale mogły to być dane z dowolnego źródła. Kiedy już można go zapisać w pliku tekstowym i znasz jego format, Gnuplot może zrobić resztę. Jedną z rzeczy, które ostatnio dodałem do tego projektu, jest wysyłanie pewnego rodzaju wiadomości e-mail typu „bicie serca”. To jest pierwszego dnia miesiąca o 9 rano. Mam skrypt, który uruchamia e-maile na listę mailingową, aby poinformować ich, że system działa tak, jak powinien i wszystko jest w porządku.

Korzystanie z listy cronjob jako:

Zalecana: