Голосовое управление телевизором Samsung, LG или любого другого

Average Rating
0 out of 5 stars. 0 votes.

Устройство Xiaomi 360 IR (аналог Broadlink) даёт возможность управлять с мобильного приложения телевизором, кондиционером, вентилятором, словом любым устройством, которое управляется инфракрасными сигналами. Да, именно такие сигналы используются в вашем пульте от телевизора. Итак, для начала вам необходимо добавить Xiaomi 360 IR в стандартное Mi Home приложение, выбрать из обширной базы устройств свой телевизор и уже сейчас вы сможете управлять им используя виртуальный пульт на телефоне. В редких случаях телека не будет, но ничего страшного, используя режим обучения вы можете обучить своё устройство новым кнопкам используя оригинальный пульт. Устройство запомнить все коды кнопок и сохранит в телефоне. После этого вам необходимо вытащить из телефона коды этих кнопок. Сделать это можно двумя способами:

    - если у вас есть рут, то просто открыть файл из файловой системы
    - если нет рута, но через USB кабель сделать бекап всего приложения, в нём и будет файл с кодами.

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

Average Rating
0 out of 5 stars. 0 votes.

Учим Мажордомо определять конкретного пользователя умного дома для создания более интеллектуальных персонализированных сценариев

Average Rating
0 out of 5 stars. 0 votes.

Задача определения хозяев дома уже более менее решена. Подключив почти любое устройство к Majordomo через модуль “Простые устройства” можно выставить настройку “Изменение означает активность в помещении”.
Изменение означает активность в помещении
Что бы активность срабатывала, нужно выбрать помещение где работает девайс. Это делается в выпадающем списке “Местоположение”.
Местоположение Majoedomo
Но мы же хотим приблизится что бы у нас была не домашняя автоматизация, а умный дом. Но дом действительно будет умным когда научится элементарно отличать вас от другого члена семьи. Для человека это достаточно простая задача, а вот с машину всё чуть-чуть сложней. Я попытался решить этот вопрос, кто и где именно из пользователей “умного дома” находится в данный момент. Решив эту задачу можно будет сделать сценарии более интеллектуальными.

Итак, что нам может помочь на раннем этапе решить эту задачу? Первое чем можно воспользоваться это индикатор подключения личного телефона к домашней сети. Как правило роутеры присваивают один и тот же IP адрес одному и тому же устройству в момент соединения по WI-FI. Если это не так в вашей среде, то погуглите как переконфигурировать ваш роутер. Что бы заработала эта схема идём в раздел “Устройства Online” и добавляем туда все личные устройства и их IP адреса.
Устройства Online

Далее в разделе “Объекты” находим класс “Users” и добавляем туда всех членов семьи. У всех будет автоматически создано свойство “atHome”. Если оно равно “1”, то Majoedomo считает что пользователь находится дома. Поэтому возвращаемся в раздел “Устройства Online” выбираем телефон, выбираем “Код” для пункта “Действие при переходе в Online” и вставляем туда команду:

sg("admin.atHome",1);
Для “Действие при переходе в Offline”, вставляем:

sg("admin.atHome",0);
Такую же процедуру проделываем со всеми устройствами, не забывая заменить “admin” на имя пользователя из класса “Users”.

Далее я советую поставить модуль “Статусы системы”. В разделе “Устройства” вы увидите все ваши добавленные телефоны. Для каждого из них выбираете желтый статус и вписываете текст, который будет отображаться в левом верхнем углу главной страницы. В моём случае если моё устройство будет офлайн, то будет отображаться текст “Телефон Алекс вне сети”.

У этого способа есть недостаток. Если батарея телефона сядет, то для системы я буду вне дома. Но зато это достаточно простой и быстрый способ рассказать системе что я дома. Он может использоваться в комбинации с другими методами, о которых я ниже расскажу.

Второе что мне пришло на ум это NFC метки. Что это такое и как работает я рассказывать не буду. Ютуб в помощь. Расскажу лишь применение этой технологии для решения моей задачи. Я подразумеваю что у всех кто пользуется “умным домом” есть телефон с модулем NFC. Устанавливаем любое приложение, которое умеет отправлять HTTP запросы при сопряжении с NFC меткой. Например “Trigger writer” под Android. Далее приклеиваете на двухсторонний скотч NFC метки везде где вы часто оставляете телефон. У меня в наличии было 2 метки и я одну приклеил под рабочий стол, а вторую на прикроватную тумбочку. Затем в приложении создал 2 NFC события. Что бы при срабатывании на каждую метку в Мажордомо отправлялся HTTP запрос, который говорит кто и где находится. Вот пример запроса для пользователя admin, который находится в спальне:

http://192.168.1.101:80/objects/?op=set&object=Bedroom&p=User&v=admin

NFC application

Теперь нам нужно обрабатывать этот HTTP запрос. В классе “User” добавляем свойства: “Location” и “LocateUpdated”, а в классе “Rooms” добавляем метод “CheckUser”, потом добавляем свойство: “User” и выставляем настройку запускать метод “CheckUser” на изменение свойства “User”. В исходный код метода “CheckUser” вставляем:

$objectsRooms=getObjectsByClass("Rooms");
$time=date('H:i');
foreach($objectsRooms as $obj) {
$user = getGlobal($obj['TITLE'].".User");
$location = getGlobal($obj['TITLE'].".Title");
if ($user == "admin"){
sg("admin.Location",$location);
sg("admin.LocateUpdated",$time);
cm($obj['TITLE'].".onActivity");
sg($obj['TITLE'].".User","");
SetTimeOut("ClearAdminLocation","sg('admin.Location','');", 10*60);
SetTimeOut("ClearAdminLocateUpdated","sg('admin.LocateUpdated','');", 10*60);
}
else if ($user == "Vika"){
sg("Vika.Location",$location);
sg("Vika.LocateUpdated",$time);
cm($obj['TITLE'].".onActivity");
sg($obj['TITLE'].".User","");
SetTimeOut("ClearVikaLocation","sg('Vika.Location','');", 10*60);
SetTimeOut("ClearVikaLocateUpdated","sg('Vika.LocateUpdated','');", 10*60);
}
}

Добавляете столько блоков “else if”, сколько у вас пользователей, ну и замените имена в блоке сравнения. Имена должны совпадать с теми, которые вы передаёте в HTTP запросе из мобильного приложения и те что у вас в классе “User”.
В результате, после того как сработает коннект с NFC меткой заполняется свойство “admin.Location” и “admin.LocateUpdated”. Тем самым Мажордомо понимает кто и где и когда находится. Такую информацию можно выводить в “State” (левый верхний угол). Это можно делать например вот так:

%admin.fullName% -- %Admin.Location% (%admin.LocateUpdated%)
Мажордомо state

 

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

И заключительный четвёртый и самый крутой способ определять пользователя – это с помощью нейронной сети. Об этом способе я снимал демонстрационный ролик. Пока у меня всего одна камера и она может определять пользователя только в одном месте. Если вы хотите что бы Мажордомо смогло определять ваше нахождение во всех помещениях, то вам понадобится столько камер, сколько у вас помещений. Я купил ещё одну камеру, жду доставки и буду пробовать интегрировать её в свою логику.
Алгоритм определения пользователя следующий. Добавляю IP камеру через “Простые устройства”, так же добавляем любой датчик движения либо если возможно использовать встроенный датчик движения в камеру. Как только сработал датчик, делаем снепшот, сохраняем его на файловой системе, запускам нейронную сеть и скармливаем ей фото. Результаты работы сети отправляются в Мажордомо в видео определённого числа. В зависимости от значения принимается решение кто на фото. Если на фото есть человек, который является пользователем системы, то выставляем свойства “Location”, “atHome” и “LocateUpdated” как в примере с NFC. Большой минус определения лица в том что он требует процессорное время и на малинку такую штуку особо не интегрируешь. К тому же мой способ использует питон, а это тоже требует установки дополнительного интерпретатора.

Буду рад выслушивать любые ваши предложения по усовершенствованию и исправлению возможных ошибок.

Average Rating
0 out of 5 stars. 0 votes.