Как стать автором
Обновить

Окей телевизор — учим Google Now управлять зомбоящиком

Время на прочтение 4 мин
Количество просмотров 35K

«Окей гугл, включи-ка новости!» Как было бы удобно быстро запустить голосом любой канал на самом обычном телевизоре. Или управлять кондиционером, не имея под рукой пульта.

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

Смотрим видеодемонстрацию результата, а потом читаем, как это сделать своими руками.


Что имеем?


  • Обычный зомбоящик телевизор
  • Пульт от него
  • Android смартфон
  • Контроллер Broadlink RM


Что за зверь такой — Broadlink RM?



Это такой дешевый контроллер умного дома, который можно купить всего за 3 тысячи рублей. Он умеет управлять любой глупой техникой, у которой есть ИК пульт управления. Это могут быть телевизоры, кондиционеры и множество всего остального.
Вдобавок он умеет управлять оборудованием на радио-частотах 315 и 433 MHz — типа всяких выключателей, диммеров и так далее. В принципе, обо всех его характеристиках и умениях хорошо написано вот тут.

Эта штука работает как ИК-бластер (не путать с бластером из Звездных Воин и всяких там Терминаторов). То есть ей по обычному вай-фаю передается команда от любого смартфона, планшета или компьютера, а она уже «пуляет» во все стороны нужный ИК сигнал.

Чего хотим в итоге?


Хотим сделать так, чтобы Google Now стал чуточку (ну хоть малюсенькую чуточку) умнее и научился понимать голосовые команды типа «Включи канал Спорт», «Сделай телек потише», ну и вообще все остальные кнопки научился нажимать. Так что больше не придется искать разные пульты и можно будет управлять всей техникой даже со смарт-часов на Android Wear.

Приступим


После первоначальной настройки Broadlink RM с помощью стандартного приложения под Android нам нужно научить его ИК кодам на нашем пульте управления ТВ. Чтобы потом, когда будем отправлять этой программе команды, она знала, какой сигнал нужно послать контроллеру.



Для этого устанавливаем приложение Broadlink Control (исходные коды открыты и лежат вот тут). Оно очень простое и позволяет научить Broadlink нашим кнопкам, а также добавить комбинации кнопок в виде функций. Потому что для некоторых ТВ каналов нужно нажать больше одной кнопки. Например, канал 11.

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

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

Это нужно проделать для всех кнопок пульта, которые необходимы!

Учим Google Now


Google Now — прекрасная штука для голосового управления. Вот только кнопки телевизора он щелкать не умеет… Сейчас исправим сей недочет инженеров Google!

Как известно, у Google Now нет никакого открытого API для «встраивания» своих функций. Зато есть русскоязычный голосовой ассистент Дуся, который умеет «выдергивать» из Google Now текст запроса и процессить его, если он подходит к одной из функций. Вдобавок, Дуся позволяет создавать свои функции без всякого программирования прямо в своем интерфейсе.

Эти «свои» функции называются скриптами, и они позволяют превратить фразу пользователя в некоторую последовательность действий, которую нужно провернуть на смартфоне. Как? С помощью шаблонов фраз, синтаксис которых довольно прост:

* (включи*|переключи*) [на] [канал*] $Text *


Под такой шаблон подходят фразы типа «Эй переключи на Новости». Или «Включи канал Спорт». При этом в переменную $Text будет помещено название канала, который нужно запустить. Все просто!

В качестве реакции на такую команду можно добавить отправку интента — то есть послать сигнал на локальном смартфоне другой программе. Этой программой будет Broadlink Control, который принимает строку текста, ищет по ней настроенный ранее канал и шлет Broadlink-у сигналы кнопок.

Вот в принципе и все!

Ну не все конечно...


Создадим такой скрипт в Дусе, добавим в него вышеописанный шаблон, а в действиях добавим отправку интента типа Broadcast с action com.broadlink.control.action.QUERY и в параметрах передадим нашу переменную $Text в параметре text. Как на скриншотах:



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


Ну и конечно нужно не забыть включить в настройке «Фоновый режим» интеграцию с Google Now, чтобы Дуся могла «перехватить» у него команду и запустить на Broadlink Control нужные кнопки.

Теперь при запуске Google Now магической фразой «Окей гугл» мы можем скомандовать наше заветное «Включи Первый канал», после чего Дуся среагирует на эту фразу, закроет Google Now, вытащит из фразы название канала и пошлет его в программу Broadlink Control. Та в свою очередь найдет по названию список кнопок, которые нужно нажать, и пошлет их в правильной последовательности контроллеру Broadlink RM. Ну а тот превратит код в ИК сигнал и пульнет его во все стороны так, что он точно достигнет ИК приемника даже самого старого лампового телевизора.

А вот теперь точно все!


Вот пример того, как можно без всякого программирования и паяльника за очень короткое время и совсем уж небольшие деньги (для коробочного решения класса «умный дом») научить любую технику управляться голосом. Напомню, что Google Now умеет запускаться и на выключенном экране смартфона (у меня например это работает только на зарядном устройстве), а также на смарт-часах Android Wear.

Это позволит произвести неизгладимое впечатление на гостей, да и вообще приятно…

Окей гугл, я не смотрю телевизор!
Теги:
Хабы:
+14
Комментарии 34
Комментарии Комментарии 34

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн