MajorDoMo | [Интернет вещей][Умный дом]



Реп: (1275)
Прикрепленное изображение
MajorDoMo
версия: 1.7.4
Официальный сайт | Обсуждение Broadlink » | Умный дом - Общая тема »
Последнее обновление программы в шапке: 07.11.2017

Прикрепленное изображение

Краткое описание:
Cистема домашней автоматизации MajorDoMo

Описание:
Cистема домашней автоматизации MajorDoMo (Major Domestic Module или Главный Домашний Модуль) представляет собой бесплатную и открытую программную платформу для комплексного управления домашней автоматикой, а так же для информационной поддержки жизнедеятельности. Данная система может быть установлена практически на любой персональный компьютер (на платформе Windows и Linux) и совершенно не требовательна к ресурсам. Даже без привязки к оборудованию она может быть использована для организации персональной инфо-среды. Данный проект является частью эко-системы SmartLiving.
Статьи
1. Для кого предназначена система
2. Пример конкретной реализации
3. Установка системы, правильная перезагрузка
4. Поиск и подключение устройств Broadlink
5. Подключаем Broadlink RM Pro и импортируем коды пультов
6. Выводим температуру с RM Pro на сцену и присваиваем в свойства комнаты
7. Выводим кнопку розетки на сцену
8. Локальный и глобальный доступ к системе, логин и пароль на вход
9. Голос нашего ассистента
10. Подключение Telegram
11. Циклы и работоспособность системы
12. Создание графиков произвольных параметров. Домашние страницы.
13. Температура на улице и прогноз погоды.
14. Введение в Объектно-ориентированное программирование в Majordomo. Классы, объекты, свойства, методы.
15. Управление устройствами с помощью свойств и методов. Устройства с обратной связью.
16. Управление устройствами с частичной или отсутствием обратной связи
17. Устройства онлайн и имитация обратной связи
18. Глобальные режимы работы системы - Класс OperationalModes
19. Подключение системы безопасности на примере Broadlink S1/S1C
20. Помещения
21. Объект This Computer, уровни сообщений, поиск по системе
22. Метод ClockChime.onNewMinute
23. Сценарии
24. Будильники и таймеры
25. Сцены
26. Android приложение MajorDroid
27. Подключение устройств xiaomi
28. Датчик освещенности и обратная связь для реле освещения
29. Ветки MASTER и ALPHA
30. Система connect
31. Голосовое управление системой
32. Расположения и активности
33. Подключение IP-камеры
34. Взаимодействие между простыми устройствами
35. Охрана помещения
36. Снятие показаний со счетчиков воды
37. GPS-трекинг пользователей
38.Управление освещением в санузлах

Скачать для Windows, Raspberry Pi и Orange Pi
http://majordomo.smartliving.ru/Main/Download
Android-приложение:
https://play.google.co…smartliving.majordroid

Полезные ссылки:
Как прикрутить OpenWeather
Официальная база знаний MajorDoMo

В теме нет куратора. По вопросам наполнения шапки обращайтесь к модераторам раздела через кнопку Изображение под сообщениями, на которые необходимо добавить ссылки.
Если в теме есть пользователь, желающий стать Куратором и соответствующий Требованиям для кандидатов, он может подать заявку в теме Хочу стать Куратором (предварительно изучив шапку темы и все материалы для кураторов).


Сообщение отредактировал podolsk26 - 13.09.23, 07:46
Причина редактирования: управления освещением в санузлах



Реп: (19)
Vitt @ 13.11.17, 14:57 *
Глобальный доступ к системе (из интернета, извне) - следующий логичный шаг в ее построении
Тут нам могут помочь несколько сервисов:
1. "Белый" IP-адрес от провайдера
... Для этого, конечно, нам надо будет пробросить порт 80 на наш локальный адрес.
... Если уж мы "вытащили" наш проект наружу, хорошо бы его защитить от сторонних глаз логином/паролем....

Хочу предостеречь от проброса 80 порта!
Дело в том, что на этом порту, фактически в открытую, будет висеть доступ к базе данных по адресу http://ваше_имя_или_ip/phpmyadmin4/index.php, по которому злоумышленник может натворить у вас что душа пожелает (со стандартной авторизацией). Если вы всё-же решили пробросить таким образом порт, то меняйте и логин/пароль к базе данных (соответственно поправив и доступ к базе в MajorDoMo).
Правильный вариант это организация VPN до роутера или сервера с MajorDoMo.
Есть еще вариант через connect.smartliving.ru, но он тоже имеет ряд минусов.



Реп: (7)
Здравствуйте, в теме новенький, подскажите, а с гугл хоум колонкой данная система интегрируется? Можно ли управлять голосом через гугл хоум данной системой?

Сообщение отредактировал rom77 - 27.11.17, 08:13



Реп: (1275)
* rom77,
я не вижу проблемы сделать интеграцию с колонкой, API открыт, но пока колонка не работает на русском, в этом нет практической пользы

Добавлено 27.11.2017, 10:12:

* alik4pda,
я думаю, для начала поможет просто переименовать папку /phpmyadmin4/ во что-нибудь, неизвестное злоумышленнику



Реп: (1275)
Подключение системы безопасности на примере Broadlink S1/S1C
Существуют различные системы безопасности, которые обычно включают в себя блок сигнализации и пачку датчиков движения и открытия.
Для нас они представляют интерес не столько как реальное средство защиты от проникновения, сколько средство получение данных об активности нас и членов нашей семьи в помещении для настройки различных автоматизаций, например, включения света по открытию входной двери или движению.
Подключим S1, это крайне несложно.
Идем в устройства Broadlink, через сканирование добавляем устройство (если ранее уже не сделали это)
Прикрепленное изображение

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

Добавляем простые устройства:
Door Sensor - Датчик открытия/закрытия
Wall Motion Sensor - Датчик движения
Key Fob - Кнопка (это наша кнопка sos)
status - датчик состояния
Для каждого датчика выбираем помещение, ставим галки, что датчик показывает активность в помещении, выводим все на сцену.
Обратите внимание, что у датчика состояния статусным свойством является не status, а value, это важно!
Теперь в наших простых устройствах мы видим картину
Прикрепленное изображение

и на сцене
Прикрепленное изображение

Статусы датчика состояние (то самое value) может быть, по терминологии e-control
0 - нет защиты
1 - частичная защита
2 - полная защита
Позже я покажу как вывести на сцену более функциональную кнопку, чтобы видеть статус системы и менять уровень защиты прямо на сцене.
Кнопочку на сцену, которая показывает и определяет состояния охраны, можно скачать тут - MajorDoMo (Пост Vitt #68867476)
Кнопку SOS можно будет использовать как угодно, например, назначить ей какой-нибудь сценарий.
Активность датчика движения по умолчанию равна 20 секундам, после чего красный круг исчезнет со сцены до фиксации следующего движения.
Также, можно обратить внимание на надпись Кто-то есть. Активность: Гостиная, Детская на главной, ее также сгенерировал наш датчик, в теории через 10 минут надпись должна пропасть. Ого

Сообщение отредактировал Vitt - 06.01.18, 12:28



Реп: (1275)
Помещения
О помещениях, наверно, надо было рассказать чуть пораньше, но система настолько гибкая, что сделать что-то кардинальное никогда не рано и не поздно :)
Итак, идем в Панель управления - Настройки - Расположения
и меняем все комнаты в соответствии с нашей квартирой, можно писать по-русски.
Прикрепленное изображение

Теперь идем в объекты класс Rooms и проверяем что там.
Очевидно, там теперь тоже всё в порядке
Прикрепленное изображение

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


Сообщение отредактировал Vitt - 27.11.17, 11:18



Реп: (1275)
Объект This Computer, уровни сообщений, поиск по системе
Этот объект является системным и аккумулирует многие данные о работе системы и модулей. Рассмотрим те его свойства, которые нам могут быть интересны.
Идем в Объекты, класс Computer, объект This Computer, Свойства.

ThisComputer.minMsgLevel = 2 - очень интересное свойство, задает уровень сообщений для системы.
Оно задается жестко в 2 днем и 1 ночью. Помните Say("Привет",2)? Это как раз вот эта двойка.
Общее правило для Say таково:
Say("Привет",2) - будет и днем и ночью произнесено голосом
Say("Привет",1) - днем голосом, ночью - только в лог
Say("Привет",0) - всегда только в лог


ThisComputer.TempOutside (H) = -4 - температура "за бортом", мы задавали ее в веб-переменных
ThisComputer.weatherFull = "Сегодня: днем: -2°, переменная облачность, ночью: -3°, переменная облачность, ветер: Ю — 4 м/с, давление: 755 мм.рт.ст, влажность: 82%"
прогноз погоды, мы задавали его в веб-переменных
ThisComputer.AlarmTime = 09:30 - время срабатывания штатного будильника, мы им не пользовались, так что заполнено просто так
ThisComputer.Econom = 0 - показывает, что режим экономии отключен (EconomMode.active=0)
ThisComputer.securityMode = 0 - показывает, что режим безопасности отключен (SecurityArmedMode.active=0)
ThisComputer.nobodyHome = 0 - показывает, что режим "никого нет дома" отключен (NobodyHomeMode.active=0)
ThisComputer.WeHaveGuests = 0 - показывает, что режим приема гостей отключен (GuestsMode.active=0)
ThisComputer.volumeLevel = 90 - уровень громкости системы
ThisComputer.somebodyHome = 1 - показывает, что дома кто-то есть
ThisComputer.timeNow = 11:24 - текущее время
ThisComputer.HomeStatus = 11:24 Дома кто-то есть - статус, выводится на главной
ThisComputer.isDark = 0 - показывает, что режим темного времени суток отключен (DarknessMode.active=0)
ThisComputer.SunSetTime = 16:01 - время заката, мы задавали ее в веб-переменных
ThisComputer.SunRiseTime = 08:32 - время восхода, мы задавали ее в веб-переменных
ThisComputer.somebodyHomeText = Кто-то есть. Активность: Гостиная, Детская - текст, можно увидеть его на главной
ThisComputer.weatherTomorrow = -2°, пасмурно, снег - погода на завтра, мы задавали ее в веб-переменных
ThisComputer.weatherToday = -2°, переменная облачность - погода на сегодня, мы задавали ее в веб-переменных
ThisComputer.clockChimeEnabled = 1 - кукушка (проговаривание времени каждый час) включена
ThisComputer.uptime = 2575 - аптайм сервера
ThisComputer.lastSayMessage = 11 часов - последнее произнесенное Алисой сообщение

Эти свойства являются системными и обращаться к ним можно, даже не указывая название объекта.
Например, можно считать свойство так
getGlobal('ThisComputer.SunSetTime'); или так getGlobal('SunSetTime');

сработает одинаково.
Можно перезаписать свойство
setGlobal('SunSetTime','11:00');

но это нам не поможет, при следующем обращении, модуль веб-переменных запишет туда снова верное значение :)
Также, мы можем управлять режимами работы системы прямо отсюда!
setGlobal('isDark',1);

переключит систему в режим темного времени суток, минуя объект самого режима (DarknessMode), автоматически установив ему верные свойства.

Думаю, здесь будет уместно сказать пару слов про поиск по системе
Поиск великолепен, я не устаю удивляться как быстро и легко он работает.
Поставим себе задачу понять, откуда берется свойство isDark, кто или что его устанавливает в 0 или 1?
Идем в Панель управления и заносим isDark в поле поиска. Нажимать enter или что-то мышкой не требуется!
Видим картину
Прикрепленное изображение

P: ThisComputer.isDark - это явно то самое свойство, о котором мы говорили выше
M: ClockChime.onNewMinute - а этот метод, очевидно, и есть источник, который проставляет вышеозначенное свойство!
Переходим к методу ClockChime.onNewMinute, чтобы рассмотреть его более подробно в следующем уроке ;)

Сообщение отредактировал Vitt - 27.11.17, 12:52



Реп: (1275)
Метод ClockChime.onNewMinute
Стартует раз в минуту и оказывает большое внияние на систему. Ниже будет много php-кода, начинаем привыкать :)
После символов // будет мой комментарий кода
// В переменную $h ставим текущий час, в $m - минуту
$h=(int)date('G',time());
$m=date('i',time());

// Заготовка под какое-то действие с выходным днем
if (isWeekDay()) {
}

// Кукушка - если время после 8 утра, пробило ровно час и глобальная настройка разрешена, проговариваем время
if (($h>=8) && getGlobal('clockChimeEnabled')) {
if ($m=="00") {
say(timeNow(),1);
}
}

// Заполняем ThisComputer.timeNow текущим временем
setGlobal('timeNow',date('H:i'));

// Присваиваем переменной $homeStatus текущее время, если активен режим NobodyHomeMode, добавляем Дома никого, если не активен, прибавляем Дома кто-то есть.
$homeStatus=date('H:i');
if (getGlobal('NobodyHomeMode.active')) {
$homeStatus.=' Дома никого';
} else {
$homeStatus.=' Дома кто-то есть';
}

// Прибавляем к $homeStatus также показания системных статусов и выводим все это в ThisComputer.HomeStatus (эта надпись показывается на главной в меню)
$homeStatus.=' '.getGlobal('Security.stateDetails');
$homeStatus.=' '.getGlobal('System.stateDetails');
$homeStatus.=' '.getGlobal('Communication.stateDetails');
setGlobal('HomeStatus',$homeStatus);

// Включаем и выключаем режим темного времени суток DarknessMode в зависимости от времени суток и данных восхода/заката
if (timeBetween(getGlobal('SunRiseTime'),getGlobal('SunSetTime')) && getGlobal('isDark')=="1") {
setGlobal("isDark",0);
callMethod('DarknessMode.deactivate');
} elseif (!timeBetween(getGlobal('SunRiseTime'),getGlobal('SunSetTime')) && getGlobal('isDark')!="1") {
setGlobal("isDark",1);
callMethod('DarknessMode.activate');
}


// В момент заката и восхода говорим Солнце заходит или Всходит солнце соответственно
if (timeIs(getGlobal('SunRiseTime'))) {
say('Всходит солнце');
}
if (timeIs(getGlobal('SunSetTime'))) {
say('Солнце заходит',2);
}


// Если время после 23:00 и дома никого нет, включаем режим экономии
if (timeIs("23:30") && (gg("EconomMode.active")!="1") && (gg("NobodyHomeMode.active")=="1")) {
say("Похоже никого нет сегодня, можно сэкономить немного.");
callMethod('EconomMode.activate');
}


// С 20:00 по 08:00 включаем ночной режим NightMode
if (timeIs('20:00')) {
callMethod('NightMode.activate');
} elseif (timeIs('08:00')) {
callMethod('NightMode.deactivate');
}


// Какая-то заготовка на 3 часа ночи, не работает
if (timeIs("03:00")) {
runScript("systemMaintenance");
}

// Заготовка под будильник, пока тоже не работает
if (gg('ThisComputer.AlarmStatus') && timeIs(gg('ThisComputer.AlarmTime'))) {
runScript('MorningAlarm');
}

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

Сообщение отредактировал Vitt - 29.11.17, 13:09



Реп: (7)
* alik4pda,
Вот мануал бы на эту тему. Такие то пароли необходимо поменять так-то и так-то... Или, если есть описание ( я не нашел ), то ссылку.
Да и по vpn тоже. Я понимаю. что зависит от конкретного роутера, но все же...

Сообщение отредактировал Андрей Крас - 27.11.17, 13:25



Реп: (7)
Vitt, хочу сказать тебе персональное открытое спасибо. За доходчивость и альтруизм. Знал бы, что ты тут выложишь в шести страницах то, на чтение и освоение чего я потратил месяца полтора... Красавец, короче... Жму руку.



Реп: (1275)
* Андрей Крас,
спасибо за оценку :)
собственно, это те грабли, на которые я наступал весь этот год, так что.... всё знакомо :D
если дождетесь, расскажу про VPN и как развернуть систему на два дома, как у меня

Сообщение отредактировал Vitt - 27.11.17, 13:57



Реп: (7)
Еще вопрос, начал изучать данную систему, можно ли как-то реализовать по принципу голосового управления в гугл хоум колонке. Типа подключен микрофон к системнику с установленным мажордомо и он слушает постоянно, и по кодовой фразе запускает какоето действие, или все голосовое управление только через мобильное приложение в котором надо нажать какую-то кнопочку и произнести команду?



Реп: (1275)
* rom77,
используйте плагин к хрому, скоро распишу поподробнее.
Про колонку на той странице только писал MajorDoMo (Пост Vitt #67495866)

Сообщение отредактировал Vitt - 27.11.17, 14:43



Реп: (2)
Не люблю писать, но здесь не могу пройти мимо!
Vitt, присоединяюсь к Андрею, персональное ОГРОМНОЕ спасибо!!! Случайно набрел на этот топик, читаю уже второй час, каждую страницу очень внимательно, с осознанием, и понимаю что та каша которую я у себя в голове заварил в течении трех недель с изучением MajorDoMo стала систематизироваться, самое главное я уловил суть как это все настраивается, из всех изученных за три недели описаний принципов и примеров работы эта самая удачная, тоже жму руку, красавчик!
Не останавливайся, у тебя отлично получается, жду продолжения банкета!
P.S. Broadlink RM2+ на днях приехал, завел его так же через PHP only, XIAOMI 5 в 1 и выключатели Vhome RF 433mhz еще в пути, поэтому пока ставлю эксперименты на телике LG, включаю/выключаю его из MajorDoMo, но вот заставить его реагировать на голосовые команды через Шаблоны поведения у меня пока не получается.



Реп: (353)
Обновил пост про Telegram.
Добавлено описание создания команд и кнопок.



Реп: (1275)
Последнее на сегодня
Раз уж мы вплотную подошли к автоматизации, ссылочка на мой коннект, изучайте на здоровье.
Там, по-моему, даже регистрироваться не надо. Можете посмотреть объекты, сценарии, шаблоны поведения, чуть позже разберем наиболее интересные из них и попробуем применить.



Реп: (2)
Попробовал на телике LG воспроизвести имитацию обратной связи через модуль "Устройства онлайн", прикольно, работает.
Посмотрел коннект по ссылке, если в качестве примера голосового управления брать Ваш телевизор, там есть шаблон с кодом где мне половина текста непонятна, за исключением того
что запускается скрипт runScript("WatchTV");, посмотрел сценарий WatchTV, так там целая портянка непонятная :D
Для новичка это сложно, без подробного примера с пояснениями не обойтись.
Я конечно создал Шаблон поведения Название: "Выключи телевизор" и вписал туда код brLinkCommand('LGTVoff'); также можно сделать шаблон на включение brLinkCommand('LGTVon'); , Алиса по голосовой команде включает/выключает телик, но такое использование как мне кажется неправильное.

Сообщение отредактировал skyrider75 - 27.11.17, 23:37



Реп: (7)
Странно, в мажоре телевизоры Sony и LG расковыряли, а Samsung нет. По крайней мере в модулях нет.



Реп: (1275)
* skyrider75,
сценарий разберем чуть позже.
Да, выглядит все это страшно, но раз уж мы в это ввязались, придется разбираться :)
Приоткрою секрет: для таких мелких скриптов давно уже никто ничего не пишет, берешь мой (или любой чужой, из интернета), меняешь под себя и пользуешься.
Далее, уже берешь свои, копируешь и модернизируешь дальше, с нуля почти ничего писать не надо.
Если ты создал шаблон и он работает, пользуйся, ничего "неправильного" в системе нет :) Потом переделаешь и будет работать иначе, делов-то.

Добавлено 28.11.2017, 09:47:

* Андрей Крас,
про samsung читай тут, правда, что-то там у них сложно всё



Реп: (7)
* Vitt,
Слушай, не могу понять вот этот параметр в свойствах объекта: Updated Timestamp. Что значит его значение? Например у меня "1511469109"



Реп: (1275)
* Андрей Крас,
это время обновления, только не в человеческом формате xx:yy, а в формате timestamp, можешь погуглить что это
практической пользы для нас не имеет


Полная версия   Текстовая версия

Помощь   Правила

Сейчас: 20.07.24, 17:50