Умный дом Control4

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

Только не пугайтесь

Только не пугайтесь

На фото изображены:

  • Контроллер HC-300C (старая маломощная модель)
  • Контроллер HC-800 (современная модель)
  • Беспроводные выключатели
  • Блоки управления освещением (реле, диммер, модуль ввода-вывода)
  • Самоделка из кнопочек, энкодера и ардуины

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

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

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

Центром системы является контроллер — железка с линуксом внутри, а все остальные устройства подключаются к нему несколькими способами: по локальной сети, через порты RS-232 или по радио (Zigbee). Кроме того, для управления бытовой техникой используются инфракрасные излучатели. Также у контроллера есть аудио и видео выход для подключения телевизора, на котором отображается интерфейс управления, так называемый Навигатор. А еще он умеет играть музыку с файлового хранилища или интернет-радио. Контроллеров в доме может быть несколько, но главный из них один.

Конфигурируется система при помощи программы Composer. Там можно описать все комнаты дома, установить в них устройства путем выбора их драйверов из списка, описать их подключения и взаимодействие. Делается это в визуальном редакторе путем назначения обработчиков событий (например, при нажатии на такой-то выключатель включить такую-то лампочку). Можно делать макросы, например, при нажатии кнопки «Хочу смотреть кино» опускаются шторы, приглушается свет и включается телевизор.

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

Как только мы более-менее разобрались с софтом и лицензионной политикой и накидали простенькую конфигурацию, первым вопросом было: а почему так медленно? Свет включался примерно через половину секунды после нажатия на выключатель (это как-то напрягает), а музыка вообще могла задуматься надолго. Пробовали разные прошивки контроллера, разницы не заметили. Залезли по ssh на контроллер и обнаружили, что бОльшую часть процессора съел навигатор, написанный на флеше. Он постоянно что-то делает, а если его прибить, через некоторое время перезапускается.

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

Есть еще такая штука, как 7-дюймовый тачскрин. Ставится он на стенку вместо выключателя, подключается по проводной сети или Wi-Fi и позволяет управлять всем в комнате. Или в любой другой комнате. Также в нем есть веб-камера и интерком, позволяющий звонить в другие комнаты или на SIP телефон, который надо хитрым образом зарегистрировать на контроллере. В нем тоже стоит флешовый навигатор и почему-то не тормозит. А собственно почему? Ой… оказывается, у него процессор раза в два мощнее, чем в контроллере. Судя по вложенным в коробку бумажкам, там используются внутренности от OLPC — ноутбука для детей развивающихся стран.

В общем, мы поругались с дилером, и вместо устаревшего HC-300 нам дали HC-800. И все сразу залетало, тормоза полностью пропали. Вместо дохлого арма в нем стоит нормальный x86 (не помню точно, целерон или атом). Вот что значит нормальное железо, на нем и работать намного приятнее.

Пару слов по поводу освещения. Все эти реле и диммеры висят на некой шине под названием M-Bus и через особую железку подключаются к ком-порту контроллера. На железках надо устанавливать адреса, а в конце шины должен стоять терминатор. Можно подумать, что это обычный Modbus поверх RS-485, а вот фиг! Повесили на эту шину ардуину с MAX485, пытались что-то поймать, но ничего не вышло. Разобрали релейный модуль и по микросхеме на входе определили, что на самом деле это CAN. Вот такой вот сюрприз, из-за отсутствия железа пришлось отложить реверс инжиниринг этой шины.

По поводу драйверов на это есть отдельная история. Релейный модуль мы подключили и запустили быстро, а вот с диммером и I/O модулем возник косяк. Никак не можем найти в списке нужный драйвер. Гугление по названию железки и поиск в официальных и неофициальных форумах ничего не дало. Совершенно случайно заглянули в презентацию какого-то русского дилера, там на картинке видно, что драйвер надо ставить не на железку целиком, а на каждый отдельный канал этой железки. Что вполне логично, потому что позволяет выбирать различные режимы каждого канала (например, ввод или вывод). Спасибо этим товарищам, а мораль такова, что документация все-таки нужна. Хотя бы как последний выход, когда научный тык уже не помогает.

Ну и под занавес, чтобы окончательно удовлетворить жажду познания, решили попробовать написать собственный драйвер устройства. Оказалось, что создать драйвер для управления телевизором или другой бытовой техникой несложно, для этого есть мастер. Нужно направить на контроллер пульт от телевизора и запомнить коды для стандартных операций (включение, переключение каналов, громкость и прочее). Так как лишнего телевизора под рукой не было, мы для теста подключили китайский вентилятор с дистанционным управлением и при помощи кнопок переключения каналов регулировали его мощность 🙂

А вот с драйверами для других устройств все сложнее. Существует специальный редактор, в котором можно задавать свойства подключаемой железки, ее интерфейсы, а самое главное — писать управляющий код на языке Lua, который пришлось спешно изучать, благо он не очень сложен. Решили написать драйвер для энкодера, который используется в современной аудиотехнике для регулировки громкости и прочего. Стандартный I/O модуль не подходил, потому что слишком медленно реагировал на переключение контактов при вращении ручки, поэтому использовали ардуину, подключенную к ком-порту и выплевывающую символы «<» и «>» при вращении ручки туда-сюда. Можно было бы подключить ее и по сети, разница в принципе небольшая.

Как оказалось, в этом деле есть своя специфика. Похоже, Lua код ВСЕХ драйверов выполняется в одном потоке, я случайно сделал в коде бесконечный цикл и практически полностью завесил контроллер, помогла только перезагрузка. Пока ты не вышел из функции, никакое другое событие не произойдет. Тем не менее, несмотря на сырой код, драйвер получился полноценный, и его можно использовать в разных целях: для регулировки яркости света, переключения музыкальных треков и прочего. Вот как-то так:

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

  1. Пока что нет комментариев.

*