Установщик. Версия 1.1.0b от 21.06.2016
Для корректной работы системы в Windows XP обязательно наличие установленных Microsoft Visual C++ Runtime
В процессе установки будет предложено обновление MajorDoMo до самой последней версии компонентов.
В нижеприведенном видео мы можете увидеть процесс установки MajorDoMo на Windows.
1. Установка
Для установки под windows-систему достаточно скачать установочный пакет, и запустить exe-файл. В процессе установки будет запрашиваться путь, однако на данный момент его рекомендуется оставить предложенным (c:_majordomo), т.к. в коде в нескольких местах он жёстко указан. Система будет запущена и при установке в другое место, но тогда надо будет пройтись поиском по файлам и заменить строчку c:_majordomo на новый путь.
После установки будет предложено запустить приложение, либо его можно будет запустить позже через ярлык в стартовом меню Windows.
2. Запуск
При запуске приложения осуществляется последовательность команд, описанная в файле c:_majordomostart.bat . Этот файл можно модифицировать, чтобы запускать какие-то свои сервисы.
По-умолчанию идёт запуск следующих компонент:
1. Пакет server2go (apache+mysql+php)
2. Приложение USBDeview.exe (слежение за подключаемыми USB-устройствами)
3. Основной скрипт системы cycle.php
Важно: Пакет server2go пытается запуститься как стандартный веб-сервер на 80-ом порту, но если он занят, то будет автоматически использован альтернативный порт, что не хорошо, т.к. остальные компоненты системы рассчитаны на работу на стандартном порту. Проблема с 80-м портом может быть только в том случае, если он занят другим приложением — такое часто случается из-за запущенного Skype-а, который так же использует 80-ый порт для своих нужд. Чтобы такого не происходило, нужно в настройках Skype отключить опцию «Use port 80 and 443 as alternatives for incoming connections» (раздел Advanced -> Connection).
Корректность запуска можно (и нужно) проверить открыв в браузере ссылку http://localhost/ — должна открыться стартовая страница сервиса. Если всё установилось правильно, то поздравляю — вы стали счастливым обладателем системы MajorDoMo 🙂
Важно проверить на компьютере на котором работает система, что по адресу http://localhost/ и http://127.0.0.1/ она открывается. Иначе некоторые сервисы могут не работать.
Доступ к системе осуществляется по адресу http://[адрес компьютера]/, с мобильного телефона по адресу http://[адрес компьютера]/menu.html
В дальнейшем можно произвести более тонкую настройку компонентов системы.
Имя пользователя/пароль для входа в настройки системы: admin / admin
Дополнительно: В файле start.bat закомментировано несколько встроенных приложений, которые можно раскомментировать при необходимости:
-neutron.exe — синхронизация времени по атомным часам
-batteryrun.exe — реакция на тип питания компьютера (от батареии или от сети)
-USBDeview.exe — реакция на подключаемые USB-устройства
Теги:
<<<
Назад
Новичкам. Установка для самых маленьких.
MajorDoMo — основные способы получить рабочий вариант на 01.08.18 — Только для обычных смертных.
Представленные ниже варианты предназначены для пользователей, которые не знают что такое гитхаб, но хотят установить MajorDoMo сами. Все способы проверены и являются рабочими на указанную дату.
Как установить MajorDoMo на Windows?
- Выбрать ОС. На данный момент поддерживаются Windows10 и Windows7
- Скачать и установить Visual C++ Runtime (для х64 оба набора)
- Скачать и установить дистрибутив MajorDoMo для Windows.Установщик. Версия 1.2.0b от 28.02.2018 Для Windows 7 Не запускать после установки!!!
- Для Windows7 Скачать ПАТЧ и следуя инструкциям установить его! Указанные в инструкции папки лучше удалить, система становится отзывчивее!
- Теперь можно запустить и потыкать мышкой в кнопки.
Как установить MajorDoMo на Linux?
Вариант 1. Проверенно только для Ubuntu Server 16.04
- Скачать и установить дистрибутив Ubuntu Server 16.04
- Используя эту ссылку внимательно прочитать порядок действий.
Вариант 2.
- Подходит для
- OrangePiPC — Armbian 5.36 user-built Ubuntu 16.04.3 LTS 3.4.113-sun8i
- Asus Tinker Board — Armbian 5.36 user-built Ubuntu 16.04.3 LTS 4.4.102-rockchip
- Raspberry pi 3 — raspbian stretch desktop
- OrangePi Win Plus — Armbian 5.37 server
- OrangePi PC — DietPi
- Intel Edison — JubiLinux (перед запуском скрипта установки следуйте инструкции)
- OrangePi PC2 — Ubuntu 16.04.4 LTS
- x86-AMD64 — Ubuntu
- OrangrPi Plus2 (H3 с HDD) и OrangrPi — Prime (H5) ‘ARMBIAN 5.38 stable Ubuntu 16.04.4’
Идем и смотрим руководство ТУТ
Вариант 3. для Raspberry Model B+ и Model B
Базовый образ MajorDoMo для Raspberry
Подробная инструкция и обсуждение образов тут
Вариант без выделенного сервера:
Если вы обладатель системы Windows 10 pro, то вам доступен функционал Hyper-v.
- Установить Hyper-v
Откройте консоль PowerShell от имени администратора.
Выполните следующую команду.
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
Если не удается найти команду, убедитесь, что вы используете PowerShell от имени администратора.
После завершения установки выполните перезагрузку.
- Создать виртуальную машину. В системе есть мастер, который проведет вас по созданию, обратите внимание что «поколение машины» для Ubuntu должно быть первым!!!.
- На последнем этапе согласиться с предложением установить ОС с образа диска. (тут вы должны иметь либо iso образ Windos либо Ubuntu)
- Далее по описанной выше схеме.
з.ы. Чуть позже дополню скриншотами.
Обсуждение (5)
(4)
MajorDoMo is available for:
Windows
Linux
!!! Please note that Linux and Windows versions could be slightly different in functionality.
Installation on Windows
Step 2
Download and install Pack. version 1.2.0b from 28.02.2018 (full, ~100Mb) DOWNLOAD
Installation Linux
Some variants for single-board computers
Script for installation on clear RaspberryPi, OrangePi, Asus tinker board etc.
OrangePi PC (OrangePi Plus, OrangePi PC+, OrangePi 2) — image and manual for installation on SD-card.
Linux — others
Manual «How install MajorDoMo on Linux»
Video
Script for installation on clear RaspberryPi, OrangePi, Asus tinker board etc.
Additional software
Arduino
Arduino GW — software for direct connection Arduino-controllers for MajorDoMo
Addon for Chrome
addon, which help use Chrome as a speech recognition system (Discussion)
Пожалуй каждый, кто решил свой дом сделать умным, останавливается на мажордомо, так как он удобен по многим параметрам. Но если же вы никогда прежде с ним не работали, то начать будет достаточно трудно, даже если у вас есть опыт в программировании.
Установка
Первый мой совет:
Если вы никогда раньше не использовали linux. То лучше выбирайте сервер где будет Majordomo на windows.
Изначально я планировал использовать Raspberry PI, как сервер. Но из-за не достаточного опыта в linux, я так и не смог решить ряд проблем по настройке Majordomo. По этому установил majordomo на старый ноутбук, где уже долгое время, безотказно работает и меня по всем параметрам устраивает.
Это просто мой личный опыт, возможно у вас будет все по другому.
Для установки, вам нужно перейти по ссылке и выбрать инсталлятор для вашей OS. И дальше следовать инструкциям. Тут обычно проблем не возникает.
Первые шаги
После установки, вы можете запустить любой браузер и ввести в поле для ссылок слово localhost. Если вы установили все правильно и majordomo у вас запущен, вы зайдете на главную страницу умного дома.
Выглядеть она будет примерно следующем образом:
На левой стороне: меню, где вы можете размещать свои кнопки, блоки с текстом, регуляторы и прочие крутилки, которые будут отвечать за то или иное действие. С правой стороны, это сцены. На сценах можно размещать графики, ссылки, картинки (к примеру план дома), те же кнопки. Да в принципе, все что пожелаете.
В целом, перед вами панель, где вы сможете управлять вашим домом. А как вы его оформите, зависит от вас самих.
Рабочий стол
Сверху справа есть кнопка «Панель управления»
Она так же видна и на предыдущем скриншоте. Эта ссылка введет на рабочий стол, где и будет происходить вся «магия» с вашим домом. Тут вы сможете обрабатывать всю логику, процессы, смотреть за состоянием дома и многое другое.
С левой стороны есть вкладки, рассмотрим несколько из них:
- Устройства: В этой вкладке вы сможете добавлять ваши устройства, к примеру выключатель, датчик температуры, датчик дыма и другие.
- Приложения: Дополнительные приложения, которые облегчат вам жизнь. К примеру приложение telegram, вы сможете отправлять сообщение к себе на telegram при каком либо событии, предположим сработал датчик дыма, и вам тут же пришло на телеграм оповещение, о том что много дыма.
- Система: Тут вы можете отслеживать ошибки системы, обновлять систему, а так же скачивать дополнения (модули), к примеру тот же telegram.
Есть и другие вкладки, мы их рассмотрим чуть позже.
Добавляем первое устройство
Перед тем как добавлять новое устройство, вы должны понимать как оно будет работать. Предположим у вас есть умный выключатель (умный означает, что у него есть свой API и он может передавать свое состояние другим устройствам, к примеру серверу majordomo).
Первый вопрос, который у вас должен возникнуть: Как сервер будет принимать состояние выключателя. Предположим у вас самодельный выключатель и скорее всего вы будете передавать по протоколу MQTT. Если же вы далеки от паяльника и самодельных устройств, то рекомендую смотреть в сторону Xiaomi, у них есть свои устройства для умного дома, которые достаточно просто внедрить в ваш умный дом.
Для обоих вариантов вам потребуется скачать дополнительный модуль. Предположим у вас выключатель от Xiaomi. Тогда перед тем как продолжить обязательно к прочтению статьи: Как подключить xiaomi к majordomo.
После того как вы справились и подключили xiaomi, вам нужно перейти в Устройства->Простые устройства и добавить новое.
Называем устройство так, как вам удобнее, предположим «Свет в гостиной«, дальше указываем тип устройства, связанный объект создаем автоматически, выбираем местоположение (Для того, чтобы создать свои местоположения, нужно перейти Настройки->Расположение). И нажимаем добавить.
Мы добавили устройство, а это означает, что мы создали объект. Объекты, в данном случае, это и есть ваши устройства, у которых есть свои свойства, к примеру состояние Вклвыкл, а также методы.
Методы — это функция, которые может выполнять разные действия, предположим вы включили свет в одной комнате, а так же хотите, чтобы он включался и в другой, для этого и есть методы.
Для наглядности, давайте найдем наш объект. Объекты->Объекты и находим наш объект отталкиваясь от скриншота:
Скорее всего, он будет называться так же Relay01. Если вы перейдете в объект, то перед вами появятся 3 вкладки Детали, Свойства, Методы. О них я и говорил ранее. Если перейти во свойства, то вы можете найти свойство Relay01.status. Это и есть главное свойство выключателя вклвыкл.
Теперь когда мы убедились, что наше устройство создалось и объект существует, нам нужно привязать свойство status, к реальному устройству.
Реальное устройство
Для этого переходим в Устройства->Xiaomi Home и выбираем то устройство, которое хотим привязать.
Нажимаем на карандашик, дальше переходим на вкладку «данные«.
Находим колонку Channel, к нему мы привязываем наш соданный объект и свойство status, как на скриншоте.
Теперь, когда вы будете вклвыкл свет, в объекте в реальном времени будет изменяться значение status. Осталось вывести выключатель на главную страницу.
Меню управления
Объекты->Меню управления
Добавляем новый раздел и заполняем как на примере:
После того, как вы нажмете добавить, у вас появятся на этой же странице новые поля, вам понадобятся только 2:
- Связанный объект
- Свойство
Выбираем наш объект, свойство status и сохраняем изменения.
Теперь, если перейти на главную страницу умного дома, то с левой стороны вы увидите вами добавленный выключатель и если его по нажимать, то вы увидите как реальный выключатель включает и выключает свет в гостиной.
Вот и все что нужно знать
Это все что вам нужно знать на данном этапе, чтобы понять как работает система majordomo. Все остальное будет приходить с опытом. Так же будут появляться новые вопросы, которые я постараюсь ответить в этой рубрике.
Вы уже можете узнать как сделать собственный выключатель. Если остались вопросы, пишите в комментариях.
-
Log in
-
Join
Watch in our app
Open in app
Время прочтения
8 мин
Просмотры 37K
Система умного дома сейчас в моде. Каждый хочет у себя дома сделать какую-нибудь автоматизацию. Например, когда вы подходите к своему дому, чтоб камера стоящая на улице вас распознала и отключила систему безопасности. Либо если к вам пытается кто-то залезть, чтоб система приняла какие-то меры. Также систему умного дома можно настроить так, чтоб она поддерживала необходимую влажность, температуру и т.п. в доме, управление освещением с мобильных устройств, прогноз погоды, курс валют и многое другое. Естественно, чтоб всем этим можно было управлять голосовыми командами. Всё это (и не только это) можно настроить в системе умного дома MajorDoMo (Major Domestic Module или Главный Домашний Модуль).
Установка
MajorDoMo можно скачать с сайта разработчика. На сайте также есть инструкция по установке, поэтому на этом мы останавливаться не будем. Хочу отметить, что MajorDoMo можно установить на всякие миникомпьютеры(хоть на телефон или планшет), так что за энергопотребление и шум не переживайте.
Когда вы установите MajorDoMo и в браузере в адресной строке пройдете по ссылке 127.0.0.1 (если устройство установлено на ваш компьютер), либо по ссылке того устройства, куда установили MajorDoMo. То вы увидите что-то подобное
Скрытый текст
Либо в темном варианте, в зависимости от того что вы выбрали.
Настройка сцен
Хотелось бы подробно остановиться на сценах. Суть сцен в том, что вы видите план своей квартиры, можете навешать на него различные информационные или интерактивные элементы. Я же попытаюсь рассказать о том, как правильно создавать сцены, настраивать их и дополнять.
Для начала нам нужно определиться на каком устройстве мы хотим, чтоб отображался весь наш функционал (нужно знать разрешение экрана). В моём случае это 1024х600 (планшет).
Также хочется, чтоб при запуске сервера открывалась не главное окошко, которое я показывал выше, а сразу главная сцена, в которой будет уже весь интерактив.
Главная сцена
Для того, чтобы запускалась сразу главная сцена, то нужно зайти в Панель управления (расположена на главной странице), в разделе Объекты есть пункт сцены. Там и будет находится наша сцена, находим напротив этой сцены глаз и клацаем на него.У нас откроется новая вкладка с примерно таким адресом 127.0.0.1/popup/scenes/1.html. Чтоб эту сцену развернуть на весь экран просто жмём F11. По умолчанию на сцене есть один переключатель Switch 1, можно поклацать по нему, посмотреть что будет.
Мы научились отображать нашу сцену, отлично. Но всё таки эта сцена совсем некрасивая и хочется что-то более интересное. Вот например:
Главная сцена
Для того, чтобы установить себе подобную сцену ее нужно для начала скачать. Эту сцену делал не я, я её лишь изменил под себя и настроил, именно об этом эта статья.
Распаковываем архив и видим там один файл Главная_Elements18-38-16.elements. Теперь идем в Панель управления -> Объекты -> Сцены и жмем Добавить новую сцену. Даём ей какое-то название, находим в интернете картинку для фонового изображения (не забываем, что картинка должна быть нужного разрешения, сохраняем картинку в папку htdocscmsscenesbackgrounds) и жмем кнопку Добавить. После этого переходим во вкладку Элементы выбираем скачанный ранее файл и жмём Импортировать. Видим, что у нас появились новые элементы. Давайте же посмотрим на то, что у нас получилось и если у вас разрешение не 1024х600 то во вкладке Просмотр & Редактировать можно это изменить.
Обратите внимание, что нет никакой анимации, а ведь так хотелось… Что же, давайте это исправим. Во вкладке Элементы есть элемент general_CSS (only CSS) в нём и находятся все стили для наших элементов. Там есть такой CSS код
Скрытый текст
@import url("https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css");
/* -----------------------------------------------------------------------*/
/* ОБЩЕЕ СОБРАНИЕ КОДА ДЛЯ АНИМАЦИИ */
/* -----------------------------------------------------------------------*/
.element_84 { animation: fortime 1s ease-out; } /* - блок времени */
.element_85 { animation: forweather 1.6s ease-out; } /* - блок погоды */
.element_94 { animation: forweather 1.4s ease-out; } /* - блок STATUS SYSTEM */
.element_86 { animation: forshowing 1.2s ease-out; } /* - блок отображения - panel-showing1 */
.element_90 { animation: forshowing 1.4s ease-out; } /* - блок отображения - panel-showing2 */
.element_91 { animation: forshowing 1.6s ease-out; } /* - блок отображения - panel-showing3 */
.element_92 { animation: forshowing 1.8s ease-out; } /* - блок отображения - panel-showing4 */
.element_88 {animation: forlog 1.2s ease-out; } /* - ,блок отображения - log_alice */
.element_103 { animation: forfunctions 1s ease-out; } /* - блок - panel-functions1 */
.element_105 { animation: forfunctions 1.2s ease-out; } /* - блок - panel-functions2 */
.element_106 { animation: forfunctions 1.1s ease-out; } /* - блок - panel-functions3 */
.element_107 { animation: forfunctions 1.4s ease-out; } /* - блок - panel-functions4 */
.element_152 { animation: forfunctions 1.3s ease-out; } /* - блок - panel-functions5 */
.element_108 { animation: forfunctions 1.5s ease-out; } /* - блок - panel-functions6 */
/* ------------------------------------------------------------------------------------------------------------------------------------------- */
/* -----------------------------------------------------------------------*/
/* контейнер - log_alice */
/* -----------------------------------------------------------------------*/
.element_88 {
-moz-border-radius: 10px 0px 0px 10px;
-webkit-border-radius: 10px;
border-radius: 10px 0px 0px 10px;
padding: 10px;
}
/* -----------------------------------------------------------------------*/
/* контейнер - status_system_icons */
/* -----------------------------------------------------------------------*/
.element_94 {
-moz-border-radius: 10px 0px 0px 10px;
-webkit-border-radius: 10px;
border-radius: 10px 0px 0px 10px;
padding: 2px;
}
/* -----------------------------------------------------------------------*/
/* контейнер - temp_home_1_floor и humidity_home_1_floor */
/* -----------------------------------------------------------------------*/
.element_109,
.element_140 {
display: table;
}
.element_109 .fa,
.element_109 .texttemp,
.element_140 .fa,
.element_140 .texttemp
{
display: table-cell;
font-size: 28px;
/* font-weight: bold;*/
line-height: 1;
padding: 0 5px 0 0;
}
/* -----------------------------------------------------------------------*/
/* панель погоды */
/* -----------------------------------------------------------------------*/
.panel-weather {
box-sizing: border-box;
color: white;
background-color: rgba(0, 0, 0, 0.4);
text-shadow: 0 0 4px rgba(0, 0, 0, 0.4);
/* выше общее */
position: absolute;
/* top: 0px; */
/* right: 0px; */
width: 480px;
text-align: center;
cursor: pointer;
-moz-border-radius: 10px 0px 0px 10px;
-webkit-border-radius: 10px;
border-radius: 10px 0px 0px 10px;
}
.panel-weather .location {
background-color: rgba(0, 233, 233, 0.6);
font-size: 22px;
line-height: 1.2;
text-align: center;
font-family: arial;
font-weight: 100;
-moz-border-radius: 10px 0px 0px 0px;
-webkit-border-radius: 10px;
border-radius: 10px 0px 0px 0px;
}
.panel-weather img {
width: 96px;
margin: 10px 50px 0 0;
}
.panel-weather .temp-weather {
font-family: arial;
font-weight: 600;
display: inline-block;
vertical-align: top;
font-size: 96px;
line-height: 1.4;
}
.panel-weather .temp-weather .degree {
font-family: arial;
font-weight: 600;
font-size: 32px;
line-height: 1.4;
vertical-align: top;
}
.panel-weather .text-weather {
font-family: arial;
font-weight: 200;
font-size: 22px;
line-height: 1.4;
margin: 0 0 4px 0;
}
/* -----------------------------------------------------------------------*/
/* панель времени */
/* -----------------------------------------------------------------------*/
.panel-time {
box-sizing: border-box;
color: White;
background-color: rgba(0, 0, 0, 0.4);
text-shadow: 0 0 4px rgba(0, 0, 0, 0.4);
/* выше общее */
position: absolute;
top: 0px;
width: 480px;
-moz-border-radius: 0px 10px 10px 0px;
-webkit-border-radius: 0px;
border-radius: 0px 10px 10px 0px;
/* animation: fortime 1s ease-out;*/
}
.panel-time .time {
font-size: 140px;
line-height: 1.1;
text-align: center;
font-family: arial;
font-weight: 600;
}
.panel-time .time .blnk {
font-size: 140px;
line-height: 1.1;
text-align: center;
font-family: arial;
font-weight: 600;
animation: blink 1s ease infinite;
}
.panel-time .date {
background-color: rgba(0, 233, 233, 0.6);
font-size: 22px;
line-height: 1.2;
text-align: center;
font-family: arial;
font-weight: 100;
-moz-border-radius: 0px 0px 10px 0px;
-webkit-border-radius: 0px;
border-radius: 0px 0px 10px 0px;
}
/* -----------------------------------------------------------------------*/
/* блоки отображения данных */
/* -----------------------------------------------------------------------*/
.panel-showing1,
.panel-showing2,
.panel-showing3,
.panel-showing4 {
box-sizing: border-box;
color: white;
background-color: rgba(0, 0, 0, 0.4);
/* text-shadow: 0 0 4px rgba(0, 0, 0, 0.4); */
position: absolute;
width: 480px;
overflow: hidden;
cursor: pointer;
background-color: initial;
}
.panel-showing1 ul,
.panel-showing2 ul,
.panel-showing3 ul,
.panel-showing4 ul {
padding: 0;
}
.panel-showing1 ul li,
.panel-showing2 ul li,
.panel-showing3 ul li,
.panel-showing4 ul li {
padding: 0;
background-color: rgba(0, 0, 0, 0.5);
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
border-radius: 10px;
}
.panel-showing1 ul li .sense_snowing_1,
.panel-showing1 ul li .title,
.panel-showing1 ul li .sense_snowing_0,
.panel-showing2 ul li .sense_snowing_1,
.panel-showing2 ul li .title,
.panel-showing2 ul li .sense_snowing_0,
.panel-showing3 ul li .sense_snowing_1,
.panel-showing3 ul li .title,
.panel-showing3 ul li .sense_snowing_0,
.panel-showing4 ul li .sense_snowing_1,
.panel-showing4 ul li .title,
.panel-showing4 ul li .sense_snowing_0 {
display: inline-block;
font-size: 20px;
line-height: 1.6;
padding: 3px 8px;
font-family: monospace;
font-weight: lighter;
}
.panel-showing1 ul li .sense_snowing_1,
.panel-showing2 ul li .sense_snowing_1,
.panel-showing3 ul li .sense_snowing_1,
.panel-showing4 ul li .sense_snowing_1 {
float: right;
width: 180px;
text-align: center;
font-family: monospace;
font-weight: lighter;
background-color: rgba(0, 233, 233, 0.6);
color: white;
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
border-radius: 10px;
}
.panel-showing1 ul li .sense_snowing_0,
.panel-showing2 ul li .sense_snowing_0,
.panel-showing3 ul li .sense_snowing_0,
.panel-showing4 ul li .sense_snowing_0 {
float: right;
width: 180px;
text-align: center;
font-family: monospace;
font-weight: lighter;
background-color: rgba(0, 40, 40, 0.6);
color: rgba(190, 190, 190, 1);
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
border-radius: 10px;
}
/* -----------------------------------------------------------------------*/
/* блоки кнопок функций */
/* -----------------------------------------------------------------------*/
.panel-functions {
box-sizing: border-box;
color: white;
/* background-color: rgba(0, 0, 0, 0.4); */
/* text-shadow: 0 0 4px rgba(0, 0, 0, 0.4); */
position: absolute;
width: 100%;
bottom: 0px;
padding: 0px;
align-items: center;
justify-content: space-around;
}
.panel-functions .icon {
margin: 0;
width: 82px;
height: 82px;
padding: 10px;
text-align: center;
cursor: pointer;
border: 9px solid rgba(0, 233, 233, 0.6);
-moz-border-radius: 82px;
-webkit-border-radius: 82px;
border-radius: 82px;
}
.panel-functions .icon .fa {
margin: 7px 0px 0px 0px;
font-size: 70px;
}
.panel-functions .icon .title {
font-size: 8px;
text-align: center;
text-transform: uppercase;
/* display: none; */
}
/* ------------------------------------------------------------------------ */
Подробно на нём останавливаться не будем, остановимся только на .element_* (в комментариях написано для какого элемента нужно вписать нужный нам id). Тут * это id нашего элемента (блок времени, например), для каждого такого элемента нужно поставить тот id, который будет у вас. Чтоб узнать этот id переходим во вкладку Элементы и находим нужный нам элемент(для блока времени panel-time) и клацаем по panel-time, чтоб узнать для него id. В адресной строке в конце и будет написан id для panel-time, возвращаемся в general_CSS (only CSS) и для блока времени ставим тот id, который мы уже узнали(для одного элемента меняем в двух местах, если требуется). Эти действия нужно проделать для каждого .element_*. После того, как это все будет проделано можно узнать заходим в Панель управления -> Объекты -> Сцены жмем на глаз у узнаем по какому адресу располагается наша созданная сцена.
Заключение
Итак, мы немного познакомились с системой умного дома MajorDoM, а также научились настраивать нашу главную сцену. В получившейся сцене пока мало чего настроено в дальнейших статьях мы её полностью настроим, а также сделаем еще отдельные сцены погоды, маршрутов, видео, диаграмм, управления и настроек. Хотелось бы отдельно поблагодарить пользователя
Vovix
за то, что он сделал такую замечательную сцену. А также самого разработчика MajorDoMo —
Сергея
. Надеюсь эта статья будет кому-то полезна.
Спасибо за внимание.
Введение
Итак…вы установили систему. Скачали установщик для windows, или готовый образ Linux – без разницы. Система запустилась и работает.
Возникают вопросы – а что же делать дальше? Что сейчас может система? Что можно в ней поменять? Как что-то добавить?
Данный цикл статей предназначен как раз чтобы ответить на них. А начнем мы, пожалуй с интерфейсов системы. Ведь это то, с чем напрямую взаимодействует пользователь.
Сперва посмотрим на то, что у нас имеется (все скрины и описания приведены для свежего (только что установленного) дистрибутива для windows…в некоторых образах Linux интерфейс немного более наполненный демо-материалами, но сути это не меняет).
Чтобы открыть основной интерфейс системы нужно ввести в браузере
http://127.0.0.1 (или http://localhost), если вы входите с того компьютера, где установлен MajorDomo
http://<ip-адрес компьютера с MajorDomo в сети>,если вы входите с любого другого устройства в сети
и у вас должна открыться главная страница.
Если это ваш первый запуск, то должна открыться страница first_start.html. Если она не открылась (это может произойти, если вы установили готовый образ. Так же в последнем установщике под windows она почему-то тоже не открывается) – можно сделать это вручную, зайдя в настройки (Control Panel->SETTINGS->General settings, и там ищем, к примеру, Time Zone, и нажимаем ссылку Update) или же вбив в браузере после адреса /popup/first_start.html.
С этой страницы и начнем. Она простая, с базовыми настройками. Тут нужно выбрать
- Ваш часовой пояс
- Язык системы
- Цветовую тему интерфейса (Тёмная/Светлая)
Поменять эти настройки так же можно, зайдя повторно на данную страницу.
Теперь взглянем на все доступные интерфейсы. Каждый из этих интерфейсов может быть выбран как приоритетный для управления системой…либо может быть несколько приоритетных, в зависимости от используемых устройств.
1.6 Оправдана ли покупка всего оборудования для использования в системе с экономической точки зрения?
Одна из функций подобных систем, это экономия расхода энерго-ресурсов и при правильной настройке и установке эта экономия начинает ощущаться в самое ближайшее время после ввода системы в эксплуатацию. Однако, действительно ли это выгодно надо считать, сопоставляя затраты и итоговую экономию. К сожалению, не всегда можно сделать однозначный вывод об экономическом эффекте. Тем не менее, было бы не правильно рассматривать данный класс систем только как средство экономии. Скорее, экономия это один из положительных эффектов, возникающий на ряду со многими другими — повышение безопасности, комфорта и качества жизни в целом. Насколько эти плюсы экономически оправданны, каждый решает для себя индивидуально.
MajorDoMo
Устанавливаем git:
apt install git
Скачиваем установочный пакет:
git clone https://github.com/sergejey/majordomo.git
Переносим каталог majordomo в каталог веб-сервера:
mv majordomo /var/www/
Воспользуемся шаблоном конфигурационного файла:
cp /var/www/majordomo/config.php.sample /var/www/majordomo/config.php
Настроим подключение к базе данных:
vi /var/www/majordomo/config.php
Define(‘DB_HOST’, ‘localhost’);
Define(‘DB_NAME’, ‘majordomo’);
Define(‘DB_USER’, ‘majordomo’);
Define(‘DB_PASSWORD’, ‘majordomo123’);
* где DB_NAME majordomo — имя базы данных; DB_USER majordomo — учетная запись; DB_PASSWORD majordomo123 — пароль для учетной записи mysql.
Задаем права:
chown -R www-data:www-data /var/www/majordomo
Настройка PHP
Настраиваем php.ini для apache:
vi /etc/php/7.2/apache2/php.ini
short_open_tag = On
max_execution_time = 90
max_input_time = 180
post_max_size = 200M
upload_max_filesize = 50M
max_file_uploads = 150
Настраиваем php.ini для unix shell:
vi /etc/php/7.2/cli/php.ini
short_open_tag = On
Настройка Apache
Настраиваем виртуальный домен:
vi /etc/apache2/sites-enabled/majordomo.conf
<VirtualHost *:80>
Define root_domain majordomo.dmosk.local
Define root_path /var/www/majordomo
ServerName ${root_domain}
DocumentRoot ${root_path}
<Directory ${root_path}>
AllowOverride All
</Directory>
</VirtualHost>
Проверяем конфигурацию apache и перезапускаем сервис:
apachectl configtest
systemctl restart apache2
Настройка MySQL
Подключаемся к MySQL:
mysql -uroot -p
Создаем базу данных и пользователя:
> CREATE DATABASE majordomo DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
> GRANT ALL PRIVILEGES ON majordomo.* TO majordomo@localhost IDENTIFIED BY ‘majordomo123’ WITH GRANT OPTION;
> q
Импортируем базу данных:
mysql -v -u root -p majordomo < /var/www/majordomo/db_terminal.sql
Веб установка
Запускаем скрипт в консоли:
php /var/www/majordomo/cycle.php
В браузере открываем сервер по настроенному виртуальному домену (в нашем случае, majordomo.dmosk.local) — в открывшемся окне выбираем русский язык и нажимаем Continue:
Готово.
3.4 Каким средствами осуществляются голосовые уведомления?
Одна из активно используемых возможностей системы, это голосовое оповещение о тех или иных событиях. Для реализации этого могут быть задействованы следующие средства:
- Движок Google TTS (Windows/Linux) — каждая фраза отправляется в соответствующее API сервиса Google, возвращается звуковой файл, который в последствии воспроизводится. Данный способ требует наличие интернет-соединения, хотя однажды запрошенные фразы “кэшируются” локально и могут быть воспроизведены и без обращения к внешним сервисам
- Windows TTS (Windows) — встроенная в систему Windows универсальная подсистема синтеза речи. Данная подсистема может быть модифицирована покупкой и установкой более современных языковых движков, например Alyona от Acapella Group.
Кроме того, через систему настроек можно интегрировать собственный голосовой движок, описав команды его вызова.
Компоненты системы MajorDoMo
Основное понятие, вводимое цифровым домом «MajorDoMo» – объект, множество которых в свою очередь делится на различные классы. И каждый из них имеет свои свойства и методы взаимодействия. К примеру, класс «лампочки», в который могут относиться объекты «люстра в зале», «подсветка зеркала», «свет на кухне». У каждого есть свойство «статус» со значением «включено» и «выключено», а также метод «зажечь» и «погасить».
Это наиболее простой вид объяснения разделения всего комплекса связанного оборудования в пределах понятий MajorDoMo. То есть, методы и свойства распределяются в зависимости от класса объекта и принадлежат только подобным ему.
Объекты
Объект MajorDoMo в изначальной своей, аппаратной форме –это контроллер с возможностью связи между управляемым устройством или датчиком и центральной системой, на которой находится программный комплекс MajorDoMo.
В качестве аппаратной составляющей выступает как оборудование самостоятельной сборки, так и выпускаемое некоторыми производителями уже в комплекте, к примеру фирмой Xiaomi. «Умный» дом MojorDomo поддерживает массу протоколов обмена – MQTT, Z-Wave, Broadlink (без возврата состояния) и множество других.
Классы
Как уже говорилось, класс объединяет объекты одного типа. К примеру, класс «выключатели» с состояниями (включено/выключено) и двумя методами (включить/погасить). Или класс «датчики движения» со свойством, у которого значения изменяются в пределах «присутствует движение/нет движения».
Есть и возможность дополнительного разветвления в одной общности – введение подкласса. Самым понятным примером станут выключатели. Бывают контроллеры света, которые не только умеют включать и выключать напряжение, но и плавно его изменять. То есть в парадигме понимания системы умного дома мажордомо у класса «выключатели» конкретного типа есть еще и дополнительное свойство «яркость». В общем виде можно расписать эту взаимосвязь следующим образом:
Класс «выключатели» |
Свойства: Статус = включен|выключен Методы: Включить|Выключить |
||
«Свет в кухне» |
|||
«Свет в прихожей» |
|||
«Свет в ванной» |
|||
Подкласс «ВыключателиСДиммером» |
Наследуемые свойства: Статус = включен|выключен Наследуемые методы: Включить|Выключить собственное устанавливаемое свойство: Яркость = значение |
||
«Свет в спальне» |
|||
«Свет в зале» |
Свойства
Для большинства устройств в пределах «умного дома» характерно не только следование указаниям контролирующей части, но и возврата своего состояния. Это и есть свойство объекта.
Кроме того, параметрам можно устанавливать значения, которые будут возвращаться в устройство. К примеру, у класса «кондиционеры» можно устанавливать значение свойства «температура», которое будет обрабатываться самим кондиционером, в зависимости от которого он и будет поддерживать режим работы.
Методы
В рамках системы, «методы» — это те управляющие действия, которые могут быть произведены с каким-либо входящим в ее состав устройством. К примеру, у класса «выключатели» это «включить»| «выключить», у «двери» – «открыть»| «закрыть» и тому подобные.
Время/интервалы
time() — возвращает текущее время в формате timestamp.
timeConvert($tm) — конвертирует время из hh:mm в формат time() на сегодняшнее число
timeNow($tm) — возвращает в текстовом виде время типа “16 часов 40 минут”. Если $tm не задан, то возвращает текущее время. $tm в формате time.
isWeekEnd() — выходной да/нет = 1/0
isWeekDay() — будний день да/нет = 1/0
timeIs($tm) — проверяет совпадает ли текущее время с передаваемым в формате hh:mm
timeBefore($tm) — сравнивает время $tm (hh:mm) и текущее. Если текущее меньше, то 1 иначе 0
timeAfter($tm) — сравнивает время $tm (hh:mm) и текущее. Если текущее больше, то 1 иначе 0
timeBetween($tm1, $tm2) — проверяет входит ли текущее время в заданный интервал (каждое hh:mm, причем $tm1 может быть больше чем $tm2, например 23:00 05:00)
recognizeTime($text) — функция пытается из фразы извлечь конкретное время/дату. Например $text может быть “завтра в 9:30” или “через 5 минут”
При вызове любого метода (но не сценария!) доступны переменные:
$prevRun — время последнего вызова (в формате timestamp)
$prevRunPassed — сколько секунд прошло с последнего вызова
$this — Указатель на себя. Используется в методах классов. Например:
PHP
$this->setProperty(“status”,1); // устанавливает свойство status в 1, объекту для которого вызван
1 | $this->setProperty(“status”,1);// устанавливает свойство status в 1, объекту для которого вызван |
3.6 Что такое “циклы системы”?
Циклы — это программный код в файлах /scripts/cycles_ *.php . Данный код обеспечивает функционирование отдельных “фоновых” процессов, не связанных с непосредственным ответом на запрос пользователя, а именно: обновление системного времени, периодические операции, выполнение запланированных задач, опрос показаний отдельного оборудования. Корректный запуск системы предполагает одновременный запуск системных циклов. Часть циклов может быть закрыто автоматически после запуска в виду того, что их работа не актуальна в соответствии с имеющимся оборудованием или настройками пользователя.
Порядок установки системы MajorDoMo
Конечно, можно использовать для «умного» дома любой старый компьютер. Но все же рекомендовано взять отдельно под эти цели RasberriPI. Стоит он не дорого, бесшумен, занимает минимум места. Прекрасная основа для MajorDoMo.
Итак, подразумевается, что система уже на RaberriPI стоит и сконфигурирована под использование интернета. Описаний, как ее поставить и настроить, множество в сети. Далее, нужно подключиться к нему при помощи терминала под root и обновить систему:
# apt-get update && apt-get upgrade
Следом необходимо скачать скрипт установки MajorDoMo (интернет должен быть настроен!) и запустить его:
# wget https://raw.githubusercontent.com/immortalserg/installmd/master/installmd# chmod +x installmd# ./installmd -t -c
После запуска он спросит пароли:
Введите пароль root для MariaDB (MySQL)>
Введите пароль пользователя pi (для системы и базы данных MajorDoMo)>
Кроме как после этих вопросов, нигде пароли устанавливать не нужно. Просто нажимается «ENTER».
По окончании установки система сообщит о необходимости перезагрузки:
Собственно, после установки и перезагрузки RasberriPI можно начинать настройки MajorDoMo. Делается это через любой web-браузер с подключением по адресу местонахождения мини-компьютера в сети.
Техническая поддержка
Медлительность технической поддержки — не единственная претензия, которую можно обнаружить в отзывах разных пользователей. Некоторые клиенты жалуются на то, что ответы были грубыми или некомпетентными. Иногда сотрудники просто отписываются, что ошибка возникла из-за проведения технических работ, при этом никакого предупреждения о них заранее не было, а сроки устранения сбоя остаются неизвестными.
Немного смягчает нестабильную работу службы поддержки качественная база знаний, в которой размещена информация обо всех типах хостинга, способах оплаты и даже решении юридических вопросов. В инструкциях вы найдёте пошаговое описание для отдельных действий, скриншоты и готовые скрипты.
Функции и характеристики MajorDoMo
Основными возможностями систем Majordomo являются:
- быстрая и понятная установка даже для начинающих пользователей;
- поддержка основных платформ (Linux/Windows);
- бесплатное персональное использование вне зависимости от масштабов организации;
- существование сообщества, принимающего активное участие в жизни проекта, разбавляющее его разными интересными нововведениями;
- поддержка всевозможных видов оборудования;
- многоязыковой интерфейс (русский/английский);
- наличие маркета — своеобразного онлайн-магазина, где вы можете приобрести дополнения.
«Мажордомо» является системой адаптации международного уровня. Она может предложить своим пользователям множество приятных бонусов. К ним относятся интеграции с посторонними веб-сайтами и сервисами, мультимедийное управление, уведомления о новоизобретённых новшествах «Умного дома». Majordomo поддерживает модель безопасности с разграничением полномочий пользователей на просмотр информации. Это позволяет каждому сделать настройки конфиденциальности по своему предпочтению.
Список возможностей и преимуществ Majordomo можно перечислять очень долго. Однако основное различие «Умного дома» от обычного вы сможете почувствовать лишь тогда, когда сами окунетесь в этот невероятный мир. Вы самостоятельно будете программировать и регулировать каждый шаг в своей жизни, обеспечите её максимальный комфорт.
Регистрация приватного навыка
Навыки умного дома – специальная категория навыков Алисы, предназначенных для голосового управления домашними устройствами. Навыки создаются в платформы Яндекс Диалогов.
Основные шаги по созданию навыка это:
- Настройка связки аккаунтов OAuth 2.0.
- Добавление навыка и выбор его типа.
- Заполнение информационных полей.
- Модерация навыка.
- Публикация навыка.
Чтобы создать новый приватный навык, открываем и авторизуемся под нужной учетной записью.
В личном кабинете разработчика нажимаем шестеренку и переходим в раздел Настройки, где открываем вкладку Связки аккаунтов.
- Название – понятное вам название связки.
- Идентификатор приложения – значение OAuth2 ID из настроек модуля Yandex Home.
- Секрет приложения – значение OAuth2 KEY из настроек модуля Yandex Home.
- URL авторизации – адрес вебхука авторизации (см. предыдущую статью), например,
- URL для получения токена – адрес вебхука получения токена (см. предыдущую статью), например,
- URL для обновления токена – тот же самый, что и пунктом выше, например,
- Идентификатор группы действий – оставляем пустым.
- Идентификатор OAuth приложения – оставляем пустым.
Сохраняем связку и возвращаемся на главную страницу консоли разработчика, на которой создаем новый навык, кликнув по кнопке Создать диалог.
Тип навыка выбираем Умный дом.
- Название – указываем название навыка.
- Endpoint URL – адрес вебхука обработчика навыка (см. предыдущую статью), например, .
- Приватность – обязательно ставим галочку Не показывать в каталоге.
- Подзаголовок – пишем краткое описание навыка.
- Имя разработчика – фамилия, имя.
- E-mail разработчика – пишем аккаунт Яндекс.Почты.
- Сайт для верификации прав использования бренда – оставляем пустым.
- Описание – произвольное описание нашего навыка.
- Заметки для модератора – оставляем пустым.
- Иконка – логотип навыка в формате PNG или JPG.
Связка аккаунтов – в выпадающем списке выбрать ранее созданную связку.
Сохраняем изменения, после чего становится активной кнопка На модерацию. Кликаем на нее и отправляем наш навык на модерацию. На сегодняшний день модерация автоматическая и происходит мгновенно.
После модерации остается завершающий этап – публикация навыка. Нажимаем кнопку Опубликовать и на главной странице консоли разработчика видим, что навык сменил статус и переместился в раздел Опубликованные.
Опубикованный приватный навык появится в списке навыков умного дома в приложении Яндекс (или в его веб-версии ).
На следующем шаге можно приступать к объединению аккаунтов.
Общие функции
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(ФРАЗА, УРОВЕНЬ, ОТВЕТ_НА_ЧТО) — последние два параметра не обязательны. Эта функция ведёт себя следующим образом:
- Если указан параметр ОТВЕТ_НА_ЧТО, то система попытается найти терминал, с которого был запрос, содержащий данную фразу
- Если не указан параметр ОТВЕТ_НА_ЧТО, то система выберет терминал, с которого был любой запрос в течении последних 5 секунд
- Если терминал найден, то ответ будет направлен на него (с помощью той же функции sayTo)
- Если терминал не найден, то ответ будет озвучен в обычном порядке (аналогично просто использованию функции 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).
Публикация обработчиков запросов
Механизм взаимодействия платформы умного дома Яндекс со сторонними системами (провайдерами) реализуется посредством вебхуков (webhook). Облако Яндекс для запроса состояния устройств и управления ими посылает POST- и GET- запросы на конечные точки (endpoint) вебхуков и получает ответы от них. Таким образом, для корректной работы этого механизма необходимо обеспечить постоянную доступность вебхуков из сети Интернет со стороны облака Яндекс.
Согласно API платформы умного дома Яндекс требуется реализовать три типа конечных точек:
- URL авторизации (authorization endpoint) – страница, на которой авторизуется пользователь, чтобы разрешить навыку доступ к своему аккаунту.
- URL для получения и обновления токена (token endpoint) – адрес, на который отправляются запросы с авторизационным кодом, чтобы получить OAuth-токен доступа, и запросы для обновления ранее полученного токена.
- 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 можно проверить с помощью специализированных сервисов, например:
Функционал Public Calls в Connect-е
В разделе CONNECT панели управления есть закладка Public Calls
Самое важное в настройках — связанный объект и метод, который будет вызван. Ссылка будет с уникальным ключём, но можно дополнительно её защитить заданным паролем
Ссылку можно открывать просто в браузере или даже из скрипта.
К ссылке можно добавлять свои параметры и они будут доступны в методе в массиве $params Важно: очень аккуратно используйте эту опцию и старайтесь не “раскидываться” ссылками, которые могут навредить, попадая в
Идеи использования:
- Обмен данными между несколькими системами MajorDoMo (одна система через getURL может инициировать событие в другой, причём у первой даже может не быть аккаунта в Connect-е)
- Интеграция со сторонними системами и интернет-сервисами (сторонняя система “дёргает” ссылку и MajorDoMo об этом узнаёт)
- Выдача прав на использование некоторых функций системы третьим лицам (передайте ссылку кому-нибудь, попросите добавить в закладки и объясните, что будет происходить при переходе — реализация сценария полностью на ваше усмотрение)
getURLBackground(‘URL’); – Запрос URL в фоне (если не важен результат
4.5 Что значит “связанный” объект/свойство/метод?
В различных частях системы существует функционал “привязки” того или иного элемента с объектом, его свойством или его методом. Объекты являются основой хранения данных системы, а так же описанием функций работы с этими данными. Именно поэтому большинство модулей так или иначе ссылаются на объекты.
Например, элемент меню типа Выключатель используется связанное свойство для хранения данных о своём последнем состоянии, а так же метод объекта, как действие, которое надо выполнить после изменения состояния. С другой стороны, модули работы с оборудованием так же используют связанные свойства и объекты для хранения данных, полученных от соответствующих электронных устройств.
Например, привязав свойство какого-то объекта к свойству выключателя в модуле ZWave можно обращаться к этому свойству для получения последнего состояния физического выключателя, а так же использовать это свойства для установки значения (включения нагрузки), таким образом создаётся прозрачная двухсторонняя связь между физическим устройством и объектом системы MajorDoMo. Одно свойство объекта может быть привязано к нескольким элементам, так, если рассматривать предыдущие два примера, то можно объединить их в один, когда и для привязки выключателя в меню и для привязки выключателя ZWave мы используем одно свойство. В таком случае мы получаем управляемый через меню физический выключатель.
Запланированные задачи и события
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 если еще не было такого события)
Дополнительные услуги
Majordomo предлагает целый ряд дополнительных услуг, полезных бизнесу.
Почта Mail.ru на домене
После регистрации домена вы можете подключить к нему почту. Majordomo предлагает использовать свой почтовый сервис или решение для бизнеса от Mail.ru.
Бесплатный сервис от Mail.ru позволяет создать до 5000 адресов на одном домене. Есть и другие преимущества:
- объём почтовых ящиков не ограничен;
- используется привычный интерфейс Mail.ru;
- каждый пользователь получает 25 ГБ в облаке Mail.ru;
- поддерживается мультиавторизация для удобного переключения между почтовыми ящиками.
SSL-сертификаты
Для шифрования данных при передачи трафика между сервером и клиентом используется SSL-сертификат. Majordomo предлагает приобрести сертификаты Comodo — одного из ведущих центров. Все доступные варианты совместимы с современными браузерами. Стоимость сертификатов — от 990 до 25 000 рублей в год.
Защита от спама и вирусов
В эту услугу входит выполнение сразу трёх задач.
- Антивирусная проверка входящих сообщений.
- Защита от спама. Вы можете установить правила (пропускать или не пропускать спам), а также настроить уровень придирчивости к письмам (слабый, средний, сильный). Также доступны белый и чёрный список адресов.
- Настройка фильтрации писем на сервере. Это позволит получить сообщения в одни и те же папки на разных устройствах.
Защита от спама и вирусов — платная услуга. Стоимость — 49 рублей в месяц.
SEO-аудит сайта
В услугу входит проверка сайта на соответствие требованиям поисковых систем, оценка удобства использования, оптимизация главной страницы, поиск ошибок и подготовка рекомендаций по продвижению. Стоимость SEO-аудита — 5490 рублей.
Рекламные возможности
Majordomo предлагает услуги специалистов по настройке контекстной рекламы и рекламных кампаний в соцсетях.
- Базовая настройка контекстной рекламы — 5990 рублей. Работа в Яндекс.Директ или Google Adwords. Доступно до 30 ключевых запросов и до 20 объявлений.
- Премиальная настройка контекстной рекламы — 12 990 рублей. Работа в Яндекс.Директ или Google Adwords. Доступно до 200 ключевых запросов и до 50 объявлений, плюс 1 месяц ведения и контроля рекламной кампании.
- Настройка таргетированной рекламы во «ВКонтакте» — 12 990 рублей. Услуга включает анализ предложения и аудитории, разработку стратегии продвижения, создание до 50 объявлений и баннеров, запуск до 5 рекламных кампаний, отслеживание эффективности и внесение правок в течение 1 месяца.
Аренда программы 1С в облаке
Majordomo предлагает облако с установленной программой 1С, с которой можно работать с любого устройства, имеющего доступ в интернет. В пакет услуг входит:
- Бесплатный перенос 1С на облако.
- Бесплатная круглосуточная поддержка.
- Финансовые гарантии работоспособности.
- Бесплатные консультации.
Есть два тарифа: «Лайт» и «Оптимальный». Между собой они различаются возможностями для изменения и доработки, доступными клиентами, объёмом дискового пространства и конфигурациями 1С. На тарифе «Лайт» за каждого пользователя нужно платить 950 рублей в месяц (760 рублей в месяц при оплате на год). На «Оптимальном» каждый пользователь обойдётся в 1299 рублей в месяц (1040 рублей в месяц при оплате на год).
Функции и возможности
Сами по себе модули содержат обширные настройки: в соответствующем разделе интерфейса можно, например, указать цвет пользователя, разрешенные ему компьютеры для входа, и так далее.
Электронный «мажордом» способен управлять многочисленными умными устройствами:
- розетками;
- лампами;
- бытовой техникой;
- домашним мультимедиа;
- кондиционерами;
- отопительными системами;
- охранными комплексами;
- инженерным и сантехническим оборудованием, и так далее.
Умеет он взаимодействовать и с интернет-сервисами (например, для поиска новостей). Кроме того, через глобальную сеть обеспечивается удаленный доступ и своевременное обновление.
Для продвинутых пользователей существует возможность дописывать модули и сценарии на языке программирования PHP. В системе также присутствует встроенный визуальный конструктор Blockly, обеспечивающий простое создание алгоритмов:
Комплекс наверняка станет интересен начинающим и продвинутым программистам. Разработка ПО под MajorDoMo не отличается высоким порогом входа, необходимо лишь обладать пониманием языка PHP и некоторых смежных дисциплин (таких, как JS, CSS). С них и следует начинать осваивающим разработку под эту платформу джуниор-кодерам.
Что это такое
Majordomo — свободно распространяемая кроссплатформенная программа, предоставляющая все необходимы инструменты для организации смарт-жилища:
- серверную часть;
- плагины для различного оборудования;
- поддержку сценариев;
- работу с разнообразными существующими протоколами обмена данными.
«Мажордомо» умеет взаимодействовать с умными выключателями, розетками, датчиками и реле. Все элементы настройки и управления сведены в едином простом веб-интерфейсе, устанавливающемся на центральный хаб системы.
Таким образом, MajorDoMo — сервер «умного дома» обеспечивающий согласованную работу прочих его компонентов. Он может быть установлен как на обычный ПК, так и ноутбук или поддерживаемый микрокомпьютер (например, Raspberry Pi, Arduino и прочие). Программа получает данные от сопряженных с ней датчиков и отдает заданные владельцем команды, исполняемые конечными устройствами и контроллерами.
Для понимания работы программы необходимо выяснить ее логическое устройство.
Итог
Советовать Majordomo можно — хостинг неплохой, проверенный временем. И это не странно, учитывая, что речь идёт о создателе очень популярного конструктора сайтов Nethouse. Хотя и проблем хватает, но это, можно сказать, обычный уровень подобного вида услуг, где без форс-мажорных ситуаций ну никак.
По соотношению цены и качества более или менее адекватные возможности предлагает только использование VPS, который вы можете самостоятельно настроить. На виртуальном хостинге придётся мириться с медленной работой веб-интерфейса, а на выделенных физических серверах — с устаревшими компонентами и невысокой производительностью по сравнению с конкурентами.
Если еще несколько лет назад фраза «умный дом» звучала как что-то фантастическое, дорогое и недоступное, то сегодня все больше людей оснащают свои жилища смарт-устройствами и комплексами. Существуют различные подходы к организации интеллектуального домашнего хозяйства, отличающиеся протоколами, программными оболочками и нюансами настройки. Обычно сборка и конфигурирование такой системы требует определенных специальных познаний в IT, но некоторые разработчики предлагают готовые решения для построения «умного дома». Одно из таких решений — open-source проект MajorDoMo.
Что это такое
Majordomo — свободно распространяемая кроссплатформенная программа, предоставляющая все необходимы инструменты для организации смарт-жилища:
- серверную часть;
- плагины для различного оборудования;
- поддержку сценариев;
- работу с разнообразными существующими протоколами обмена данными.
«Мажордомо» умеет взаимодействовать с умными выключателями, розетками, датчиками и реле. Все элементы настройки и управления сведены в едином простом веб-интерфейсе, устанавливающемся на центральный хаб системы.
Таким образом, MajorDoMo — сервер «умного дома» обеспечивающий согласованную работу прочих его компонентов. Он может быть установлен как на обычный ПК, так и ноутбук или поддерживаемый микрокомпьютер (например, Raspberry Pi, Arduino и прочие). Программа получает данные от сопряженных с ней датчиков и отдает заданные владельцем команды, исполняемые конечными устройствами и контроллерами.
Для понимания работы программы необходимо выяснить ее логическое устройство.
Логические компоненты
С точки зрения MajorDoMo умный дом состоит из логических элементов. Платформа оперирует четырьмя основными понятиями — объекты, классы, свойства и методы.
Объекты
В терминологии ПО объект представляет собой физический контроллер с обратной связью, обеспечивающий взаимодействие между сервером и управляемым контроллером датчиком. Таким устройством может являться и самостоятельно собранный прибор, и заводской. Умный дом «Мажордомо» поддерживает множество основных протоколов smart home:
- Z-Wave;
- Zigbee.
- MQTT;
- Broadlink, и прочие.
Классы
Следующая сущность в экосистеме рассматриваемого ПО — класс. В нем объединены однотипные объекты. Например, это может быть класс устройств «выключатели» с двумя состояниями (вкл/выкл) и методами «включить» и «выключить». Или «датчики движения», чье состояние изменяется по детекции перемещения в зоне действия.
Система позволяет создавать и подклассы оборудования: например, в классе выключателей добавляются меняющие яркость или цвет освещения контроллеры.
Свойства
Каждый элемент «умного дома» обладает собственным состоянием, которое он возвращает контроллеру и в MajorDoMo. Это состояние и называется свойством объекта. Его можно не только получать, но и отправлять на устройство, которое обработает команду и вернет некий заданный результат (например, пользователь задаст кондиционеру уровень поддерживаемой температуры, а прибор перейдет в соответствующий режим работы).
Методы
В логике «Мажордомо» метод — некоторое управляющее действие, команда, принятая и обработанная устройством/датчиком.
Функции и возможности
Платформа MajorDoMo — полноценное и весьма мощное решение для хаба «умного дома». Мощь заключена в модульности системы: все используемые объекты заводятся в виде плагинов. Пользователю не придется разбираться в коде, тонкостях протоколов взаимодействия и сопряжения контроллеров и датчиков, если для них написан модуль, все будет работать, конфигурироваться, мониториться и управляться из единого интерфейса. Сложность возникнет лишь в случае, если готового решения нет: тогда понадобится или учиться языку PHP, или привлекать специалистов.
Сами по себе модули содержат обширные настройки: в соответствующем разделе интерфейса можно, например, указать цвет пользователя, разрешенные ему компьютеры для входа, и так далее.
Электронный «мажордом» способен управлять многочисленными умными устройствами:
- розетками;
- лампами;
- бытовой техникой;
- домашним мультимедиа;
- кондиционерами;
- отопительными системами;
- охранными комплексами;
- инженерным и сантехническим оборудованием, и так далее.
Умеет он взаимодействовать и с интернет-сервисами (например, для поиска новостей). Кроме того, через глобальную сеть обеспечивается удаленный доступ и своевременное обновление.
Интересна добавленная разработчиками функция интеграции с помощником «Алиса» от Яндекса. С ее помощью можно осуществлять голосовое управление компонентами смарт-дома и выполнять другие действия.
Для продвинутых пользователей существует возможность дописывать модули и сценарии на языке программирования PHP. В системе также присутствует встроенный визуальный конструктор Blockly, обеспечивающий простое создание алгоритмов:
Комплекс наверняка станет интересен начинающим и продвинутым программистам. Разработка ПО под MajorDoMo не отличается высоким порогом входа, необходимо лишь обладать пониманием языка PHP и некоторых смежных дисциплин (таких, как JS, CSS). С них и следует начинать осваивающим разработку под эту платформу джуниор-кодерам.
Установка
Аппаратная часть
Прежде, чем начать развертывание, следует подобрать оборудование для системы. Под «Мажордомо» допустимо использовать практически любой не очень старый компьютер или ноутбук. Но, как правило, при реализации смарт-дома используют одноплатные миникомпьютеры: они бесшумны, надежны, дешевы и достаточно производительны.
Рекомендуем к прочтению: как выполнить монтаж умного дома быстро и правильно.
Для этой задачи хорошо подходят платы 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-вариантам. Энтузиасты также создали скрипт автоматизации, который развертывает весь программный комплекс самостоятельно. Получить его и запустить инсталляцию можно следующими командами:
wget https://raw.githubusercontent.com/immortalserg/installmd/master/installmd
chmod +x installmd
./installmd -t
Результаты появятся в командной строке. Красный цвет выводимого текста отмечает критические предупреждения.
Скрипт запросит пароль пользователя root создаваемой БД MySQL и учетной записи Pi. Данные аккаунта Pi вводить необходимо в любом случае, даже если такого пользователя в системе нет.
Иных действий не понадобится. После завершения работы скрипта будет выдано сообщение «Готово».
На этом этапе следует перезагрузить компьютер, после чего интерфейс умного дома MajorDoMo станет доступен для настройки через браузер по IP-адресу или имени узла md.lan. Имеется также доступ по протоколу SSH и проброс vlc over http.
Пример главной страницы:
Дополнительно потребуется установить PhpMyAdmin:
./installmd -p
А также Java и сервер Blynk (нужен для разработки и функционирования приложений на iOS/Android).
./installmd -j
./installmd -b
Для добавления расширенной конфигурации выполняется команда:
./installmd -c.
Она дополняет базовую поставку некоторыми скриптами, сценами и элементами, а также оптимизирует работу с базой.
После этого можно приступать к тонкой настройке и сопряжению с периферией.
Заключение
MajorDoMo — интересный, активно развивающийся, мощный и многофункциональный сервер «умного дома» с поддержкой большинства основных протоколов и технологий. Его ключевые преимущества:
- бесплатность;
- модульность;
- широкий набор возможностей;
- нетребовательность к аппаратным ресурсам;
- простая кастомизация и доработка благодаря языку PHP.
Из минусов можно отметить относительно высокий порог входа, поскольку ряд задач способен потребовать от пользователя некоторых специальных знаний. Но разработчики стараются устранять эти недочеты, упрощая процесс конфигурирования и установки скриптами автоматизации и разнообразными модулями.
Видео по теме
MajorDoMo — бесплатная платформа для создания умного дома, мощная и гибкая, поддерживающая самое разное оборудование. Платформа написана на PHP, работает через веб сервер и хранит данные на сервере MySQL. Все это подразумевает работу на выделенном сервере.
Первым делом поднял MajorDoMo на одноплатном компьютере Orange PI PC. Для запуска шлюзов с различными устройствами заказал изготовление платки шилда.
В стандартном образе MajorDoMo для Orane PI и Raspberry PI с целью уменьшения количества операций записи на карту памяти и увеличения времени ее жизни БД запускалась на RAMDISK с сохранением дампа на карту памяти раз в несколько минут.
Несколько месяцев эксплуатации выявило ряд проблем:
- Самое страшное — сбои питания. Теряются данные, теряются конфигурации. Пару раз таблицы базы данных были повреждены и БД завелась только с бэкапа.
- Регулярный бэкап и логгирование (включенные по умолчанию) очень быстро приводили к переполнению карточки памяти 16Гб
- Объем базы данных стремительно приближался к критическому в рамках RAMDISK, что постоянно требовало чистки исторических данных (пусть и готовыми скриптами), что на этапе отладке было не очень хорошо
- Несколько раз зависал сервис Mysensors MYSGW
Подключение внешнего жесткого диска сняло часть проблем. Но от сбоев по питанию спасло не до конца. К тому же пару раз видимо не хватило питания на внешнего и сервер уходил в зависание. Да и скорость по USB2 для жесткого диска — совсем не кайф. Уже почти собрал мощный БП с бесперебойником на 5В, но тут в руки попался старый ноутбук SAMSUNG NS110.
Характеристики — процессор Intel Atom N455 1.66Гц, память 2Гб DDR3, жесткий диск SATA 320Гб, встроенный Ethernet 100TX и WiFi и еще живая батарея, самое то для моих задач. Да и консоль для установки и настройки есть.
Загрузил Debian 9.5 Net Install образ на флэшку — LINUX встал с нее пол пинка. MajorDoMo установил при помощи инсталляционного скрипта. В конце скрипта только убрал настройку базы данных на RAMDISK
Mysensors Gateway
Собрал уже довольно много устройств Mysensors на NRF24L01. Если Orange Pi PC позволял подключать NRF24 через SPI интерфейс напрямую, то для нетбука пришлось собирать Mesensors Serial Gateway из Arduino NANO
- Arduino Nano с CH340 USB — $2
- Или Arduino Nano Atmega168 — $1.89 (вполне хватает для данной задачи)
- Модуль NRF24L01 с усилителем сигнала и внешней антенной — $1.88
Кроме собственно Arduino NANO и NRF24L01 в схему добавлены три светодиода, которые обрабатываются библиотекой MySensors — RX, TX и ERROR
На проводах собирать устройства, тем более выполняющие серверную роль — некошерно, поэтому делаю платку:
И раз уж есть 3Д-принтер — корпус
Беру готовый скетч GatewaySerial из проекта Mysensors
Прописываю настройки для своей платы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
// Оставить, если нужно мониторить какие то проблемы // В рабочей версии шлюза закомментарить #define MY_DEBUG // Выбор радио модуля #define MY_RADIO_RF24 //#define MY_RADIO_NRF5_ESB //#define MY_RADIO_RFM69 //#define MY_RADIO_RFM95 #define MY_RF24_PA_LEVEL RF24_PA_HIGH #define MY_NODE_ID 0 #define MY_RF24_CE_PIN 9 #define MY_RF24_CS_PIN 10 // Enable serial gateway #define MY_GATEWAY_SERIAL // Enable inclusion mode #define MY_INCLUSION_MODE_FEATURE // Enable Inclusion mode button on gateway //#define MY_INCLUSION_BUTTON_FEATURE // Inverses behavior of inclusion button (if using external pullup) //#define MY_INCLUSION_BUTTON_EXTERNAL_PULLUP // Set inclusion mode duration (in seconds) #define MY_INCLUSION_MODE_DURATION 60 // Digital pin used for inclusion mode button //#define MY_INCLUSION_MODE_BUTTON_PIN 3 // Set blinking period #define MY_DEFAULT_LED_BLINK_PERIOD 300 // Inverses the behavior of leds #define MY_WITH_LEDS_BLINKING_INVERSE // Flash leds on rx/tx/err // Uncomment to override default HW configurations #define MY_DEFAULT_ERR_LED_PIN 3 // Error led pin #define MY_DEFAULT_RX_LED_PIN 4 // Receive led pin #define MY_DEFAULT_TX_LED_PIN 5 // the PCB, on board LED |
Теперь подключаем наше устройство к USB нетбука
Команда dmesg показывает, что найден CH341 USB serial converter и что ему назначено устройство виртуального терминала /dev/ttyUSB0
В настройках MajorDoMo осталось установить модуль Mysensors в маркете приложений (если еще не установлен) и прописать его настройки. Если все нормально и цикл запустился, то по мере опроса начнут появляться узлы Mysensors, с которыми можно уже работать в системе MajorDoMo
Возможные проблемы
В SerialMonitor при включенном #MY_DEBUG идет ошибка инициализации
Данная проблем возникает из за неправильно подключения NRF24L01 или неисправном радиомодуле
Цикл опроса Mysensors в MajorDoMo не запускается
Скорее всего отсутствует устройство /dev/ttyUSB0 в системе, либо у WEB-сервера нету прав на работу с этим устройством
В данном случае нужно добавить пользователю www-data группы dialout
Список устройств пуст, хотя устройства Mysensors активно работают
Вероятнее всего нет соответствия скорости канала или скорости обмена NRF24L01
В этом случае нужно проверить соответствие данных параметрах на всех устройствах
#define MY_RF24_CHANNEL (76) #define MY_RF24_DATARATE (RF24_250KBPS) |