Оглавление:
- Шаг 1: Мониторинг температуры
- Шаг 2. Настройка Cloud4Rpi.io
- Шаг 3: Мониторинг ИБП
- Шаг 4: Подготовка к «производству»
- Шаг 5: Настройка панели управления
Видео: Мониторинг дома своими руками с помощью RaspberryPi и Cloud4Rpi: 5 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
В один из зимних выходных я приехал в свой загородный дом и обнаружил, что там очень холодно. Что-то случилось с электричеством и выключатель УЗО отключил его, отключилось и отопление. Мне повезло, что я приехал, иначе через несколько дней все бы замерзло, что очень плохо для труб и радиаторов.
У меня было несколько Raspberry Pi и термодатчик, поэтому я подумал: а почему бы мне не сделать простое устройство для мониторинга? В приведенных ниже инструкциях предполагается, что у вас есть Raspberry Pi с Raspbian и настроено сетевое соединение. В моем случае это Raspberry Pi B + с Raspbian (2018-06-27-raspbian-stretch-lite).
Шаг 1: Мониторинг температуры
Как подключить датчик температуры DS18B20? Просто погуглите, как это сделать, и вы увидите много картинок вроде этой:
В моем случае у меня были черный, желтый и красный провода. Черный - земля, идет к контакту заземления, красный - питание - идет к контакту 3,3 В, а желтый - данные - должен идти к контакту GPIO4, с резистором 4,7 кОм, подключенным между данными и питанием. Обратите внимание, что вы можете подключить несколько датчиков. параллельно (они цифровые, имеют разные адреса) нужен только один резистор. После подключения датчика вы должны включить 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 - это наш датчик температуры.
Железо готово. Теперь мне нужно настроить мониторинговую часть. Мне нужно что-то, что показывало бы мне данные и уведомляло меня, если устройство отключено на некоторое время, или нет питания, или температура низкая. Очевидно, что это не может быть сама Raspberry Pi, в Интернете должен быть какой-то сервер или служба, которая отслеживает мое устройство.
Я могу создать простой сервер, получить хостинг и все настроить, но, честно говоря, я не хочу. К счастью, кто-то уже подумал об этом и создал 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
Затем установите библиотеку Python cloud4rpi:
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: Мониторинг ИБП
Следующее, что я хочу контролировать, - это состояние ИБП, поэтому, если произойдет отключение электроэнергии, я узнаю об этом до того, как все отключится.
У меня есть ИБП APC с управлением через USB, поэтому я быстро погуглил и обнаружил, что мне нужен 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, чтобы подключиться к своему ИБП через usb.
sudo nano /etc/apcupsd/apcupsd.conf# #UPSCABLE smart UPSCABLE usb # #UPSTYPE apcsmart # DEVICE / dev / ttyS0 UPSTYPE usb DEVICE
Теперь я могу подключить USB-кабель от ИБП к RaspberryPi и проверить, будет ли найден ИБП.
sudo apctest
Он не должен выдавать сообщений об ошибках.
Теперь нужно запустить sevice apcupsd:
sudo systemctl start apcupsd
Чтобы запросить статус ИБП, я могу использовать команду статуса:
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-драйвер ИБП UPSMODE: Stand Alone ВРЕМЯ НАЧАЛА: 2018-10-14 16:54:28 +0300 МОДЕЛЬ: Back-UPS XS 650CI СОСТОЯНИЕ: ONLINE LINEV: 238,0 В НАГРУЗКА PCT: 0,0% BCHARGE: 100,0% TIMELEFT: 293,3 минуты MBATTCHG: 5% MINTIMEL: 3 минуты MAXTIME: 0 секунд SENSE: Medium LOTRANS: 140,0 вольт HITRANS: 300,0 вольт ALARMDEL: 30 секунд BATTV: 14,2 вольт LASTXFER: без передачи с момента включения NUMXFERS: 0 TONBATT: 0 секунд CUMONBATT: 0 секунд XOFFBATTATE: N / A 0x08BATT: N / A 0x02: 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
Мне нужен статус - это строка «СТАТУС:».
Библиотека Cloud4rpi содержит модуль «rpy.py», который возвращает системные параметры Raspberry Pi, такие как имя хоста или температура процессора. Поскольку все эти параметры являются результатом выполнения некоторых команд и анализа вывода, он также содержит удобную функцию parse_output, которая делает именно то, что мне нужно. Вот как получить статус моего ИБП:
def ups_status (): result = rpi.parse_output (r'STATUS / s +: / s + (S +) ', [' /etc/init.d/apcupsd ',' status ']) if result: return result else: return 'НЕИЗВЕСТНЫЙ'
Чтобы отправить этот статус в cloud4rpi, мне нужно объявить переменную UPSStatus и привязать ее к моей функции ups_status: Теперь я могу запустить свою программу:
переменные = {'RoomTemp': {'type': 'numeric', 'bind': ds_sensors [0]}, 'UPSStatus': {'type': 'string', 'bind': ups_status}}
И я сразу вижу свою переменную на странице устройства cloud4rpi.
Шаг 4: Подготовка к «производству»
Все работает, и теперь мне нужно подготовить устройство к автоматическому режиму.
Для начала я настрою временные интервалы. Интервал опроса определяет, как часто программа проверяет температуру и состояние ИБП - установите значение в одну секунду.
Результаты отправляются в облако каждые 5 минут, а диагностическая информация - каждый час.
# Константы DATA_SENDING_INTERVAL = 300 # сек. DIAG_SENDING_INTERVAL = 3600 # сек. POLL_INTERVAL = 1 # сек.
При изменении статуса ИБП - я не хочу, чтобы мое устройство ждало 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 <0 diag: device.publish_diag () diag_timer = DIAG_SENDING_INTERVAL сна (POLL_INTERVAL) diag_timer - = POLL_INTERVAL data_timer - = POLL_INTERVAL
Тестирование: запустить скрипт:
sudo python control.py
И я могу наблюдать за состоянием ИБП на странице своего устройства.
Если я выключу ИБП, статус изменится через пару секунд, так что все работает. Теперь мне нужно запустить apcupsd и мой control.py при запуске системы. Сервис Apcupsd старый, и чтобы запустить его на современном raspbian, мне нужно изменить файл /etc/init.d/apcupsd, добавив эти строки где-нибудь вверху:
### BEGIN INIT INFO # Предоставляет: apcupsd # Required-Start: $ all # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: # Краткое описание: APC UPS daemon… ### END INIT ИНФОРМАЦИЯ#
Затем включите сервис:
sudo systemctl включить apcupsd
Затем запустите службу:
sudo systemctl start 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.
Я могу настроить оповещения, поэтому я получаю электронное письмо, когда температура выходит за пределы указанного диапазона, ИБП отключился или само устройство не отправляет данные, когда должно. Теперь я могу быть уверен, что с моим загородным домом все в порядке, и я могу получать уведомления когда что-то не так, я могу позвонить соседям и попросить их проверить, что происходит. Вот фактический код control.py.
Рекомендуемые:
Мониторинг зеленого дома с помощью IOT: 5 шагов
Мониторинг зеленых насаждений с помощью IOT: когда дело доходит до сельского хозяйства, мониторинг температуры и температуры. влажность растений - важный фактор их выживания. В настоящее время люди используют термометры, прикрепленные к теплице, чтобы фермеры могли измерять температуру. Однако это ручное приложение
Создайте мини-гидропонные системы своими руками и сад гидропонных трав своими руками с помощью предупреждений Wi-Fi: 18 шагов
Постройте мини-гидропонные системы своими руками и сад гидропонных трав своими руками с помощью предупреждений Wi-Fi: в этом уроке мы покажем вам, как построить систему #DIY #hydroponics. Эта гидропонная система, сделанная своими руками, будет поливать в соответствии с индивидуальным гидропонным циклом полива с 2 минутами включения и 4 минутами перерыва. Он также будет контролировать уровень воды в резервуаре. Эта система
Декор дома из радуги своими руками: 5 шагов
DIY Rainbow House Decor: Добро пожаловать в мою новую статью … Как сделать украшение дома из радуги своими руками! Arduino можно использовать для создания практически любого проекта в области электроники. Здесь я использовала его, чтобы сделать красивое украшение для вашего дома. "Радуга" часть этого проекта
Как сделать дрон дома - квадрокоптер своими руками: 5 шагов
Как сделать дрон в домашних условиях - Квадрокоптер своими руками: Здравствуйте, читатели, в этом руководстве я сделал дрон, который летает очень высоко, и самая лучшая часть здесь - все материалы, необходимые для его создания, доступны на сайтах интернет-магазинов (проверьте ссылки в моем видео описание) .Этот самодельный дрон очень простой
Мониторинг умного дома с помощью Alexa и Arduino: 9 шагов (с изображениями)
Мониторинг умного дома с помощью Alexa и Arduino: в современном мире люди проводят больше времени на работе, а не дома. Следовательно, существует потребность в системе домашнего мониторинга, с помощью которой люди могут узнавать об условиях в доме во время работы. Было бы еще лучше, если бы один c