Очередной умный дом, в трех частях.
Хочу рассказать и показать результаты проекта, который развивается примерно 10 лет. Развивается как хобби, поэтому бывает, что за неделю делается новое устройство, а потом за полгода – не делается ничего. Я очень не люблю словосочетание «Умный дом», поэтому дальше оно не встретится. Также тут не будет схем, примеров кода, опутанных проводами макетных плат и прочих скучных вещей. Будет много фото и рассуждений на общие темы.
[ http://habrahabr.ru/post/253505/ ]
С чего все начиналось, или Контроллер освещения
Лет 10 назад как-то совпало, что я устроился на работу разработчиком встраиваемой электроники и купил себе квартиру. Денег было мало, квартира была однокомнатной, жил я один. Хотелось чего-то такого, что, как я потом узнал, называлось «Квартира-студия». Началось увлекательное занятие, которое нельзя закончить – ремонт. А с чего начинает делать ремонт человек, который паяльник взял в руки раньше ручки? Правильно, с проводки. Захотелось, что бы свет включался с пульта от телевизора. Сказано – сделано. Потом захотелось, что бы в темное время при открытии входной двери включался свет в прихожей. Геркон в дверь, работает. Потом захотелось, чтобы дверной звонок можно было отключать. Ок, сделал. Потом захотелось, чтобы идя ночью в туалет, включалась маленькая лампочка. Ок, подключил датчик движения. Ну а раз у меня есть такой вот умный выключатель – не подключить ли его к компьютеру? Подключил. В общем, после примерно пяти итераций железа и сотен, если не тысяч итераций софта – получился такой вот контроллер освещения.
Что он умеет?
- 4 канала освещения, с плавной регулировкой;
- Реле дверного звонка, или замка;
- Датчик открытия двери, движения, кнопка звонка;
- Приемник ПДУ RC-5.
Контроллер освещения и отопления
Следующим этапом стал ремонт в санузле. А что самое главное в туалете и ванной? Освежитель, книга или планшет. Теплый пол. И еще есть вентилятор, и пара каналов света. И хочется, что бы ночью открыть дверь и слабый свет сам включался. А потом включался вентилятор на пару минут. Так, стоп. 4 выхода. Ага, есть же контроллер освещения! Немного его переделал, и в итоге получился контроллер освещения и теплого пола. Забегая вперед – потом он был разделен на два немного разных логически устройства – для отопления и для ванных-балконов-кухонь. В первом подключаются три датчика температуры, один в контуре управления, два просто для измерений; например, наружной температуры и, например, температуры теплоносителя. Второй же остался с одним датчиком температуры, зато обзавелся парой датчиков протечек. Вот он на фото:
Что он умеет?
- 2 канала освещения, с плавной регулировкой;
- Выход для вентилятора;
- Выход для подключения нагревателя;
- Реле управления мощностью обогревателей(для отопления) или исполнительного механизма защиты от протечек (для санузлов);
- Датчик открытия двери.
Потом занялся балконом. Там тоже пара каналов света, теплый пол. Второй контроллер обзавелся братом.
Контроллер электроснабжения
Все работало, все было хорошо, пока я не поехал в отпуск… Вернулся – холодильник не работает. Вскрытие показало выгоревший варистор и предохранитель. Понятно, скачек напряжения, хорошо, что ими двумя все и ограничилось. Поменял, заработало. Но беда не приходит одна, через пару недель то же самое случилось и с кондиционером.
Надо что-то делать. Что? Правильно, контроллер для защиты электросети.
Что он умеет?
- Два канала измерения напряжения, например до и после нормализатора или бесперебойника;
- Измерение тока;
- Реле отключения потребителей на время превышения напряжения;
- Выход на независимый расцепитель для полного отключения всего;
- Настраиваемые пороги защиты, подсчет потребляемой мощности – мгновенной, за час, за сутки, полной.
Контроллер водоснабжения и полива
В это же время сменил работу, стал более лучше одеваться зарабатывать, купил машину и накопил немножко денег. А что делает городской житель с машиной и некоторой суммой свободных денег? Покупает дачу. Я не стал исключением. Электричество там было постоянное, а вот с водой было хуже. Была труба, из которой через день еле-еле что-то там текло. Задача понятна, нужна бочка, насосная станция и бойлер. Ну и конечно же еще один контроллер. На этот раз водоснабжения и полива.
Но тут начинается интересное – датчики давления и уровня воды, датчик влажности почвы. Промышленные стоят совсем не гуманно, поэтому решил сделать сам. Уровень воды в баке – сначала попробовал емкостный, не получился. И разные датчики, и разные схемы – никак. Ладно, попробую другой принцип, ультразвуковой, благо их в Китае много недорогих. Заработало. Заодно туда же добавил датчик влажности и температуры.
Давление. Где еще измеряют давление жидкостей? Ага, автомобиль! У меня выбор пал на ГАЗовский датчик давления масла. По параметрам 0-6 атм, резьба такая же как и на водопроводных стрелочных манометрах. Были сомнения насчет коррозионной стойкости – но года три уже все работает. Можно заранее менять, благо стоят они копейки. Вот он, слева от манометра. Расходомер сделал на основе обычного счетчика воды, приклеив на крыльчатку магнит, а на корпус – датчик Холла.
Датчик влажности почвы. Тоже сделал емкостной, но не срослось, в итоге просто меряю сопротивление двумя щупами. Ну и температура почвы, пусть будет.
Получилось как то так (да, внешне они все одинаковые):
Что он умеет?
- Выходы для насосной станции, водонагревателя и клапана набора воды в бак;
- Выносной датчик уровня воды в баке, влажности и температуры;
- Выносной датчик влажности и температуры почвы;
- Два датчика давления, расходомер, контроль автоматики насосной станции;
- 4 канала управления клапанами полива;
Контроллер RGB лент
Потом дома захотелось сделать декоративную подсветку. Купил RGB лент, а как управлять? Покупать готовое? Не мой метод, делаем контроллер интерьерной подсветки. Вот такой:
Что он умеет?
- 4 ШИМ выхода для светодиодных лент, RGB + белый;
- и больше ничего.
Шлюз RS485 — Ethernet
Все хорошо, но RS485… Куда его? Было несколько вариантов, опишу в следующей части, в итоге все свелось к еще одному контроллеру. К нему же подключил и привод въездных ворот.
Что он умеет?
- 4 дискретных и 3 аналоговых входа, 2 релейных выхода.
- Часы реального времени.
- И самое главное – шлюз RS485 — Ethernet.
Подводя итоги
Хотелось бы рассказать о некоторых нюансах с моей точки зрения.
Почему RS-485, а не беспроводные интерфейсы? Почему не Wi-Fi?
Я не помню уже где, но услышал такую фразу – там, где можно проложить медь, там нужно проложить медь. Как можно заметить, для внедрения этой системы надо практически полностью переделывать проводку. Так почему бы не проложить дополнительно сигнальные провода? Что лучше — не вовремя садящиеся батарейки, забитый эфир или старая добрая медь?
Почему не ARM с линуксом, а древний 8-ми битный контроллер? Как же интернет вещей?
Все просто – принцип разумной достаточности. Зачем использовать мегабайты памяти и линукс для того что бы зажечь лампочку? Да и в любом случае силовая часть, входные цепи и прочее будут такие же точно.
Почему не сенсорные экраны, кастомные выключатели, мобильные телефоны, планшеты, голосовое управление?
Я считаю, что интерфейсы должны быть единообразны. Проснувшись ночью попить воды, я не хочу разбираться, какую из 5 кнопок мне нажать, что бы включить свет. Я хочу нажать на стандартный выключатель, попить воды и лечь спать дальше. Я не хочу каждому из приходящих, рассказывать, что надо сделать, что бы у меня дома включить свет. Одно дело с планшета настроить расписание полива или освещения, задать границы допустимого напряжения для защиты, и совсем другое – включить свет.
А как же управление через интернет?
Конечно, управление через интернет есть. Я могу откуда угодно делать что угодно в рамках реализованного в железе. Но есть одно но — все контроллеры должны быть автономны и выполнять свои базовые функции безо всякой сети, интернета и прочих серверов. Если я забыл заплатить за интернет – я не хочу остаться без света. Если у меня на даче плохая связь – я хочу просто нажав кнопку на контроллере – включить насос и бак. А расписание полива – можно настроить и потом.
------
Итак, в начале было слово был четырехканальный выключатель света, с подключенными к нему разными датчиками. Физический интерфейс — RS485. Поверх RS485 реализован упрощенный вариант MODBUS ASCII. Реализованы только функции 03 и 06, в отличие от стандарта адресация байтовых регистров начинается с нуля. Плюс к тому добавлена поддержка широковещательных посылок, ответ на которые не выдается. Ими устанавливается время, либо отключаются все выходы. Через переходник RS485 — RS232 контроллер был подключен к COM порту.
В те далекие времена смартфонов, планшетов и единообразия в браузерах не было, поэтому самый первый вариант управляющей программы был для обычного ПК. Вот такой:
Вариант 1: PC + Windows
Написано все было на Delphi, много кнопок, много циферок, все работает, но есть одно но – зачем мне, находясь дома, включать дома же свет через компьютер? Непонятно. Поэтому началась разработка сетевой версии. И получился:
Вариант 2: PC + Windows + интернет
Был написан небольшой сервис, который работал шлюзом между интернетом и внутренней приборной сетью. Программа была доработана для работы по сети. Все хорошо, все работает, но есть одно но – зачем постоянно с собой носить ноутбук или флешку с программой, чтобы включить дома свет? Непонятно. Поэтому дальнейшая разработка продолжилась. И получился:
Вариант 3: PC + Windows + интернет + мобильный телефон
В те давние времена смартфоны были большой редкостью, браузеры в мобильниках не умели практически ничего, максимум на что можно было расcчитывать – J2ME. В качестве эксперимента в серверную часть был добавлен клиент ICQ, в мобильнике тоже был установлен один из многочисленных асечных клиентов. Все работало, но каждый раз говорить «ОК, Гугл» писать на телефонной клавиатуре «Дом, включи мне свет в прихожей, и покажи состояние остальных ламп и датчиков» было не очень комфортно. Поэтому началась разработка J2ME приложения, на основных идеях которого сейчас основан один из интерфейсов. Суть состояла в том, что есть несколько закладок или экранов, каждый из которых соответствовал одному контроллеру. Все работало, все было хорошо, но появилось очередное но – прогресс не стоял на месте, браузеры из программ для показа страничек с картинками научились много чему дополнительно. А содержать параллельно три ветки – Win32, J2ME и Web – стало лень. Да и смартфоны с планшетами бодро зашагали по планете. Поэтому разработка продолжилась и вылилась в окончательный на сегодня:
Вариант 4: LAMP + интернет + Web
В клиентской части было решено не распылятся на разные технологии, а оставить только одну – HTML+JS. Благо, мобильные и десктопные браузеры научились делать многое и главное – одинаково.
Была полностью пересмотрена идеология всей системы, если раньше серверная часть была просто шлюзом между железом и приложением, то сейчас появилось несколько дополнительных задач:
- Клиенты (либо скрипт в роутере, либо шлюз) периодически отправляют на сервер свой адрес, по которому в дальнейшем сервер с ними работает. Своего рода DynDNS
- Раз в час сервер синхронизирует время на всех контроллерах, так как часов реального времени в них нет, а есть только программные
- Раз в минуту сервер опрашивает все контроллеры и заносит ответы в базу
Также в настройках можно задать параметры, при изменении которых сервер отправлял письмо, и заносил событие в лог. Имея базу с накопленными значениями, можно строить разные графики – температура например, или напряжение, или потребляемая мощность.
Все это работало у меня дома сначала в роутере Asus WL-500gP V2, перешитом прошивкой «от Олега и энтузиастов» на котором были установлены Lighttpd + PHP5 + MySQL. К роутеру был подключен переходник USB-RS232 и настроен ser2net. В базе хранятся настройки и логи, админка и сервисы написаны на PHP. Потом был разработан шлюз Ethernet-RS485, и все это переехало на один из облачных хостингов.
Бонус
Так как в прошлой части было много картинок – то решил рассказать об одном из проектов в этой части. Заодно рассмотрим проблемы масштабируемости и разницу между проводным и беспроводным интерфейсами, по поводу которых в прошлой части было много споров. Проект важный, но, к сожалению, с туманными перспективами. Итак, начнем.
Предположим, есть участок. На нем есть несколько зон освещения, например вход, дорожка, стоянка для машины. Отдельно – калитка с электрозамком, и въездные ворота с электроприводом. Есть гараж, чтобы не размениваться по мелочам – два этажа, по две зоны освещения на каждом, и с раздельным отоплением. Есть видеонаблюдение и интернет.
На первом этаже установлены:
Сверху – контроллер освещения и отопления 1 этажа, УЗО и автомат с независимым расцепителем. Второй ряд – контроллер защиты электросети с реле на 100А, снизу – 12В блок питания и контроллер освещения на участке. В самом низу – двухканальный приемник, который через контроллер освещения позволяет находясь на улице включить свет на входе и открыть замок калитки.
На втором этаже:
Сверху – электроника от оконного кондиционера, она сама по себе. Второй ряд – шлюз Ethernet-RS485, снизу – контроллер освещения и отопления второго этажа и силовые реле для конвекторов.
Датчики температуры внутри помещения и температуры теплоносителя (воздуха из конвектора в данном случае):
На чердаке – кондиционер, видеорекордеры, роутеры, антенны, моде и прочее:
Все это благополучно проработало зиму, пришла весна, а за ней и лето. А летом что главное? Мангал, беседка и полив. Была выкопана яма, в ней разведена водопроводная арматура:
Слева – фильтр, датчик давления на входе, датчик расхода воды. В центре – датчик протечки, справа – два клапана полива, редуктор понижения давления и датчик давления после редуктора. Установлены два контроллера – освещения беседки и водоснабжения. В самой беседке две зоны – декоративная подсветка и основной свет:
В ящике сверху – контроллер освещения беседки, в центре – блок питания 24В для клапанов и контроллер водоснабжения.
Получилось как то так – второй этаж гаража и беседка:
Между ямой и остальными контроллерами – примерно 15 метров, стена из 30см газобетона и 10см перекрытия ямы из армированной стяжки. Беспроводные датчики и выключатели? Нет, спасибо. Протянут силовой кабель 3х4 и сигнальный 4х0,22, подключены в силовой щиток – и все, свет есть, полив есть, все управляется и показывает состояния датчиков. Как по мне – никаких проблем ни с масштабируемостью, ни с отсутствием беспроводных технологий.