Как программисты нашей студии разрабатывают полезные для жизни девайсы
Система Умный дом своими руками
Сибирикс
Система «Умный дом» своими руками
Как программисты нашей студии разрабатывают полезные для жизни девайсы
Пару недель назад в нашем чате появилось вот такое сообщение:
А еще чуть позже — вот такое:
Автор сообщений — Женя, программист, руководитель отдела обучения и электронщик. В 5 лет он заметил, что если вырвать из магнитофона моторчик, подключить к нему лампочку и начать его крутить, то лампочка будет гореть. В шесть — что если у моторчика поменять полярность подключения, он будет крутиться в другую сторону. В 18 поступил на Измерительные инновационные технологии в Политех. А в 24 пришел работать в «Сибирикс».

Это к тому, что цель всей затеи — не Умный дом и метеостанция как таковые. Цель — почесать руки (потому что чешутся) и не дать им окислиться (потому что из золотого сплава). Так что все, кто недоумевает, зачем тратить время, когда можно просто купить такие девайсы — идите лесом-DNCом. А тем, кому интересна тема DIY-электроники (или DIY-электронщиков, что тоже не зазорно), можно скроллить дальше.
Владимир
CEO & Founder
Мне кажется, что у любого человека должно быть какое-то хобби, помимо работы. Что-то делать своими руками. Это хорошая эмоциональная разгрузка (главное, чтобы не превращалось в рутину — на работе, пусть даже такой разнообразной и интересной, как программирование — рутина практически неизбежна, а в хобби — вполне себе да). Самое интересное — симбиоз, когда твоё хобби становится полезным и востребованным для дела.
Arduino
Первую версию Умного дома Женя сделал два с половиной года назад на arduino.

Arduino — небольшая плата с микроконтроллером, памятью и контактами, к которым можно подключать лампочки, моторы, датчики и вообще все, что работает от электричества. Пишешь программу на C++, загружаешь ее в память микроконтроллера arduino — и она управляет всеми подключенными устройствами. Так создаются классные гаджеты — система полива дачного участка, например, или робот, который приносит вам тапочки.
Первая тема, которую Женя сделал на arduino — это игрушка. Два сенсора, два участника. Каждый держит руку над своим сенсором. Когда игрушка пикнет, нужно резко убрать руку. Игрушка измеряет время реакции до 100-х секунд и говорит, кто тут чемпион. Рубились с женой. Удобно — кто проиграл, тот моет посуду).
Когда с arduino все стало понятно, Женя решил, конечно, делать Умный дом (электронщик же). Подключил к arduino охранную систему (датчик движения и датчик открытия двери) и термометр (датчик температуры и влажности DHT11) и остался недоволен. Связь между всеми устройствами была по радиоканалу на 433 МГц и оказалась нестабильной. Женя боролся с радиосигналами месяца 2, а потом решил не бороться, а переделать сервер умного дома на Raspberry Pi.
Raspberry Pi
Raspberry Pi — это уже полноценный компьютер. Да, одноплатный. Да, размером с кредитную карту. Да, сильно уступает по мощностям современным большим компьютерам. Но на нем может быть запущена операционная система Linux. Это значит, можно перейти с С++ на более высокие языки — java script, php. А это уже родные для Жени языки. Но главное — Raspberry Pi позволяет уйти от 433 радиосигнала и перейти ко всем известному и горячо любимому wi-fi, который работает стабильно.
Дизайн
Обычно ты или электронщик, или дизайнер. Женя, как мы помним, определился с этим еще в 5 лет, поэтому с дизайном были траблы. Но недолго. Потому что скоро он подошел к гендиректору «Сибирикс» и попросил помочь. Через месяц у него уже был отрисован интерфейс Умного дома нашим дизайнером.
Система
Систему Женя написал за 4 месяца. Работал примерно по 2,5 часа в день. Полтора часа до работы (специально вставал пораньше, потому что вечером — сын, домашние дела, игра в «Цивилизацию» с женой) и час во время обеда на работе.

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

Поэтому система организована таким образом: создаешь папку в Умном доме с модулем, описываешь его работу и она легко интегрируется в систему. Сейчас там 9 модулей. Есть модули физические (те, которые имеют физическое устройство), а есть логические (те, которые нужны для работы системы).
Функционал
Метеостанция

Для метеостанции Женя взял 4 главных параметра, которые позволяют понять, умрешь ты или нет (температура, влажность, атмосферное давление, концентрация углекислого газа в воздухе). Создание метеостанции проспонсировал гендиректор студии на том условии, что Женя сделает еще одну такую в студию (уже сделал). У нас она по wi-fi подключается не к Умному дому, а к заббиксу, системе мониторинга серверов, которая мониторит разные параметры, от температуры жестких дисков до нагрузки на сеть, и выводит это все в виде красивых графиков. Теперь там есть еще и график температуры в офисе.
Владимир
CEO & Founder
Датчик CO2 мы планировали подключить к нашему Zabbix, вывести на плазму и мониторить атмосферу. Первые же эксперименты показали, что приточку горе-винтеляционщики нам смонтировали так себе. Воспользовавшись электронным эндоскопом, мы выяснили, что приток шел через маленькую щелку в сайдинге здания (оно относительно новое). Ругаясь матерными словами, мы подогнали вышку и перемонтировали все по-человечески. Теперь утром датчик показывает CO2 в районе 500, к обеду поднимается до 800, что, в общем-то, нормально.
Видеонаблюдение

Когда на Женин дом установили камеры видеонаблюдения, которые можно отслеживать через приложение для телефона, оказалось, что они сделаны на очень популярном сервисе — макроскоп, и у них есть api-доступ. Женя подключил камеры видеонаблюдения в свой Умный дом. Забавно, что в Умном доме они работает лучше, чем в приложении. Приложение тупит дико. А в Умном доме камеры открываются влет.


Охрана

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


События

Здесь отображаются все события, которые зарегистрировала система.


Система

Здесь можно посмотреть параметры системы: график температур процессора, IP aдрес, нагрузку на процессор, батарейку.


Сценарии

Здесь содержатся реакции системы на какое-либо событие. Реакции задаются с компа.
Корпус
Корпус — это та вещь, которая разрабатывалась 5 часов, а печаталась 28 часов. Печаталась на стареньком домашнем 3d-принтере. Для справки — если печать длится порядка 4 часов, это уже считается долго. А тут — 28. На нижнюю часть корпуса ушло 16 часов. На верхнюю — 6. Это вечеринка на целый день — запускаешь 3d-принтер и он печатает, прерывать нельзя. Если свет, допустим, отключится на 98% печати, значит, ты 15 часов пластика просто выкидываешь. Такого, к счастью, не случилось. Случилось другое: из-за недочета в проектировании (слишком тонкие стенки в фигурном отверстии под динамик) крышку пришлось перепечатать. То есть, суммарно печать заняла примерно 28 часов. Ушла почти вся катушка пластика.
Голос
Speech-to-text

Система умеет говорить и понимает, что ты ей говоришь. Нажимаешь кнопочку, говоришь фразу, и она конвертирует ее в текст. Преобразование голоса в текст — дико сложная задача. Гугл умеет это делать, но за деньги. А первое правило DIY-проекта — никаких абонентских плат. Как оказалось, в последних версиях хрома есть встроенный инструмент «Распознавание голоса». Единственный нюанс в том, что соединение должно быть либо https, либо localhost. Умный дом — как раз такая система: клиент и сервер находятся на одной машине, так что удалось подключиться по localhost.


Реакция на команды

Второй сервис называется dialogflow. Фишка в том, что ты задаешь шаблон фразы, например: «Какая погода завтра?» и указываешь, что слово «завтра» — это переменная типа date. И теперь уже ты можешь задать любой вопрос: «Какая погода 20 сентября?», «Какая погода послезавтра?», «Какая погода через 3 дня?» и система понимает, что это тип данных — date, конвертирует его в программную дату и реагирует на нее. Вся эта тема — на нейросетях, и она обучаема. Если ты сказал «Какая будет погодка сегодня?» и система не поняла, она говорит «Я не поняла», и ты заходишь на сервер и прям руками обучаешь ее, что вот эта фраза означает «Какая погода?», и она запоминает. Обучение нейросети происходит по доступу: при регистрации на сервисе выдаются ключи доступа к api, доступ к личному кабинету агента, можно этого агента обучать и можно дать право кому-то на его использование.

В dialogflow есть еще одна классная тема — микродиалоги. Задаешь вопрос, например, «Как твои дела?» и задаешь паттерны ответов на него: «Пока не родила», «Все в шоколаде, даже дисплей», «У нас делишки, а дела у прокурора», «Ой, всё» — и система каждый раз будет рандомно выбирать из этих вариантов ответ на этот вопрос.

Получается, сервис передает в Умный дом сам триггер, который должен быть выполнен и возможную фразу для ответа, Дом ловит эту фразу и дальше задача наоборот: tts, то есть text to speech.


Text-to-speech

Это хорошо умеет делать Яндекс. Там можно выбрать не только голос (нескольких вариантов женских и мужских голосов), но и настроение (веселый, грустный, злой, нейтральный). У Яндекса очень простое и условно бесплатное api (с лимитом что-то около 10 тыс преобразований в день).

Таким образом получился цикл: произносишь фразу, система ее понимает, произносит что-то в ответ и совершает какое-то действие. Так, например, работает установка будильника голосом. Говоришь: «Поставь будильник на вторник на 7 часов». И во вторник в 7 тебя разбудит Умный дом.
СМС
Неплохо, если Умный дом может оповестить вас о пожаре или вскрытии двери, когда вас нет дома, правда? Есть такой модуль — называется sim800L. Это gps модем, который является полноценным телефоном. Он умеет звонить, отвечать на звонки, отправлять/получать смски, выходить в интернет с помощью gprs, определять местоположение с помощью сотовых вышек и т. д. Идея была такая: заказать этот модуль, вставить сим-карту в Умный дом, настроить какой-нибудь тариф, чтобы не было абонентской платы вообще, закинуть туда 500 руб и, пока они не истратятся (по 1 руб. за смс), а это, как минимум на год, забыть про все это.

Но оказалось, что в пике эта платка в момент поиска сетей потребляет 2 Ампера тока. У Умного дома есть модуль питания, туда заходит шнур, там аккумулятор и от аккумулятора выходит питание в систему. Батарейка может обеспечить максимум 3 Ампера выхода. То есть 3 Ампера постоянного потребления всей системой — край. И, если добавить этот gsm модуль к raspberry, она вырубится. Ей не хватит тока, и она просто потухнет. Единственное решение проблемы — это модуль отправки смсок делать отдельной коробочкой. Тогда туда можно обеспечить бесперебойное питание на 2 Ампера. И просто по Wi-Fi связать с Умным домом. То есть Умный дом говорит модулю: «Отправь вот такую смску», и модуль отправляет. Сейчас Жене нужно докупить пару железяк, и модуль будет готов.
Затраты
  • Raspberry Pi — 1500 руб.
  • Дисплей — 2500 руб.
  • Детали метеостанции — 1500 руб. (самая дорогая деталь — датчик CO2, 1100 руб.)
  • Всякая мелочь, вроде микрофончика, колонок компьютерных, маленьких, настольных, самые дешевых, чтобы усилок оттуда достать — пусть будет 500 руб.
  • Плата резервного питания — 1500 руб.
  • Печать корпуса весом грамм 300 (2 руб. за грамм с учетом расхода пластика и электроэнергии) — 600 руб. Если печатать на заказ, выйдет дороже, возможно, около 1500 руб.

Итого: 8100 руб.
Немного лирики напоследок
Электронщики — это люди, которые зачарованно смотрят на трехзначное число на дисплее и говорят:
 — Смотри, как круто!
Ты смотришь на то же самое число и неуверенно говоришь:
 — Круто, да…
— А что ты видишь? — испытывают они тебя.
Ты делаешь попытку:
 — 328?
И, конечно, не попадаешь. Потому что это не просто 328. Это офигенно работающая динамическая индикация.