DIY
January 2014 29

Мой удобный дом

From Sandbox
Относительно недавно здесь был текст про домашнюю автоматику, а в комментариях один товарищ высказал идею, о которой я тоже думаю очень-очень давно. Суть в том, что автоматика должна работать так, чтобы этого, по возможности, вообще не было заметно.

То есть, умный дом — это дом, который может все. А удобный дом — это дом, который все, что может, делает сам.

Давайте сначала я просто похвастаюсь тем, что умеет мой дом сейчас, а вы решите, имеет ли смысл читать про мой местами горький (а местами очень даже ничего) опыт дальше, ок?




Базовые функции:

1) Управление четырьмя радиорозетками (это фоновый свет и планшет с акустикой);

2) Управление 8 кнопками четырех радиовыключателей света;

3) Перезагрузка маршрутизатора при пропадании интернета;

4) Включение и выключение веб-камеры;

5) Контроль 8 беспроводных датчиков ОПС (три датчика задымления, три датчика протечки, пара датчиков открытия двери);

6) Получение данных с двух метеодатчиков — в комнате и за окном (радиоканал и два сервисных контроллера на Arduino Pro Mini) — и передача их в интернет;

7) Управление ТВ, медиа-плеером и кондиционером (радиоканал + сервисный контроллер на Arduino Pro Mini, он же — метеодатчик);

8) Управление кормушкой для котов;

9) Контроль проводного датчика движения (“охрана” и сервисные функции);

10) Управление музыкой в ванной (это как в модных торговых центрах — зашел в WC, а там такая расслабляющая музыка);

11) Уведомление о событиях по электронной почте.

Сервисные функции (сценарии):

1) Автоматическое управление светом в гардеробе (крошечный чуланчик, по сути, можете снова меня любить);

2) Автоматическое управление светом в прихожей;

3) Автоматическое управление ночным освещением на кухне;

4) Автоматическое управление светом и музыкой в ванной;

5) Выключение всего, что выключается дистанционно, включение камеры и переключение датчика движения в режим охраны при выходе из дома; и выключение камеры с включением фонового света, света в прихожей и переключением датчика движения в предыдущий, перед охраной, режим по возвращении.

Управлять почти всеми (кроме безусловно автоматизированных) функциями можно с любого компьютера, со смартфона и планшета с Android через апп или голосом через связку аппов. По локальной сети или через интернет. Методика простейшая — команда передается POST-запросом (суть набором адреса в браузере).

С начала начал и по сейчас ядром системы остается плата Arduino Uno. Ее помощники — три сервисных контроллера из Arduino Pro Mini плюс пара радиореле в местах, где особый интеллект не требуется (кормушка, например, и музыка в ванной). Сценарии — частично в коде Arduino, частично — в Android-свистке, подключенном к ТВ. Свисток просто выдает нужные запросы в соответствии с расписанием.

Ну а сделал я это все с помощью массы умных парней, которые написали отличные инструкции и библиотеки, и, как ни удивительно, своих кривых рук.

Начало начал

Когда именно все это началось — сказать сложно. То ли, когда купил пачку радиоуправляемых розеток, то ли когда жена сообщила, что в этой их Японии “каждая лампочка на пульте ДУ”.

Наверное, все-таки, когда Япония. Так сразу почему-то стало за державу обидно, прямо спать не мог. Поэтому немедленно приобрел у китайцев радиоуправляемые выключатели Livolo на замену дремучим клавишно-механическим.

. вот такие клевые выключатели
image

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

То есть, у меня не было выбора — проводка или радио. Только радио.

Но даже радиоуправляемые выключатели были скучны, поэтому дальше все как у всех. А все в какой-то момент приобретают Arduino. Это, как я тогда понимал, такая волшебная штука, которая притягивает новичков и лучи по… почитания матерых железячников. По счастью, первые волнения о слаботочке уже давным-давно прошли, поэтому я примерно представлял, что хочу.

А именно — управлять радиорозетками в количестве четырех штук и радиовыключателями в количестве тех же четырех штук (восемь кнопок). Причем управлять по-всякому — локально, через интернет, с компьютера и телефона, кнопками и голосом. Отсюда и базовый комплект:

— Arduino Uno
— Ethernet-шилд (легендарный W5100);
— два блока по 4 реле с ключами для прямого подключения к Arduino;
— несколько комплектов АМ-приемника и передатчика 433 МГц.

Если вы считаете, что это загадка в стиле “вычеркни лишнее”, то все совсем не так. Дело том, что я не был уверен в укрощении розеток и выключателей, поэтому решил, что в крайнем случае просто привяжу имеющиеся пульты к реле. Грубо, зато эффективно. И не совсем стыдно — многие так делали.

По счастью, крайние меры не понадобились, но реле все равно оказались полезны. А позже список оборудования дополнился еще приемниками/передатчиками, несколькими платами Arduino Pro Mini, датчиками движения и россыпью беспроводных датчиков от простых китайских сигнализаций.

В общем, к моменту, когда Arduino приехала их Китая, я уже был теоретически подкован и без малейшей задержки залил в нее классическую мигалку. Полагаю, она разочаровалась, но длилось это недолго. Потому что следующим номером значилось управление розетками.

Только радио, только хардкор

На руках была библиотека RC-Switch, розетки, пульт их и Arduino Uno с приемником-передатчиком. На мое счастье, все совпало, так что мигание лампочками (а в розетки были включены фоновые светильники) вышло на принципиально новый уровень. Особенно, если учесть, что в примерах RC-Switch оказался очень полезный код с веб-сервером, так что управление розетками через интернет запустилось сразу же.

. кстати, о розетках — все ведь такие видели, правда?
image

Правда, обозначился первый нюанс. Попытка нарисовать страничку управления прямо в коде Arduino обернулась провалом: начиная с какого-то момента плата зависала на старте. Опытным путем выяснил, что, скорее всего дело в огромном количестве текстовых строк, на которые у Arduino не хватало никаких ресурсов.

В общем, я поступил как настоящий герой — пошел в обход. Оставил только веб-сервер с обработчиком команд, а сами команды стал держать в голове. У такого решения, конечно, полно недостатков, но есть и плюсы: если злой хакер все-же достучится до Arduino, то ему еще придется попотеть, чтобы выяснить, какую такую команду я придумал на включение света. Короче, настоящим секретом остается секрет, о котором никто не знает.

А вот с выключателями света вышла какая-то ерунда. То есть, они, конечно, очень клевые, но RC-Switch опознавать их отказалась. Китаец-продавец в ответ на вопросы о протоколе, как попугай отвечал “433 Mhz switch”. А то я на коробке не прочитал, что это 433 МГц свитч. Вскрытие пульта тоже ничем хорошим не закончилось: внутри просто какой-то PIC, то есть налицо признаки кастомного решения с непонятными перспективами.

Сначала я загрустил, а потом нашел не менее классную, чем RC-Switch, штуку — Protocol Analyzer. И хотя эта утилита не помогла разгадать загадку выключателей, стало ясно, в каком направлении нужно двигаться дальше. Так что собранный по случаю комплект из приемника и делителя использовал вместе с Audacity. И тут я многое понял.

Или, если точнее, не столько понял, сколько рассмотрел пакеты команд и посчитал зубочисткой количество импульсов и их длительность. Да вот, прямо зубочисткой, прямо на экране ноутбука. Протокол я тогда не понимал, поэтому тупо понажимал кнопки и закодировал соответствующие последовательности.

Забегая вперед — это потом смутные догадки и неясный зуд в мозгах оформился в библиотеку управления выключателями Livolo, которую позже более грамотные товарищи дополнили декодером команд родного пульта и портом всего этого хозяйства на Raspberry. Но сначала команды были закодированы по-русски бессмысленно и жестоко, т.е. принятую последовательность импульсов каждой используемой кнопки я банально перенес в код в масштабе 1:1.

Меня еще беспокоили оказавшиеся без дела реле. Бесцельно потраченных денег было жаль, так что реле прикрутил на питание модема (Huawei от МГТС удивительно часто вис) и веб-камеры (ну а чего постоянно светиться перед злыми хакерами?). Да, да, понимаю, это всего лишь два из восьми, но хотя бы что-то.

Возможно, вам будет интересно узнать, почему я упорно бился с АМ-передатчиками без коррекции ошибок и нормальной двунаправленной связи вместо того, чтобы использовать модные nRF* или XBee. Наверное, потому, что сначала я про них ничего не знал, и купил то, что подешевле. А потом так исторически сложилось: ведь вся периферия, которой я планировал управлять, использовала именно этот вид модуляции. И мне показалось не очень рациональным навешивать на Uno второй приемо-передающий комплект.

Потом стало еще интереснее. В какой-то момент я встретился взглядом (ну или чем там кнопки звонков встречаются с домовладельцами) с кнопкой беспроводного звонка и ощутил непреодолимое желание узнать, что там внутри. Оказалось — резонатор на 433 МГц и кодирующий чип той же системы, что и в радиорозетках.

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

. типичные китайские датчики (протечка и дверь)
image

. и внутри
image

Вы поняли, да? Я получил доступ к большому количеству недорогих и универсальных датчиков и периферийных устройств, с которыми мой контроллер уже мог работать без допиливания напильником.

Так что в итоге получился черный ящик, который мог управлять светом во всем доме, включать и выключать веб-камеру, уведомлять по почте, если кто-то звонил в дверь, следить за датчиками дверей, протечки и задымления, а заодно — перезагружать модем, когда пропадал интернет. Клево? Безусловно. Удобно? Оказалось, что не так удобно, как это вообще представлялось.

. ящик, такой ящик
image

.
image

И дело даже не в том, что нужно было держать в голове команды и набирать бесконечные POST-запросы в браузере. Не нужно ничего этого, потому что для смартфона, которым я планировал управлять, есть невероятный апп Tasker, в котором крайне легко (хотя и немного муторно, но с гуями так всегда) сделать пульт ДУ. Готовый пульт, кстати, элементарно экспортируется в отдельное приложение и таким образом происходит развертывание (во какие я слова знаю) системы на все телефоны и планшеты.

. не дизайнер я интерфейсов, не дизайнер
image

.
image

Тем не менее, я удивился, насколько быстро надоедает то, что для включения-выключения вообще нужен какой-то пульт. И мне захотелось большего.

Удобный дом.

Дом должен быть удобным

Этот принцип я реализовывал, похоже, на бессознательном уровне. Представьте себе ситуацию: вы собрались выходить, уже обулись, замотались в сто одежек, и поняли, что забыли выключить свет на кухне, в комнате и, почему-то, в туалете.

Если у вас нет умного дома, придется раздеться и привести освещение порядок (а то и в туалет на дорогу заглянуть — плюс, в общем, кто спорит). Если у вас есть умный дом, то вы берете разумно оставленный в прихожей пульт или открываете дохрюкалась-замуровали панель управления. Опять же, если все грамотно, то для выключения всего света у вас будет одна кнопка. Но может быть и несколько. И если умный дом не очень грамотный, то и весь свет выключится сразу же.

И вы останетесь наедине с темнотой прихожей.

А я вот темноты опасаюсь, да и в кнопках-шнурках путаться не хочу. Поэтому на первом этапе естественного умнодомоводства снова обратился к теме беспроводных звонков. Так как я помнил, что кнопка звонка похожа на однокомандный пульт розеток, а команды этих пультов Arduino с RC-Switch принимает на раз-два, то кнопка звонка превратилась в кнопку “Я дома”.

Эта кнопка-триггер висит рядом с входной дверью. Нажимаем при выходе — и все, до чего может дотянуться домашний контроллер будет выключено через минуту. И тогда же будет включена веб-камера. Так что вполне себе есть время даже бросить взгляд в зеркало и спокойно выйти, незамеченным всевидящим оком.

А если нажать на эту же кнопку при входе, то камера сразу выключится. Зато включится фоновый свет в комнате и на кухне, а также — свет в прихожей. И ни одному коту на хвост по недосмотру не наступишь, так что все довольны.

Параллельно я изучал потенциал популярного датчика движения HC-SR501. Почему именно он, а не беспроводной датчик движения, раз уж “только радио, только хардкор”? Все очень просто: беспроводной датчик движения будет постоянно засорять эфир своими криками, и заодно будет отвлекать контроллер на их обработку. А у контроллера и других дел полно. Поэтому — проводной датчик, причем без прерываний, чтобы, опять же, не путать контроллер.

Лирическое отступление. В приступе просветления помимо локальной сети я озадачил строителей небольшой нишей под всякий телеком в прихожей. Конструктивно ниша располагается почти под потолком (около 2 м), рядом с входной дверью.

. здесь можно видеть все сразу — и датчик задымления (рядом с лампой вверху), и кнопку «Я дома» на дверце щитка, и крышку телеком-ниши, расположенную выше. А на дверце — датчик движения и веб-камера с широкоугольным объективом-насадкой от смартфона
image

. камера и датчик крупнее. Неопрятный провод справа внизу — кнопка сброса контроллера, которую я еще не придумал, куда деть
image

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

Логика простая. Если включено автоматическое управление светом, то в зависимости от времени суток (контролируется Android-брелком в телевизоре и Tasker) включается свет или в прихожей, или на кухне. А если была нажата кнопка “Я дома” при выходе, то вместо управления светом датчик переходит в режим охраны, и о каждом обнаруженном движении докладывает по почте.

И хотя датчик HC-SR501 прост, как две копейки, без курьезов не обошлось. Сначала свет работал, как мигалка. Я подумал, что дело в потоках воздуха, поскольку датчик смотрит на довольно оживленное с этой точки зрения место. Поэтому бесконечно долго регулировал чувствительность и направление его “взгляда”.

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

Правило трех

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

Минутное включение — это, с одной стороны, чтобы лампы не мигали каждую секунду, а с другой — чтобы не пришлось крутиться под датчиком, чтобы свет вообще включился. Дело в том, что я не модифицировал датчик движения, а “из коробки” он держит сигнал активности 3 секунды после обнаружения, и потом еще 2.5 секунды у него заслуженный отдых.

То есть, один цикл работы датчика — 5.5 секунд. Конечно, логично включать свет в прихожей при неоднократном движении, я понимаю. Но при таком раскладе перед датчиком придется крутиться не менее 6 секунд, а это, как показала практика — слишком. И именно поэтому свет включается при каждом проходе.

Что касается правила “трех минут”, то это тоже выстраданное. Кажется, что можно было бы ограничиться той же минутой, правда? Неправда. Выяснилось, что даже довольно непоседливые гости могут с нами прощаться в прихожей, сохраняя неподвижность более минуты. Но вот замереть на три минуты сразу редко кому удается — отсюда такой интервал.

Работа автосвета на кухне менее затейлива. Необходимость вообще управлять светом там возникла потому, что один особо хвостатый кот требует, чтобы ночью его провожали покушать. В одну морду он не может.

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

В общем если датчик движения фиксирует проход ночью, то контроллер включает фоновый свет на кухне на 10 минут. Этого достаточно, чтобы покормить кота и вернуться обратно. Конечно, можно было бы сделать выключение света при повторном проходе, но ведь за мной может пойти жена, или, наоборот, я за ней. Ну и зачем нам мигалка или лишний огород с контроллерами и датчиками на кухне?

Примерно аналогичным уровнем интеллекта обладает и свет в гардеробе-чуланчике. Там триггером выступает банальный беспроводной герконовый датчик двери. Одно открытие двери — свет включается, второе — выключается. И так по кругу. Разумеется, для срабатывания датчика дверь должна каждый раз закрываться полностью, но для гардероба это как раз обязательное условие, иначе проникнут коты, что нежелательно. Также предполагается, что внутри обычно только один человек, но это тоже обычное дело — там больше и не поместится.

Завершает парад автосвета ванная. К текущей схеме с датчиком движения я тоже пришел не сразу. Сначала проще всего оказалось использовать тот же датчик двери и тот же алгоритм: дверь открылась — елочка гори, дверь открылась еще раз — елочка не гори. И снова по кругу.

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

Еще, как выяснилось, очень сложно объяснить всем гостям, что светомузыка будет работать корректно только если каждый раз открывать и закрывать дверь полностью. И не трогать при этом выключатель света.

Полна горница людей

Собственно, ванная — это один из классических примеров сложнорешаемых задач СКУД. Почему-то с помощью разумного набора технических средств и при не менее разумных затратах проблематично точно контролировать наличие и количество людей в помещении. Я вот почитал, что народ городит — и ужаснулся. ИК-барьеры, УЗ-дальномеры, RFID-метки (с радостью сообщают “а что, их же даже имплантировать можно!”) и проч, и проч.

Пришлось творчески переосмыслить, ввести жесткие ограничения и проверить теорию в действии.

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

От подсчета количества людей я сразу отказался. А то я не видел, как офисный планктон по трое в калитку проходит по одному пропуску. Датчик присутствия стоит для самодельной системы вполне космических денег, поэтому про него тоже сразу забыл.

В общем, когда бритва Оккама завершила разделку моей мечты, от нее осталось жалкое зрелище — т.е. тот же самый датчик движения, правило “трех минут” и психология камикадзе.

ТЗ довольно простое:

1) Свет должен включаться при появлении в ванной людей;
2) Свет не должен выключаться, пока в ванной кто-то есть;
3) Музыка должна работать, если горит свет и разрешено по времени.

Решение, которое более-менее удовлетворяет всем условиям, включая душевую кабину — комбинация датчика движения, датчика света и датчика закрытия дверей душевой кабины. Последнее, кстати, важно, потому что мы помним, что датчик движения “не видит” сквозь стекло.

. датчик света из фонарика и герконы для контроля закрытия дверей душа. Синей изоленты не было, пришлось обойтись черной
image

.
image

Основной принцип работы состоит в том, что свет стремится выключиться, если в течение трех минут ему ничто не мешает. Это и есть психология камикадзе.

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

Особенность такой схемы и в том, что она абсолютно адекватна в любой ситуации. Даже если гости, нежелающие учиться, пользуются выключателем. Поэтому здесь, в отличие от простого триггера в гардеробе, не нужно прибегать к помощи двери или выключателя, чтобы привести свет в нужное положение, если кто-то не вовремя открыл эту самую дверь или нажал на кнопку того же выключателя.

Но есть нюансы. Оказалось, что на горшке можно просидеть довольно неподвижно и более трех минут, а тогда придется махать руками. Это, конечно, минус. Поэтому я думаю о том, что нужен еще датчик веса — сами понимаете, для чего. Хотя это лишние провода в ванной.

Никакой уличной магии

Если все сложить, то получается именно то, чего я хотел. Копаюсь в прихожей — свет включается сам. Иду на кухню ночью — включается фоновое освещение. Захожу в гардероб и тоже не пропадаю в темноте. И свет в ванной работает, пока совершаю вечерний или какой-нибудь другой туалет.

Дом просто следует естественному поведению обитателей.

. так сказать, музыкальный модуль для ванной. В белой коробочке радиореле, которое просто включает колонку-плеер
image

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

Или еще об одной кнопке — которая включает кормушку, когда кому-то из котов страсть как хочется покушать ночью, а нам так же страсть как не хочется вставать и куда-то идти.

Температуру за бортом можно всегда посмотреть или на страничке контроллера (вместе с последним значимым состоянием), или в интернете, или в аппе/виджете на смартфоне благодаря сервису «Народный мониторинг».

. погода в смартфоне
image

. а это наш погодный дилер в корпусе из-под звонка. Датчик DHT21 болтается за окном, подключенный белым кабелем со штекером
image

. внутри, как и у меня — беспорядок


Плюс некоторые вещи, которыми сделаны просто, чтобы было. То есть — управление ТВ, медиаплеером и кондиционером. Например, нажатие кнопки на пульте Android-брелка одновременно включает телевизор и запускает браузер файлов, чтобы можно было сразу смотреть фильмы. Так что не нужно искать пульт ТВ.

. «медиаконтроллер» почти спрятан в нише стеллажа, можно разглядеть провод ИК-диода для ТВ и плеера
image

И в целом нет никакой проблемы сделать автоматическое включение кондиционера в зависимости от температуры в помещении, но жена от этой идеи категорически отказалась. Как и от автоматического перекрытия воды по срабатыванию датчиков протечки.

Считает, что я обязательно где-нибудь накосячу. Небезосновательно, впрочем. Поэтому то, что иногда в работе контроллеров бывают сбои, это, скорее, особенность системы, а не ее недостаток. Я ведь, честное слово, не планировал делать что-то для критически важных областей народного хозяйства.

P.S. Да, я знаю, что упоминать ОПС и СКУД в данном контексте довольно смешно.
+159
171k 1247
Comments 97
Top of the day