Модули laurent и умный дом (часть 1). majordomo

Дашборд

Дашборд по факту является одним из типов домашних страниц (новые дашборды создавать надо именно там), но заслуживает отдельного внимания, как самостоятельный интерфейс. Сделан он на базе freeboard.io. Его уникальность в том, что с ним удобно работать как на больших устройствах, так и с мобильных версий браузеров. Интерфейс плиточный, и подстраивается под размер экрана регулируя количество столбцов по ширине экрана. Степень кастомизации, как и у меню — довольно таки низкая. Допустимо использовать сторонние виджеты данного проекта, но чтобы их интегрировать — потребуются некоторые знания.

Резервирование сервера

Начнем с MQTT брокера. Если не считать таких сообщений, как LWT («последняя воля устройства») и Retain (хранимых на сервере), большинство сообщений передаются одномоментно и только тем, кто в данный момент подключен к брокеру. То есть «отправил — забыл».

К счастью, в последних версиях mosquitto сервера есть режим бриджа – вы просто задаете адрес второго брокера и топики, которые нужно дублировать, направления дублирования. В моем случае вполне пригодился вариант «копировать все в обе стороны». Вот как это делается в raspbian/armbian – добавляем в /etc/mosquito/mosquito.conf:

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

Дальше, сами серверы Majordomo. Я сделал второй сервер на базе Orange pi one plus (1Gb RAM) – стоит в 2 раза дешевле Raspberry Pi4, для вспомогательного сервера — то, что надо. Но серверы должны уметь делать одно и то же, но не делать этого одновременно (в большинстве случаев это не страшно, ну поступит 2 команды на включение зарядника – не страшно, но некоторые вещи лучше дважды не делать, например, не поворачивать солнечные панели по часам).

Так как для корректной работы с датчиками и исполнительными устройствами я использую MQTT, логично отслеживать работоспособность удаленного сервера через тот же MQTT. Для этого я создал отдельный класс, в котором есть 2 статуса (для отображения) и 2 времени – для локального сервера и для удаленного, а также адрес активного брокера и собственный адрес сервера. Раз в 10 секунд выполняется проверка системного цикла MQTT – время последнего запуска (ThisComputer.cycle_mqttRun). Это время сравнивается с текущим (time()). Если прошло больше 10 секунд – паникуем, то есть понимаем, что локальный сервер не дружит с MQTT брокером и показываем это в интерфейсе. Так же сравниваем время последнего запуска MQTT цикла на удаленном сервере (приходит через MQTT). Если прошло больше 20 секунд, а локальный цикл в порядке – понимаем, что удаленный сервер больше не управляет устройствами. Проверяем еще один параметр, передаваемый через MQTT – имя активного брокера. Если это не локальный, то надо переключать на себя:

Вот такой виджет, пока корявенько, зато информативно

У меня Tasmota устройства (IP в диапазоне c 192.168.3.40 по 192.168.3.90), им можно передать обычным URL запросом новый адрес MQTT сервера. Вот только запросы надо посылать синхронные, а главное – не забывать между ними обновлять MQTT свойство для удаленного сервера. Иначе получится замкнутый цикл – начали переключаться, больше 10 секунд не сообщаем удаленному серверу, что мы живы. Тот начинает переключение на себя и тоже замирает. Не делайте так.

Объединение аккаунтов в приложении Яндекс

Следующим этапом после регистрации и публикации приватного навыка является объединение аккаунтов в приложении умного дома Яндекс. Это завершающий этап по интеграции сторонних систем (и MajorDoMo в частности) с платформой умного дома Яндекс, после которого становится доступным управление устройствами с помощью голосового ассистента Яндекс Алиса.

В списке производителей выбираем наш приватный навык и тапаем кнопку Объединить аккаунты. Приложение переадресует на страницу авторизации навыка, на которой нужно ввести логин пользователя и пароль пользователя, указанные ранее в настройках модуля Yandex Home. После успешной авторизации подтверждаем сопряжение кнопкой Предоставить.

Приложение переадресует обратно на страницу свойств навыка, а кнопка Объединить аккаунты изменится на Обновить список устройств. Тапаем на нее и после успешной синхронизации будет предложено перейти на страницу со списком устройств. Если в этот момент в модуле Yandex Home уже были добавлены устройства, то они отобразятся в приложении. В дальнейшем при добавлении устройств в модуле или изменении их свойств необходимо каждый раз выполнять такую синхронизацию для обновления списка устройств в приложении Яндекс.

Техническая поддержка

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

Для клиентов доступны контакты:

  • Информационная служба – ;
  • Техническая поддержка – ;
  • Служба по работе с доменами – .

The following two tabs change content below.

Александр Малыгин
В 2015 году окончил факультет «Финансы и кредит» в НОУ ВПО «Институт Бизнеса и права» по специальности экономист. В настоящее время являюсь онлайн-консультантом на сайте cabinet-bank.ru и с радостью готов Вас проконсультировать. (Страница автора)

Последние записи автора — Александр Малыгин

  • Вход в личный кабинет ЭОС ВМедА: пошаговый алгоритм, возможности аккаунта — 12.10.2021
  • Личный кабинет Эля Смит: особенности авторизации, возможности аккаунта — 12.10.2021
  • Правила оформления кабинета ОКБ — 01.10.2021

Возможности сервиса

Данная платформа предлагает клиентам стандартный комплекс услуг: линейка тарифных планов виртуального хостинга, виртуальный и физический выделенный сервер. Помимо этого, можно зарегистрировать домен, а также произвести настройку корпоративной почты с помощью предложения от Mail.ru, которое позволяет расширить сервис до 500 адресов.

В качестве дополнительных услуг можно выделить:

  • Функции онлайн-мониторинга.
  • Эффективные средства защиты от спама и вирусов.
  • SEO-аудит сайта.
  • Возможность активации контекстной рекламы.

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

Как считают пользователи, одним из главных преимуществ сервиса является наличие собственного конструктора сайта Nethouse. Это название довольно известно в рунете, ведь на нем работают около 2% сайтов. Именно поэтому этот сервис входит в список популярных систем управления контентом. Однако авторы проекта порадовали пользователей не только собственным конструктором сайтов. Можно установить множество приложений и около 30 CMS.

1.10  Я строю дом и в будущем планирую сделать его «умным», что мне необходимо предусмотреть заранее?

Во-первых, определитесь с тем, где у вас будет основной электро-щит и планируйте проводку так, чтобы провода от настенных выключателей и точек освещения сводились каждый в отдельности в этот щиток. В начале вы сможете всё скоммутировать там по тривиальной схеме (грубо говоря, выключатель пускает ток на лампочку), но в будущем такая коммутация позволит заменить простую схему автоматикой. Для розеток этого не нужно — управлять устройствами, включенными в розетку, проще через дополнительное оборудование, те же wi-fi розетки.

Далее, планируйте провести витую пару (двойные розетки) к местам установки медиа-систем (телевизоры, аудио-центры, спутниковые ресиверы и т.п.). Желательно в любом случае иметь по такой розетке в каждой комнате — их можно будет использовать не только для компьютерной сети, но и для телефонии. Эти кабели так же нужно выводить в общий щиток.

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

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

1.6  Оправдана ли покупка всего оборудования для использования в системе с экономической точки зрения?

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

4.6  Что такое «чат системы», «командная строка», «консоль»?

  • Чат системы — история сообщений от системы, а так же форма ввода команд на естественном языке. Данный модуль доступен в пользовательском интерфейсе и встроен в Меню по-умолчанию. Так же его можно встроить в сцену или обратиться по прямой ссылке /command.php
  • Командная строка — средство операционной системы (не системы MajorDoMo) для запуска системных команд. Обычно используется для первоначальной настройки платформы и тонкой настройки операционной системы
  • Консоль — встроенная в панель управления MajorDoMo строка ввода (ссылка Консоль в блоке заголовка панели). Данная строка позволяет отправлять инструкции языка программирования PHP. Например, можно там написать say(«Привет»,2); и инструкция будет выполнена, а именно произнесено слово «Привет»

Публикация обработчиков запросов

Механизм взаимодействия платформы умного дома Яндекс со сторонними системами (провайдерами) реализуется посредством вебхуков (webhook). Облако Яндекс для запроса состояния устройств и управления ими посылает POST- и GET- запросы на конечные точки (endpoint) вебхуков и получает ответы от них. Таким образом, для корректной работы этого механизма необходимо обеспечить постоянную доступность вебхуков из сети Интернет со стороны облака Яндекс.

Согласно API платформы умного дома Яндекс требуется реализовать три типа конечных точек:

  1. URL авторизации (authorization endpoint) — страница, на которой авторизуется пользователь, чтобы разрешить навыку доступ к своему аккаунту.
  2. URL для получения и обновления токена (token endpoint) — адрес, на который отправляются запросы с авторизационным кодом, чтобы получить OAuth-токен доступа, и запросы для обновления ранее полученного токена.
  3. URL обработчика навыка (smarthome endpoint) — основной вебхук, который отвечает непосредственно за работу с устройствами.

В модуле Yandex Home все три типа конечных точек реализованы в виде отдельных файлов: authorize.php, token.php и smarthome.php, размещаемых в директории /modules/yandexhome.

# Назначение вебхука URL вебхука
1 URL авторизации /modules/yandexhome/authorize.php
2 URL для получения и обновления токена /modules/yandexhome/token.php
3 URL обработчика навыка /modules/yandexhome/smarthome.php

Чтобы опубликовать эти три вебхука в сеть Интернет и обеспечить тем самым их доступность со стороны облака Яндекс, необходимо выполнить ряд условий.

Условие №1. Публичный (глобальный, белый) IP-адрес, выдаваемый интернет-провадером.

Белый IP-адрес при этом может быть как статическим, так и динамическим. В случаях, когда невозможно получить белый адрес у интернет-провайдера, возможны варианты использования сторонних сервисов. Например, некоторые производители роутеров предоставляют их владельцам сервис по доступу к ресурсам домашней локальной сети (KeenDNS от Keenetic и др). Либо использовать VPN-сервисы на подобие vpnki.ru или собственный VPN-сервер, развернутый на VPS.

Условие №2. Доменное имя (DNS), привязанное к публичному IP-адресу.

Это требование в большинстве случаев закрывается классическими сервисами динамических DNS, которых представлено в сети в большом ассортименте, как платных, так и бесплатных. Большинство современных роутеров уже имеют встроенную поддержку сервисов Dynamic DNS. При использовании сервисов удаленного доступа типа KeenDNS или VPNKI это условие выполняется автоматически — доменное имя выбирается и присвается в ходе регистрации и подключения услуги.

Условие №3. Валидный SSL-сертификат на DNS-имя.

По требованиям платформы умного дома Яндекс весь обмен трафиком между их облаком и MajorDoMo должен идти в зашифрованном виде по протоколу HTTPS, что обеспечивается либо установкой SSL-сертификата на веб-сервер с MajorDoMo, либо услугами сервисов удаленного доступа (см. выше). Бесплатный SSL-сертификат можно получить у удостоверяющего центра  сроком на 3 месяца, затем его нужно будет регулярно обновлять. Сертификат устанавливается либо на тот же виртуальный сервер Apache, который обслуживает MajorDoMo, либо на отдельный виртуальный сервер (Apache или Nginx), выступающий в роли обратного прокси (reverse proxy) для MajorDoMo.

Корректность установки сертификата и доступность вашего сервера из сети Интернет по HTTPS можно проверить с помощью специализированных сервисов, например:

Добавление и управление устройствами в модуле

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

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

Дальнейшее конфигурирование выполняется на странице редактирования (настройки) устройства.

Обязательные для заполнения поля устройства:

  1. Название.
  2. Тип.
  3. Местоположение.
  4. Умения.

У каждого устройства должно быть указано минимум одно умение.

Не обязательные для заполнения поля устройства:

  1. Описание.
  2. Производитель.
  3. Модель.
  4. Версия программного обеспечения (ПО).
  5. Версия аппаратного обеспечения (АО).

Набор умений представлен в виде выпадающего списка.

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

При добавлении устройств в модуле или изменении их свойств для обновления списка устройств в приложении Яндекс необходимо каждый раз выполнять синхронизацию с помощью кнопки Обновить список устройств в окне свойств навыка. Удаляются устройства из приложения Яндекс вручную, либо через отвязывание аккаунта и последующее повторное объединение аккаунтов.

Документация по модулю

  1. MajorDoMo и Яндекс Алиса. Общие сведения.
  2. MajorDoMo и Яндекс Алиса. Публикация вебхуков.
  3. MajorDoMo и Яндекс Алиса. Регистрация приватного навыка.
  4. MajorDoMo и Яндекс Алиса. Объединение аккаунтов.
  5. MajorDoMo и Яндекс Алиса. Модуль Yandex Home.
  6. MajorDoMo и Яндекс Алиса. Алиса, включи свет на кухне.
  7. MajorDoMo и Яндекс Алиса. Алиса, сделай ярче настольную лампу.
  8. MajorDoMo и Яндекс Алиса. Алиса, измени цвет бра на красный.
  9. MajorDoMo и Яндекс Алиса. Алиса, включи канал Карусель.

Поделитесь в соц сетях

Общие функции

DebMes($errorMessage, $logLevel) — записывает сообщение в главный лог файл. Параметр $logLevel не является обязательным, и по умолчанию установлен как “debug”.

say($ph,$level,$from_user_id) — говорит фразу (использует глобальные переменные $voicemode” и $commandLine ).
$level – указывает уровень важности фразы (в зависимости от текущих настроек минимального уровня произношения, фраза может быть либо озвучена голосом либо просто записана в историю сообщений).
$from_user_id – от имени кого будет сказана фраза ($from_user_id в данном случае будет равен идентификатору текущего пользователя). sayTo (ФРАЗА, УРОВЕНЬ, НАЗНАЧЕНИЕ) – в качестве НАЗНАЧЕНИЯ можно использовать системное имя терминала и если это терминал на MajorDroid, то ему отправится команда для произношения. В любом случае из этой функции создаётся событие SAYTO (вида: processSubscriptions(‘SAYTO’, array(‘level’ => $level, ‘message’ => $ph, ‘destination’ => $destination));), которое может быть перехвачено сторонними модулями — на заметку тем, кто захочет создать свой модуль для организации работы с различными устройствами доставки сообщений на определённый канал

В любом случае из этой функции создаётся событие SAYTO (вида: processSubscriptions(‘SAYTO’, array(‘level’ => $level, ‘message’ => $ph, ‘destination’ => $destination));), которое может быть перехвачено сторонними модулями — на заметку тем, кто захочет создать свой модуль для организации работы с различными устройствами доставки сообщений на определённый канал

sayTo (ФРАЗА, УРОВЕНЬ, НАЗНАЧЕНИЕ) – в качестве НАЗНАЧЕНИЯ можно использовать системное имя терминала и если это терминал на MajorDroid, то ему отправится команда для произношения. В любом случае из этой функции создаётся событие SAYTO (вида: processSubscriptions(‘SAYTO’, array(‘level’ => $level, ‘message’ => $ph, ‘destination’ => $destination));), которое может быть перехвачено сторонними модулями — на заметку тем, кто захочет создать свой модуль для организации работы с различными устройствами доставки сообщений на определённый канал.

sayReply(ФРАЗА, УРОВЕНЬ, ОТВЕТ_НА_ЧТО) — последние два параметра не обязательны. Эта функция ведёт себя следующим образом:

  1. Если указан параметр ОТВЕТ_НА_ЧТО, то система попытается найти терминал, с которого был запрос, содержащий данную фразу
  2. Если не указан параметр ОТВЕТ_НА_ЧТО, то система выберет терминал, с которого был любой запрос в течении последних 5 секунд
  3. Если терминал найден, то ответ будет направлен на него (с помощью той же функции sayTo)
  4. Если терминал не найден, то ответ будет озвучен в обычном порядке (аналогично просто использованию функции say).

processCommand($command) — отправляет текстовую команду на исполнение (например, “скажи сколько время”). Сами команды настраиваются методе ThisComputer->commandReceived.

getGlobal($varname); — получения значения глобального свойства

setGlobal($varname,$value); — установка глобального свойства

processLine($line); — запуск скрипта синхронизации

getRandomLine($filename); — взятие случайной строки из текстового файла. $filename может быть сокращённым, например file1 и тогда будет браться файл ./texts/file1.txt

playSound($filename); — проигрывание файла (mp3,wav,etc.). $filename может быть сокращённым, например file1 и тогда будет браться файл ./sounds/file1.mp3

playMedia($path); — играть музыку из каталога $path

runScript($id,$data); — выполняет скрипт с заданным id. В качестве id может использоваться имя

runScriptSafe($id,$data); — выполняет скрипт безопасно в фоне

isOnLine($host) — проверяет доступность хоста из Устройства OnLine (1/0).

Сервера «умного дома»

Мажордомо

Сайт проекта MajordomoПреимущества:

  • Ориентировано в основном на бывший СССР, т.к. поддержка на русском.
  • PHP знаком многим.
  • Много модулей, ориентированных на доступные в экс-СССР сервисы и железки.
  • Есть образы под Raspberry Pi
  • Мультиплатформер: Линукс-Винда-АРМы

Недостатки

  • Установка по инструкции — не всегда дает результат, даже если ты систему переставлял сто раз до этого.
  • Образ под Малину имеет некоторые модули, которые автор образа поставил до того, как накатал образ…
  • База для системы разворачивается через PHP MyAdmin…
  • Некоторые модули давно не поддерживаются, некоторые кривовато написаны и могут загнать процессор под 100% нагрузку, при том, что вроде как всего раз в час получают какую-то информацию…
  • «Защита? Какая защита?! Умный дом не должен иметь доступа из инета!»

Home Assistant

Плюсы

  • Просто ставится.
  • Из коробки подхватывает сразу как МиХоум устройства, так и имеющие прошивку ESPHome.
  • Довольно гибкая настройка логики без программирования как такового.
  • Мультиплатформер: Винда, Линь, АРМы

Минусы

  • С документацией напряг, особенно на русском.
  • Концепция настроечных файлов на начальном этапе слегка напрягает.
  • Заточенных под Яндекс погоду, курсы валют и некоторые «местные» сервисы модулей нет, или я их пока не нашел…

Регистрация личного кабинета

На главной странице есть ссылка «Войти», нажмите на нее для перехода на следующий этап регистрации.

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

  • Безлимитный виртуальный хостинг.
  • Надежный VPS/VDS.
  • Хостинг для веб-предложений.

Нажмите на кнопку «Выбрать тариф» под тем информационным блоком, который является для вас оптимальным вариантом. Далее предлагается выбрать подходящую категорию тарифов.

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

Установка

Аппаратная часть

Прежде, чем начать развертывание, следует подобрать оборудование для системы. Под «Мажордомо» допустимо использовать практически любой не очень старый компьютер или ноутбук. Но, как правило, при реализации смарт-дома используют одноплатные миникомпьютеры: они бесшумны, надежны, дешевы и достаточно производительны.

Для этой задачи хорошо подходят платы Raspberry Pi 2/3, на примере которых мы далее рассмотрим основные моменты установки и конфигурирования.

Развертывание программы

Версии ПО существуют и под Windows, и для Linux. Неискушенному пользователю стоит выбрать Windows-вариант, поскольку он проще в настройке и конфигурации. В рамках данной статьи мы приведем базовые шаги в случае с Linux и RPI.

Win-версия устанавливается как обычное приложение. Для RPI разработчики создали и поддерживают специально собранный образ, доступный на странице https://mjdm.ru/skachat-majordomo/:

Существует возможность развертывания и с нуля на «чистый» Raspbian (или другую версию Linux). Для этого необходимо присутствие в ОС:

  • сервера базы данных MySQL (MariaDB);
  • веб-сервера, например, Apache;
  • интерпретатора php с некоторыми модулями и оболочки PhpMyAdmin.

Установка MajorDoMo и его тонкая настройка подробно описаны в официальной документации к Windows- и Linux-вариантам. Энтузиасты также создали скрипт автоматизации, который развертывает весь программный комплекс самостоятельно. Получить его и запустить инсталляцию можно следующими командами:

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

Скрипт запросит пароль пользователя root создаваемой БД MySQL и учетной записи Pi. Данные аккаунта Pi вводить необходимо в любом случае, даже если такого пользователя в системе нет.

Иных действий не понадобится. После завершения работы скрипта будет выдано сообщение «Готово».

На этом этапе следует перезагрузить компьютер, после чего интерфейс умного дома MajorDoMo станет доступен для настройки через браузер по IP-адресу или имени узла md.lan. Имеется также доступ по протоколу SSH и проброс vlc over http.

Пример главной страницы:

Дополнительно потребуется установить PhpMyAdmin:

А также Java и сервер Blynk (нужен для разработки и функционирования приложений на iOS/Android).

Для добавления расширенной конфигурации выполняется команда:

Она дополняет базовую поставку некоторыми скриптами, сценами и элементами, а также оптимизирует работу с базой.

После этого можно приступать к тонкой настройке и сопряжению с периферией.

Запланированные задачи и события

AddScheduledJob(‘title’,’commands’,$datetime, $expire=60); — $expire в секундах

ClearScheduledJob(‘title’); — может использоваться маска типа «title%»

SetTimeOut(‘title’,’commands’, $timeout); — $timeout в секундах (аналог AddScheduledJob(‘title’,’commands’,time()+$timeout));

ClearTimeOut(‘title’); — аналог ClearScheduledJob(‘title’);

timeOutExists(‘title’); — возвращает идентификатор запланированной задачи (или 0, в случае отсутствия)

registerEvent($eventName, $details=»,$expire_in=365); — регистрация события $eventName

registeredEventTime($eventName); — возвращает время последней регистрации события $eventName (-1 если еще не было такого события)

«Умные» устройства

  1. Девайс вещь совершенно в себе и управлять им извне не выйдет. Можно только внешним реле отключить или посмотреть энергопотребление. В некоторых случаях — да и фиг с ним… В категорию входят холодильники, микроволновки, чайники, стиралки и т.д. и т.п.
  2. В принципе девайсом можно рулить извне: ик- или радио-пультом. Тут обычно кондеи и телевизоры. Рулить вроде и можно, но обратной связи нет…
  3. Устройства с двунаправленной связью — ты дал команду, он отреагировал и ответил. Их мало, но они есть. Просто чаще всего такие устройства идут уже по группе «экосистем» от брендов. Тут в основном висят умные телевизоры и приставки…
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector