Как стать автором
Обновить

Энергия, тепло и вода

Время на прочтение7 мин
Количество просмотров7.7K

Предисловие


2019 год. Почти в любом магазине электроники можно купить один из сотен возможных наборов умного дома. Взять и настроить в «2 клика», подключиться к облакам, получать push event-ы в приложение/смс-ки, да и вообще получать всю необходимую информацию в любой точке мира.

Идеально, но в моём случае не сработало. Несколько попавших ко мне в руки решений на деле оказались ограниченным набором определенных функций, покрывающих лишь часть моих запросов, а к тому же — накладывающих почти непреодолимые ограничения. И, как это обычно бывает, чем меньше ограничений, тем больше нужно погружаться в предметную область, самостоятельно продумывать решения, архитектуры. Поэтому — колхозим сами :)

Задачи


1. получать информацию о качестве электросети (скачки напряжения, полное отключение и т.п.).

2. иметь полный мониторинг UPS. А на самом деле иметь этот самый UPS исходя из последствий п2.

3. получать информацию о температуре:

  1. на улице
  2. дома
  3. на чердаке (когда замёрзнет закинутый туда хлам и помидоры)

4. Следить за состоянием потребления воды, алертить если потребление выросло (вдруг протечка, всё датчиками влаги не обвешаешь).

5. Понимать когда дома кто-то есть, чтобы автоматизировать перекрытие/открытие воды.

6. Снятие показаний газового счетчика и alert когда кончается оплаченный запас.
+ прочие всевозможные датчики (влажности, открытия, давления воды, давления в контуре отопления и т.п.).

Глобальная цель — иметь общий интерфейс, где можно будет на всё это посмотреть. Получать нотайсы, если что-то пошло не так. И чтобы за это ничего не было и отдать за это не очень много денег.

Состав комплекса на текущий момент


  • UPS Энергия ПН-750 + батарея на 100 ач
  • USB->RS232 converter на основе PL2303
  • Router Tp-link tl-wr1043nd +
  • 1wire мастер сети на основе купленного USB термометра DS18B20+ PL-2303TA
  • 1wire 3 датчика DS18B20
  • 1wire модуль «счетчик воды» от radioseti на основе DS2423

Виртуалка с Zabbix-сервером за пределами домашней сети.

image


Этап 1. Подготовка инфраструктуры


Первым делом встал вопрос физической реорганизации: роутер был перемещен в тумбочку около вент шахты, куда далее планировалась установка UPS. Антенна до интернет провайдера Ubiquiti Nanostation Loco M2 PoE была подключена в ту же розетку, что и роутер, дабы далее питаться от UPS.

У меня уже была выделенная инсталляция Zabbix на удалённом сервере и некоторый опыт работы с этим приложением, поэтому с теорией организации alert-тинга, да и самой дашбордой проблем не ожидалось.

Роутер прошит в OpenWRT Chaos Calmer, настроен VPN до сети, где был расположен Zabbix-сервер.

Я сразу же добавил метрики в zabbix, раздобыв шаблон item-ов для openwrt. Таким образом я получил возможность наблюдения как за системой, так и например за тем, сколько и каких MAC-адресов подключены к точке. Что в дальнейшем должно было послужить принятием решения о перекрытии воды в доме.

Этап 2. Выбор UPS


Критериями выбора было:

  • возможность работы газового котла (buderus)
  • от 5 часов автономии котла+интернет оборудования
  • наличие интерфейса мониторинга
  • низкий уровень шума (место размещения — тумбочка на кухне рядом с вент шахтой)
  • в силу ограничений места размещения и цены — желательно однобатарейная конструкция

Разберёмся в возможности соблюдения критериев по-порядку.

Возможность работы газового котла обсуловлена тем, что котёл требует чистый синус, иначе будет гудеть и изнашиваться двигатель насоса. Про это можно нагуглить много статей.
Обычные (компьютерные UPS) такой синус не дают, выдавая апроксимированную синусойду.
Вторым важным фактором является наличие «сквозной нейтрали». Тут всё немного сложнее, но тоже легко гуглится, поэтому останавливаться не буду. Скажу лишь одно — без сквозной нейтрали buderus не заработал, а точнее выпадал в ошибку, т к не срабатывал датчик ионизации и котел по-просту не видел пламени.

В качестве подитога выбора UPS было смещение фокуса в сторону online и line-interactive UPS.
От 5 часов автономии котла+интернет оборудования дают в основном UPS с внешней батареей. В силу ограничений места размещения и цены — желательно однобатарейная конструкция. Батареи 100ач по расчетам должно было хватить на 8+ часов.

Наличие интерфейса мониторинга чтобы как минимум знать когда система перешла на батарею, чтобы зимой ехать домой и заводить генератор. Особенных требований тут (как и опыта реализации) у меня не было. Искал всё что идёт с rs232 или usb интерфейсом.

Требование низкого уровня шума на деле оказалось серьёзным ограничением и отбросило целый класс оборудования — online UPS, т к все они работают в режиме постоянного проветривания трансформатора (вентилятор не выключается).

Позвонив в магазин «Энергия», мне достался последний ПН-750 с rs232 с витрины. Достаточно дёшево, т к в комплете не было проводов.

Этап 3: настройка UPS


С подключением UPS возникли проблемы. Я купил несколько USB->RS232 конверторов, почитал на форумах, что энергия использует стандартный протокол Megatec и с ней можно как минимум поработать через П/О Upsilon2000. Но сколько я не бился — на serial интерфейсе была полная тишина. Через неделю мытарств решил разобрать UPS и посмотреть что там, наплевав на гарантию. Проблема оказалась банальной — плата RS232 не была подключена к основной плате UPS-а, да и коннектор был слегка сломан. Заменил коннектор, подключил и о чудо, всё взлетело, хотя прошивка и выдавала странное название UPS — SIN800 (кажется теперь понимаю, почему энергия в новых моделях выпилила rs232).

Под OpenWRT нашлось стандартное П/О для работы с UPS: network ups tools, в котором есть всё необходимое для вывода метрик в консоль.

root@OpenWrt:/# upsc myups@127.0.0.1
battery.charge: 100
battery.voltage: 13.32
battery.voltage.high: 13.00
battery.voltage.low: 10.40
battery.voltage.nominal: 12.0
device.mfr: GERMANY
device.model: SIN 800S
device.type: ups
driver.name: blazer_ser
driver.parameter.cablepower: both
driver.parameter.pollinterval: 2
driver.parameter.port: /dev/ttyUSB0
driver.parameter.protocol: megatec
driver.version: 2.6.5
driver.version.internal: 1.55
input.current.nominal: 2.7
input.frequency: 50.0
input.frequency.nominal: 50
input.voltage: 225.7
input.voltage.fault: 225.7
input.voltage.nominal: 220
output.voltage: 219.6
ups.beeper.status: enabled
ups.delay.shutdown: 30
ups.delay.start: 180
ups.firmware: Z1911F100
ups.load: 5
ups.mfr: GERMANY
ups.model: SIN 800S
ups.status: OL
ups.temperature: 48.0
ups.type: online

А самое интересное, что под Zabbix есть готовый template для nut. Вобщем — впиливаем в zabbix-agent шелл-скрипт из комплекта tempate-а и у нас есть красивая картинка в zabbix в динамике. Задача 1 и 2 на этом этапе была решена (а на будущее появилась идея мониторинга общего энергопотребления).

Этап 4: 1wire и температура


Некоторое время назад я купил на ebay usb-термометр (совмещенная плата преобразователя и датчик).
В OpenWRT также оказался подходящий софт, утилита digitemp_DS9097. Она отобразила температуру отдельно взятого напаянного датчика. Прочитав что есть 1wire я понял, что можно попробовать не ограничиваться одним датчиком и подцепить к купленному USB-преобразователю целую шину датчиков. Взяв в магазине несколько микросхем DS18B20 и «бочек» под витую пару, соорудил конструктив с выносом датчика за пределы бочки и внутренним соединением с 3-мя проводами.

image

Об этой конструкции мне было известно уже много лет, мы подобное применяли для снятия показаний в дата-центрах, но тогда я ещё не знал про 1wire. При соединении бочек между собой стандартными патчкордами и коммутированием этого хозяйства с «USB термометром» я получил значения со всех 3-ёх температурных датчиков.

image

Осталось раскинуть их по локациям. Общая длина шины составила около 30 метров. Сигнал не пропадает. Размещенная на улице «бочка» залита клеевым пистолетом. Зиму прожила.

Этап 5: вода


Пришлось поменять счетчик воды на входе ( стоял не импульсный, без геркона). Благодаря жизни в загородном доме, сантехника не вызывает вопросов. Купил в ближайшем сантехническом магазине и заменил. В новом счётчике один импульс возникает через каждые 10литров воды. Теперь эти импульсы нужно чем-то считать.

Почему-то сняли с производства интересную микросхему цифровой-счетчик — DS2423. Но оказалось, что у ребят из Волгограда (radioseti) есть готовое устройство, которое благодаря встроенной батарейке ещё и считает значение кол-ва импульсов при пропадании электричества. Однако само устройство было адаптировано под собственную архитектуру сети. От разъемов RJ-11 до отдельного блока питания на 12В. В моём же случае хотелось ограничиться питанием существующей шины (5В). Пришлось обойти «лишнюю» обвязку и припаяться непосредственно к выводам DS2423 напрямую. Тогда устройство заработало, значения регистров стали видны на шине. Их два, т к устройство подразумевает подключение к двум водосчетчикам одновременно — ХВС и ГВС. У меня только один вход воды, поэтому второй регистр использую только для тестов.

image

Конечный результат по топологии 1wire:

root@OpenWrt:/etc/zabbix# digitemp_DS9097 -c /etc/digitemp.conf -a
DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane
GNU Public License v2.0 - http://www.digitemp.com
Apr 04 16:16:35 Sensor 0 C: 29.81 F: 85.66
Apr 04 16:16:36 Sensor 1 C: 14.00 F: 57.20
Apr 04 16:16:37 Sensor 2 C: 6.56 F: 43.81
Apr 04 16:16:37 Sensor 3 #0 6609
Apr 04 16:16:37 Sensor 3 #1 9


Кстати, поскольку новый водосчетчик был установлен одновременно с цифровым счетчиком испульсов, можно делать выводы о расхождении показаний / дребезге контактов. Визуально этих расхождений почти нет (до нескольких сотен литров на текущее показание в 60000).

Этап 6: Alert


При помощи собранной информации удалось сделать полезные алерты:

  • температура на улице в смс каждое утро (+участие датчика в проекте narodmon)
  • сообщение о переходе на работу от батареи UPS
  • низкий уровень заряда батареи UPS
  • сообщение о низком/высоком напряжении в сети
  • сообщение о высокой температуре в тумбочке с оборудованием
  • сообщение о низкой температуре на чердаке (спасение помидоров)
  • сообщение о «чужом/новом» mac адресе в сети
  • сообщение о высоком расходе воды (в течение определённого времени)

Этап 7: будущее


На aliexpress был куплен «цифровой манометр» с rs232 выводом в форме USB. Но пока как с ним не бился, на пакеты он не отвечает. Будем думать дальше. Надеюсь дожать.

Планирую приобрести реле управления шаровым краном (сам кран уже есть) для удалённого управления краном и возможной реализации автоматического перекрытия воды при отсутствии дома хозяев.

Как-то встроить цифровой газовый счетчик gallus в схему для оповещения о заканчивающемся депозите.

Напоследок немного графиков:


image
image
image
image
Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
Всего голосов 14: ↑14 и ↓0+14
Комментарии12

Публикации

Истории

Ближайшие события

2 – 18 декабря
Yandex DataLens Festival 2024
МоскваОнлайн
11 – 13 декабря
Международная конференция по AI/ML «AI Journey»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань