Spisu treści:
- Krok 1: Monitorowanie temperatury
- Krok 2: Konfiguracja Cloud4Rpi.io
- Krok 3: Monitorowanie UPS
- Krok 4: Przygotowanie do „produkcji”
- Krok 5: Konfiguracja panelu sterowania
Wideo: Monitorowanie domu DIY za pomocą RaspberryPi i Cloud4Rpi: 5 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:30
Pewnego zimowego weekendu pojechałem do mojego wiejskiego domu i dowiedziałem się, że jest tam bardzo zimno. Coś się stało z prądem i wyłącznik RCD go wyłączył, a ogrzewanie też się wyłączyło. Miałem szczęście, że tam trafiłem, inaczej za kilka dni wszystko byłoby zamarznięte, co bardzo szkodzi rurom i kaloryferom.
Miałem kilka Raspberry Pi i czujnik termiczny, więc pomyślałem - dlaczego nie zrobię prostego urządzenia monitorującego? Poniższe instrukcje zakładają, że masz Raspberry Pi z konfiguracją Raspbian i połączeniem sieciowym. W moim przypadku jest to Raspberry Pi B+ z Raspbianem (2018–06–27-raspbian-stretch-lite).
Krok 1: Monitorowanie temperatury
Jak podłączyć czujnik temperatury DS18B20? Po prostu wyszukaj w Google, jak to zrobić, a zobaczysz wiele takich zdjęć:
W moim przypadku miałem przewody czarny, żółty i czerwony. Czarny to masa, idzie do pinu uziemienia, czerwony to zasilanie - idzie do pinu 3.3v, a żółty to dane - powinien iść do pinu GPIO4, z rezystorem 4,7 kOm podłączonym między danymi a zasilaniem. Uwaga, można podłączyć kilka czujników równolegle (są cyfrowe i mają różne adresy) wystarczy jeden rezystor. Po podłączeniu czujnika należy włączyć 1Wire w raspi-config:
sudo raspi-config
Przejdź do 5 opcji interfejsu, włącz P7 1-Wire i uruchom ponownie.
Następnie możesz sprawdzić, czy widzisz czujnik:
sudo modprobe w1-gpiosudo modprobe w1-thermls /sys/bus/w1/devices/
Powinieneś zobaczyć coś takiego:
pi@vcontrol:~ $ ls /sys/bus/w1/devices/28–00044eae2dff w1_bus_master1
28–00044eae2dff to nasz czujnik temperatury.
Sprzęt jest gotowy. Teraz muszę ustawić monitoring. Potrzebuję czegoś, co pokaże mi dane i powiadomi mnie, jeśli urządzenie jest na chwilę odłączone, nie ma zasilania lub temperatura jest niska. Oczywiście to nie może być samo raspberry pi, powinien być jakiś serwer lub usługa w Internecie, która monitoruje moje urządzenie.
Mogę stworzyć prosty serwer, zdobyć hosting i wszystko skonfigurować, ale szczerze mówiąc, nie chcę. Na szczęście ktoś już o tym pomyślał i stworzył cloud4rpi.io - panel sterowania w chmurze dla Twojego urządzenia.
Krok 2: Konfiguracja Cloud4Rpi.io
Cloud4Rpi zapewnia usługę, która umożliwia urządzeniu wysyłanie i odbieranie danych za pomocą protokołów MQTT lub HTTP. Mają bibliotekę kliencką dla Pythona, więc użyję Pythona.
Przykłady Pythona dostarczane z usługą Cloud4Rpi zawierają już kod czujnika temperatury DS18B20.
Poszedłem więc na https://cloud4rpi.io, założyłem konto i dodałem tam nowe urządzenie. Na stronie urządzenia znajduje się token - ciąg znaków identyfikujący urządzenie, który należy podać w programie wysyłającym dane.
Na początek zawsze dobrze jest zaktualizować menedżera pakietów i uaktualnić pakiety (uwaga: może to zająć kilka godzin, jeśli nie aktualizowałeś przez jakiś czas):
aktualizacja sudo apt-get && aktualizacja sudo apt-get
Następnie zainstaluj git, Python i jego menedżera pakietów Pip:
sudo apt-get zainstaluj git python python-pip
Następnie zainstaluj bibliotekę Python cloud4rpi:
sudo pip zainstaluj cloud4rpi
Wreszcie jestem gotowy do napisania programu sterującego. Zaczynam od przykładu dostępnego pod adresem
git klon https://github.com/cloud4rpi/cloud4rpi-raspberrypi… cloud4rpicd cloud4rpi
Główny plik programu to control.py - muszę go zmodyfikować do swoich potrzeb. Najpierw edytuj program i wklej token:
sudo nano control.py
Znajdź wiersz DEVICE_TOKEN='…'] i określ tam token urządzenia. Potem mogę po prostu uruchomić program: Działa i zgłasza temperaturę w zmiennej RoomTemp:
sudo python control.py
Działa i zgłasza temperaturę w zmiennej RoomTemp.
Zauważ, że wykrywa wszystkie czujniki onewire ds18b20
ds_czujniki = ds18b20. DS18B20.find_all()
i używa pierwszego znalezionego czujnika:
RoomTemp': { 'type': 'numeric', 'bind': ds_sensors[0] if ds_sensors else Brak }
Ok, to było proste, bo przykładowy program ma wszystko, co jest wymagane do pracy z czujnikiem ds18b20 na Raspberry Pi. Teraz muszę znaleźć sposób na zgłoszenie stanu zasilania.
Krok 3: Monitorowanie UPS
Następną rzeczą, którą chcę monitorować, jest stan UPS, więc jeśli nastąpi przerwa w zasilaniu, będę o tym wiedział, zanim wszystko się rozłączy.
Mam UPS APC ze sterowaniem USB, więc szybko googlowałem i stwierdziłem, że potrzebuję apcupsd. https://www.anites.com/2013/09/monitoring-ups.html… Kilka razy próbowałem zainstalować go przez apt-get, ale z różnych powodów nie działało. Pokażę, jak zainstalować go ze źródeł.
wget https://sourceforge.net/projects/apcupsd/files/ap…tar xvf apcupsd-3.14.14.tar.gz cd apcupsd-3.14.14./configure --enable-usb sudo make sudo make install
Następnie edytuję plik apcupsd.conf, aby połączyć się z moim UPS przez USB.
sudo nano /etc/apcupsd/apcupsd.conf# #UPSCABLE smart UPSCABLE usb # #UPSTYPE apcsmart #URZĄDZENIE /dev/ttyS0 UPSTYPE usb URZĄDZENIE
Teraz mogę podłączyć kabel USB z UPS do RaspberryPi i sprawdzić, czy UPS zostanie znaleziony.
sudo apctest
Nie powinno dawać żadnych komunikatów o błędach.
Teraz należy uruchomić sevice apcupsd:
sudo systemctl start apcupsd
Aby zapytać o status UPS, mogę użyć polecenia statusu:
sudo /etc/init.d/apcupsd status
I wygeneruje coś takiego:
APC: 001, 035, 0855 DATA: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol WERSJA: 3.14.14 (31 maja 2016) debian UPSNAME: vcontrol CABLE: USB Cable DRIVER: USB UPS Driver UPSMODE: Stand Alone STARTTIME: 2018-10-14 16:54:28 +0300 MODEL: Back-UPS XS 650CI STATUS: ONLINE LINEV: 238,0 V LOADPCT: 0,0 procent BCHARGE: 100,0 procent TIMELEFT: 293,3 minuty MBATTCHG: 5 procent MINTIMEL: 3 minuty MAXTIME: 0 sekund SENSE: Średni LOTRANS: 140,0 V HITRANS: 300,0 V ALARMDEL: 30 sekund BATTV: 14,2 V LASTXFER: Brak transferów od momentu włączenia NUMXFERS: 0 TONBATT: 0 sekund CUMONBATT: 0 sekund XOFFBATT: BRAK BATTV STATNO05000008: 3: 2014-06-10 NOMINV: 230 V NOMBATTV: 12,0 V NOMPOWER: 390 W FIRMWARE: 892. R3. I USB FW:R3 END APC: 2018-10-14 16:55:38 +0300
Potrzebuję statusu – którym jest wiersz „STATUS:”.
Biblioteka Cloud4rpi zawiera moduł „rpy.py”, który zwraca parametry systemu Raspberry Pi, takie jak nazwa hosta czy temperatura procesora. Ponieważ wszystkie te parametry są wynikiem uruchomienia niektórych poleceń i analizowania danych wyjściowych, zawiera również przydatną funkcję „parse_output”, która robi dokładnie to, czego potrzebuję. Oto jak uzyskać status mojego UPS:
def ups_status(): wynik = rpi.parse_output(r'STATUS\s+:\s+(S+)', ['/etc/init.d/apcupsd', 'status']) if wynik: zwróć wynik else: zwróć 'NIEZNANY'
Aby wysłać ten status do cloud4rpi, muszę zadeklarować zmienną UPSStatus i powiązać ją z moją funkcją ups_status: Teraz mogę uruchomić mój program:
zmienne = { 'RoomTemp': { 'type': 'numeric', 'bind': ds_sensors[0] }, 'UPSStatus': { 'type': 'string', 'bind': ups_status } }
I od razu widzę moją zmienną na stronie urządzenia cloud4rpi.
Krok 4: Przygotowanie do „produkcji”
Wszystko działa, a teraz muszę przygotować urządzenie do trybu nienadzorowanego.
Na początek dostosuję odstępy czasu. Interwał sondowania określa, jak często program sprawdza temperaturę i stan UPS - ustaw go na jedną sekundę.
Wyniki przesyłane są do chmury co 5 minut, a informacje diagnostyczne - co godzinę.
# StałeDATA_SENDING_INTERVAL = 300 # sek DIAG_SENDING_INTERVAL = 3600 # sek POLL_INTERVAL = 1 # sek
Kiedy status UPS się zmieni - nie chcę, żeby moje urządzenie czekało 5 minut i wysyłam dane natychmiast. Zmodyfikowałem więc nieco główną pętlę i wygląda to tak:
data_timer = 0diag_timer = 0 prevUPS = 'ONLINE' while True: newUPS = ups_status() if (data_timer <= 0) lub (newUPS != prevUPS): device.publish_data() data_timer = DATA_SENDING_INTERVAL prevUPS = newUPS if diag_timer <= 0 device.publish_diag() diag_timer = DIAG_SENDING_INTERVAL sen(POLL_INTERVAL) diag_timer -= POLL_INTERVAL data_timer -= POLL_INTERVAL
Testowanie: uruchom skrypt:
sudo python control.py
I mogę oglądać status UPS na stronie mojego urządzenia.
Jeśli wyłączę zasilanie UPS, status zmieni się w ciągu kilku sekund, więc wszystko działa. Teraz muszę uruchomić apcupsd i mój control.py przy starcie systemu. Usługa Apcupsd jest stara i aby uruchomić ją na współczesnym raspbianie, powinienem zmodyfikować plik /etc/init.d/apcupsd, dodając te wiersze gdzieś na górze:
### BEGIN INIT INFO# Zapewnia: apcupsd # Wymagane-Start: $all # Wymagane-Stop: # Domyślne-Start: 2 3 4 5 # Domyślne-Stop: # Krótki opis: Demon APC UPS… ### END INIT INFO#
Następnie włącz usługę:
sudo systemctl włącz apcupsd
Następnie uruchom usługę:
sudo systemctl start apcupsd
Teraz appcupsd zostanie uruchomiony przy starcie systemu.
Aby zainstalować control.py jako usługę, użyłem dostarczonego skryptu service_install.sh:
sudo bash service_install.sh ~/cloud4rpi/control.py
Teraz usługa jest uruchomiona i powinna przetrwać ponowne uruchomienie.
Krok 5: Konfiguracja panelu sterowania
Cloud4rpi pozwala mi skonfigurować panel sterowania dla mojego urządzenia. Możesz dodać „widżety” i powiązać je ze zmiennymi urządzeń.
Moje urządzenie udostępnia dwie zmienne tylko do odczytu - RoomTemp i UPSStatus:
zmienne = { 'RoomTemp': { 'type': 'numeric', 'bind': ds_sensors[0] }, 'UPSStatus': { 'type': 'string', 'bind': ups_status } }
Dodałem 3 widżety - Number for RoomTemp, Text for UPSStatus i Chart for RoomTemp.
Mogę ustawić alerty, więc otrzymuję wiadomość e-mail, gdy temperatura jest poza określonym zakresem, UPS przełączył się w tryb offline lub samo urządzenie nie wysyła danych w odpowiednim czasie. Teraz mogę być pewien, że mój domek na wsi jest w porządku i mogę otrzymywać powiadomienia kiedy coś jest nie tak, żebym mógł zadzwonić do sąsiadów i poprosić ich, żeby sprawdzili, co się dzieje. Oto rzeczywisty kod pliku control.py.
Zalecana:
Sterowanie oświetleniem domu za pomocą Asystenta Google za pomocą Arduino: 7 kroków
Sterowanie oświetleniem domu za pomocą Asystenta Google za pomocą Arduino: (Aktualizacja z 22 sierpnia 2020 r.: Ta instrukcja ma 2 lata i opiera się na niektórych aplikacjach innych firm. Wszelkie zmiany po ich stronie mogą uniemożliwić działanie tego projektu. Może lub nie pracować teraz, ale możesz śledzić to jako odniesienie i modyfikować zgodnie z
Monitorowanie akceleracji za pomocą Raspberry Pi i AIS328DQTR za pomocą Pythona: 6 kroków
Monitorowanie przyspieszenia za pomocą Raspberry Pi i AIS328DQTR Za pomocą Pythona: Przyspieszenie jest skończone, myślę, że zgodnie z niektórymi prawami fizyki.- Terry Riley Gepard wykorzystuje niesamowite przyspieszenie i szybkie zmiany prędkości podczas pościgu. Najszybsze stworzenie na lądzie od czasu do czasu wykorzystuje swoje najwyższe tempo do łapania zdobyczy. Ten
Monitorowanie wilgotności i temperatury w domu: 11 kroków
Monitorowanie wilgotności i temperatury w domu: Cześć chłopaki! Aby jak najlepiej rozpocząć, mała opowieść o projekcie. Niedawno ukończyłem studia i przeniosłem się do Austrii na moje pierwsze stanowisko inżyniera. Kraj jest piękny, ale bardzo zimny i wilgotno w sezonie zimowym. Szybko zacząłem
Monitorowanie domu Raspberry Pi za pomocą Dropbox: 7 kroków
Monitorowanie domu Raspberry Pi za pomocą Dropbox: Ten samouczek pokaże Ci, jak stworzyć prosty i rozszerzalny system monitorowania domu za pomocą Raspberry Pi, kamery internetowej, kilku komponentów elektrycznych i konta Dropbox. Gotowy system pozwoli Ci zdalnie żądać i przeglądać obrazy z
Monitorowanie inteligentnego domu za pomocą Alexa i Arduino: 9 kroków (ze zdjęciami)
Monitorowanie inteligentnego domu za pomocą Alexa i Arduino: W dzisiejszym świecie ludzie spędzają więcej czasu w miejscu pracy niż w domu. Stąd istnieje potrzeba systemu monitoringu domu, w którym ludzie mogą zapoznać się z warunkami w domu podczas pracy. Byłoby jeszcze lepiej, gdyby jeden c