Новый модуль Yeelight

Average Rating
0 out of 5 stars. 0 votes.

Написал новый модуль для счастливых владельцев лампочек от компании Yeelight. Опытный пользователь скажет что уже есть замечательный модуль Xiaomi miio, с помощью которого уже можно управлять этими лампочками. Но основная проблема для начинающих заключается в том что необходимо узнать токен для управления этой лампочкой. Но если вы будете использовать модуль Yeelight, то вам не нужно будет узнавать никаких токенов. Вам достаточно будет через официальное приложение добавить лампочку, выставить настройку “управление по локальной сети”.

После этого все лампочки появятся в интерфейсе автоматически и сразу доступны для управления. Модуль даже сам создаст все объекты, поддерживаемые свойства и методы. Но вот многие модули, включая Xiaomi miio, Xiaomi home, реализованы так что, нужно либо с помощью “простых устройств” либо самому ручками создать класс, объект, свойство, метод, а уже потом привязывать их в модулях. Но мой модуль не перекладывает это на пользователя, как и предыдущие мои модули, он делает это за пользователя сам, что бы максимально сузить телодвижения и скрыть процесс настройки. В конечном итоге пользователь получает готовый код, с помощью которого он уже может управлять устройством, создавать контролы на сцене либо нужные ему сценарии.
На скриншоте ниже продемонстрирован вывод красным шрифтом готовых команд для управления в качестве примера.

Если вам понравился модуль, не забудьте кликнуть “спасибо”, вот в этом посте на форуме.

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

Average Rating
0 out of 5 stars. 0 votes.

Сообщения “Никого нет дома” и “Кто-то есть”

Average Rating
0 out of 5 stars. 0 votes.

С текстом “Никого нет дома” и “Кто-то есть” у пользователей Мажордомо возникает часто вопрос, наподобие такого: “Почему Мажордомо пишет что “Никого нет дома”, но на самом деле я дома?”. Давайте разбираться. Для начала необходимо понять какое свойство у вас используется для отображения этого состояния. Для этого необходимо зайти в раздел “Меню управления”, далее выбрать “State”. В разделе “Данные” необходимо найти отвечающую за отображение нашего текста переменную. Это может быть либо %ThisComputer.somebodyHomeText% либо %ThisComputer.HomeStatus%. Оба эти свойства инициализируются похожими состояниями. Что заметил лично я? Например если добавить датчик движения через “Простые устройства”, привязать его к определённому помещению, например Гостиная, то при срабатывания датчика в свойство ThisComputer.somebodyHomeText будет дописано значение “Активность: 15:39 (Гостиная)”. Такое же поведение будет для датчика открытия, если он добавлен через простые устройства и в настройке “Изменение означает активность в помещении” выставлено значение “Да”. Подозреваю что такое же поведение будет для реле, но у меня нет ни одного. Если вы знаете другие способы инициализации этих свойств, то поделитесь знаниями в комментариях.

Average Rating
0 out of 5 stars. 0 votes.

Как настроить голосовой движёк под Windows для Majordomo?

Average Rating
0 out of 5 stars. 0 votes.

Итак что бы Алиса начала говорить необходимо первым делом убедиться что в настройках ОС Windows в разделе “Преобразование текста в речь” (Speech Recognition) установлен русский голосовой движёк. Как правило даже если у вас русская локаль Windows этот движёк не будет установлен, но я встречал старые инсталляторы Windows 7 где он был. Поэтому есть два варианта, либо искать такую версию инсталлятора либо установить русский голосовой движёк. Возможно какой-то из пакетов у вас уже будет установлен в зависимости от версии Windows, но я буду указывать весть набор софта:

И самое вкусное, один из самых лучших голосовых движков для русского языка IVONA (1, 2). Пароль на архив: majordomo

После установки пакетов, открываем в панели инструментов раздел “Распознавание речи” -> “Преобразование текста в речь”, из выпадающего списка выбираем русский TTS, вводим в поле ниже слово “привет” и нажимаем кнопку “Проверить”, у меня это “Preview Voice”. Если вы услышали из колонок “привет”, то всё удалось.
Text to speech
Вам останется установить модуль “Windows native TTS” в Мажордомо и всё. После этих манипуляций Алиса перестанет быть немой. Если же она по прежнему ничего не говорит, то вот мои рекомендации что первым делом нужно проверить:

  • убедитесь что динамики подключены и звук нормально воспроизводится например на ютубе или из медиплеера
  • убедитесь что на вкладке Windows TTS в Majordomo переключатель установлен в положение “вкл”
  • перезагрузите Majordomo
  • перезагрузите Windows
Average Rating
0 out of 5 stars. 0 votes.

Голосовое управление телевизором 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.