«Умный дом» собственными руками v2

в 6:18, , рубрики: java, будущее здесь, Железо, кто читает тэги?, умный дом, метки: , ,

Добрый день, уважаемый %habrausername%!

Судя по предыдущим постам, многие из вас интересуются hand-made автоматизацей своего жилища. Я долго собирался с мыслями и идеями по итогам построения первого «умного дома» и теперь хочу поделиться своими наработками с вами.

К чему приходим и почему

Итак, нужно отпределиться, от чего уходим и к чему приходим. Кому интересен «умный дом» v1 — можно ознакомиться в моем профиле, в постах. В целом и главном, уходим от протокола Х10 и приходим к Z-Wave, от Perl к Java, от веб-камер к более-менее нормальным IP-камерам.
Распишу по-порядку.

Z-Wave vs. X10

Что означают все эти страшные слова? Для самых маленьких и не знакомых с тематикой, немного покапитаню выдержками из википедии.
Поехали — X10:

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

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

  • Начнем с крайне низкой скорости передачи. Закодированные цифровые данные передаются c помощью радиочастотного импульса вспышки частотой 120 кГц, длительностью 1мс и синхронизированы с моментом перехода переменного тока через нулевое значение. За один переход через нуль передаётся один бит информации. Приёмник так же формирует окно ожидания вблизи перехода напряжения через 0. Размер окна — 200 мкс. Наличие импульса вспышки в окне — логическая «1», отсутствие — логический «0». В целом, это означает, что на подачу команды модулю уходит порядка 1-2 секунд.
  • Помехоустойчивость. Она крайне мала. К примеру, если сосед Василий включает, как обычно, свой электросварочный аппарат — ждите проблем
  • Отсутствие обратной связи. Ее нет. Совсем нет. Узнать состояние невозможно, хотя ходят слухи о мифических железках, но у меня есть серьёзные подозрения, что говорят о еще более редком звере — протоколе A10
  • Невозможность прохождения сигнала между фазами. Если у вас лампочки висят на одной фазе, а контроллер подключен в другую — готовьте бабло.

Из плюсов, пожалуй, относительная дешевизна и некая свобода от проводов.

И тут на сцену выходит он, Z-Wave! Менее освещенный протокол, нежели X10 или 1-wire, но стремительно набирающий популярность и скидывающий цену на устройства изо дня в день.

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

Первое и пожалуй самое главное отличие тут — это то, что Z-Wave — протокол беспроводной. То есть, теперь мы абсолютно не привязаны к чему-либо (кроме розеток для некоторых устройств, пожалуй). Почти все девайсы питаются от батареек и по заявлениям, живут на них годы. Некоторые микромодули питаются прямо от сети 220В.
Так же, несомненным плюсом является то, что это mesh-сеть, в которой каждый узел или устройство может принимать и передавать управляющие сигналы другим устройствам сети, используя промежуточные соседние узлы. Mesh — это самоорганизующаяся сеть с маршрутизацией, зависимой от внешних факторов — например, при возникновении преграды между двумя ближайшими узлами сети, сигнал пойдет через другие узлы сети, находящиеся в радиусе действия.
Цены на железо нынче уже не особо кусачие.

Теперь о минусах (куда же без них). Самый главный и злейший минус для меня, как для разработчика своей системы, является закрытый протокол. Желающим получить спецификацию придется отвалить 10 килобаксов. Но, как оказалось, все не так плохо. Народные умельцы отреверсили протокол по самое немогу и написали опенсорсную реализацию под названием open-zwave. На С++. Есть биндинги к питону.

В целом все неплохо. Едем дальше.

Perl vs. Java

Тут все просто — я начал учить Java, а так как писать скучные Hello World и классы про менеджеров и их salary, от которых я засыпаю на 10 строке кода, решил попробовать сделать что-то действительно серьёзное. Гугл, книги и собственные мозги в помощь. Конечно, изобретаю множество велосипедов, но куда ж без них, поэтому гуру прошу не бить ногами — я все знаю, я исправлюсь… Честно! :) О софте — в конце поста.

Вебкамеры vs. IP-камеры

Тут тоже все в целом должно быть понятно. USB-камеры оказались ненадежны, перегревались, пропадало изображение. Длинна кабелей, гирлянды USB-хабов — все, слава богу, в прошлом. Теперь исключительно бепроводные IP-камеры. Кстати, у китайцев есть PTZ-камеры за чуть более 60$. Пока такой не имею, но планирую заказать.

Технологии

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

Хочу отметить, что моей целью было максимально уйти от прокладки проводов, т.к. квартира съемная и переезд может случиться в любой момент. То есть, система должна быть максимально мобильная.
Опишу имеющееся железо и как оно все подключено:

  • один десктоп
  • две IP беспроводные камеры
  • два активных микрофона ШОРОХ-7
  • три акустических системы (2+1 самые простые)
  • две звуковые карты (встроенная + PCI) (главный фактор — наличие линейного входа)

Заранее прошу прощения за качество фотографий — все сделано на мобильник.

Колонки подключены к звуковым картам, две системы к одной через разветвитель, оставшаяся — напрямую. Объединены средствами PulseAudio в один sink — расставляем, получаем звук во всей квартире.

image

С микрофонами ШОРОХ-7 все так просто не пройдет.

image

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

image

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

image

Каждый микрофон подсоединяется к линейному(!) входу своей карты.

С камерами все просто — они живут сами по себе, серверная часть забирает поток видео и аудио с каждой.

Устройства Z-Wave

Для теста я приобрел контроллер, микромодуль-диммер и датчик протечки.
Например, контроллер выглядит, как обычная флешка:

image

А датчик протечки самый массивный:

image

Микромодуль Fibaro:

image

Подключается нехитро и по инструкции:

image

В сети есть видео про установку:

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

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

IRIS-X

Система управления публикуется под лицензией GPLv3. Cофт умеет на данный момент:

  • Просмотр в риалтайме видео с камер
  • Распознавание и синтез речи при помощи Гугла
  • Обнаружение сети Z-Wave, всех устройств и управление ими
  • Скопипащенный с examples twitter bootstrap'a интерфейс :)
  • Тонны фич в начальной стадии реализации

Пользуясь случаем, активно призываю присоединиться к разработке :)
Ссылка на GitHub'e: github.com/Neuronix2/IRIS-X

Пару скриншотов интерфейса (картинки кликабельны):

«Умный дом» собственными руками v2

«Умный дом» собственными руками v2

«Умный дом» собственными руками v2

«Умный дом» собственными руками v2

С удовольствием отвечу на все ваши вопросы.
Благодарю за внимание :)

P.S. Кто-нибудь ищет Java Junior'ов? :)

Автор: Neuronix

Поделиться

* - обязательные к заполнению поля