Русский
Русский
English
Статистика
Реклама

Diy умный дом

Как настроить управление умным домом через IFTTT и сэкономить

27.07.2020 12:16:39 | Автор: admin

Мне всегда казалось, что главное в умном доме даже не возможности какого-то конкретного устройства, а способность этих устройств взаимодействовать между собой, реализуя сложные сценарии. Для этого уже не обязательно замыкаться на компонентах одного производителя, поскольку есть агрегаторы, вроде Google Home или навыков управления устройствами у Алисы. Однако некоторые сценарии им до сих пор не под силу. Сегодня поговорим о том, как это обойти с помощью IFTTT универсального посредника между веб-сервисами. И спойлер: в конце упомяну, как обойти ограничения самого IFTTT.

В двух словах о IFTTT


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

IFTTT часто вспоминают в контексте автоматических репостов из одной социальной сети в другую. Его также легко применить для сбора полезной информации и задач. К примеру, работая в разных командах, в каждой из которых используется свой инструмент распределения задач, я агрегирую все, что назначается на меня в разных системах Trello, Asana и по электронной почте в личный Remember the milk (RTM).



Некоторые интеграции со сторонними сервисами есть и у самого RTM, но доступны они только в платной версии. Так что IFTTT позволил обойти необходимость в платной подписке. А заодно помог настроить Telegram-бот для быстрого добавления задач из мессенджера.







IFTTT живет не только в виртуальном мире. Если компоненты умного дома или любые другие IoT-устройства имеют доступ в облако (и производитель интегрировал свой веб-сервис с IFTTT), вы сможете управлять ими через апплеты IFTTT.

Конечно, здесь есть масса оговорок. Сценарии могут быть только предельно простые если то, никакой сложной логики. Сервис понимает кириллицу в названиях апплетов и текстовых полях при их настройке, но не все функции работают в России и с русским языком. К примеру, в США у пользователей есть возможность сделать сценарий, который по некому событию звонит на мобильный телефон. Эта функция за пределами Штатов недоступна. Также с IFTTT не интегрированы многие популярные российские ресурсы (начиная от ВКонтакте и заканчивая Алисой).

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

Управляем умными устройствами на примере Sonoff


IFTTT интегрирован с самыми разными системами умного дома. В России продаются компоненты нескольких из них, но Sonoff (система eWeLink Smart Home) по субъективному впечатлению одни из самых популярных, в основном благодаря цене (на распродажах на AliExpress Wi-Fi реле можно купить за 300-400 рублей).

Что за устройства Sonoff?




Sonoff бренд недорогих реле, розеток, датчиков и выключателей, управляемых по Wi-Fi. Компоненты системы можно как купить в РФ, так и заказать из Китая. Они хорошо известны на Хабре благодаря тому, что умельцы прошивают использованный в них Wi-Fi модуль ESP8266, чтобы устройства не пытались обращаться в облако на Amazon, а работали внутри локальной сети (заменяя облачный сервис собственным хабом умного дома). Но для работы с IFTTT такая перепрошивка как раз не нужна.

Из коробки управление устройствами осуществляется со смартфона из приложения eWeLink (в теории есть и веб-интерфейс, но он в начальной стадии развития).

В последние несколько лет одноименный сервис доработали. Появилась интеграция с Google Home и Алисой, так что устройствами даже можно управлять голосом на русском языке без каких-либо сложных настроек. Однако некоторые сценарии реализовать только в приложении нельзя. Допустим, установив на теплый пол реле с датчиком температуры и влажности, в приложении нельзя будет создать сложный сценарий, позволяющий включать или выключать подогрев по данным обоих датчиков.

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

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

Подключаем eWeLink к IFTTT


При настройке умного дома потребность в IFTTT появляется в тот момент, когда хочется реализовать сценарий, не поддерживаемый производителем (например, по группировке устройств), или объединить несколько функций от разных производителей в единое целое. К сожалению, в последней версии приложения eWeLink производитель решил заработать на тех, кому недостаточно простых сценариев, и открывает интеграцию с IFTTT только на платном тарифе 9.99 долларов США с оплатой через PayPal в год. Это не такая большая сумма для эксперимента длиною в год.

Почему именно эксперимента? Потому что реальное удобство тех или иных сценариев показывает только длительное ежедневное использование. В нашей квартире умные устройства живут и сменяют друг друга уже не один год. Когда появляется новый компонент, в голове уже вьется десяток сценариев, которые он позволит воплотить. И первое время задействуются все. Но спустя месяц 9 из 10 перестают использоваться. А тот один, что выживает, претерпевает некоторые изменения за это время проходит тонкая настройка идеи под себя: сколько времени должен продолжать гореть свет в прихожей после того, как нажали кнопку? Какой уровень яркости должен быть у ночного освещения в коридоре? Какие пороги для показаний датчиков надо установить для отправки уведомлений, чтобы они не напрягали и т.п.

IFTTT позволяет реализовать массу сценариев и легко их перенастраивать.
Для иллюстрации подхода предположим, что мы хотим автоматически отключать термопот, когда я ухожу из дома дальше, чем на соседнюю улицу. Это реализуется элементарно:



Создаем новый апплет (Create). В качестве триггера (+This) выбираем сервис Location, который берет местоположение с устройства Android (или iPhone), где установлен клиент IFTTT (залогиненный под тем же аккаунтом, если вы настраиваете сценарий в веб-интерфейсе).





Для сервиса доступно 3 триггера. Нам подойдет You exit area.



Задаем адрес центральной точки зоны и радиус вокруг этого адреса (радиус регулируется увеличением / уменьшением масштаба карты). IFTTT приятно удивил тем, что понимает ввод адреса кириллицей. К сожалению, радиус не может быть слишком большим к примеру, нельзя обозначить зоной весь город-миллионник.



Создаем таким образом триггер (кнопка Create trigger внизу экрана).



Устанавливаем действие (+That) отключение реле eWeLink. Для этого подключаем сервис eWeLink Smart Home. После нажатия на Connect надо будет залогиниться в аккаунте eWeLink в отдельном окне.









Если авторизация пройдет успешно, появится целый список доступных действий для eWeLink Smart Home.



Нажимаем Turn 1-Channel Switch on or off и на следующей странице из выпадающего списка выбираем нужное устройство, а также требуемое состояние (on или off). В моем случае для подключения термопота используется именно реле, а не розетка, но если ошибиться и выбрать Turn 1-Channel Plug on or off, ничего не сломается.



Создаем действие кнопкой Create action и завершаем настройку апплета.



Более сложная задача реализация бота в Telegram для общения с домом. Для этого надо подключить сервис Telegram. Создавая соответствующие апплеты, можно добавить боту команды управления устройствами (включением / выключением света и отдельных устройств), а заодно разные полезные уведомления, в частности:
  • Напоминания о сдаче показаний счетчиков или об оплате коммунальных платежей. Автоматическая подача показаний в старом фонде недостижимая мечта. Добавить такое напоминание можно через Google Календарь, задав сценарий IFTTT, который на старте очередного мероприятия из этого календаря будет отсылать в чат сообщение с заданным текстом.
  • Уведомления о том, что в комнатах становится слишком жарко / холодно / сыро или сухо. У меня это было реализовано для ванной на время настройки пороговых значений для автоматики теплого пола. Идея была в том, чтобы использовать для управления теплым полом параметры воздуха в помещении (а датчик в самом полу оставить для аварийного отключения при перегреве). Параметры комфортного климата необходимо было выяснять экспериментально. Чтобы в ходе этих экспериментов не создавать некомфортных условий, на короткий период были настроены уведомления на минимальную температуру и максимальную влажность.
  • Уведомления о том, что что-то открылось или закрылось (по данным с датчиков).

Давайте создадим апплет, который по команде из чата в Telegram включает ночную подсветку в коридоре (как и термопот, подключенную через реле Sonoff). Начнем с подключения сервиса Telegram. Найдем его через Explore (вкладка Services):





Нажимаем Connect, чтобы подключить его к своему аккаунту. После приглашения переходим в Telegram и добавляем бота в контакты.





Нажимаем Start, чтобы авторизоваться.



После перехода на IFTTT для авторизации, нам доступны все возможности общения сервиса с мессенджером.



Теперь возвращаемся в IFTTT и начинаем создавать апплет.



В качестве триггера выбираем Telegram.



Нам подойдет триггер New message with key phrase to @IFTTT.



Пусть ключевой фразой будет ночной свет, а ответом на мое сообщение одно слово Включаю (помним, что сервис чувствителен к строчным / заглавным буквам).



Переходим к настройке действия.



Как и в прошлом примере выбираем включение реле сервиса eWeLink Smart Home. На этот раз только в списке устройств нужно выбрать то, что соответствует подсветке.



С уведомлениями все работает также, только триггером будет выступать какой-то другой сервис (например, датчик из eWeLink Smart Home), а действие будет выполнять Telegram слать сообщение определенного содержания.

Как упоминалось выше, в сегменте умного дома IFTTT не ограничивается поддержкой только устройств Sonoff это лишь пример под рукой. Есть масса производителей, которые уже интегрировались с сервисом, и еще больше советов пользователей о том, как обойти отсутствие интеграции, например с Xiaomi Mi Home (спойлер через уведомления на мобильном устройстве под Android).

Когда и IFTTT не хватает


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

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

Покажу, что может Apilio, на примере усложнения сценария с отключением термопота.
Изначально реле термопота выключается на ночь (с 2 ночи до 8 утра) и когда я покидаю заданную в IFTTT зону. Но что если кроме меня дома живет еще кто-то? Согласитесь, будет неудобно, если подогрев воды будет отключаться каждый раз, когда я ухожу на работу. Логичнее просто напоминать о том, что термопот включен, если я не дома в определенное время (в момент включения термопота после ночной спячки) после обдумывания сценария мне показалось, что это самый лучший индикатор того, что я куда-то уехал надолго.

Для этого:
  • Регистрируемся на сервисе Apilio;
  • Создаем 2 булевые переменные, которые по умолчанию имеют значение false (пусть они называются location и teapot);





  • Создаем два условия: I_exit_area (которое становится true, если я вышла за обозначенную в IFTTT зону) и I_forgot_teapot (true, если чайник включился);





  • Настраиваем взаимную интеграцию Apilio и IFTTT. В IFTTT надо включить сервис Webhook и указать ключ этого сервиса в Apilio, чтобы последний мог слать уведомления в IFTTT (ключ это последняя часть URL, на скриншоте он замылен). Для интеграции в другую сторону в IFTTT надо подключить сервис Apilio;



  • Задаем сценарии IFTTT для изменения переменных location и teapot (триггером будет включение термопота в eWeLink и выход из заданной зоны в сервисе Location, а действия изменение соответствующих переменных на true в сервисе Apilio, для этого в сервисе предусмотрено Update a variable in Apilio to true);









  • Создаем логическую схему: при одновременном выполнении этих двух условий в сервис IFTTT будет отправлено уведомление;



  • Настраиваем сценарий IFTTT на прием этого уведомления (триггером будет уведомление из Apilio, а действие отправка сообщения в Telegram с предупреждением).

Результат: если что-то заставит термопот включиться в тот момент, когда я далеко от дома, я получу в Telegram вопрос: А не забыл ли ты выключить чайник?
В бесплатной версии сервис Apilio позволяет задать одну логическую схему и для эксперимента этого достаточно. Стоимость годовой подписки начинается от 7.2$. Как и у самого IFTTT, у сервиса уже есть масса аналогов думаю, можно подобрать что-то бесплатное под свои задачи. Важно только понимать, что открывая доступ новому сервису к своему умному дому вы в каком-то смысле делитесь с ним личными данными так что безопасность здесь не последний вопрос.

Развитие IFTTT, Apilio и подобных ему инструментов показывает, что у пользователей умного дома все-таки есть потребность в каком-то усложнении сценариев. Сколько бы производители не боролись за максимальное упрощение, иногда без дополнительной логики никак.

Подробнее..

Автоматизируем работу системы отопления в квартире без переделки интерьера умный дом z-wave

10.09.2020 18:21:56 | Автор: admin
Давно у меня стояла задача по автоматизации работы системы отопления в доме. Дано классические термостаты теплого пола ballu с крутилкой покупались в leroymerlin в далеком 2017 году для управления электрическим полом.


Сейчас мне необходимо автоматически включать теплые полы в ванной и на балконе по геолокации, семидневному расписанию или событию. Для своей цели я долго выбирал смарт термостаты и остановился на Heatit Z-TRM3 термостат с Z-Wave чипом 5го поколения на частоте 869mhz.

В комплекте все что нужно инструкция на русском языке, ntc type температурный датчик теплого пола и сам термостат со съемной монтажной рамкой для удобства.

Можно теперь объединить термостат в общую рамку с выключателями и розетками серией system55, легко устанавливается и смотрится эстетично.


Сам термостат есть в черном и белом цвете, он позволяет устанавливать температуру теплого пола не только с телефона или контроллера Z-Wave, но и с дисплея на термостате.


Heatit совместим с apple homekit и яндекс алисой, как и практически любые Z-Wave устройства, сейчас постараюсь рассказать как настраивал управление.

Нужен нам Z-Wave контроллер, я выбирал хаб исходя из некоторых соображений: цена, функционал, стабильность, интеграция с голосовыми помощниками и остановился на контроллере RaZberry. Это хаб с ПО Z-Way с неплохим базовым набором функций, так выглядит web интерфейс /smarthome


Поскольку Z-Wave это радио протокол управления, в хабе можно выбрать нужную частоту контроллера через expert ui интерфейс:


Ну тогда по порядку, снимаем старый термостат, устанавливаем наш Heatit по схеме. Для добавления устройства переводим контроллер в режим добавления, для простоты выберем добавление без шифрования, хотя устройство с чипом Z-Wave 500 серии имеет возможность надежно шифроваться алгоритмом AES-128 для параноиков :) термостат можно и так подключить.


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

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

А вот так выглядит настроенный термостат в стандартном бесплатном мобильном приложении, оно называется Z-Wave.Me, можно скачать с AppStore / PlayMarket.


Ну мне этот интерфейс не слишком нравится, хотя вроде все есть темная тема, смена иконок, комнаты, правила, пуш уведомления.

Почему-то нравится HomeKit. И настройка очень простая заходим в интерфейсе в раздел приложения онлайн приложения ищем HomeKit, жмем добавить, называем наш мост умного дома и готово! вводим полученный HomeKit pin в приложении Дом на iPhone/iPad.


В Homekit я настроил новые виджеты, добавил в комнату Ванная и в избранное, получилось вот так:


Управлять в приложении Дом можно как локально так и удаленно если у тебя есть iPad/homepod/apple tv.

Настроил автоматизацию по геолокации я прямо в приложении дом за пару минут:


(Валентина это остановка по пути к дому, после этой локации обычно через 15-20 минут я дома)

И все отлично работает, тут-же можно настроить семидневное расписание, ну или быстрее даже будет в интерфейсе z-way smarthome, заходим в локальные приложения, выбираем расписание, задаем нужный график работы на 7 дней и жмем сохранить:


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

По голосовому управлению Siri не совсем адаптирована под русский язык, тем более у меня есть Яндекс станция, решил и это настроить чтоб можно было сказать Алисе теплый пол 30 градусов не вставая с дивана. Это всегда удобно. Для этого нам надо в приложении Яндекс на iOS/Android зайти в раздел Устройства, добавить устройство другое устройство и ищем в списке производителей Z-Wave.Me. В моем случае надо нажать обновить список устройств, так как хаб уже добавлен в Алису. В конце выйдет окно с настройкой устройства.


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


Кстати, сам термостат Heatit поддерживает достаточно много классов команд, можно посмотреть в интерфейсе контроллера:


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

А еще в этом термостате есть интересная функция SmartStart, я могу отсканировать QR-коды всех устройств мобильным приложением, подсоединить контроллер к интернету и включить питание каждого гаджета, дальше произойдет магия QR-код содержит информацию о так называемом уникальном ключе устройства (Device Specific Key, DSK), который производители присваивают каждому компоненту умного дома контроллерам, датчикам и актуаторам. После сканирования QR-кода информация об устройствах сохраняется не в мобильном приложении, а в специальном облачном сервисе. Из него контроллер по DSK-ключам получает сведения о конфигурации всех гаджетов, которые нужно зарегистрировать в сети.

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

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

Из песочницы Еще одна история про OpenTherm

18.11.2020 20:10:57 | Автор: admin

Предыстория


5-6 лет назад нужно было делать отопление в новом доме. В то время в нашу деревню обещали провести газ. Исходя из этого, было принято решение поставить газовый котел и переделать его на пропан в баллонах (2 пары по 2 баллона, авто-переключение между парами). Типа как временное решение, пока не проведут газ. Решение вполне работоспособно, если не жить на даче зимой. За эти годы магистральный газ так и не провели, а заправлять баллоны надоело. Вот я и решил добавить электрический котел вдобавок к газовому.


Вариации на тему как подружить газ и электричество?


Вариант 1 (самый простой): поставить электрические обогреватели в каждую комнату.


Вариант 2: (самый правильный): поставить электрический котел параллельно газовому (со своим насосом, своей группой безопасности и обратными клапанами на оба контура)


Вариант 3: Поставить самый простой электрокотел(электрочайник :) ) и использовать всю начинку (насос, группу безопасности и т.п.) от газового котла.


Я решил попробовать пойти по третьему варианту. Возникли следующие вопросы:


  1. Как заставить работать насос газового котла, но не включать горелку?
    • Можно разобрать котел и запитать насос отдельно. Решение выглядит стремным, а модифицировать котел кажется опасным
    • Как-то объяснить котлу, что насос работать должен, а включать газ не нужно
  2. Ввод электричества 1 фаза, 10 кВт. Т.е. ставить мощный электрокотел кажется потенциально проблемным. Значит, нужно подружить электричество и газ, чтобы они могли при необходимости работать вместе

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


Как подключиться к котлу с минимальными усилиями?


Яндекс по OpenTherm

image


Яндекс/Гугл ведут на


  • пару статей на Хабре (нНапример, http://personeltest.ru/aways/habr.com/ru/post/251539/ от 2015 г.)
  • готовое решение на базе Zont (не подходит, т.к. заточено под управление одним котлом и не особо кастомизируется)
  • несколько длинных обсуждений на разных форумах, без понятных готовых решений
  • большую статью с хитрым opentherm адаптером, который я бы не решился собирать
  • и на документацию на Tasmota (это альтернативная прошивка для огромного кол-ва устройств на базе ESP6266)

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


В документации есть ссылки на два адаптера OpenTherm:


  • OpenTherm Gateway Arduino shield. Это по сути man-in-the-middle адаптер, для подключения между котлом и opentherm термостатом. Т.к. у меня нет opentherm термостата, то решение кажется избыточным.
  • OpenTherm Adapter Простой адаптер, к которому даже есть даже shield для WeMos D1 Mini, что делает сборку предельно простой и удобной.

Заказал адаптер вместе с шилдом (22$ + 5$ доставка). Далее примерно 2 недели ожиданий и девайс у меня. 15 минут работы паяльником, сборка тестового скетча для работы с OpenTherm и, о чудо! котел реально отвечает!


Далее сборка Tasmota с поддержкой OpenTherm и её заливка. Opentherm завелся в Tasmota без малейших проблем.


Что умеет делать Tasmota с котлом Baxi:


  • Сообщать: статус, температуру теплоносителя, ошибки, наличие пламени и тп
  • Включать/выключать: отопление, использование внешнего термостата, горячую воду
  • Устанавливать температуру: теплоносителя и горячей воды
  • Делать все перечисленное выше через mqtt

Выглядит примерно так:


image


Таким образом, за 30$ и полчаса усилий мы получаем возможность управления котлом через WiFi. В принципе, шилд для wemos содержит разводку для подключения DS1822, что позволяет построить на нем полностью законченный термостат с WiFi.


Интеграция с электрокотлом


Котел Baxi позволяет установить температуру теплоносителя от 30 до 85 градусов. Работает котел предельно просто: он нагревает теплоноситель до заданной температуры и отключает горелку, пока теплоноситель не остынет. Если отопление включено, но температура теплоносителя выше чем целевая работает насос и электроника котла (в Tasmota, например, доступна температура теплоносителя, будет ошибка при снижении давления теплоносителя и тп), но газ при этом не включается. Именно эту возможность я решил использовать для электрокотла.


В этот момент мне попался с хорошей скидкой электрокотел Zota Balance на 3кВт за что-то около 2500 руб., и я решил взять его на пробу.


Котел был подключен между обраткой и входом газового котла. Примерно вот так:


image


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


Электрокотел был временно подключен через Sonoff TH16 также с прошивкой Tasmota.


Осталось решить, как управлять этой связкой из двух Tasmota. После апгрейда домашнего контроллера с Wirenboard5 на imageWirenboard6 у меня образовался бесхозный Wirenboard5. Он был отправлен на дачу, и на нем была сделана логика управления котлами (т.к. это скорее моя специфичная история, то приводить примеры скриптов не вижу смысла).


Все получилось, но осталось некоторое беспокойство на тему автономности этой конструкции. У моего котла (или вообще системы отопления на баллонах) есть баг. Он приводит к тому, что котел может раз в 1-2 месяца вываливаться в ошибку нет газа. Пока все происходит при тебе, худшее, что может быть остывший к утру дом. А когда никого нет, ситуация может быть гораздо более неприятной. Протокол OpenTherm позволяет делать сброс ошибки, но почему-то ни в библиотеке OpenTherm, ни в самой Tasmota такая фича не реализована. Несложными доработками прошивки Tasmota удалось добавить команду сброса, что лично мне сильно добавило спокойствия.


Что в итоге получилось


Отапливаемая часть дома примерно 50 кв.м. Электрокотла на 3 кВт вполне хватает на поддержание заданной температуры. Когда я уезжаю ставлю на +5, за день до приезда ставлю на +20. Мощности электрокотла недостаточно для того, чтобы прогреть помещение за разумное время. На помощь ему приходит 14 кВт газовый котел. Ему нужно примерно 3-5 часов для нагрева помещения с 5 до 20 градусов. Вероятно, он бы справился и быстрее, но мощности рассеивания радиаторов не хватает.


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


Из дальнейших планов:


  1. Заменить Sonoff на какое-нибудь более промышленное решение с тремя реле + сделать возможность включения котла на 1, 2 и 3 кВт. Все-таки надежность Sonoff для управления отоплением на 3 кВт вызывает некоторые опасения
  2. Прикрутить PID регулирование для максимально точного поддержания температуры
  3. Сделать какой-нибудь экранчик для отображения температуры и состояния

Мысли


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

Визуализация голосового помощника Алисы с эффектом голограммы

28.05.2021 12:18:53 | Автор: admin

Привет, Хабр! Говорят, лень - это двигатель прогресса. Но никто не говорил, что этот самый двигатель, будет быстрым. Моя история о том, как я делал визуализацию голосового помощника Алисы с эффектом голограммы из подручных материалов.

Вступление

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

Например, у меня есть робот голосовой помощник "Vector" от Anki (сейчас им владеет Digital Dream Labs). Он отлично передает эмоции (радость, огорчение, злость и т.д.), когда с ним взаимодействуешь. Но его проблема в том, что программная часть голосового помощника Vector очень слабая по сравнению с такими гигантами как Alexa, Google Assistant, Siri, Алиса.

Робот Vector от AnkiРобот Vector от Anki

Недавно Яндекс выпустил умную колонку Яндекс.Станция Макс с LED-дисплеем. Через дисплей, голосовой помощник "Алиса" дополняет свои ответы анимацией и выражает "эмоции". И это уже хороший шаг в сторону визуализации голосового помощника, но все равно этого недостаточно для меня.

Яндекс.Станция Макс с LED-дисплеемЯндекс.Станция Макс с LED-дисплеем

Бороздя просторы интернета во время всеобщего карантина, я увидел пост о том, как Джарем Арчер сделал рабочий концепт голограммы голосового помощника Cortana от Microsoft. Я вдохновился этой идеей и захотел это повторить, только вместо Кортаны, взять Алису от Яндекса.

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

  • Старый монитор c TFT матрицей (BenQ GW2750HM)

  • Старый ноутбук (core 2 duo p7350, GeForce 9300M, 4Gb RAM)

  • 3D-принтер (Tevo Tarantula 2017)

  • RGB-светодиодная лента

  • Arduino Nano

Дисклеймер по качеству фото

Не сразу додумался фотографировать весь процесс создания, поэтому фото были сделаны на свой старенький Xiaomi

Корпус

Джарем использовал портативный USB монитор. Вес и толщина монитора очень маленькая, что позволяет сделать для него тонкий корпус. В моей же ситуации нужен был надежный и прочный корпус, чтобы мог выдержать старый, тяжелый монитор. Поэтому я смоделировал корпус под свой монитор.

Модель делал в Autodesk Fusion 360. Сама модель состоит из нескольких частей и ее, в теории, можно сделать под любой размер монитора.

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

Модель корпуса в Autodesk Fusion 360Модель корпуса в Autodesk Fusion 360

3D печать

Для печати корпуса выбрал ABS пластик т.к. он прочный и легко поддается обработке. Но есть и минусы: дико воняет и сильно чувствителен к сквозняку. На печать всех компонентов ушло дней 5 почти непрерывного печатания. Поэтому запах в доме еще долго не мог уйти.

Напечатанный корпусНапечатанный корпус

Печатал первый раз и из-за того, что 3D-принтер был без внешнего корпуса, а дома был сквозняк, некоторые детали были с сильным браком и пришлось мастерить внешний корпус принтера из того, что было дома (спортивный коврик и полотенце). После этого детали стали немного лучше, но все равно были косяки, которые были терпимыми.

После печати деталей обработал их наждачной бумагой, нанес грунтовку и покрасил в черный матовый цвет.

Эффект голограммы

Эффект голограммы создается просто: сверху лежит монитор, изображение попадает на стекло, которое стоит под определенным углом.

У стекла есть эффект раздвоения изображения (особенно, если стекло толстое), когда изображение отображается на передней и задней стороне стекла. Чтобы это убрать, с обратной стороны наклеил антибликовую пленку.

Первая проверка работы "голограммы"Первая проверка работы "голограммы"

Из-за того, что использовал TFT-матрицу, угол обзора получился плохим. Если на фронтальной части хорошо видно модель, то на боковых стеклах видно только под определенным углом.

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

Полностью собранный корпусПолностью собранный корпус

Программная часть

Программная часть состоит из четырех частей: официальный, но уже устаревший desktop-клиент Алисы, Python-сервис для обработки сообщений, приложение на Unity для отображения модели и Arduino Nano для управления светодиодной лентой.

Общий принцип работы визуализации следующий: клиент Алисы передает текст команды от пользователя и ответ на Python-сервис. После обработки данных, сервис отправляет команду на вызов той или иной анимации в приложении на Unity и команды для управления светодиодной лентой на Arduino.

Чтобы перехватить запросы в клиенте Алисы, использовал реверс-инжиниринг. Для этого взял старую версию клиента Алисы. Данная версия работает на JS, но исходники были обработаны обфускатором, поэтому пришлось долго искать места, где можно перехватить команды. После этого вставил вызовы API моего сервиса для передачи данных.

После того, как сервис получил данные из клиента, он их обрабатывает. В зависимости от того, какие данные пришли, отправляет по MQTT сообщения: состояние (например, Алиса начала слушать пользователя), текст ответа на запрос и изображение ответа. Если с состоянием и текстом сообщения все легко и в сервис приходит простой JSON, то с изображением не так просто. Внутри клиента Алисы изображения строятся на основе сложного JSON, который приходит от сервиса Яндекса. Его нужно было бы обрабатывать и создавать изображение самому, а т.к. я ленивый человек, решил отправлять то, что клиент Алисы сам формирует (HTML блок + CSS). Далее сервис вставляет HTML блок в запущенный заранее веб-драйвер Chrome, делает скриншот и отправляет в MQTT JSON сообщение с изображением в Base64, высотой и шириной изображения для сохранения пропорций в Unity. Для включения/выключения светодиодной ленты, сервис отправляет по Serial порту сообщение/команду в Arduino, выбирая какую область (светодиод над моделью и/или заднюю и нижнюю светодиодную ленту) включить с каким RGB цветом и яркостью.

Есть еще одна функция. Клиент Алисы периодически опрашивает сервис на наличие новых команд для неё. Если есть новая команда, то клиент выполняет её таким образом, как это сделал бы пользователь через голос или текст. Например, если дать команду: "Алиса, повтори за мной: Перед уходом, не забудь покормить кота", то эту фразу она и повторит. Таким образом можно оповещать состояние датчиков.

Приложение на Unity принимает сообщения с MQTT для запуска анимации и отображения текста/изображения на специальных панелях. Модель отображают три камеры (каждое изображение попадает на свое стекло), на которых применен эффект "зеркала", чтобы после проецирования на стекло пользователь видел корректное изображение модели и текста.

Визуализация в UnityВизуализация в Unity

Т.к. голос Алисы бы сделан на основе голоса Татьяны Шитовой, которая озвучивает большинство героинь Скарлетт Йоханссон, то для модели Алисы я взял образ персонажа из комиксов Marvel "Черная вдова", что дало визуализации свой "шарм". Саму 3D-модель я взял из открытого доступа, а скелет и его анимацию сделал в Blender, визуальный эффект голограммы был применен на модели в самой Unity.

3D-модель Алисы3D-модель Алисы

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

Заключение

Огромное спасибо моей жене! Без её помощи, поддержки и терпения я бы забросил эту идею с самого начала.

Еще есть что доделать. Например, можно было добавить камеру, чтобы отслеживать лицо пользователя и "поворачивать" модель к пользователю для усиления эффекта голограммы, прикрутив к сервису OpenCV и отправку в MQTT значений поворота модели, но USB камеры нет.

Из минусов, найденных при эксплуатации:

  1. У меня настроена система "Умный дом", через Home Assistant. На нем работают как свои устройства (на esp8266/Arduino), так и производителей (в основном от Xiaomi). Когда я начал делать этот проект, то была возможность управлять всеми устройствами через Алису. И можно было бы не использовать Яндекс.Станцию мини, но в какой-то момент Алиса в клиенте перестала находить эти устройства, хотя управлять ими через станцию все еще можно. Скорее всего поменяли API, поэтому перестало работать, но есть идеи как это можно исправить

  2. Плохая идея использовать монитор с TFT матрицей

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

Отсчет до нового годаОтсчет до нового года

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

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru