Система «Умный дом» своими руками
Как программисты нашей студии разрабатывают полезные для жизни девайсы
Пару недель назад в нашем чате появилось вот такое сообщение:
А еще чуть позже — вот такое:
Автор сообщений — Женя, программист, руководитель отдела обучения и электронщик. В 5 лет он заметил, что если вырвать из магнитофона моторчик, подключить к нему лампочку и начать его крутить, то лампочка будет гореть. В шесть — что если у моторчика поменять полярность подключения, он будет крутиться в другую сторону. В 18 поступил на Измерительные инновационные технологии в Политех. А в 24 пришел работать в «Сибирикс».
Это к тому, что цель всей затеи — не Умный дом и метеостанция как таковые. Цель — почесать руки (потому что чешутся) и не дать им окислиться (потому что из золотого сплава). Так что все, кто недоумевает, зачем тратить время, когда можно просто купить такие девайсы — идите лесом-DNCом. А тем, кому интересна тема DIY-электроники (или DIY-электронщиков, что тоже не зазорно), можно скроллить дальше.
Это к тому, что цель всей затеи — не Умный дом и метеостанция как таковые. Цель — почесать руки (потому что чешутся) и не дать им окислиться (потому что из золотого сплава). Так что все, кто недоумевает, зачем тратить время, когда можно просто купить такие девайсы — идите лесом-DNCом. А тем, кому интересна тема DIY-электроники (или DIY-электронщиков, что тоже не зазорно), можно скроллить дальше.
Владимир
CEO & Founder
Мне кажется, что у любого человека должно быть какое-то хобби, помимо работы. Что-то делать своими руками. Это хорошая эмоциональная разгрузка (главное, чтобы не превращалось в рутину — на работе, пусть даже такой разнообразной и интересной, как программирование — рутина практически неизбежна, а в хобби — вполне себе да). Самое интересное — симбиоз, когда твоё хобби становится полезным и востребованным для дела.
Arduino
Первую версию Умного дома Женя сделал два с половиной года назад на arduino.
Arduino — небольшая плата с микроконтроллером, памятью и контактами, к которым можно подключать лампочки, моторы, датчики и вообще все, что работает от электричества. Пишешь программу на C++, загружаешь ее в память микроконтроллера 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 модулей. Есть модули физические (те, которые имеют физическое устройство), а есть логические (те, которые нужны для работы системы).
Идея была, чтобы система неограниченно масштабировалась. Это сейчас он парень простой и ему в умном доме нужен только базовый функционал (метеостанция, охранная система, видеонаблюдение). Но если завтра ему надоест нажимать на кнопочки и выключатели и он захочет, чтобы освещение само следовало за ним, плита включалась по хлопку, а автоматические жалюзи на окнах закрывались при солнце, у него должна быть возможность прикрутить весь этот функционал.
Поэтому система организована таким образом: создаешь папку в Умном доме с модулем, описываешь его работу и она легко интегрируется в систему. Сейчас там 9 модулей. Есть модули физические (те, которые имеют физическое устройство), а есть логические (те, которые нужны для работы системы).
Функционал
Метеостанция
Для метеостанции Женя взял 4 главных параметра, которые позволяют понять, умрешь ты или нет (температура, влажность, атмосферное давление, концентрация углекислого газа в воздухе). Создание метеостанции проспонсировал гендиректор студии на том условии, что Женя сделает еще одну такую в студию (уже сделал). У нас она по wi-fi подключается не к Умному дому, а к заббиксу, системе мониторинга серверов, которая мониторит разные параметры, от температуры жестких дисков до нагрузки на сеть, и выводит это все в виде красивых графиков. Теперь там есть еще и график температуры в офисе.
Для метеостанции Женя взял 4 главных параметра, которые позволяют понять, умрешь ты или нет (температура, влажность, атмосферное давление, концентрация углекислого газа в воздухе). Создание метеостанции проспонсировал гендиректор студии на том условии, что Женя сделает еще одну такую в студию (уже сделал). У нас она по wi-fi подключается не к Умному дому, а к заббиксу, системе мониторинга серверов, которая мониторит разные параметры, от температуры жестких дисков до нагрузки на сеть, и выводит это все в виде красивых графиков. Теперь там есть еще и график температуры в офисе.
Владимир
CEO & Founder
Датчик CO2 мы планировали подключить к нашему Zabbix, вывести на плазму и мониторить атмосферу. Первые же эксперименты показали, что приточку горе-винтеляционщики нам смонтировали так себе. Воспользовавшись электронным эндоскопом, мы выяснили, что приток шел через маленькую щелку в сайдинге здания (оно относительно новое). Ругаясь матерными словами, мы подогнали вышку и перемонтировали все по-человечески. Теперь утром датчик показывает CO2 в районе 500, к обеду поднимается до 800, что, в общем-то, нормально.
Видеонаблюдение
Когда на Женин дом установили камеры видеонаблюдения, которые можно отслеживать через приложение для телефона, оказалось, что они сделаны на очень популярном сервисе — макроскоп, и у них есть api-доступ. Женя подключил камеры видеонаблюдения в свой Умный дом. Забавно, что в Умном доме они работает лучше, чем в приложении. Приложение тупит дико. А в Умном доме камеры открываются влет.
Охрана
Тот, кто последним уходит из дома, нажимает на кнопочку, и система встает на охрану. Когда кто-то приходит, датчик движения это понимает система начинает пикать, типа деактивируйте охрану или я сейчас заору. Чтобы деактивировать охрану, нужно приложить свой электронный ключ, система распознает его и успокоится.
События
Здесь отображаются все события, которые зарегистрировала система.
Система
Здесь можно посмотреть параметры системы: график температур процессора, IP aдрес, нагрузку на процессор, батарейку.
Сценарии
Здесь содержатся реакции системы на какое-либо событие. Реакции задаются с компа.
Когда на Женин дом установили камеры видеонаблюдения, которые можно отслеживать через приложение для телефона, оказалось, что они сделаны на очень популярном сервисе — макроскоп, и у них есть 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 тебя разбудит Умный дом.
Система умеет говорить и понимает, что ты ей говоришь. Нажимаешь кнопочку, говоришь фразу, и она конвертирует ее в текст. Преобразование голоса в текст — дико сложная задача. Гугл умеет это делать, но за деньги. А первое правило 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 связать с Умным домом. То есть Умный дом говорит модулю: «Отправь вот такую смску», и модуль отправляет. Сейчас Жене нужно докупить пару железяк, и модуль будет готов.
Но оказалось, что в пике эта платка в момент поиска сетей потребляет 2 Ампера тока. У Умного дома есть модуль питания, туда заходит шнур, там аккумулятор и от аккумулятора выходит питание в систему. Батарейка может обеспечить максимум 3 Ампера выхода. То есть 3 Ампера постоянного потребления всей системой — край. И, если добавить этот gsm модуль к raspberry, она вырубится. Ей не хватит тока, и она просто потухнет. Единственное решение проблемы — это модуль отправки смсок делать отдельной коробочкой. Тогда туда можно обеспечить бесперебойное питание на 2 Ампера. И просто по Wi-Fi связать с Умным домом. То есть Умный дом говорит модулю: «Отправь вот такую смску», и модуль отправляет. Сейчас Жене нужно докупить пару железяк, и модуль будет готов.
Затраты
- Raspberry Pi — 1500 руб.
- Дисплей — 2500 руб.
- Детали метеостанции — 1500 руб. (самая дорогая деталь — датчик CO2, 1100 руб.)
- Всякая мелочь, вроде микрофончика, колонок компьютерных, маленьких, настольных, самые дешевых, чтобы усилок оттуда достать — пусть будет 500 руб.
- Плата резервного питания — 1500 руб.
- Печать корпуса весом грамм 300 (2 руб. за грамм с учетом расхода пластика и электроэнергии) — 600 руб. Если печатать на заказ, выйдет дороже, возможно, около 1500 руб.
Итого: 8100 руб.
Немного лирики напоследок
Электронщики — это люди, которые зачарованно смотрят на трехзначное число на дисплее и говорят:
— Смотри, как круто!
Ты смотришь на то же самое число и неуверенно говоришь:
— Круто, да…
— А что ты видишь? — испытывают они тебя.
Ты делаешь попытку:
— 328?
И, конечно, не попадаешь. Потому что это не просто 328. Это офигенно работающая динамическая индикация.
— Смотри, как круто!
Ты смотришь на то же самое число и неуверенно говоришь:
— Круто, да…
— А что ты видишь? — испытывают они тебя.
Ты делаешь попытку:
— 328?
И, конечно, не попадаешь. Потому что это не просто 328. Это офигенно работающая динамическая индикация.