Энергия, тепло и вода: часть вторая

Рассмотрим следующий этап развития схемы умного дома из подручных средств :) (продолжение, первая статья тут).

Решаемые задачи:


  1. Защита от протечек

    + Удалённое управление
    + Знать состояние ввода воды (перекрыто или открыто)

  2. Знать давление и температуру теплоносителя в контуре отопления
  3. Знать давление в системе водоснабжения


Мониторинг по-прежнему в едином интерфейсе отображения (Zabbix), оповещение — через единый механизм alert-инга. А вот управление — это что-то новое. Об этом — далее.

1. Защита от протечек


Да это же избитая тема, девайсов — пруд пруди! Всё работает из коробки!

Так я было и подумал и снова ошибся. Готовых решений действительно много, но найти комплексное решение с возможностью удалённого управления и мониторинга, но при этом не используя чьё-то «облако»/чей-то личный кабинет, — оказалось почти невыполнимой задачей. Ну ок, снова колхозим, попробуем решить задачу без паяльника и коддинга.

Итого, мне нужны:

  1. шаровый кран с электроприводом
  2. датчик протечек
  3. некий контроллер с интерфейсом мониторинга и управления
  4. силовое реле


Шаровый кран искал получше качеством — не noname. Выбрал решение gidrolock ultimate на основе кранов bugatti ¾. Электропривод срабатывает от 12V.

Чем же можно управлять 12V краном? Нашлось несколько вариантов контроллеров, реализующих логику «вижу срабатывание датчика, делаю действие». Впринципе, то что нужно, но ещё хорошо бы иметь некий API для удалённого управления. Во-первых это позволит обвешать датчиками протечки все возможные места, а перекрывать воду только в одном месте (пусть и с какой-то задержкой на время сбора состояния и отправки реакции). Во-вторых — процедура будет удалённой, а значит можно будет выключать воду например при отсутствии хозяев дома. Решение появилось внезапно. Вспомнил, что даже когда-то «щупал» штуковину с подобной логикой и всевозможными ручками, называется — netping. Оказалось, ими даже решалась подобная задача. Ссылка на описание howto — в конце статьи.

image

+нужен ещё блок питания на 0.5A для питания устройства netping (в комплект не входит). Силовое реле служит для замыкания/размыкания провода управления шарового крана на землю. При соединении провода с землей происходит закрытие крана, при размыкании — открытие.

Коммутируем всё согласно схеме из howto (например — вешаем реле на первую линию netping, а датчик протечки — на четвёртую). Переводим 1ую линию в режим выхода на основе логики. Делаем зависимость 1-ой линии от 4-ой. Проверяем датчик, опуская в лужу. Внутренняя логика netping автоматически перекроет кран.

Как же теперь управлять удалённо?

В netping есть встроенный SNMP сервер с возможностью управления. Для управления netping реализовал собственные OID-ы, таблица MIB-ов для каждого из устройств доступна на сайте разработчика. В нём также есть веб-сервер с поддержкой управления через URL-Encoded команды.

Рассмотрим оба варианта:

Проверяем значение логики для линии:

Состояние крана
snmpget -v 2c -c SWITCH 192.168.8.5 .1.3.6.1.4.1.25728.8900.1.1.3.1
SNMPv2-SMI::enterprises.25728.8900.1.1.3.1 = INTEGER: 1
или
curl http:///<имя_пользователя>:<пароль>@192.168.8.5/io.cgi?io1


Устанавливаем значение логики в 0 (подаём напряжение, замыкаем реле — кран открывается):

Кран закрывается
snmpset -v 2c -c SWITCH 192.168.8.5 .1.3.6.1.4.1.25728.8900.1.1.3.1 i 0
или
curl http:///<имя_пользователя>:<пароль>@192.168.8.5/io.cgi?io1=0


Устанавливаем значение логики в 1 (снимаем напряжение, размыкаем реле — кран открывается):

Кран открывается
snmpset -v 2c -c SWITCH 192.168.8.5 .1.3.6.1.4.1.25728.8900.1.1.3.1 i 1
или
curl http:///<имя_пользователя>:<пароль>@192.168.8.5/io.cgi?io1=1


В OID 192.168.8.5 .1.3.6.1.4.1.25728.8900.1.1.3.N, N — это номер линии (1–4).

Важный нюанс — переключение сработает только если линия настроена в режим «выход». Если линия сконфигурирована в режиме «выходная логика» (например для быстрого срабатывания от обнаружения протечки датчиком), netping не будет управлять сигналом на линии вне его логики (тоесть не будет реагировать на внешние команды). Как же быть? Можно просто переключать режим работы линии до запуска ручной команды. Через HTTP это делается так:

Управление режимом линии


Бонусы:

  • Хорошая закладка на будущее — возможность подключения сколь угодно много активных удалённых датчиков протечки. Главное придумать как завести их в общую топологию. Перекрывать воду далее можно будет логикой на том же openwrt.
  • Благодаря наличию в netping 4ёх управляемых линий, можно добавить в систему ещё парочку кранов (тоже через реле). Я так и сделал — встроил отдельный кран на магистраль полива участка. Теперь можно включать/выключать полив удалённо.
  • У netping есть свой готовый zabbix template для всех устройств. Доступен у них на сайте, использует SNMP.


2. Давление и температура теплоносителя в контуре отопления


Давление — чтобы быстрее определять протечки (в том числе — совсем мелкие/накопительные).
Температура — датчик установил на обратке. По его значениям например можно делать выводы о текущем режиме работы котла, насоса в контуре и т. п.

Датчики заказаны на aliexpress, пример названия: «DC 5 В G1/4 Давление Сенсор». Есть и «не китайские» аналоги, но сильно дороже. Тем, кто не хочет рисковать, я бы рекомендовал брать Honeywell, есть несколько моделей, например MLH200PSL01A. В моём случае один китаец живёт уже пару месяцев в среде с водой под давлением в 1Бар с температурным режимом 20–60 по цельсию в контуре отопления, а второй — 3–4Бар на входе подачи воды (холодной). Датчик аналоговый. Сигнал с него ещё нужно преобразовать. На помощь приходит миросхема DS2438AZ. Она может преобразовать аналоговый сигнал в цифру и передать показания по протоколу 1wire. По-сути — АЦП. Микросхема идеально встраивается в реализованную в первой статье топологию. Дополнительно необходимо выводы VCC (+5В) и GND скоммутировать непосредственно на датчик. На третеьм проводе датчика возникает напряжение, которое можно конвертировать в давление по формуле — Vout=Vcc (0,8P+0,1).

Дополнительный бонус микросхемы DS2438 в том, что она отображает и входное напряжение сети, что может быть полезно при отладке и дальнейшем развитии сети. Также в неё встроен датчик температуры. Важный момент — в утилите digitemp нужно явно указывать наличие этой микросхемы в топологии при помощи дополнительного флага »-A».

С температурой всё проще. Ebay/aliexpress: 1 wire thread sensor. получаем данные на шине 1wire сразу в нужном виде без дополнительных блек-джеков. К примеру я заказал датчик с сантехнической посадкой ½ дюйма и выпирающим на 6 мм стальным щупом.

Конструктив:

image

Подключаем оба датчика к общей топологии и заводим дополнительные item в zabbix.

Ложка дёгтя


На самом деле сразу всё не взлетело. С внедрением двух указанных датчиков у меня начали происходить чудеса во всей топологии 1wire- от пропаданий датчиков, до показаний ими пограничных значений. Первое предположение — не хватает напряжения. Попытки замены USB-хаба, использования активного хаба результата не принесли. В итоге — заказал новый «мастер сети», теперь уже на основе FTDI FT232 — с ним всё стало работать стабильно. Для работы с таким мастером нужно использовать утилиту digitemp_DS9097U. Но я решил перейти на owfs в работе с датчиками, отказавшись от точечных вызовов digitemp при помощи zabbix_agent на каждый из item. Это снимает головную боль конкурентных запросов, из-за чего периодически наблюдались таймауты. Если не ошибаюсь, owfs даже имеет некий встроенный механизм кеширования.

В openwrt был установлен пакет owfs и примонтирована ФС командой:

owfs --allow_other -d /dev/ttyUSB0 /root/1wire

Монтирование добавлено в автостарт /etc/rc.local.

3. Давление в системе водоснабжения


Теперь это совсем просто — дублируем описанный в п1 подход для магистрали с водой. Однако устанавливать датчик в магистраль с водой там, где проходит 1wire сеть у меня возможности не было. В новое место тащить кабель я не стал, решил попробовать решение удалённого снятия данных при помощи АЦП с wifi интерфейсом от radioseti. Решение умеет подключаться к wifi-точке доступа, имеет встроенный веб-сервер и умеет отдавать значения подключенных датчиков по http-протоколу. Для разнообразия — годится. Как бонус — к этому устройству можно в подцепить другие датчики (в том числе другие 1wire), т.е. в теории например организовать ещё один удалённый сегмент 1wire. Устройство оказалось вполне интуитивно понятным, при первом старте запускается в режиме точки доступа. Подключаемся, заносим настройки подключения к нашему wifi, снимаем джампер и размещаем в зоне действия сигнала wifi. Забираем информацию например через curl -s sensor_ip/sensors или непосредственно HTTP-опросом в zabbix.

Конструктив:

image

Текущий состав комплекса:


Сегмент датчиков 1wire:

мастер сети на основе FTDI FT232
3 датчика-микросхемы DS18B20
1 датчик-зонд под ½ DS18B20
1 АЦП DS2438
1 датчик давления под ½
1 счетчик импульсов DS2423
импульсный водосчетчик

Сегмент wi-fi датчиков:

RS-20
1 датчик давления под ½

Сегмент Netping (подключение по LAN):

netping i/o v2
1 датчик влаги типа «сухой контакт»
2 крана gidrolock bugati ultimate + 2 реле BM8070D

Сегмент UPS (подключение по USB):

PL2303
UPS Энергия ПН-750

Схема:


image

Графики:


image
image
image
image

Ссылки:


© Habrahabr.ru