Моя реализация «умного дома»

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

Попытался начертить схему моей комнаты со всеми устройствами объединёнными в сеть, картинка кликабельна:

Вся идея держится на трёх китах:

  • Децентрализация — вся система функционирует без какого-либо главного модуля;
  • Простота — минимум компонентов и лёгкость подключения;
  • Дешевизна — себестоимость устройства легко уложить в 100 рублей.

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

  • Пакеты от ДУ-приёмника получают выключатель и открыватель окна, что позволяет управлять светом и открывать окно с любого пульта или Nintendo Wii U;
  • Датчики движения информируют выключатель о том, что в комнате никого нет, и можно выключить свет;
  • Дисплей в коридоре выводит всегда актуальную температуру на улице, получаемую от датчиков температуры;
  • По команде от кодовой панели открывается дверной замок;
  • Устройство с пищалкой издаёт звуки, когда узнаёт об открытии замка, нажатии кнопки или звонке в домофон.

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

Единственным главным устройством, пожалуй, можно назвать только блок питания. В данный момент он у меня один почти на все самодельные устройства, и отлично с этим справляется. Многие скорее всего скажут: «Да у тебя же наверное всюду провода!», — отчасти это правда, но у меня нет никакой фобии по отношению к проводам. К тому же маленький шлейф с питанием и линией данных почти незаметен на фоне остальных кабелей.

Роутер с CLUNET-адаптером

Мой роутер помимо маршрутизации трафика выполняет ещё одну роль — маршрутизация трафика он является «окном» для устройств CLUNET сети в Интернет. Или скорее наоборот — позволяет из Интернета и локальной сети командовать всеми устройствами. Для этого в его USB порт включено специальное устройство.

Не буду сильно повторяться, про это я рассказывал в статье о CLUNET протоколе. Идея проста — роутер на основе Linux, и на нём работает демон, который принимает входящие подключения из локальной сети или Интернета и предоставляет доступ к сети устройств умного дома.

Помимо этого роутер используется как простенький веб-сервер, чтобы можно было управлять устройствами через веб-интерфейс на случай… ну так, на всякий случай:

Весьма удобно использовать и cron на роутере для самых разных задач — от открытия окна или обогрева комнаты по расписанию до банального будильника. Для последнего у меня сделан простенький веб-интерфейс и скрипты:

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

В ответ на пакеты приходящие от устройств тоже выполняются различные скрипты. Так ведутся логи по самым различным событиям типа звонков в домофон, рисуются графики температуры (https://clusterrr.com/sensors/t/) и других данных, отправляется push-уведомление мне на телефон, если вдруг в комнате открыта дверь, а меня дома нет, и прочее.

Софт для Windows

На компьютере работает приложение, которое подключается к демону на роутере и позволяет полноценно управлять всем и вся. В главном окне можно отследить весь трафик между устройствами и послать им любую команду:

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

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

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

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

Помимо этого этот софт выполняет и обратную роль — получает коды кнопок от ДУ-приёмника и имитирует WinLIRC-сервер — популярную программу для работы с ДУ-пультами. Работу с ней поддерживает, например, MPC-HC, есть плагин для foobar2000. Таким образом можно делать и наоборот — управлять приложениями на компьютере при помощи любого пульта.

Софт для телефона

Ну как же без управления всем этим с телефона из любой точки мира? Приложение для Android обладает примерно такой же функциональностью. В основном активити можно переключаться между различными режимами путём горизонтального свайпа.

Планшет

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

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

Пришлось накодить различные виджеты рабочего стола:

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

Знакомьтесь, вот моя электронная жена:

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

Аналогичная служба была в итоге установлена и на телефон. Работает она только при подключенной зарядке. Наверное было бы здорово использовать для этого Google Glass.

Подробнее об устройствах

Напоследок расскажу немного о том, какие устройства функционируют в моём умном доме. Внимание! Ниже адское количество колхоза и проводов! Красиво я делать не умею, руки у меня растут не из нужного места.

Выключатель света

Ничего особенного, просто включает и выключает лампы на люстре.

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

Контроллер геркона с пищалкой

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

Суть в том, что у меня в комнате жили мыши, а в остальной части квартиры — коты. Весь смысл устройства был в том, чтобы дико пищать, если забыли закрыть дверь, ведь коты ни в коем случае не должны проникнуть в комнату к мышам. Теперь же устройство посылает в сеть пакеты при открытии и закрытии двери. Роутер же пишет логи её открытия и посылает мне push-уведомление, если вдруг она открыта, когда меня нет дома. Моё местоположение определяется по мобильному телефону. Помимо всего этого пищалка теперь используется для самых разных звуковых уведомлений — домофон, открытие замка, нажатие кнопок на кодовой панели.

ДУ-приёмник и ДУ-передатчик

Про них я вроде ещё уже рассказал выше. Приёмник стоит у компьютера, передатчик спрятан на шкафу.

Датчики движения

В комнате висят два вот таких вот датчика движения.

Способствуют выключения света, когда движения долго нет, а ещё смене моего статуса на «away» в мессенджерах. Помимо них движение определяют ещё и четыре видеокамеры.

Дверной замок и кодовая панель

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

Теперь у меня всё как у серьёзных взрослых дядь!

Датчики температуры и освещения

Тут особо нечего рассказывать. Устройство висит под подоконником и опрашивает по 1-wire датчики температуры, помимо этого экспериментально сделан ещё датчик освещения. Сам не знаю зачем.

Открыватель окна

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

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

Дисплей в коридоре

Однажды при выходе из дома мне захотелось видеть текущую температуру на улице и время. Вот и всё.

А ещё там бегает Pac-Man, для которого было нарисовано несколько кастомных символов.

Домофон

Про мой домофон с автоответчиком я писал отдельную статью: https://cluster.wtf/smart-intercom/

Мышиные клетки

Мышиные клетки передают в виде ИК-сигналов информацию о том, сколько каждый мыш пробежал в колесе. Про это тоже была отдельная статья: https://cluster.wtf/mouse-wheel/
Увы, сейчас остался только один мышонок, и бегает он уже мало.

Видеокамеры

В комнате стоят четыре IP-камеры с механизмами поворота.

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

Заключение

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

Многие люди наверняка будут спрашивать меня: «Зачем тебе столько видеокамер?», «Зачем тебе кодовая панель?», «Зачем тебе датчики движения?», «Зачем тебе всё это?»
На все подобные вопросы я отвечу одной картинкой:

Комментарии

  1. респект…. много труда… но мало деталей
    а как обстоят дела с коллизиями ? с передачей данных несколькими устройствами в один момент времени ?
    схемы подключения на примере arduino uno ?
    хотел бы собрать на макетной плате сперва.. (

Добавить комментарий