Модуль ssdp_finder в Мажордомо

Average Rating
0 out of 5 stars. 0 votes.

Протоколы и стандарты

Этот модуль реализует поддержку протокола SSDP для поиска устройств в сети, после того как сервер и рендер обнаружены необходимо узнать какие сервисы они предоставляют. Этим занимается протокол UPnP, он так же реализован в рамках модуля. Далее в работу вступает стандарт DLNA, который так же частично реализован, но пока работает не со всеми устройствами. С помощью него можно с сервера передавать на рендер медиа ресурс для воспроизведения. Другими словами включать фильм, музыку или просматривать фото.
Есть множество производителей, которые используют этот стандарт, но каждый производитель поставляет свой интерфейс и не всегда корректно работает с устройствами других производителей. Этот модуль оппытка создать единый интерфейсс для управления всеми устройствами с одного места.

модуль Мажордомо

Типы устройств

После установки модуля и сканирования сети модуль может найти несколько устройств, которые поддерживают выше описанные стандарты, но вы даже не подозревали что они у вас есть. Итак, существует несколько типов устройств:

  • рендер (телевизор, ресивер, смарт динамик типа Google Home, Sonos, не смарт динамик если подключён Chromecast, совместимый плеер на компьютере
  • сервер (медиа танк, медиа хранилище (synology, plex), компьютер с установленным софтом типа Kodi, Windows Media Player итд)
  • DIAL устройство (Google Home)
  • простое устройство
  • роутер

Нас интересуют первые три. Рендер – это  там где будет воспроизводится файл. Сервер – место где файлы хранятся. DIAL устройство – по сути является рендером, но имеет свои архитектурные особенности в способе получения файла, поэтому разработчик принял решение вынести его в отдельный тип устройств, но это тот же рендер. Простое устройство (Basic) – лично у меня распознаётся как роутер и не несёт никакой полезной для нас функциональности, но т.к. роутер поддерживает этот стандарт мы обязаны его показать. Роутер – это тоже простое устройство, но уже сообщает о себе больше информации, например предоставляет список сервисов. Существуют роутеры, которые на борту имеют винчестер и они могут выступать в роли сервера, поэтому они вынесены тоже в отдельный тип.
Стоит заметить что SSDP\UPnP\DLNA совместимые устройства могут представлять собой любой компьютер с установленным софтом, который реализует эти протоколы. Поэтому протестироват работу модуля может любой человек у которого есть компьютер и\или телефон. И вам не обязательно иметь дорогие телевизоры, ресиверы и смарт колонки.

Функциональность модуля

После окончания сканирования необходимо добавить устройство. Нажимаем плюсик и в самом низу видим список чекбоксов:
Создать простое устройство – используя модуль “ПУ” автоматически будет создан объект с нужными свойствами и вам останется лишь выбрать его в поле “Связанный объект” и нажать кнопку “Сохранить”.
Создать устройство онлайн – IP адресс устройства будет автоматически добавлен в модуль pinghosts и в зависимости от настроект в этом будуле будет проверяться доступность устройства. Если устройство будет не доступно, то будет озвучиваться фраза “Устройство такое-то пропало из сети, возможно его отключили”. Если вы не хотите этого – уберите галочку напротив этой настройки.
Создать терминал устройства – IP адресс устройства будет автоматически добавлен в модуль terminals и потернциально можно будет использовать как терминал, главное выбрать правильную настройку “Тип плеера”. Хочу заметить что не все SSDP\UPnP\DLNA устройства автоматически будут работать как терминал.
Использовать для воспроизведения системных сообщений – не уверен, но предполагаю что настройка будет работать если устройство добавлено как терминал и корректно работает с модулем terminals.
Выбираем нужные настройки и сохраняем, поотом не закрывая вкладку выбираем только что созданный объект в поле “Связанный объект” и нажимаем сохранить ещё раз. Если этого не сделать, то устройство не будет добавлено. Ту же самую процедуру проделываем со всеми остальными устройствами. Одно и то же устройство может выступать одновременно и сервером и рендером.
После этого переходим в модуль “Простые устройства”. В фильтре выбираем “UPNP Медиасервер” и нажимаем кнопку “Получить список файлов”. Далее в фильтре выбираем “UPNP Устройство воспроизведения”, в выпадающем списке выбираем тип файла, потом сервер, потом сам файл и нажимаем плей. Если после нажатия кнопку “Получить список файлов” вы не увидели сообщение о том что файлы найдены, то в списках у вас будет пусто. Вам необходимо настроить на сервере список доступных файлов. Для каждого софта и устройства это делается по разному, поэтому гуглите :). В настройках “ПУ” можно добавить панель устройства воспроизведения (рендера) сразу на сцену.

Average Rating
0 out of 5 stars. 0 votes.

Про режимы MajorDomo

Average Rating
0 out of 5 stars. 0 votes.

В MajorDomo есть класс “OperationalModes”, который отвечает за логику режимов. В нём по умолчанию есть почти полный набор режимов, который понадобится любому пользователю.

  • DarknessMode – Режим тёмного времени суток
  • EconomMode – Эконом режим
  • GuestsMode – Гостевой режим
  • NightMode – Ночной режим
  • NobodyHomeMode – Режим “никого дома”
  • SecurityArmedMode – Режим безопасности

Если вы используете индикаторы режимов на сценах, то могли заметить что некоторые режимы можно включить\выключить по клику на сцене, а некоторые нет. Я до конца не понял в чём причина, но грешу на инклуды “простых устройств” в методах активации и деактивации режимов. Проблему решил принудительным выставлением свойства active. Например для неработающего выключателя индикатора для режима “никого дома” я дописал в метод deactivate:

/* begin injection of {SDevices} */
require(DIR_MODULES.'devices/nobodyhomemode_deactivate.php');
/* end injection of {SDevices} */
sg("NobodyHomeMode.active","0");

После этого индикатор стал корректно выключаться.

А вот метод активации activate по какой-то причине у меня нормально активировался и дополнительно включать его не требовалось. Но для режима DarknessMode это пришлось сделать вручную. Как для включения так и для выключения.

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

Режимы в Мажордомо

Как режимы могут влиять на статусы можно прочитать в одном из моих предыдущих постов.

Практическое применение режима безопасности я демонстрирую во в этом видео:

Average Rating
0 out of 5 stars. 0 votes.

Новый модуль 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.

А вы знаете как выключить режим “Ни кого нет дома”?

Average Rating
0 out of 5 stars. 0 votes.

Для того что бы выключить режим “Ни кого нет дома” необходимо выполнить:
sg("NobodyHomeMode.active",0);
либо зайти в раздел “Объекты“, найти класс “OperationalModes“, открыть объект “NobodyHomeMode” и поменять ему свойство “active” в значение ноль. После этого Алиса просигнализирует в чат: “Режим Никого нет дома выключен”. Стоит заметить что бы Мажордомо правильно указывал в чате режим, необходимо вписать его название в свой свойство “title“. Так же через это свойство вы можете изменить название режима по-умолчанию, либо добавить свой режим.

Точно так же будет работать изменение значения свойства “active” для любого другого объекта из класса “OperationalModes“.

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

 

Average Rating
0 out of 5 stars. 0 votes.