Съдържание:
- Стъпка 1: Мониторинг на температурата
- Стъпка 2: Настройка на Cloud4Rpi.io
- Стъпка 3: Мониторинг на UPS
- Стъпка 4: Подготовка за „производство“
- Стъпка 5: Настройване на контролен панел
Видео: Домашен мониторинг „Направи си сам“с RaspberryPi и Cloud4Rpi: 5 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:52
Един зимен уикенд отидох в селската си къща и разбрах, че там е много студено. Нещо се беше случило с електричеството и RCD прекъсвачът го беше изключил и отоплението също се изключи. Имах късмет, че дойдох там, иначе след няколко дни всичко щеше да бъде замразено, което е много лошо за тръбите и радиаторите.
Имах наоколо няколко Raspberry Pi и термичен сензор, затова си помислих - защо не направя просто устройство за наблюдение? Инструкциите по -долу предполагат, че имате Raspberry Pi с настроена Raspbian и мрежова връзка. В моя случай това е Raspberry Pi B+ с Raspbian (2018–06–27-raspbian-stretch-lite).
Стъпка 1: Мониторинг на температурата
Как да свържете температурен сензор DS18B20? Просто потърсете в Google как да направите това и ще видите много снимки като тази:
В моя случай имах черен, жълт и червен проводник. Черното е заземено, отива към заземяващ щифт, червеното е захранващо - преминава към 3.3v щифт, а жълтото е данни - трябва да отиде към пино GPIO4, с резистор 4.7 kOm, свързан между данни и захранване. Забележка, можете да свържете няколко сензора паралелно (те са цифрови и имат различни адреси), имате нужда само от един резистор. След като свържете сензора си, трябва да активирате 1Wire в raspi-config:
sudo raspi-config
Отидете на 5 опции за свързване, активирайте P7 1-Wire и рестартирайте.
След това можете да тествате дали можете да видите сензора:
sudo modprobe w1-gpiosudo modprobe w1-thermls/sys/bus/w1/devices/
Трябва да видите нещо подобно:
pi@vcontrol: ~ $ ls/sys/bus/w1/devices/28–00044eae2dff w1_bus_master1
28–00044eae2dff е нашият температурен сензор.
Хардуерът е готов. Сега трябва да настроя частта за наблюдение. Имам нужда от нещо, което да ми показва данните и да ме уведомява, ако устройството е изключено за известно време или няма захранване, или температурата е ниска. Очевидно това не може да бъде самото малиново пи, трябва да има някакъв сървър или услуга в интернет, която да следи моето устройство.
Мога да създам прост сървър, да получа хостинг и да настроя всичко, но честно казано, не искам. За щастие някой вече е помислил за това и е създал cloud4rpi.io - облачен контролен панел за вашето устройство.
Стъпка 2: Настройка на Cloud4Rpi.io
Cloud4Rpi предоставя услуга, която позволява на вашето устройство да изпраща и получава данни, използвайки MQTT или HTTP протоколи. Те имат клиентска библиотека за Python, така че ще използвам Python.
Примерите на Python, които се предлагат с услугата Cloud4Rpi, вече съдържа код за сензор за температура DS18B20.
Затова отидох на https://cloud4rpi.io, създадох акаунт и добавих ново устройство там. Страницата на устройството има знак - низ, който идентифицира устройството и който трябва да бъде посочен в програмата, която изпраща данни.
Като начало, винаги е добра идея да актуализирате мениджъра на пакети и да надстроите пакетите (забележка: може да отнеме часове, ако не сте надстройвали известно време):
sudo apt-get update && sudo apt-get upgrade
След това инсталирайте git, Python и неговия мениджър на пакети Pip:
sudo apt-get install git python python-pip
След това инсталирайте библиотеката на cloud4rpi Python:
sudo pip инсталирайте cloud4rpi
И накрая, готов съм да напиша моята програма за управление. Започвам от пример, достъпен на
git clone https://github.com/cloud4rpi/cloud4rpi-raspberrypi… cloud4rpicd cloud4rpi
Основният програмен файл е control.py - трябва да го променя според нуждите си. Първо, редактирайте програмата и поставете знак:
sudo nano control.py
Намерете ред DEVICE_TOKEN = '…'] и посочете там жетон на устройство. След това мога просто да стартирам програмата: Тя работи и отчита температура в променливата RoomTemp:
sudo python control.py
Той работи и отчита температура в променливата RoomTemp.
Имайте предвид, че той открива всички едножични сензори ds18b20
ds_sensors = ds18b20. DS18B20.find_all ()
и използва първия намерен сензор:
RoomTemp ': {' type ':' numeric ',' bind ': ds_sensors [0] if ds_sensors else None}
Добре, това беше лесно, защото примерната програма има всичко необходимо за работа със сензор ds18b20 на Raspberry Pi. Сега трябва да намеря начин да докладвам за състоянието на захранването.
Стъпка 3: Мониторинг на UPS
Следващото нещо, което искам да наблюдавам, е състоянието на UPS, така че ако има прекъсване на захранването, ще знам за това, преди всичко да се прекъсне.
Имам APC UPS с USB управление, затова бързо потърсих в google и установих, че имам нужда от apcupsd. https://www.anites.com/2013/09/monitoring-ups.html… Опитах няколко пъти да го инсталирам чрез apt-get и той не работи за мен по различни причини. Ще покажа как да го инсталирам от източниците.
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
След това редактирам apcupsd.conf, за да се свържа с моя UPS чрез usb.
sudo nano /etc/apcupsd/apcupsd.conf# #UPSCABLE smart UPSCABLE usb ##UPSTYPE apcsmart #DEVICE/dev/ttyS0 UPSTYPE usb DEVICE
Сега мога да включа USB кабел от UPS към RaspberryPi и да тествам дали ще бъде намерен UPS.
sudo apctest
Той не трябва да ви дава съобщения за грешка.
Сега трябва да стартира sevice apcupsd:
sudo systemctl стартира apcupsd
За да получа заявен статус на UPS, мога да използвам команда за състояние:
sudo /etc/init.d/apcupsd статус
И ще изведе нещо подобно:
APC: 001, 035, 0855ДАТА: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol ВЕРСИЯ: 3.14.14 (31 май 2016 г.) debian UPSNAME: vcontrol КАБЕЛ: USB кабелен драйвер: USB UPS драйвер UPSMODE: Самостоятелен STARTTIME: 2018-10-14 16:54:28 +0300 МОДЕЛ: Back-UPS XS 650CI СТАТУТ: ОНЛАЙН ЛИНЕВ: 238.0 Волта LOADPCT: 0.0 Процент BCHARGE: 100.0 Процент TIMEELEFT: 293.3 минути MBATTCHG: 5 процента MINTIMEL: 3 минути MAXTIME 0 секунди SENSE: среден LOTRANS: 140.0 волта HITRANS: 300.0 волта ALARMDEL: 30 секунди BATTV: 14.2 волта LASTXFER: Няма прехвърляния от момента на завъртане NUMXFERS: 0 TONBATT: 0 секунди CUMONBATT: 0 секунди XOFFBATT: N/A STATX0BT4: 2014-06-10 NOMINV: 230 волта NOMBATTV: 12,0 волта NOMPOWER: 390 вата ФИРМУАР: 892. R3. I USB FW: R3 END APC: 2018-10-14 16:55:38 +0300
Имам нужда от състояние - което е редът „STATUS:“.
Библиотеката Cloud4rpi съдържа модул „rpy.py“, който връща системните параметри на Raspberry Pi, като име на хост или температура на процесора. Тъй като всички тези параметри са резултат от изпълнение на някои команди и анализиране на изхода, той съдържа и удобна функция „parse_output“, която прави точно това, от което се нуждая. Ето как да получа статуса си на UPS:
def ups_status (): result = rpi.parse_output (r'STATUS / s+: / s+(S+) ', [' /etc/init.d/apcupsd ',' status ']) ако резултат: връщане на резултат else: връщане „НЕИЗВЕСТНО“
За да изпратя това състояние на cloud4rpi, трябва да декларирам променлива UPSStatus и да я свържа с моята функция ups_status: Сега мога да стартирам програмата си:
променливи = {'RoomTemp': {'type': 'numeric', 'bind': ds_sensors [0]}, 'UPSStatus': {'type': 'string', 'bind': ups_status}}
И веднага мога да видя променливата си на страницата на cloud4rpi устройството.
Стъпка 4: Подготовка за „производство“
Всичко работи и сега трябва да подготвя устройството си в режим без надзор.
За начало ще коригирам времевите интервали. Интервалът на анкетата определя колко често програмата проверява за температура и състояние на UPS - задайте го на една секунда.
Резултатите се изпращат в облака на всеки 5 минути, а диагностичната информация - на всеки час.
# КонстантиDATA_SENDING_INTERVAL = 300 # сек DIAG_SENDING_INTERVAL = 3600 # сек POLL_INTERVAL = 1 # сек
Когато състоянието на UPS се промени - не искам устройството ми да чака 5 минути и веднага изпращам данни. Така че леко промених основния цикъл и той изглежда така:
data_timer = 0diag_timer = 0 prevUPS = 'ONLINE' докато True: newUPS = ups_status () if (data_timer <= 0) или (newUPS! = prevUPS): device.publish_data () data_timer = DATA_SENDING_INTERVAL prevUPS = newUPS ако diag_timer < device.publish_diag () diag_timer = DIAG_SENDING_INTERVAL сън (POLL_INTERVAL) diag_timer -= POLL_INTERVAL data_timer -= POLL_INTERVAL
Тестване: стартиране на скрипт:
sudo python control.py
И мога да гледам състоянието на UPS на страницата на устройството си.
Ако изключа захранването на UPS, състоянието се променя след няколко секунди, така че всичко работи. Сега трябва да стартирам apcupsd и моя control.py при стартиране на системата. Услугата Apcupsd е стара и за да я стартирам на съвременния raspbian, трябва да променя /etc/init.d/apcupsd файла, като добавя тези редове някъде в горната част:
### BEGIN INIT INFO # Предоставя: apcupsd # Изисква се-Старт: $ all # Изисква се-Стоп: # По подразбиране-Старт: 2 3 4 5 # Default-Stop: # Кратко описание: APC UPS демон … ### END INIT ИНФОРМАЦИЯ#
След това активирайте услугата:
sudo systemctl активира apcupsd
След това стартирайте услугата:
sudo systemctl стартира apcupsd
Сега apcupsd ще бъде стартиран при стартиране на системата.
За да инсталирам control.py като услуга, използвах предоставения скрипт service_install.sh:
sudo bash service_install.sh ~/cloud4rpi/control.py
Сега услугата е стартирана и тя трябва да оцелее при рестартиране.
Стъпка 5: Настройване на контролен панел
Cloud4rpi ми позволява да настроя контролен панел за моето устройство. Можете да добавите „джаджи“и да ги свържете с променливите на устройството.
Устройството ми предлага две променливи само за четене - RoomTemp и UPSStatus:
променливи = {'RoomTemp': {'type': 'numeric', 'bind': ds_sensors [0]}, 'UPSStatus': {'type': 'string', 'bind': ups_status}}
Добавих 3 приспособления - номер за RoomTemp, Текст за UPSStatus и диаграма за RoomTemp.
Мога да настроя сигнали, така че получавам имейл, когато температурата е извън зададения диапазон, UPS е изключен или самото устройство не изпраща данни, когато трябва. Сега мога да съм сигурен, че моята селска къща е добре и мога да бъда уведомен когато нещо не е наред, мога да се обадя на съседите и да ги помоля да проверят какво става. Ето действителния код на control.py.
Препоръчано:
Макро обектив „Направи си сам“с AF (различен от всички други макро обективи „Направи си сам“): 4 стъпки (със снимки)
Макро обектив „Направи си сам“с АФ (различен от всички други макро обективи „Направи си сам“): Виждал съм много хора, които правят макро обективи със стандартен комплект обектив (Обикновено 18-55 мм). Повечето от тях са обектив, просто залепен върху камерата назад или отстранен преден елемент. И за двете опции има недостатъци. За монтиране на обектива
Домашен соларен панел „Направи си сам“: 4 стъпки
Домашно направен слънчев панел „Направи си сам“: Приключих този проект прибл. Преди 3 години за моя университетски проект (Най-накрая имах възможност да го публикувам, тъй като имам свободно време по време на блокирането на пандемията Covid-19 в Мумбай, Индия) По-късно монтирах този слънчев панел „Направи си сам“на балкона на дома си и използвах
Направи си сам: Lego UV LED фенерче / Домашен детектор за урина за домашни любимци: 3 стъпки
Направи си сам: Lego UV LED фенерче / Домашен детектор за урина за домашни любимци: Това е лесен (не е необходимо запояване), забавен и евтин начин да направите страхотно UV LED фенерче от Legos. Това също се удвоява като домашен детектор за урина за домашни любимци (сравнете цените). Ако някога сте мечтали да направите свой собствен домашен Lego Flash
Надстройте самата напоителна саксия „Направи си сам“с WiFi в „Направи си сам“аларма за откриване на движение Плантатор: 17 стъпки
Надстройте DIY самополиващата саксия с WiFi в аларма за часовници за откриване на движение „Направи си сам“ В тази статия ще ви покажем как да надстроите вашата самостоятелно поливаща саксия с WiFi със самонараняване с WiFi и аларма за откриване на движение. не сте чели статията за това как да си направите саморъчно саксия с WiFi с WiFi, можете да печете
Направи си сам домашен компютър: 4 стъпки
Домашен компютър „направи си сам“: Пуснах Instructable преди известно време, използвайки Espruino Pico, за да направя домашен компютър: https://www.instructables.com/id/Make-Your-Own-Hom … Това изисква да свържете VGA монитор чрез нарязване на VGA кабел, но за тази инструкция аз използвам