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
Причина редактирования: управления освещением в санузлах



Реп: (12)
loolez @ 18.11.17, 21:25 *
KD75 @ 18.11.17, 20:24
в порядке дикой идеи-интерфейс программы русский или англ.?

Интерфейс русский.

По голосовым движкам:
Yandex TTS вообще тишина
Windows TTS ангилйский
Google TTS только 2 гудка



Долго пытался "разговорить" Яндекс, переустанавливал, пробовал менять API ключи. Но под конец решил поменять голос, заговорил голосом Оксаны. Над было с этого начинать)



Реп: (1836)
loolez @ 19.11.17, 20:28 *
Но под конец решил поменять голос, заговорил голосом Оксаны. Над было с этого начинать)

Ух! У меня вообще на всех молчала. тыркал все голоса. потом, видать замучил её, и она говорить начала) Поздравляю Вас)



Реп: (12)
Vitt @ 19.11.17, 17:13 *
Weather Today - краткая погода сегодня
правильная ссылка и шаблон поиска для Москвы



Для Москвы получается. При попытке поменять на СПб (26063), на главной начинает присходит какая то каша, пропадают: история сробытий, управление, медиа итд., зато на всю страницу вылезает прогноз погоды)
Проблема в "шаблонах поиска" в веб- переменных? Или в руках не из того места?)



Реп: (1275)
* loolez,
покажи скрин



Реп: (1275)
Введение в Объектно-ориентированное программирование в Majordomo. Классы, объекты, свойства, методы.
Ну, вот тут шутки заканчиваются :) и начинается программирование.
Если вы прошли все предыдущие этапы и полны рвения продолжать дальше, продолжаем!
Для начала можно почитать мануал здесь, в котором описаны основные моменты, а я покажу, как это всё выглядит в системе.
Итак, кратко, с чем мы работаем:
Объекты
Отдельные сущности в системе, имеющие свои свойства и методы. Объектом может быть все что угодно: компьютеры, пользователи, выключатели, датчики температуры, помещения и прочее.
Классы
Это как бы "папки" с объектами, которые не только классифицируют их, но и содержат свойства и методы, которые объекты, входящие в данный класс, наследуют.
Например, класс Комнаты содержит объекты Зал и Спальня. Класс Комнаты содержит свойство Температура, которым обладают все комнаты, входящие в класс. Однако, само значение температуры для каждой комнаты можем быть своим. Классы, как и папки, могут быть многоуровневой вложенности.
Свойства
Свойства - это параметры объектов, которыми они обладают. Выше мы говорили, что Температура является свойством Комнаты.
Однако, свойства могут не только содержать какую-то информацию, но и влиять на работоспособность объекта. Например, изменения свойства Статус у Реле на 1 или 0, включит или выключит его физически. Свойства могут содержать не только сиюминутное значение, но и накапливать данные и хранить их в БД. Так, мы можем отслеживать изменение температуры в комнате, или смотреть когда и сколько раз включали или выключали розетку.
Методы
Методы - это список возможных действий над объектом. Действия могут как менять свойства объекта (например, действие Включи розетку, изменит ее свойство Статус с 0 на 1), но и, наоборот, зависеть от изменения свойств. Так, если мы вручную изменим свойство Статус розетки с 0 на 1, сработает метод Статус изменился, а мы можем в этот метод вставить полезный код.

Смотрим на примерах, идем в Панель управления - Объекты - Объекты.
Здесь перечислены Классы и Объекты, предусмотренные разработчиком в нашей системе, а также созданные нами путем установки новых модулей или создания Простых устройств.
Часть объектов и классов для нас могут показаться излишними, но я не советую вам бросаться менять здесь всё под себя, так как в будущем они могут нам вполне пригодиться.
Есть они и есть, каши не просят.
Итак, смотрим в класс Rooms:
Прикрепленное изображение

1 - объекты класса, 2 - редактирование класса, 3 - свойства класса, 4 - методы класса
Свойства класса Rooms
Прикрепленное изображение

Humidity - влажность
IdleDelay - через какое время считается, что в комнате никого нет
LatestActivity - timastamp времени, когда была последняя активность в комнате
LatestActivityTime - время, когда была последняя активность в комнате
SomebodyHere - наличие или отсутствие люде в данный момент
Temperature - температура
Title - описание

Методы класса Rooms
Прикрепленное изображение

onActivity - срабатывает когда в комнате обнаружена активность
onIdle - срабатывает когда в комнате обнаружено отсутствие активности
updateActivityStatus - срабатывает каждый раз когда меняется статус активности в комнате

Опускаемся из класса в объект Комнаты (например, наша Livingroom) и видим там
Прикрепленное изображение

Комнату посещали в 12:02, сейчас в ней никого нет, температура 7.8 градусов (связано с датчиком broadlink), влажность 42%, описание - Первый этаж.

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

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



Реп: (12)
Vitt @ 20.11.17, 11:27 *
loolez,
покажи скрин

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



Реп: (12)
Жду новых уроков. Пока все понятно, спасибо. Когда дойдем до прошивки ESP8266 и подключения его к MD? )))



Реп: (3)
сдаюсь: как добавить пункты в меню? я просто после установки поудалял кучу дефолтных (зачем мне погода в Минске), думал потом так же легко добавить можно. А сейчас не пойму как. Гуглить тоже не выходит, попадаются форумы, где уже готовое меню обсуждают.

К примеру, хочу добавить иконки статуса системы, и погоду с open weather. Модуль погоды настроен, но как его в меню добавить - не могу понять.



Реп: (1275)
* KitaiBabai, установите все с нуля, так будет проще. С OpenWeather не связывался, знаю, что там даже с бесплатным API key не больше двух дней прогноз.



Реп: (3)
* Vitt,
мне сейчас open weather до 24го пишет прогноз... правда не перепроверял, насколько достоверно.
Ладно, попробую с нуля..



Реп: (3)
* KitaiBabai,

нашел как приклеить open weather:
http://www.ekzorchik.r…-weather-in-majordomo/

и вообще там интересные статьи по МД
K
Поднимем в шапку.


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



Реп: (1275)
Управление устройствами с помощью свойств и методов. Устройства с обратной связью.
Самый правильный вид устройств, с которым просто и приятно работать :)
Что такое обратная связь? Это значит, что мы штатным образом постоянно знаем в каком состоянии находится устройство, даже если его отключат, например, вручную с кнопки на нем.
Начнем с того, что выберем какое-нибудь устройство с обратной связью, я возьму розетку MP1, и сделаем всем 4м его слотам простые устройства типа "Управляемое реле", как мы это уже делали раньше.
Надеюсь, проблем ни у кого не возникнет. Финальный результат должен выглядеть так:
Прикрепленное изображение

Что мы видим тут? Четыре простых устройства (Розетка 1-4), связанные с четырьмя объектами (Relay01-04), связанный каждый со свойством status соответствующего объекта.
Для интереса, можете перейти на соответствующие связанные объекты и их свойства через значки # рядом с ними, и посмотреть что там теперь стало видно.

Работаем через свойства
Всё это значит, что если мы изменим свойство status, например, объекта Relay01, то розетка включится. И наоборот, если включим розетку руками или через e-control, свойство розетки status изменится.
Попробуем? :)
Запоминаем следующие команды:
setGlobal('Relay01.status',1); или кратко sg('Relay01.status',1);

Если подать эту команду через консоль (ссылка вверху страницы)
Прикрепленное изображение

Розетка должна включиться, а свойство Relay01.status стать равным 1.
Если мы подадим эту команду еще раз, ничего не произойдет, так как свойство уже = 1, а розетка включена.
Обратно, если дать команду
sg('Relay01.status',0);

розетка выключится и статус станет = 0.
Убедимся в этом, перейдя в свойства объекта.
Прикрепленное изображение

Как побочный эффект, можно прямо здесь, в свойствах, вручную изменить 0 на 1 и розетка включится!

Работаем через методы
Опускаемся в объект и смотрим методы
Прикрепленное изображение

Нас интересуют turnOn и turnOff, которые включают и выключают устройство соответственно.
Даем в консоли команду
CallMethod('Relay01.turnOn');

розетка должна включиться.
Даем в консоли команду
CallMethod('Relay01.turnOff');

розетка должна выключиться.

Это основные команды работы с устройствами через свойства и методы, их хорошо бы переписать и помнить, на них будет построена вся наша автоматика!
Вы видите, что можно работать с устройствами как одним способом, так и другим, разницы нет, можно выбирать как нравится, или руководствоваться какими-то другими принципами.

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



Реп: (1275)
Управление устройствами с частичной или отсутствием обратной связи
Скорее всего, это устройства, управляемые по IR или RF-сигналам, о состоянии которых мы ничего не знаем или можем как-то догадываться.
К первым относятся устройства с раздельными сигналами на вкл/выкл, ко вторым - те, у которых такой сигнал один, этот случай наиболее запущен.
Мне достался телек LG, который имеет раздельные сигналы на включение и отключение, давайте попробуем его добавить в систему.
Идем в свойства нашего RM Pro, там мы уже добавляли наши коды пультов, а можно обучить новые через кнопку "Обучить коду".
Прикрепленное изображение

Добавляем простое устройство типа "Управляемое реле" и назовем его "Телевизор".
Прикрепленное изображение

Теперь те, кто внимательно следят за нашими репортажами :D должны оценить всю трагедию момента.
Устройство одно, объект один, свойство status одно, а команды две.
Что будет, если мы сейчас привяжем свойство status справа к обоим командам? Обе команды будут переводить свойство нашего объекта Relay05.status=1 и это свойство не будет отражать реального положения вещей. Поэтому мы его привязывать не будем.
В случае управления устройством без обратной связи управлять им через статусы невозможно (на самом деле просто сложно)!

Остается только управление через методы.
Идем по кнопке использование команд и запоминаем команды для управления нашим устройством.
brLinkCommand('LGTVon');
на включение и
brLinkCommand('LGTVoff');
на выключение соответственно.
Собственно, тут бы можно и сворачивать нашу беседу, эти команды уже можно пробовать в консоли и встраивать в автоматизацию, но мы же хотим сделать все по науке, ведь так? ;)

Идем в методы объекта телевизора, как несложно догадаться, нас интересуют Relay05.turnOn и Relay05.turnOff.
Редактируем метод turnOn, выбираем код и ставим нашу команду на включение brLinkCommand('LGTVon');, сохраняем.
Прикрепленное изображение

Аналогично делаем для метода turnOff и команды brLinkCommand('LGTVoff');

Теперь можно в консоли давать команды CallMethod('Relay05.turnOn'); и CallMethod('Relay05.turnOff');, телевизор должен при этом включаться и выключаться.
Также, в командной строке или телеграм можно написать "включи телевизор" или "выключи телевизор", результат должен быть аналогичным.
При этом, свойство Relay05.status, которое мы благоразумно не привязали к устройствам Бродлинк, будет меняться само на 0 или 1.

Выведем кнопку с таким устройством на сцену.
Идем в простое устройство "телевизор" и штатно выводим кнопку на сцену, напомню.
Прикрепленное изображение

И такая кнопка даже должна работать!

Как "хакнуть" систему? :) Правильно, выключить телек с пульта. Он выключится, а система будет считать его включенным и подсвечивать кнопочку.
Система "придет в себя", если при этом дать ей тоже команду на выключение, статус объекта сменится на 0, кнопка погаснет, а телек не отреагирует, так как он уже выключен, а команды на включение и выключение у него разные.

Несложно догадаться, чем будет отличаться устройство, которое включается и выключается одной командой, например, brLinkCommand('LGTVon');.
В командах RM Pro команда будет одна, в методах CallMethod('Relay05.turnOn'); и CallMethod('Relay05.turnOff'); команда будет тоже одна (та же самая), все как-бы будет работать...
Но получится, что без разницы, давать команду CallMethod('Relay05.turnOn'); или CallMethod('Relay05.turnOff');, без разницы, говорить в командную строку "включи телевизор" или "выключи телевизор", телек будет просто включаться или выключаться попеременно и может произойти полная путаница у статуса устройства и его физического состояния.
Но у меня есть такие устройства и я просто привык, что они работают так и не обращаю на это внимания.
Физическое состояние такого устройства можно отследить иными методами (телевизора, ПК - подключением к локальной сети, лампы - датчиком света, колонки - датчиком звука и т.п.). О наиболее простых методах обмануть природу я расскажу в следующий раз :)

Небольшая добавочка :)
В методы рядом с нашей командой можно поставить еще одну, которую мы уже знаем
brLinkCommand('LGTVon');
Say('Телевизор включен',2);

и
brLinkCommand('LGTVoff');
Say('Телевизор выключен',2);

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

Сообщение отредактировал Vitt - 22.11.17, 16:01



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

Я пингую роутер домашний и дачный на предмет наличия интернета, а также все компы, ноутбуки и приставки, которые имеют IP и пингуются по 80 порту.
Ключевое устройство - Internet - пингует ya.ru и по нему система определяет, что интернет есть и вывешивает зеленую иконку на главной!
Здесь же я пингую RM Pro, так как он периодически отваливается, а автоматика об этом не знает и считает, что раз команда на RM дана, то жалюзи закрыты, а подсветка включена, хотя это может быть совсем не так.
Здесь же пингуется телевизор, о котором мы говорили в предыдущем уроке ;) Он, конечно, не смарт, но обладает IP-адресом, чем мы и воспользуемся.

Узнаем IP и добавляем телевизор:
Прикрепленное изображение

заполняем все как на картинке, в качестве объекта указываем наш Relay05 (а не как у меня) и свойство status
ВАЖНО! Можно не указывать здесь сам IP-адрес устройства, а присвоить его в статус объекта, а сюда записать конструкцию вида %Object.Property%, прямо так, с процентами.
Мотаем ниже и заполняем второй лист
Прикрепленное изображение

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

Теперь мы обманули всех и телевизор обрел почти полноценную обратную связь :)
Это значит, что если он выключен и система думает так же, и если мы включаем его с пульта, через 5 секунд свойство Relay05.status становится = 1, система считает, что телек включен и даже кнопка на сцене станет подсвечена :) При этом сработает метод Relay05.statusUpdated, в котором тоже можно разместить свой код для реакции на ситуацию, если это необходимо.

Точно так же я поступаю с компьютерами и медиаприставками в своем доме, все они имеют обратную связи через устройства онлайн.

UPD! Попробуем добавить новый объект, который не привязан к простым устройствам на примере RM Pro
Идем в объекты, добавляем новый объект, вносим его в класс, например, Computers, чтобы не делать новый класс
Прикрепленное изображение

идем в его свойства и добавляем свойство status
Прикрепленное изображение

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

ниже ставим, как обычно, по 5 секунд и сохраняем
Прикрепленное изображение

Устройство добавлено
Прикрепленное изображение

проверяем, что в объекте статус сам сменился на 1
Прикрепленное изображение


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



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

Это режимы:
DarknessMode - режим темного времени суток от заката до восхода (мы задавали их в уроке про погоду и веб-переменные)
можно, например, управлять уличным освещением, домашними подсветками, жалюзи на окнах и т.п.
EconomMode - режим экономии
можно настроить, чтобы в этом режиме, например, отключались лишние источники нагрузки, свет, отопление переходило на щадящий режим
GuestsMode - режим приема гостей
наоборот, можно настроить максимум света, звука, стробоскопы и т.п. :D
NightMode - ночной режим, жестко задан с 20:00 до 08:00 (позже я скажу где)
в частности, влияет на то, будет ли часть команд Say произноситься голосом или, при активации режима, уходить только в консоль (позже расскажу подробнее)
NobodyHomeMode - режим, когда никого нет дома
по его активации можно, например, включать сигнализацию
SecurityArmedMode - режим сработавшей сигнализации
глобальный аларм

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

Каждый режим обладает параметрами объекта, то есть имеет свойства, нам интересны
active - активен ли режим
updatedTime - когда произошла активация
и методами, куда можно ставить код, который будет выполняться при действиях режима
modeChanged - режим режима :) изменен
activate - режим активирован
deactivate - режим деактивирован
Таким образом, мы можем управлять режимами так же как объектами, например:
sg('EconomMode.active',1); или CallMethod('EconomMode.activate'); - активирует режим экономии
sg('EconomMode.active',0); или CallMethod('EconomMode.deactivate'); - деактивирует режим экономии

Соответственно, код наших команд, который должны выполнятся при активации или деактивации режима, мы должны записать в методы EconomMode.activate или EconomMode.deactivate.

Сообщение отредактировал Vitt - 23.11.17, 16:05



Реп: (50)
Если систему держать на Orange Pi, то что там сейчас на рынке есть? Какую лучше купить? Еще не погружался в эту тему.



Реп: (1275)
* VooDooN2,
я купил в известном сетевом магазине за 1500 PI PC первую, к ней за 200 коробку и за 300 карту, прилепил от старой материнки радиатор на термопасту, все крутится аж бегом, температура проца в среднем 50.



Реп: (1)
Вывел температуру от broadlink в меню управления и в сцену с планом квартиры. В меню температура показывается секунд 10. Потом пропадает. С чем это может быть связано?



Реп: (3)
Возникает вопрос приоритетов программ: выставленных таймеров на , например, розетках broadlink в econtrol и выставленных внутри majordomo. Работать будут и те и те, уточните пожалуйста!
2. Используются ли broadlinkовские сервера для управления приборами, либо все на нашем домашнем микросервере с MD, а Китай можно хоть файрволом закрыть?

Сообщение отредактировал forpdateam - 26.11.17, 00:37



Реп: (1275)
* forpdateam, все программы и плагины будут работать вместе и никто никому не должен помешать. Опрос устройств происходит напрямую, если econtrol не нужен, теоретически можно китайские облака отключать.

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


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

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

Сейчас: 25.07.24, 00:35