Если информация была полезной для вас, вы можете поблагодарить за труды Юmoney: 41001164449086

Система мониторинга для дома на Raspberry Pi Zero W

Хотелось бы сразу сказать, что статья служит скорее демонстрацией моих возможностей.  Идея написания возникла как результат созданной в первую очередь для себя системы мониторинга для дома, на базе Raspberry Pi Zero W. Система получилось довольно сложной с точки зрения софта, и для детального описания потребуется 3-4 объёмных статьи. Поэтому далее опишу лишь общую концепция происходящего. Хотя гики я уверен смогут разобраться, демонстрация и исходный код в конце статьи.

Часть.1. Железная составляющая.

Почему именно Raspberry Pi Zero W? Он дешевле обычной Raspberry Pi 3, обладая тем же набором необходимых мне низкоуровневых интерфейсов для датчиков. Да, нет проводного Ethernet, но для моих целей вполне достаточно и WiFi.


В качестве датчика электроэнергии, будет выступать pzem-004t, он меряет всё что необходимо, напряжение, ток, и мощность.  Выдаёт он данные по rs-232 ttl, т.е. уровни сигнала 3.3В

Более подробно о работе модуля можно прочитать в моей статье: Работаем с COM портом RS-232 напрямую из PHP для Peacefair pzem-004t

Мониторить погоду, ну или правильнее сказать влажность и температуру мы будем при помощи датчика dht22.

Ну а датчики температуры ds18b20 будут подключены в шину, делая возможным множественное подключение.

Блок питания, самый обычный от зарядки для телефона. А в качестве корпуса использую убитый много лет назад ADSL модем от dlink.








Часть .2. Софт.

Управляется всё на базе обычной Raspbian, с поднятой на ней LAMP.

Данные от датчиков собираются по средством выполнения сервисов, единственной задачей которых является регулярное выполнение соответствующих php файлов. Данные заносятся в локальный сервер MySQL (на raspberry).
Просмотреть собранные данные можно через Web интерфейс. При этом, поскольку WiFi всё же не особенно быстр, а данных в моём случае за месяц накапливается примерно на 6МБ, то я настроил репликацию БД между Raspberry Pi и другим (основным) сервером, на котором у меня и крутиться Web интерфейс.

Получается довольно гибкая система. Если по какой-то причине соединение между Raspbery и основным сервером будет потеряно, то ничего криминального не произойдёт, данные всё также продолжат сохраняться локально. А когда соединение будет восстановлено, БД синхронизируются.
При этом просматривать статистику будем на основном сервере, который значительно более быстр и в плане обработки данных, и в плане их выдачи.
Именно поэтому у меня в софте 2 конфига для соединения с БД, один для сервисов,  а второй для web интерфейса.
При этом на Raspberry и на основном сервере один и тот же софт. На raspberry задействована часть отвечающая за сбор и сохранение, а на основном сервере часть за выдачу и отображение.
Впрочем, все желающие могут обойтись работой только на Rasperry.

Код для отображения данных Web интерфейса в большей степени написан в традициях MVC и ООП. Упрощение было сделало в контроллерах, отвечающих за выдачу HTML кода и JSON данных, они процедурные.

Для рендиринга графиков используется JavaScript библиотека highcharts. Пример её использования я описал в статье: Рисуем графики Highcharts (Highstock) по данным из MySQL.

Ну и как обещал в самом начале, демонстрация и исходники.

Демо: demo.unboxit.ru/chart

Github исходники: github.com/dark705/raspberrypi_charts

Добавить комментарий


Если информация была полезной для вас, вы можете поблагодарить за труды Юmoney: 41001164449086