Как установить majordomo на linux

Что такое MajorDoMo?

Высокие технологии все глубже входят в жизнь человека. Это касается не только его труда, медицины или городской инфраструктуры. Абсолютно все жизненное окружение получает определенный «ум»: выключатели, системы климат-контроля помещений, различные датчики (открывания-закрывания, дыма, движения). Все объединяется в стройные логические системы при помощи цифровых управляющих контуров и контроллеров оборудования. Общность такого слияния называется «умный дом», который и предоставляет возможности единого управления и наблюдения за всем комплексом устройств в него входящего. Причем контроль может осуществляться как в ручном режиме через какой-либо общий интерфейс, так и автоматическими возможностями, наподобие выполнения определенных сценариев, реакции на показания датчиков или даже голосовыми командами.

Самое, наверное, простое и удобное, что стоит вспомнить про «умные» системы в быту – это управление светом. К примеру, выключатель, как ручной прибор, становится не нужен (хотя и возможен). Можно представить себе, что свет включается сам, если датчик в помещении определил наличие человека. Причем, в зависимости от времени суток, включается только то освещение, которое в текущий момент необходимо.

Самое простое – человек один, вечер. Зашел в зал. Зачем зажигать люстру? Автоматически загорается только бра. А вот если зашло несколько людей – тогда да, включается люстра. Опять же. Ночью пошел человек в туалет. Зачем зажигать все освещение? Достаточно включить подсветку ему по дороге, да свет в самом туалете.

Или такой пример: в будние дни люди на работе. Можно запустить робот-пылесос, который к их приходу уберет и встанет на подзарядку. А вот в выходные надобности в этом нет. Соответственно центральный контроллер и действует. Вот это и есть система «умный» дом, которая сама, в зависимости от определенных параметров, производит те или иные действия.

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

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

3.6  Что такое «циклы системы»?

Циклы — это программный код в файлах /scripts/cycles_ *.php . Данный код обеспечивает функционирование отдельных «фоновых» процессов, не связанных с непосредственным ответом на запрос пользователя, а именно: обновление системного времени, периодические операции, выполнение запланированных задач, опрос показаний отдельного оборудования. Корректный запуск системы предполагает одновременный запуск системных циклов. Часть циклов может быть закрыто автоматически после запуска в виду того, что их работа не актуальна в соответствии с имеющимся оборудованием или настройками пользователя.

ConnectPack

Пакет интеграции системы MajorDoMo с сервисом Сonnect.

Основная задача пакета — обеспечить простой доступ к управлению системой через Интернет без необходимости каких-либо дополнительных настроек домашнего сетевого окружения.

Подключенные возможности:

  • CloudSync — синхронизация меню управления
  • CloudBackup — облачная резервная копия системы
  • Push-уведомления для приложения MajorDroid Official (https://play.google.com/store/apps/details?id=ru.s…)
  • MQTT broker — брокер данных MQTT
  • Яндекс.Диалоги/Google.Ассистент/Amazon.Alexa — интеграция с сервисами

CloudSync

Сервис синхронизации меню управления. Данный сервис активируется через настройки системы (Панель управления > Система > CONNECT > Настройки > Enable CloudSync). После его активации, пользователь может использовать адрес http://connect.smartliving.ru/menu.html для доступа к своей системе с использованием имени пользователя и пароля профиля в CONNECT-е

CloudBackup

Сервис резервного копирования данных на сервер CONNECT. При активации данного сервис (Панель управления > Система > CONNECT > Настройки > Enable CloudBackup) раз в сутки локальная система сохраняет резервную копию всех своих настроек на сервер CONNECT-а. Пользователь через личный кабинет может зайти, скачать эти данные и восстановить через раздел Резервного копирования. Таким образом, всегда есть возможность восстановить накопленные данные и настройки, независимо от локального окружения.

MQTT broker

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

MQTT-брокер может быть использован независимо от MajorDoMo.
Данные доступа:
сервер: connect.smartliving.ru
порт: 1883 (8883 для шифрованного TLS-соединения)
имя пользователя: <имя пользователя в connect-е>
пароль: <пароль в connect-e>

Для подписки/записи доступны топики, начинающиеся с имени пользователя. Например, если у вас в connect-е имя пользователя myUsername, то вы можете подписываться на топики myUsername/# и писать соответственно в топики такого же вида.

Яндекс.Диалоги

Можно управлять своим домом через систему Яндекс.Диалоги.
Фраза активации: «дом мажордом» (пример активации: «включи дом мажордом»).
Для работы сервиса необходимо пройти авторизацию по коду, код выдаётся в процессе диалога и привязывается к пользовательскому аккаунту через раздел Мой кабинет > Yandex.Dialog

Google.Ассистент

Можно управлять своим домом через систему Google.Ассистент. Авторизация происходит в процессе добавления навыка «Дом мажордом» (для русского ассистента) или MajorDoMo (для английского)

Amazon.Alexa

Можно управлять своим домом через систему Amazon.Alexa. Авторизация происходит в процессе добавления навыка Major Domo

Подробнее о настройке голосовых ассистентов: https://kb.smartliving.ru/category/oborudovanie/go…

Majordomo включение/выключение света по Wi-Fi

• 19-11-2018 •
Быстрые ссылки на Aliexpress

Тут больше будет про протокол MQTT, контроллер ESP8266 и Majordomo. Начинать нужно с малого, с самого принципа работы, и когда вы разберетесь с основой, вы без проблем сможете сделать более сложные проекты.

В этой записи, мы попробуем с приложения Majordomo управлять двумя светодиодами с помощью протокола mqtt.

Что нам для этого потребуется :

  1. Сервер majordomo
  2. Контроллер ESP8266
  3. Пара светодиодов
  4. Макетная плата
  5. Пара проводов

Сервер majordomo

Если вы еще не знакомы, что такое majordomo, то обязательно к прочтению Умный дом своими руками.

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

Первым делом перейдем в Устройства->MQTT.

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

Теперь нам надо добавить свои значения, которые будут передаваться в контроллер esp8266. С помощью данной процедуры мы будем передавать значения Вкл/Выкл с определенным названием, чтобы наш контроллер понимал, что мы обращаемся именно к нему и чтобы он понимал что делать дальше и какой светодиод включать/выключать, мы создадим 2 ветки. Одна будет отвечать за красный светодиод, другая ветка за зеленый.

Нажмите на кнопку добавить, справа сверху.

Достаточно заполнить 2 поля. Название (любое, какое захотите)

И путь, его важно запомнить и писать только латинскими буквами. Все остальное пропускаем и нажимаем добавить

Дальше создаем ветку для зеленого, называем как хотим, а путь прописываем следующим образом:

Пока этого достаточно, переходим к настройке контроллера.

Настройка ESP8266

Если вы не разу не работали с контроллером esp8266, то обязательно к прочтению подключение ESP8266 И DHT22

Устанавливаем на макетную плату 2 светодиода и присоединяем провода.

У светодиода минус — это короткая ножка и соответственно плюс — длинная.

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

После того как вы ознакомились с кодом и скопировали его в Arduino IDE, нужно загрузить код.

Осталось запустить MQTT сервер и проверять работу. Если вы не знаете как запустить MQTT, то обязательно к прочтению: Установка и запуск MQTT

После того, как вы загрузили код, запустили MQTT. Вам нужно снова зайти в

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

Если же загорелся, то это здорово! Теперь мы настроем так, чтобы можно было управлять светодиодом с главной страницы Majordomo.

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

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

Дальше нажимаем на кнопку, добавить объект, называем объект Led и класс выбираем тот, который только что создали.

Переходим в только что созданный объект и добавляем 2 свойства как на скриншоте. Один Green, другой Red.

После того как мы все добавили, переходим в настройки MQTT, где мы ранее создавали пути (один для зеленого, другой для красного). Начинаем их редактировать и где поле «Связанный объект» выбираем из списка нами созданный, после того как выбрали, в поле свойство выберите соответствующее свойство.

Отлично! Теперь последний штрих. Переходим в

Снизу вы увидите дочерние пункты

Выбираем любой из пунктов и присваиваем нами созданный объект Led и его свойство, к примеру Red. Готово! Теперь можно проверять!

Переходим на главную страницу Majordomo на вкладку управления и щелкаем тумблеры!

Эти тумблеры и есть дочерние пункты, которые мы редактировали. Вот и все дела.

Источник

1.1  Что такое Умный Дом?

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

  • Безопасность — повышение уровня безопасности за счёт постоянного контроля параметров работы технологических систем (отопление, водоснабжение, электричество и т.п.), а так же интеграция охранных компонентов (сигнализация, видео-наблюдение, GPS-трэкинг)
  • Экономия — поддержка оптимальных параметров энерго-потребления (электричество/тепло) и автоматический перевод систем в экономичный режим
  • Комфорт — централизованное управление всеми системами, автоматические сценарии последовательных действий, работа с мульти-медиа.

Устанавливаем PHP:

Для установки языка программирования PHP вводим следующую команду:

sudo apt-get install php php-cgi php-cli php-pear php-mysql php-mbstring php-xml -y

Устанавливаем CURL и его библиотеки:

sudo apt-get install curl libcurl4 libcurl3-dev php-curl -y

Устанавливаем PHP-модуль для веб-сервера Apache 2:

sudo apt-get install libapache2-mod-php -y

Включаем конфигурацию php7.3-cgi следующей командой:

sudo a2enconf php7.3-cgi

Перезапускаем сервис Apache:

sudo service apache2 reload

В редакторе nano создаем файл index.php в папке /var/www/html/

sudo nano /var/www/html/index.php

Вводим в созданный файл следующие строки:

C++

<html>
<body>
<div style=»width: 100%; font-size: 40px; font-weight: bold; text-align:center;»>
<?php
print Date(«Y/m/d»);
?>
</div>
</body>
</html>

1
2
3
4
5
6
7
8
9

<html>

<body>

<div style=»width: 100%; font-size: 40px; font-weight: bold; text-align:center;»>

<?php

printDate(«Y/m/d»);

?>

<div>

<body>

<html>

Сохраним изменения Ctrl+O, Enter, Ctrl+X, Enter.

В этой же папке у нас находится файл index.html. Удалим его командой:

sudo rm /var/www/html/index.html

Включаем работу коротким тегом <? /?> (для последних версий Apache). Для этого редактируем файл php.ini в папке /etc/php/7.3/apache2/

sudo nano /etc/php/7.3/apache2/php.ini

находим строчку:

C++

short_open_tag = Off

1 short_open_tag=Off

и меняем на:

C++

short_open_tag = On

1 short_open_tag=On

Если такой строчки нет, то просто вставляем в конце файла:

C++

short_open_tag = On

1 short_open_tag=On

Сохраним изменения Ctrl+O, Enter, Ctrl+X, Enter.

установка и настройка Web-сервера

Обновляем программные пакеты до актуального состояния.

sudo apt update && sudo apt upgrade

установку и настройку Web-сервера будем делать на базе Apache. Так же нужно установить систему управления базами данных — MySQL. Для установки Apache, в командную строку консоли вводим команду:

sudo apt-get install apache2 apache2-utils -y

запретим вывод версии Apache. Для этого откроем в редакторе Nano файл по пути:

sudo nano /etc/apache2/conf-enabled/security.conf

находим:

C++

ServerTokens OS

1 ServerTokens OS

меняем на:

C++

ServerTokens Prod

1 ServerTokens Prod

Сохраним изменения Ctrl+O, Enter, Ctrl+X, Enter.

Далее вносим изменения в его конфигурационный файл.

sudo nano /etc/apache2/sites-available/000-default.conf

Я просто удалил все записи из конфигурационного файла, и вставил в него следующее:

C++

<VirtualHost *:80>
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory «/usr/lib/cgi-bin»>
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

<VirtualHost*80>

DocumentRootvarwww

<Directory>

Options FollowSymLinks

AllowOverride All

<Directory>

<Directoryvarwww>

Options Indexes FollowSymLinks MultiViews

AllowOverride All

Order allow,deny

allow from all

<Directory>

ScriptAliascgi-binusrlibcgi-bin

<Directory»/usr/lib/cgi-bin»>

AllowOverride None

Options+ExecCGI-MultiViews+SymLinksIfOwnerMatch

Order allow,deny

Allowfromall

<Directory>

ErrorLog${APACHE_LOG_DIR}error.log

CustomLog${APACHE_LOG_DIR}access.log combined

<VirtualHost>

Сохраним изменения Ctrl+O, Enter, Ctrl+X, Enter.

Изменим следующий конфигурационный файл:

sudo nano /etc/apache2/apache2.conf

В самом его конце добавим вот такую строку:

C++

ServerName localhost

1 ServerName localhost

Сохраним изменения Ctrl+O, Enter, Ctrl+X, Enter.

Перезагрузим Apache:

sudo apache2ctl restart

4.5  Что значит «связанный» объект/свойство/метод?

В различных частях системы существует функциона «привязки» того или иного элемента с объектом, его свойством или его методом. Объекты являются основой хранения данных системы, а так же описанием функций работы с этими данными. Именно поэтому большинство модулей так или иначе ссылаются на объекты.

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

Например, привязав свойство какого-то объекта к свойству выключателя в модуле ZWave можно обращаться к этому свойству для получения последнего состояния физического выключателя, а так же использовать это свойства для установки значения (включения нагрузки), таким образом создаётся прозрачная двухсторонняя связь между физическим устройством и объектом системы MajorDoMo. Одно свойство объекта может быть привязано к нескольким элементам, так, если рассматривать предыдущие два примера, то можно объединить их в один, когда и для привязки выключателя в меню и для привязки выключателя ZWave мы используем одно свойство. В таком случае мы получаем управляемый через меню физический выключтатель.

Настройка MQTT на Sonoff Basic

Переходим в вебморду Tasmota по IP адресу реле

Питание от программатора или от сети 220V не важно, реле стартанет. Главное их не совмещать)))

  1. Жмем конфигурация.
  2. Конфигурация MQTT.
  3. Заполняем поля: Хост — IP адрес сервера MajorDoMo. Порт — по дефолту 1883. Клиент — имя реле в сети (SSID). Лучше поставить и записать, чтобы не путать реле. Блок пользователь/пароль заполняем если запаролили MQTT в MjDM. Топик — наша условная «папочка» для трансляции данных. Полный топик — не трогаем. Для меня это тонкая настройка))) Дело в том, что Tasmota создает префикс топика и сам топик, складывая информацию по разным «подпапкам». т.е. информация идет в три места сразу. Для кого-то это критично, но меня не напрягает. Тем более, что нам нужен будет из всего мусора только топик cmnd, где расположен статус реле — включено/выключено. Если к модулю прикручены различные дополнительные датчики мусор стоит все же отфильтровать прописав нужные ветки в Subscription path.
  4. Сохраняемся, ребутимся.

Через готовый образ docker

Для начала устанавливаем docker на вашу систему в соотстветствии с инструкцией, например для ubuntu это можно сделать по этой инструкции

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

Запускаем контейнер с указанием пути вашей папки docker run —init -d —name=»majordomo» -v /path/to/yours/www:/var/www/html —net=host —restart=always nick7zmail/majordomo:latest «`

После запуска контейнера, можно увидеть его командой docker ps

Если вы создали лишний контейнер, удалить ненужный можно командой ‘docker rm majordomo3’

Публичные порты контейнера можно посмотреть командой docker port majordomo.

При первом запуске контейнера происходит скачивание системы majordomo из официального репозитория, поэтому для запуска системы примерно через 5 минут необходимо перезагрузить контейнер.

»’
docker restart majodomo
»’

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

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

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 (ФРАЗА, УРОВЕНЬ, НАЗНАЧЕНИЕ) — в качестве НАЗНАЧЕНИЯ можно использовать системное имя терминала и если это терминал на 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).

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

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

Основной цикл Вариант 1. Systemd unit. Предпочтительный

Код юнита:

Description=Majordomo cycles service
Requires=network.target mysql.service apache2.service
After=mysql.service apache2.service


Type=simple
User=www-data
Group=www-data
ExecStart=/usr/bin/php /var/www/html/cycle.php
ExecStop=/usr/bin/pkill -f cycle_*

KillSignal=SIGKILL
KillMode=control-group
RestartSec=1min
Restart=on-failure


WantedBy=multi-user.target

Данный код необходимо скопировать в файл: /etc/systemd/system/majordomo.service Для этого открываем файл:

sudo nano /etc/systemd/system/majordomo.service

И вставляем в него код, который представлен выше.

Для автозапуска MajorDoMo при старте системы, необходимо выполнить команду:

sudo systemctl enable majordomo

И для запуска MajorDoMo необходимо выполнить:

sudo systemctl start majordomo

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий