Очень интересно, но ничего непонятно!

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
Ruslan
Сообщения: 2184
Зарегистрирован: 06 янв 2014, 20:44

Очень интересно, но ничего непонятно!

Сообщение Ruslan » 26 апр 2017, 22:22

От тех, кто только заинтересовался построением «умного дома» (УД), часто приходится слышать вопросы, ответы на которые «старожилам» кажутся очевидными и само собой разумеющимися. Однако «новичкам» непросто сразу охватить большой объем материала, особенно, если они раньше не занимались электрикой/электроникой/программированием и тому подобными вещами.
Поэтому хочу свои заметки адресовать тем, у кого после знакомства со статьями Андрея остались вопросы по поводу того, как же все это работает. Замечательных статей Андрея это, конечно же, не заменит, однако, надеюсь, снимет элементарные вопросы, которые, как я заметил, часто задают начинающие «строители умных домов» или просто заинтересовавшиеся темой.
Буду стараться писать максимально доступно и объяснять, что называется «на пальцах». Бывалых «строителей УД» прошу не забрасывать меня сразу тяжелыми предметами и простить в некоторых случаях намеренное упрощение и пренебрежение мелкими деталями. Ибо цель – крупными мазками показать «новичкам», как работает MegaD (в просторечии –- Мега).


А подключим-ка мы ГЕРКОН
http://ab-log.ru/forum/viewtopic.php?f= ... 309#p28309

Подключим ДАТЧИК ДВИЖЕНИЯ и настроим автовыключение «забытого света»
http://ab-log.ru/forum/viewtopic.php?f= ... 440#p28440

Нет протечкам! Подключим ДАТЧИК ПРОТЕЧКИ и шаровый кран с электроприводом
http://ab-log.ru/forum/viewtopic.php?f= ... 789#p28789

«Пощелкаем» телевизором через ИК ПЕРЕДАТЧИК
https://www.ab-log.ru/forum/viewtopic.p ... 641#p30641

ВИДЕОНАБЛЮДЕНИЕ: «смотреть могут не только лишь все» (c)
https://ab-log.ru/forum/viewtopic.php?f ... 573#p33573

Диммировали, диммировали и «выдиммировали»
https://www.ab-log.ru/forum/viewtopic.p ... 406#p35406

Давай сделаем это по-быстрому или «мини-УД на коленке»
https://ab-log.ru/forum/viewtopic.php?f ... 887#p38887

MegaD, освещение, MajorDoMo
https://www.ab-log.ru/forum/viewtopic.p ... 104#p40104

Автономные возможности MegaD на примере моноблока (MegaD-2561-24I14O-RTC-POE)
https://ab-log.ru/forum/viewtopic.php?f ... 055#p41055

Перезагружаем зависший роутер / USB-модем
https://www.ab-log.ru/forum/viewtopic.p ... 961#p45961

Оч.умелые ручки или колхоз на марше
https://www.ab-log.ru/forum/viewtopic.p ... 031#p46031

Приручаем расширитель входов MegaD-16I-XT
https://www.ab-log.ru/forum/viewtopic.p ... 252#p46252

Куда вы удалились? Снова про ДАТЧИКИ ДВИЖЕНИЯ
https://www.ab-log.ru/forum/viewtopic.p ... 022#p47022

Опрашиваем ЦИФРОВЫЕ ДАТЧИКИ
https://ab-log.ru/forum/viewtopic.php?f ... 348#p47348

Датчики Холла вместо герконов на окнах
https://www.ab-log.ru/forum/viewtopic.p ... 791#p47791

Подсветка выключателей
https://www.ab-log.ru/forum/viewtopic.p ... 098#p48098

Автоматизация входной группы
https://www.ab-log.ru/forum/viewtopic.p ... 781#p48781

Вычисляем долготу дня, время восхода и заката Солнца
https://www.ab-log.ru/forum/viewtopic.p ... 405#p51405

Заметки на полях
Автопроветривание теплиц (предыстория)
Автополив теплиц (предыстория)
Управление дренажным насосом (предыстория)
Опрос DS18B20, подключенных шиной
Все порты MegaD на одной странице
Совмещаем "Удаленный термостат" и управление с сервера



Как это работает (на примере управления освещением)?

Необходимый комплект оборудования будет состоять из:
1. Интерфейсного модуля MegaD-2561 («мозг», который будет по сети взаимодействовать с сервером, получать информацию от исполнительного модуля и отдавать ему команды).
2. Исполнительного модуля MegaD-7I7O-R (соединен шлейфом с MegaD-2561, «отлавливает» срабатывание выключателей и переключает реле). Данный исполнительный модуль содержит 7 входов типа «кнопка» и 7 выходов на реле.
3. Блока питания на 12 В, например, Mean Well DR-60-12 (для питания MegaD-2561).

Все это монтируется на DIN-рейку и соединяется между собой. На блок питания подается переменное напряжение 220 В от сети. На MegaD-2561 подается постоянное напряжение 12 В от блока питания (главное не перепутать полярность!). Мега и исполнительный модуль «общаются» между собой через шлейф.

Теперь обратимся к организации электропроводки. Для начала вспомним «классическую схему», где фаза «разрывается» на выключателе.
pic1.jpg
pic1.jpg (19.97 КБ) 52342 просмотра
Короткая анимация.

В случае с MegaD схема проводки будет иной.
pic2.jpg
pic2.jpg (46.75 КБ) 52342 просмотра
Короткая анимация.

То есть роль физического выключателя, разрывающего напряжение, подаваемое к нагрузке (лампочке), будет играть реле исполнительного модуля. Роль же нажимного выключателя сводится лишь к информированию Меги о том, что он сработал.

Чтобы совсем уже было все понятно, размещу еще одну картинку.
Изображение
На практике удобно, чтобы провода сначала приходили на винтовые клеммы, а потом отдельными "хвостами" подключались "по местам назначения".

Два слова о проводах и выключателях. Видно, что от выключателя должны приходить две жилы провода и подключаться ко входу Меги. Если выключатель имеет несколько клавиш, то от каждой клавиши должна приходить своя пара жил. Поскольку силового напряжения в этих проводах не будет, можно использовать для прокладки любую «лапшу». Но если проложить стандартные провода, используемые для освещения (сечением 0,75 – 1,5 мм2), то вы сохраните гибкость и при необходимости сможете все перекоммутировать на классическую схему электропроводки. С «лапшой» такой фокус не пройдет.

Чисто технически можно использовать и обычные выключатели, у которых есть 2 фиксируемых положения. Но в УД обычно используют выключатели без фиксации, или кнопки (http://ab-log.ru/smart-house/accessories), поскольку положение обычного выключателя ничего не скажет нам о том, включен свет или выключен. Например, мы вошли в комнату, щелкнули выключателем, свет включился, а потом со смартфона/планшета/ноутбука выключили свет (или он сам выключился по команде с сервера как «забытый», когда в помещении продолжительное время отсутствовало движение). Обычный выключатель при этом останется в исходном положении.

На практике то, что на рисунке обведено пунктирной линией, обычно помещают в один большой (БОЛЬШОЙ!) щиток/ящик/электрошкаф (http://ab-log.ru/forum/viewtopic.php?f= ... %B2#p21886). Используют один на здание или один на этаж (чтобы сократить расход проводов). И все провода «сгоняют» туда. А «большой», потому что разместить нужно много всего. Например, блок питания для Меги (как на рисунке) + Мега + Исполнительный модуль = 25,5 см. А еще будут автоматы, УЗО, могут быть промежуточные реле, магнитные пускатели (для больших нагрузок), драйверы управления двигателями, винтовые клеммы (для удобства монтажа), дополнительные блоки питания, свитч-коммутаторы, ИБП, одноплатные ПК в качестве сервера и т.д.

Но вернемся к освещению. Схематично, все будет работать так. Щелкнув выключателем, мы сообщим Меге о нашем намерении включить/выключить свет. Мега по сети сообщит серверу (если его адрес прописан в настройках), какой именно вход сработал и будет ожидать от него команд на переключение выходов (реле) исполнительного модуля. При поступлении ответа от сервера с командами, Мега их выполнит. Если в течение примерно 1,5 секунд ответ от сервера не поступит, то контроллер выполнит действие по умолчанию, самостоятельно переключив выходы, которые прописаны в настройках сработавшего входа в поле «Act». Так что, если вдруг «умрет» сервер или «отвалится» сеть, без света вы не останетесь.

Некоторые используют Мегу и без сервера в режиме только выполнения действий по умолчанию. В этом случае в настройках контроллера адрес сервера не прописывается и Мега сразу выполняет указанные в поле «Act» действия, не ожидая ответа от сервера. В нашем примере достаточно прописать 7:2 в настройках входа P0 (к которому подключен выключатель-кнопка) в поле «Act», тогда при срабатывании входа Мега переключит реле на выходе P7 (к которому подключена лампочка) в противоположное состояние. Т.е. если было «выключено» – включит, а если «включено» – выключит.

А где у него настроечная таблица?

Теперь самое время немного поговорить о настройках Меги.
А зачем там что-то настраивать и почему «аппарат» сразу не работает «из коробки»? – спросит меня недоумевающий читатель. А вот зачем. Дело в том, что программно один и тот же порт Меги может работать в совершенно разных режимах: может быть как входом, так и выходом (или даже попеременно с высокой частотой и тем и другим!), т.е. функционировать как кнопка, источник ШИМ-сигнала, обработчик данных с цифровых и аналоговых датчиков, переключатель реле и т.д. Однако, что именно возможно «повесить» на данный порт, будет определяться схемотехникой подключенного к контроллеру исполнительного модуля. Пока наш контроллер не наделен искусственным интеллектом и телепатическими способностями, нам придется «в явном виде» указать ему, в каком режиме он должен работать с тем или иным портом, в соответствии с типом подключенного к Меге исполнительного модуля и «железом», которое мы подсоединили к конкретному порту. Благо сделать это несложно, т.к. Мега имеет встроенный web-интерфейс.

В нашем примере с управлением освещением мы подключили к Меге исполнительный модуль MegaD-7I7O-R, у которого 7 входов типа «кнопка» и 7 выходов на реле. На рисунке выше выключатель-кнопка подключен к первому порту, обозначенному как «P0», а лампочка подключена к реле на порту «P7». Значит порт P0 нужно сконфигурировать как вход (In), а порт P7 – как выход (Out). Если вместо MegaD-7I7O-R подключить к Меге исполнительный модуль MegaD-14-R (у которого 14 релейный выходов), то порт P0 нужно будет конфигурировать как выход. А если мы подключили исполнительный модуль MegaD-14-IN и подсоединили к порту P0, например, цифровой датчик температуры DS18B20, то порт P0 следует настроить на работу с цифровыми датчиками по протоколу 1-wire. Так что необходимость настройки портов Меги – лишь производная от широкой функциональности устройства.

При «заводских» настройках адрес Меги в сети 192.168.0.14, а пароль – sec. Если в адресной строке браузера мы наберем
http://192.168.0.14/sec
и нажмем на Enter, то увидим стартовую страницу Меги.
Главная страница Меги.JPG
Главная страница Меги.JPG (37.92 КБ) 52284 просмотра
Видно, что порты находятся в режиме «NC» (не сконфигурированы). Но зайдем ненадолго в пункт «Config».
Страница Меги Config.JPG
Страница Меги Config.JPG (25.48 КБ) 52284 просмотра
В поле «IP» нужно вписать IP-адрес Меги, по которому к контроллеру нужно обращаться из сети. Чтобы сервер «видел» Мегу ее IP-адрес должен принадлежать к той же подсети, что и адрес сервера. Т.е. если IP-адрес сервера, например, 10.165.1.115, то адрес Меги нужно указать 10.165.1.XXX, где «XXX» – любые цифры, от 1 до 254, не совпадающие с IP-адресами других устройств в этой же подсети.
В поле «SRV» указывается IP-адрес сервера.
В поле «Script» нужно написать имя скрипта, который будет запускать Мега на сервере при срабатывании входов, например megad.php.
По завершении нажмем «Save».

Теперь настроим порт P0, где у нас выключатель-кнопка. Определим его как вход (In). Можем прописать действие по умолчанию 7:2 (переключать реле, на порту P7, к которому у нас подключена лампочка). В поле «Mode» задается режим реагирования Меги на события, происходящие со входом. «P» – Мега будет реагировать на замыкание входа, «R» – на размыкание, «P&R» – на замыкание и на размыкание. Для выключателя-кнопки выберем «P». Однако если мы решили «соригинальничать» и применили обычные выключатели, то нам потребуется режим «P&R». Многие устройства (например, датчики протечки, датчики движения) размыкают «сигнальную» цепь при срабатывании, поэтому для них выбирают режим «R».
Настройка порта In(кнопка).JPG
Настройка порта In(кнопка).JPG (7.59 КБ) 52284 просмотра
Осталось настроить порт P7, к которому подключена лампочка. Так как мы используем исполнительный модуль MegaD-7I7O-R на порту P7 находится реле. Поэтому сконфигуриуем порт P7 как выход (Out). В поле «Mode» установим SW (простое переключение). По завершении нажмем «Save».
Изображение


Теперь можно «пощелкать» реле прямо из web-интерфейса Меги, нажимая ссылки «ON» и «OFF» на странице порта P7. Также можно переключить реле, выполнив из строки браузера команду
http://192.168.0.14/sec/?cmd=7:2
или дать команду на включение (http://192.168.0.14/sec/?cmd=7:1)
или выключить (http://192.168.0.14/sec/?cmd=7:0).
Также, не покидая браузер мы можем узнать, в каком состоянии находится тот или иной порт (например, P7). Для этого спросим Мегу из адресной строки
http://192.168.0.14/sec/?pt=7&cmd=get
В качестве ответа получим надпись на странице браузера «ON» или «OFF».
Аналогичным образом можно узнать и состояние входа (например, P0).
http://192.168.0.14/sec/?pt=0&cmd=get
У нас к нему подключен выключатель-кнопка, так что данное действие вряд ли представляет практический интерес. А вот если бы вместо кнопки был подключен геркон, смонтированный на окне, то опросив порт мы бы узнали, открыто окно или закрыто (и если открыто, сервер не позволил бы поставить помещение на охрану и сообщил бы «голосом», какое именно окно открыто).

На этом разрешите временно прервать повествование. Когда появится время (и вдохновение) продолжу свой рассказ, сосредоточившись на самом интересном: куда нужно тыкать пальцем в смартфон/планшет/ноутбук, чтобы УД совершил что-то полезное.

Это страшное слово «сервер»

Но если сказать, что сервер ¬- это компьютер, выделенный для выполнения определенной задачи, то не такое уж и страшное. Ну кто из нас боится домашнего компьютера (кроме Ассанжа и Сноудена)? К особенностям работы сервера относят то, что он должен трудится 24 часа в сутки 7 дней в неделю. Ведь управлять УД нужно круглосуточно. В качестве сервера можно взять любой компьютер от небольших и маломощных (http://ab-log.ru/smart-house/ethernet/cubieboard-server), до обычных домашних настольных компьютеров или ноутбуков. Как у одного, так и у второго варианта найдутся свои сторонники, аргументировано объясняющие, почему именно этот вариант самый лучший. Не буду втягиваться в эту дискуссию. Лишь отмечу, что организовать сервер на обычном компьютере средней бытовой размерности начинающему будет гораздо проще, чем заставить работать компактные «кубики/малинки/апельсинки...", где нужны соответствующие навыки и сноровка.

Для чего же нам вообще нужен сервер, если у нас уже есть «мозг» в виде Меги? А нужен он нам потому, что у Меги и сервера совершенно разные задачи. Мега неустанно слушает входы, отфильтровывает «дребезг контактов», «общается» с датчиками на понятном им языке и т.д., словом берет на себя всю низкоуровневую работу. Трансляцией же web-интерфеса в сеть, работой с графикой, звуком, правами доступа пользователей, а главное для нас – отработкой всей логики работы систем УД будет заведовать сервер.

Да, Мега может самостоятельно совершать простейшие действия, например, сработал вход --> включить выход(ы) --> сделать паузу --> выключить выход(ы), но это в идеологии, заложенной автором (которую я всецело разделяю), что называется «аварийный» режим, когда по каким-то причинам сервер оказался недоступен. В УД логика часто оказывается более сложной. Там, прежде чем что-то сделать, подчас, надо узнать дату и время, запросить состояние входов и/или выходов, помнить установленный режим работы тех или иных систем УД (ручной/авто, стандартный/экономный и т.д.), выполнить вычисления (например, вычислить среднее из последних нескольких значений с датчиков температуры или освещенности) и пр. Вот всеми этими сложными вещами и занимается «его величество» сервер.

Для такого рода работы требуется соответствующее программное обеспечение. Обычно это
web-сервер (транслирует web-страницы в сеть),
система управления базами данных (или СУБД, занятая хранением и обработкой всевозможных структурированных табличных данных),
и язык программирования.

«Классикой жанра» уже стало использование связки Apache + MySql + PHP. Есть готовые сборки вроде Денвера, которые автоматически устанавливают эти программы и настраивают их совместную работу. Только вот неподготовленному пользователю получить что-нибудь красивое даже от такого настроенного «комбайна» будет очень непросто. Нужны серьезные навыки.
Поэтому давайте остановим свой выбор на ПО из того списка, который указан в начале базовой статьи Андрея про MegaD-2561 (http://ab-log.ru/smart-house/ethernet/megad-2561). Завсегдатай этого форума OlegJktu84 подготовил краткий обзор по использованию MajorDoMo, IoBroker и OpenHUB (viewtopic.php?f=1&t=1207#p22429).

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

Итак, приступим.

Установка MajorDoMo (под Windows)
Под Windows установка Мажордомо не отличается от установки других программ. Скачиваем дистрибутив (https://mjdm.ru/skachat-majordomo/) и запускаем его. В процессе установки нам потребуется лишь указать наш часовой пояс , язык и тему оформления интерфейса (темную или светлую). По умолчанию программа устанавливается в директорию «_majordomo» на системном диске. Разработчик рекомендует ее не менять.

Про сложность установки под Линукс на форуме слышал разные мнения от «делал по инструкции и все без проблем «взлетело», до «сам программист, бьюсь третий день… (далее следует непереводимая игра слов из длинного набора идиоматических выражений)».

Я устанавливал под Windows. По окончании установки на рабочем столе (или в меню «Пуск») появляется ярлык для запуска программы. После старта страница Мажордомо открывается в браузере по адресу http://127.0.0.1/ (или http://localhost/), а в системном трее (значки рядом с часами в нижнем правом углу), появляется значок программы (даже два значка). Для корректного завершения работы Мажордомо необходимо запустить на исполнение файл C:\_majordomo\shutdown.bat или нажать правой кнопкой мыши на значок Мажордомо в системном трее и выбрать пункт «Close MajorDoMo».

Внешний вид программы после установки.
Изображение
Теперь можно обращаться к Мажордомо из любого устройства в локальной сети, имеющего браузер, по путям:
http://IP-адрес_сервера/ -- главная страница Мажордомо
http://IP-адрес_сервера/menu.html -- только меню Мажордомо (удобно для смартфонов)
http://IP-адрес_сервера/pages.html -- только страницы Мажордомо
http://IP-адрес_сервера/admin.php -- вход в Панель управления Мажордомо,
где IP-адрес_сервера – это IP-адрес компьютера, где установлен Мажордомо, в локальной сети. Чтобы узнать этот адрес в Windows можно выполнить из командной строки (Клавиша Майкрософт + R) команду cmd, а потом ipconfig. В результате появится примерно вот такое окно
Изображение
Зеленой рамкой я обвел искомый IP-адрес.
Не буду писать про соблюдение требований безопасности при доступе к системе из сети, об этом вы сможете прочитать на форуме.

Настройка на работу с Мегой
Мажордомо взаимодействует с различным оборудованием с помощью установленных модулей. Под каждый вид оборудования (из поддерживаемых) предусмотрен свой модуль. Для Меги нам потребуется установить и настроить модуль «MegaD devices» (Панель управления --> СИСТЕМА --> Маркет дополнений --> Вкладка «Оборудование»). Ставим «галку» рядом с пунктом «MegaD devices» и жмем кнопку «Добавить».
Изображение
По окончании установки в Панели управления в разделе УСТРОЙСТВА появится новый пункт «MegaD». Зайдем туда. Правда, предварительно, пропишем адрес сервера в конфигурацию Меги, а также запускаемый скрипт megad.php.
Изображение
Изображение
Уж не знаю как, но у меня модуль «подцепил» Мегу даже без нажатия кнопки «Сканировать устройства». (Излишне напоминать, что Мега к моменту сканирования должна быть подключена к серверу (сети) и должна получать питание 12 В.) Если нажать на «карандаш» напротив вновь добавленного устройства, то увидим такую картину
Изображение

Когда мы вносим какие-либо изменения в настройку портов Меги, например, добавляем действие по умолчанию при срабатывании входа P0
Изображение
необходимо «перечитать» конфигурацию Меги в модуле на вкладке «Advenced».
Изображение

Собственно, уже после этого Мажордомо через модуль MegaD будет давать команду нашей Меге на переключение порта P7 при срабатывании порта P0.
Но у нас то уже давно «палец чешется» от желания потыкать им в экран для управления выходами контроллера. Поэтому займемся настройкой интерфейса.


Настраиваем выключатель на сцене и в меню MajorDoMo
Кому не нравится страничка «Добро пожаловать!» могут безболезненно ее удалить.
Напомним, что выключатель-кнопка (или просто 2 жилы провода для теста) подключены к порту P0, а лампочка (а для теста нам хватит и соответствующего светодиодного индикатора Меги) – к порту P7. Возможных вариантов настройки может быть очень много. Мы же воспользуемся одним из них. Если коротко, то сейчас мы создадим для реле Меги на порту P7 виртуальный объект и пропишем команды, а потом создадим выключатели в меню Мажордомо и на тестовой сцене (которая там уже есть по умолчанию). Распишем все по шагам.

1. Для выхода Меги P7 создаем виртуальный объект в классе Relays (Панель управления --> ОБЪЕКТЫ --> Объекты --> Relays --> [вкладка] Объекты --> «Добавить новый объект» ). Назовем его, например, «Relay_014-07». У объекта уже имеются свойство «status» и «штатные» методы «turnOn», «turnOff» и «switch».
Произведем настройку методов путем записи кода:
[Везде перед сохранением введенного пользователем кода в пункте «Вызывать родительский метод» проставим радиоточку в положение «НИКОГДА».]
в «turnOn» запишем

Код: Выделить всё

file_get_contents("http://192.168.0.14/sec/?cmd=7:1");
setGlobal('Relay_014-07.status', 1);
Изображение

в «turnOff» запишем

Код: Выделить всё

file_get_contents("http://192.168.0.14/sec/?cmd=7:0");
setGlobal('Relay_014-07.status', 0);
Изображение

в метод «switch» запишем код PHP

Код: Выделить всё

file_get_contents("http://192.168.0.14/sec/?cmd=7:2");
$state =file_get_contents("http://192.168.0.14/sec/?pt=7&cmd=get");
if ($state == "ON") {
 setGlobal('Relay_014-07.status', 1);
} else {
 setGlobal('Relay_014-07.status', 0);}
Изображение


2. Создадим виртуальный выключатель в меню Мажордомо (Панель управления --> ОБЪЕКТЫ --> Меню управления --> [редактируем раздел] Управление --> [Дочерние пункты:] «Добавить»). Назовем его, например, «Button_1». Выбираем
Тип: «Выключатель» (из выпадающего списка)
Связанный объект: «Relay_014-07»
Свойство: «status»
Метод: «switch»
Изображение

3. Создадим выключатель на тестовой сцене (Панель управления --> ОБЪЕКТЫ --> Сцены --> [редактируем] Scene 1 --> [вкладка] Элементы --> «Добавить новый элемент»). Назовем новый элемент сцены, например, «Butt_1».
СОВЕТ: желательно, чтобы имена объектов в Мажордомо были уникальными!
Выбираем
Тип «Выключатель»
Связанный объект «Relay_014-07»
Изображение

Из интерфейса Мажордомо все уже будет работать. Выглядит это так
Изображение

Изображение

Но нам еще нужно обеспечить реакцию объектов интерфейса на нажатие физического выключателя-кнопки (срабатывание контактов на входе Меги P0). Для этого завершим настройку.

4. В модуле MegaD у Меги на вкладке «Данные» у порта «0 Input» в поле «Связанный объект» выставляем «Relay_014-07». В поле «Метод» выставляем «switch».
Также я проставляю галку в поле «Skip default action», потому что не хочу, чтобы сервер запускал выполнение действия по умолчанию. Пусть действие по умолчанию выполняет сама Мега, когда сервер недоступен.
Изображение

Еще остается один момент, который стоит упомянуть. Наша лампочка может быть включена и без участия Мажордомо (самой Мегой путем выполнения сценария по умолчанию, из web-интерфейса Меги, командой из браузера и пр.). И после того, как мы включили Мажордомо, между состоянием выключателя на сцене и реальным состоянием лампочки может быть рассогласование. Конечно, при первом клике по выключателю («железному» или на сцене) синхронизация состояний восстановится.
Однако, можно принудительно проводить «сверку» состояний путем запуска скрипта в цикле, например, раз в 15 минут). Назовем скрипт «proverka». (Панель управления --> ОБЪЕКТЫ --> Сценарии --> [вкладка] Сценарии --> «Добавить новый сценарий».)
Выберем при создании категорию, к примеру, «Scenarios».

Код: Выделить всё

$state = file_get_contents("http://192.168.0.14/sec/?pt=7&cmd=get");
if ($state == "ON") {
 setGlobal('Relay_014-07.status', 1);
} else {
 setGlobal('Relay_014-07.status', 0);
}
setTimeOut('myTimer_proverka','runScript("proverka");',60*15);
Изображение

А чтобы этот скрипт запустился после старта Мажордомо, можно записать в «onNewMinute» (Панель управления --> ОБЪЕКТЫ --> Объекты --> [класс] Timer --> ClockChime --> onNewMinute) такой код (ниже строки «$m=date('i',time());»)

Код: Выделить всё

if ($m%15 == 0) {runScript("proverka");}
Изображение

Это что же, спросит меня изумленный читатель, я должен быть программистом!? Ну, в случае с Мажордомо, да. Но совсем чуть-чуть. Чем больше ваши знания и лучше навыки, тем более удобную и красивую систему «под себя» вы сможете настроить. Вот, например, какие непохожие интерфейсы народ «рисует» умеючи (http://majordomo.smartliving.ru/forum/v ... f=4&t=3861). И все это один и тот же Мажордомо!

ДОПОЛНЕНИЕ

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

Как всегда пойдем по шагам.
1. В объектах создаем новый класс. Назовем его, к примеру, «Lighting».

2. Добавим в созданный класс свойства.
ipAddress– IP-адрес Меги;
Password – Пароль Меги;
Port – номер порта Меги (куда подключена цепь освещения);
Status – «индикатор» состояния для интерфейсных элементов-выключателей (0 – свет выключен, 1 – включен).

3. Добавим в класс методы и пропишем их код. (Обращаю внимание, что код методов мы прописываем именно в методы КЛАССа.)
turnOn – включение света;
turnOff – выключение;
switch – переключение.

Код метода turnOn

Код: Выделить всё

file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?cmd=".$this->getProperty('Port').":1");
$this->setProperty('Status', 1);
Код метода turnOff

Код: Выделить всё

file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?cmd=".$this->getProperty('Port').":0");
$this->setProperty('Status', 0);
Код метода switch

Код: Выделить всё

file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?cmd=".$this->getProperty('Port').":2");
$state = file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?pt=".$this->getProperty('Port')."&cmd=get");
if ($state == "ON") {
  $this->setProperty('Status', 1);
} else {
  $this->setProperty('Status', 0); }
4. Добавим в класс объекты (отдельный на каждую цепь освещения). Назовем их, к примеру, «Lamp_01», «Lamp_02», «Lamp_03» и т.д.
Теперь для каждого объекта заполним свойства. Например,
ipAddress – 192.168.0.14 (в соответствии с конфигурацией Меги)
Password – sec (в соответствии с конфигурацией Меги)
Port – 7 (для каждого объекта (цепи освещения) указывается свой номер выхода Меги, куда эта цепь подключена).

5. В объектах интерфейса (выключателях) в меню и на сцене нужно сослаться на метод switch и свойство Status соответствующего объекта. В выключателях на сцене это нужно сделать для каждого состояния (доступно, если в поле «Расширенная настройка» выставить радиоточку в положение «Да»). Условие отображение будет «простое», для состояния on = 1, а для off <> 1, собственно, как выставлено по умолчанию.
Кстати, для ускоренного копирования элементов удобно пользоваться кнопкой «Создать копию (клонировать)».

6. Чтобы подключить «железные» выключатели-кнопки в модуле «MegaD» в строчках соответствующих входов на вкладке «Данные» в поле «Связанный объект» указываем нужный из числа созданных в классе «Lighting» и в поле «Метод» выбираем метод switch. Не забываем проставить галочку в поле «Skip default action».

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

Код: Выделить всё

$objects=getObjectsByClass("Lighting");
foreach($objects as $obj) {
   callMethod($obj['TITLE'].".turnOff");
}



А подключим-ка мы ГЕРКОН
http://ab-log.ru/forum/viewtopic.php?f= ... 309#p28309

Подключим ДАТЧИК ДВИЖЕНИЯ и настроим автовыключение «забытого света»
http://ab-log.ru/forum/viewtopic.php?f= ... 440#p28440

Нет протечкам! Подключим ДАТЧИК ПРОТЕЧКИ и шаровый кран с электроприводом
http://ab-log.ru/forum/viewtopic.php?f= ... 789#p28789

«Пощелкаем» телевизором через ИК ПЕРЕДАТЧИК
https://www.ab-log.ru/forum/viewtopic.p ... 641#p30641

ВИДЕОНАБЛЮДЕНИЕ: «смотреть могут не только лишь все» (c)
https://ab-log.ru/forum/viewtopic.php?f ... 573#p33573

Диммировали, диммировали и «выдиммировали»
https://www.ab-log.ru/forum/viewtopic.p ... 406#p35406

Давай сделаем это по-быстрому или «мини-УД на коленке»
https://ab-log.ru/forum/viewtopic.php?f ... 887#p38887

MegaD, освещение, MajorDoMo
https://www.ab-log.ru/forum/viewtopic.p ... 104#p40104

Автономные возможности MegaD на примере моноблока (MegaD-2561-24I14O-RTC-POE)
https://ab-log.ru/forum/viewtopic.php?f ... 055#p41055

Перезагружаем зависший роутер / USB-модем
https://www.ab-log.ru/forum/viewtopic.p ... 961#p45961

Оч.умелые ручки или колхоз на марше
https://www.ab-log.ru/forum/viewtopic.p ... 031#p46031

Приручаем расширитель входов MegaD-16I-XT
https://www.ab-log.ru/forum/viewtopic.p ... 252#p46252

Куда вы удалились? Снова про ДАТЧИКИ ДВИЖЕНИЯ
https://www.ab-log.ru/forum/viewtopic.p ... 022#p47022

Опрашиваем ЦИФРОВЫЕ ДАТЧИКИ
https://ab-log.ru/forum/viewtopic.php?f ... 348#p47348

Датчики Холла вместо герконов на окнах
https://www.ab-log.ru/forum/viewtopic.p ... 791#p47791

Подсветка выключателей
https://www.ab-log.ru/forum/viewtopic.p ... 098#p48098

Автоматизация входной группы
https://www.ab-log.ru/forum/viewtopic.p ... 781#p48781

Вычисляем долготу дня, время восхода и заката Солнца
https://www.ab-log.ru/forum/viewtopic.p ... 405#p51405

Заметки на полях
Автопроветривание теплиц (предыстория)
Автополив теплиц (предыстория)
Управление дренажным насосом (предыстория)
Опрос DS18B20, подключенных шиной
Все порты MegaD на одной странице
Совмещаем "Удаленный термостат" и управление с сервера
Последний раз редактировалось Ruslan 01 янв 2024, 13:07, всего редактировалось 34 раза.

fedos
Сообщения: 108
Зарегистрирован: 06 окт 2016, 15:40

Re: Очень интересно, но ничего непонятно!

Сообщение fedos » 28 апр 2017, 00:30

Хорошая задумка!

empenoso
Сообщения: 1039
Зарегистрирован: 11 ноя 2015, 08:03
Откуда: Пермь

Re: Очень интересно, но ничего непонятно!

Сообщение empenoso » 28 апр 2017, 05:40

Ruslan писал(а):На практике то, что на рисунке обведено пунктирной линией, обычно помещают в один большой (БОЛЬШОЙ!) щиток/ящик/электрошкаф (http://ab-log.ru/forum/viewtopic.php?f= ... %B2#p21886). Используют один на здание или один на этаж (чтобы сократить расход проводов). И все провода «сгоняют» туда. А «большой», потому что разместить нужно много всего. Например, блок питания для Меги (как на рисунке) + Мега + Исполнительный модуль = 25,5 см. А еще будут автоматы, УЗО, могут быть промежуточные реле, магнитные пускатели (для больших нагрузок), драйверы управления двигателями, винтовые клеммы (для удобства монтажа), дополнительные блоки питания, свитч-коммутаторы, ИБП, одноплатные ПК в качестве сервера и т.д.
Хорошая статья и даже ссылка на фото моего шкафа дана, но на мой взгляд это когда год назад собирал не совсем верно собрал - НЕ оптимально. Здание правда пока не закончено до сих пор и ничего не установлено еще :D Думаю этим летом уже все будет смонтировано, но буду переделывать перед установкой.

Ruslan
Сообщения: 2184
Зарегистрирован: 06 янв 2014, 20:44

Re: Очень интересно, но ничего непонятно!

Сообщение Ruslan » 28 апр 2017, 10:20

Спасибо за отклики! Картинки к своим "заметкам" поместил на файлообменник, максимальный срок хранения у которого - 90 дней. А как бы их разместить на постоянной основе? (Или каждые 90 дней "перевыкладывать"?)

xsash
Сообщения: 239
Зарегистрирован: 08 авг 2016, 12:27

Re: Очень интересно, но ничего непонятно!

Сообщение xsash » 28 апр 2017, 10:27

яндекс, habrastorage.org

Ruslan
Сообщения: 2184
Зарегистрирован: 06 янв 2014, 20:44

Re: Очень интересно, но ничего непонятно!

Сообщение Ruslan » 28 апр 2017, 12:05

Спасибо, xsash. "Перезалью" картинки через habrastorage.org

empenoso
Сообщения: 1039
Зарегистрирован: 11 ноя 2015, 08:03
Откуда: Пермь

Re: Очень интересно, но ничего непонятно!

Сообщение empenoso » 28 апр 2017, 15:18

Зачем такие сложности - можно встроить в текст сообщения здесь и кол-во просмотров отображается.
Внизу "Вложения".

Ruslan
Сообщения: 2184
Зарегистрирован: 06 янв 2014, 20:44

Re: Очень интересно, но ничего непонятно!

Сообщение Ruslan » 28 апр 2017, 21:12

empenoso, спасибо, не знал. Воспользуюсь вашим советом.

PS. Это, видимо, наилучший вариант размещения картинок, но, к сожалению, больше 5 изображений разместить не удалось (наверное, есть ограничение по количеству). Придется остальные выкладывать через файлообменник.

dre12007
Сообщения: 31
Зарегистрирован: 27 авг 2016, 16:03

Re: Очень интересно, но ничего непонятно!

Сообщение dre12007 » 30 апр 2017, 12:25

Жду продолжения, может что то у меня получится благодаря вам
В вышенаписаном я разобрался, было не сложно
А вот в программной части, как поставить сервер программу и настроить ее для меня это темный лес, как то пытался на ноут поставить, даже не смог установить :cry:

romchello
Сообщения: 5
Зарегистрирован: 11 фев 2017, 23:04

Re: Очень интересно, но ничего непонятно!

Сообщение romchello » 30 апр 2017, 14:09

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

Ruslan
Сообщения: 2184
Зарегистрирован: 06 янв 2014, 20:44

Re: Очень интересно, но ничего непонятно!

Сообщение Ruslan » 13 май 2017, 01:13

romchello писал(а):Да,если эта тема в будущем затронет взаимодействие с сервером на примере Мажордомо,было бы замечательно.
Подписался буду следить
Как говорится, "по заявкам телезрителей"...

Ruslan
Сообщения: 2184
Зарегистрирован: 06 янв 2014, 20:44

Re: Очень интересно, но ничего непонятно!

Сообщение Ruslan » 22 май 2017, 00:04

А подключим-ка мы ГЕРКОН

Все-таки замечательная это штука – геркон. Кто не сталкивался, это устройство, замыкающее контакты при приближении магнитного поля (магнита). Внутри пластмассового корпуса
  • Изображение
расположена герметичная стеклянная колбочка, в котором замыкаются/размыкаются контакты.
Изображение
Изображение
В другом пластмассовом корпусе размещен магнит.

Для нашего дела геркон может быть много где полезен. Его устанавливают на открывающиеся створки окон, двери, ворота (http://ab-log.ru/smart-house/ethernet/g ... automation), используют как «концевые выключатели» (например, на рулонных шторах), для определения уровня жидкости в емкости, для снятия показаний с некоторых счетчиков и т.д. Словом, вещь незаменимая.

Мы же с помощью геркона будем контролировать положение окна или двери (в зависимости от того, какие иконки попадутся в поисковике первыми :) и отобразим эту информацию в интерфейсе Мажордомо. Первыми попались иконки двери,
ИзображениеИзображение
значит у нас будет дверь.

Подключим геркон ко входу P1 нашей Меги. В настройках порта выставим режим «P&R» и отобразим информацию о состоянии двери в интерфейсе Мажордомо на сцене и в меню. В итоге выглядеть будет так.
Изображение

Изображение

Теперь по порядку, как это сделать.

1. Создадим в ОБЪЕКТАХ в классе keySensors виртуальный объект для геркона. «Обзовем» его, к примеру, «Gerkon_1». Он уже будет содержать «штатное» свойство «status».
Изображение

2. В модуле MegaD на вкладке «Данные» в настройках порта P1 выставим связанный объект «Gerkon_1» и связанное свойство «status». Уже после этого при поднесении/удалении магнита Объект.Свойство «Gerkon_1.status» будет меняться с «0» на «1» и обратно.
Изображение

3. Берем пару иконок с изображением открытой и закрытой двери и кладем их в любое место, например, по пути C:\_majordomo\htdocs\cms\scenes

4. Для сцены добавим элемент с типом «изображение» и названием, например, «Door_1». И добавим для элемента 2 состояния, «обозвав» их, например, «Opened» и «Closed». Выставим для каждого состояния свою картинку и условия отображения.
Изображение

Изображение

5. Теперь настроим меню. Добавим, например, в УПРАВЛЕНИЕ HTML-блок. Внутрь поместим код

Код: Выделить всё

<div style='display:%Gerkon_1.status|"none;block"%'><img src="\cms\scenes\Door_Closed.png">ЗАКРЫТА</div>
<div style='display:%Gerkon_1.status|"block;none"%'><img src="\cms\scenes\Door_Opened.png">ОТКРЫТА</div>
Изображение


Можно еще добавить «озвучку» голосом события «открытие двери». Т.е. система будет человеческим голосом сообщать нам о факте открытия двери и дублировать эту информацию в чат.
Изображение

Для настройки озвучивания добавим код в метод statusChanged объекта «Gerkon_1».

Код: Выделить всё

$state =file_get_contents("http://192.168.0.14/sec/?pt=1&cmd=get");
$state = substr($state,0,3);
if ($state == "OFF") {
clearTimeOut('myTimer_1');
setTimeOut('myTimer_1','say("Дверь открыта",5);',1);
}
Изображение
Избыточность кода связана с необходимостью исключить «дребезг контактов», который может возникать при срабатывании геркона.

Осталось настроить вызов метода в модуле «MegaD».
Изображение


ДОПОЛНЕНИЕ/УТОЧНЕНИЕ
«по вновь открывшимся обстоятельствам…»
[В новой или обновленной версии модуля "MegaD"в Мажордомо проводить нижеописанную модификацию кода уже не нужно, поскольку там "отлов" приходящего параметра "m" предусмотрен штатно.]

Не напрасны были мои подозрения. Уж очень стабильно проявлялся этот «дребезг контактов», четко два раза вызывая сообщение об открытии двери. Даже пришлось придумать программный метод «борьбы» с таким «несознательным поведением» Меги. Оказалось, что относительно «диагноза» я заблуждался, хоть и добросовестно.

Позволю себе процитировать Андрея: «Часто возникает задача по-разному реагировать на длительность нажатия. Например, короткое нажатие включает/выключает свет в одной комнате, а нажатие и удержание (длительное нажатие) включает свет во всех комнатах. Не всегда удобно и легко делать такую обработку на сервере. Но на помощь приходит наше устройство. В том случае, если вход (в режиме P или P&R) удерживается более 1,5 секунд, на сервер отправляется второй запрос, в котором передается параметр m=2.»

Таким образом, если вход настроен в режиме «P&R», через 1,5 секунды после замыкания или размыкания геркона Мега на «совершенно законных основаниях» еще раз инициирует вызов скрипта.

Что же с этим делать? Ответ, как всегда, нашли участники соответствующей ветки форума на Мажордомо. Также позволю себе процитировать.

«примерно в середине файла megad.class.php есть код:

Код: Выделить всё

if ($prop['LINKED_OBJECT'] && $prop['LINKED_METHOD']) { // && $old_value!=$prop['CURRENT_VALUE_STRING']
      $params=array();
      $params['TITLE']=$rec['TITLE'];
      $params['VALUE']=$prop['CURRENT_VALUE_STRING'];
      $params['value']=$params['VALUE'];
      $params['port']=$prop['NUM'];
      $methodRes=callMethod($prop['LINKED_OBJECT'].'.'.$prop['LINKED_METHOD'], $params);
после строчки

Код: Выделить всё

$params['port']=$prop['NUM'];
добавляем строчку:

Код: Выделить всё

$params['m']=$m;
[конец цитаты]

После такой модернизации кода модуля (а файл megad.class.php, кому лень искать, находится по пути \_majordomo\htdocs\modules\megad\) у нас появляется возможность программно отлавливать повторный запуск скрипта с параметром m=2.

Теперь остается лишь отредактировать код в методе statusChanged объекта «Gerkon_1».

Код: Выделить всё

$state =file_get_contents("http://192.168.0.14/sec/?pt=1&cmd=get");
$state = substr($state,0,3);
if ( $_GET['m'] == "2" ) {
return"";
} else {
if ($state == "OFF") {
say("Дверь открыта",5);
}
}
Т.е. мы добились той же цели – не реагировать на повторный запуск скрипта, только уже правильными средствами.
Последний раз редактировалось Ruslan 07 апр 2019, 13:52, всего редактировалось 2 раза.

Ruslan
Сообщения: 2184
Зарегистрирован: 06 янв 2014, 20:44

Re: Очень интересно, но ничего непонятно!

Сообщение Ruslan » 04 июн 2017, 14:18

Подключим ДАТЧИК ДВИЖЕНИЯ и настроим автовыключение «забытого света»

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

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

Подключается датчик движения к Меге просто. Две жилы от сигнальной цепи датчика присоединяются ко входу исполнительного модуля. Еще по двум жилам подается питание (обычно 12 В постоянного тока). Если в качестве исполнительного модуля выбран MegaD-14-IN, то питание удобнее взять прямо с его клемм + 12 В и GND. Вот здесь про подключение описано подробнее (http://ab-log.ru/smart-house/ethernet/megad-alarm).

Подсоединим датчик к порту P2 исполнительного модуля MegaD-7I7O-R. В настройках входа выставляем режим «R», поскольку при срабатывании датчик размыкает сигнальную цепь. Мы помним, что к порту P0 у нас подсоединен выключатель-кнопка, а к порту P7 – лампочка (см.первый пост этого топика).

Теперь определимся с алгоритмом выключения. В простейшем случае можно установить время, по истечении которого свет считается «забытым» и подлежит автоматическому выключению. Пусть это будет 15 минут. Каждый сам определит приемлемую продолжительность данного параметра.

Настроим все в интерфейсе Мажордомо. Добавим соответствующий объект на сцену и в меню. Выведем информацию о времени последнего срабатывания датчика. Ну и пропишем алгоритм поведения освещения при обнаружении движения в помещении.

А начнем, как всегда, с создания виртуального объекта для датчика движения, подключенного в моем случае ко входу P2 исполнительного модуля MegaD-7I7O-R. В классе keySensors есть специально предназначенный для датчиков движения класс inhouseMovementSensors. Там уже есть готовый объект «MotionSensor1», но оставим его для других антиобщественных опытов :) и создадим новый объект творчески «обозвав» его «MotionSensor2». В нем имеются общеклассовые свойства, из которых мы используем «status». Дополним список свойств новыми:
updatedTimeHHMM – для сохранения времени последнего срабатывания датчика в формате HHMM;
Mode – для установления режима «ручной» или «авто»;
ModeText – для вывода информации о режиме на выключатель на сцене.
Последние 2 свойства добавлены с целью реализации другого, более сложного алгоритма управления освещением, о котором я напишу ниже. А здесь же мы их добавим, «чтобы два раза не ходить» :)

У созданного нами объекта «MotionSensor2» есть метод «statusChanged». Здесь мы и запишем всю логику, которая должна отрабатываться при срабатывании нашего датчика, добавив код PHP.

Код: Выделить всё

//определим время, на которое будет видоизменяться элементы интерфейса «датчик движения» после срабатывания
sg('MotionSensor2.status', 1);
SetTimeOut("MS2ActTimer","sg('MotionSensor2.status', 0);",5);

//запишем время срабатывания датчика в формате «HH:MM»
setGlobal('MotionSensor2.updatedTimeHHMM', gg('ThisComputer.timeNow'));

//запустим таймер (15 мин), по истечении которого свет будет выключен
clearTimeOut("lightOffTimer");
SetTimeOut("lightOffTimer","callMethod('Relay_014-07.turnOff');",60*15);
Изображение
Объект.метод «Relay_014-07.turnOff» с соответствующими настройками появился у нас из примера в первом посте топика про выключатель-кнопку и лампочку.

Пропишем настройки в модуль MegaD.
Изображение

Поскольку и физический выключатель-кнопка на порту P0 и интерфейсные выключатели (в меню и на сцене) инициируют выполнение Объект.Метода Relay_014-07.switch, туда тоже добавим команды на очистку и перезапуск таймера. Ясно, что запуск таймера имеет смысл, когда свет включен.

Код: Выделить всё

file_get_contents("http://192.168.0.14/sec/?cmd=7:2");
$state =file_get_contents("http://192.168.0.14/sec/?pt=7&cmd=get");
if ($state == "ON") {
setGlobal('Relay_014-07.status', 1);
//Добавляем таймер на автовыключение света
clearTimeOut("lightOffTimer");
SetTimeOut("lightOffTimer","callMethod('Relay_014-07.turnOff');",60*15);
} else {
setGlobal('Relay_014-07.status', 0);
}
Изображение

На сцене для датчика движения создадим Индикатор режима. Назовем его «MS2». Добавим в созданный элемент время последнего срабатывания датчика, для чего вставим в поле «Код» заключенное в проценты свойство датчика со временем его срабатывания (%MotionSensor2.updatedTimeHHMM%). На картинках настройка индикатора в состояниях «on» и «off» будет выглядеть так.
Изображение

Изображение

Теперь добавим элемент в меню. Выберем тип «HTML-блок» и вставим код PHP. Используемая картинка является «штатной» для Мажордомо и располагается по пути \cms\scenes\styles\informer\i_motion.png

Код: Выделить всё

<div style='display:%MotionSensor2.status|"block;none"%'><img src="\cms\scenes\styles\informer\i_motion.png" > %MotionSensor2.updatedTimeHHMM%</div>
<div style='display:%MotionSensor2.status|"none;block"%'><img src="\cms\scenes\styles\informer\i_motion.png" style="-webkit-filter: drop-shadow(2px 2px 5px #333); filter: drop-shadow(2px 2px 5px #333); background-color: yellow;"> Движение</div>
Изображение

Результат будет выглядеть следующим образом.
Изображение

Изображение
Чтобы протестировать настроенное и сделать работу алгоритма более «осязаемой» достаточно уменьшить продолжительность таймера с 15 минут до, например, 20 секунд.



Можно настроить и более сложный алгоритм, который применим для тех помещений, где отсутствует естественное освещение. Свет у нас будет не только автоматически выключаться, но и самостоятельно включаться при входе человека в такое помещение. Будут два режима работы: «ручной» и «авто». Работа в ручном режиме ничем не будет отличаться от того алгоритма, что описан выше (автовыключение света через 15 минут отсутствия движения). Однако, если свет был выключен автоматически, то активируется другой режим – «авто», при котором свет будет сам включаться при новом срабатывании датчика движения. Но включаться на более короткое время, например, 3 минуты вместо 15. Любое щелканье выключателем (физическим или в интерфейсе) возвращает ручной режим работы освещения (с 15-минутным таймером).

Для настройки запишем код в метод «Relay_014-07.switch»

Код: Выделить всё

file_get_contents("http://192.168.0.14/sec/?cmd=7:2");
//Добавим команду на сброс режима работы освещения в "ручной"
setGlobal('MotionSensor2.Mode',0);
setGlobal('MotionSensor2.ModeText',Manual);
$state =file_get_contents("http://192.168.0.14/sec/?pt=7&cmd=get");
if ($state == "ON") {
 setGlobal('Relay_014-07.status', 1);
//Добавляем таймер на автовыключение света
clearTimeOut("lightOffTimer");
SetTimeOut("lightOffTimer","callMethod('Relay_014-07.turnOff');sg('MotionSensor2.Mode',1);sg('MotionSensor2.ModeText',Аuto);",60*15);
} else {
 setGlobal('Relay_014-07.status', 0);
}
Запишем код в метод «MotionSensor2.statusChanged»

Код: Выделить всё

//определим время, на которое будет видоизменяться элементы интерфейса «датчик движения» после срабатывания
sg('MotionSensor2.status', 1);
SetTimeOut("MS2ActTimer","sg('MotionSensor2.status', 0);",5);

//запишем время срабатывания датчика в формате «HH:MM»
setGlobal('MotionSensor2.updatedTimeHHMM', gg('ThisComputer.timeNow'));

if (gg('MotionSensor2.Mode') == 1) {
//включем свет
cm('Relay_014-07.turnOn');
//запустим таймер (3 мин), по истечении которого свет будет выключен
clearTimeOut("lightOffTimerAuto");
SetTimeOut("lightOffTimerAuto","callMethod('Relay_014-07.turnOff');",60*3);
} else {
clearTimeOut("lightOffTimerAuto");
$state =file_get_contents("http://192.168.0.14/sec/?pt=7&cmd=get");
if ($state == "ON") {
//запустим таймер (15 мин), по истечении которого свет будет выключен
clearTimeOut("lightOffTimer");
SetTimeOut("lightOffTimer","callMethod('Relay_014-07.turnOff');sg('MotionSensor2.Mode',1);sg('MotionSensor2.ModeText',Аuto);",60*15);
}
}
И чуть-чуть перенастроим выключатель на сцене. Изменение будет заключаться в том, что во всех состояниях укажем метод для исполнения «switch». Текущий режим работы освещения на выключателе тоже можно написать (в поле «Код» добавим для каждого состояния выключателя %MotionSensor2.ModeText%).
Изображение
Изображение

Результат будет выглядеть так.
Изображение
Для наглядного тестирования таймеры в 15 и 3 мин. можно заменить на 20 и 10 сек. соответственно.


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

pdmitry2
Сообщения: 8
Зарегистрирован: 09 янв 2017, 01:20

Re: Очень интересно, но ничего непонятно!

Сообщение pdmitry2 » 05 июл 2017, 03:31

Скажите, а HC-SR501 как правильно подключить к MegaD-2561?

Отправлено с моего GT-N7100 через Tapatalk

Ruslan
Сообщения: 2184
Зарегистрирован: 06 янв 2014, 20:44

Re: Очень интересно, но ничего непонятно!

Сообщение Ruslan » 05 июл 2017, 10:24

pdmitry2, сам такой датчик не подключал, но подключить, судя по поиску на форуме, возможно
http://ab-log.ru/forum/viewtopic.php?f= ... 501#p24380
http://ab-log.ru/forum/viewtopic.php?f= ... R501#p8694
http://ab-log.ru/forum/viewtopic.php?f= ... R501#p7068
Подробнее пояснить не смогу, т.к. стараюсь рассказывать, преимущественно, о том, что проделывал своими руками.

pdmitry2
Сообщения: 8
Зарегистрирован: 09 янв 2017, 01:20

Re: Очень интересно, но ничего непонятно!

Сообщение pdmitry2 » 05 июл 2017, 13:01

Это я читал, но там ничего конкретного. Ладно, сам попробую подключить. Спасибо.

Отправлено с моего GT-N7100 через Tapatalk

Ruslan
Сообщения: 2184
Зарегистрирован: 06 янв 2014, 20:44

Re: Очень интересно, но ничего непонятно!

Сообщение Ruslan » 05 июл 2017, 13:15

Вот тут Андрей говорит, как можно подключить
viewtopic.php?f=1&t=294&p=7074&hilit=HC+SR501#p7074
Правда, там речь идет об исполнительном модуле MegaD-7I7O, но зная, что в интерфейсном модуле MegaD-2561 некоторые порты могут работать в режиме "In", наверное, аналогичным образом можно попытаться подключить и к MegaD-2561.
Если я не прав, пусть более сведующие товарищи меня поправят.

d.v.ermakov
Администратор
Сообщения: 2188
Зарегистрирован: 29 май 2015, 21:23
Откуда: Екатеринбург, Нижний Тагил

Re: Очень интересно, но ничего непонятно!

Сообщение d.v.ermakov » 05 июл 2017, 14:13

У меня работает HC-SR501 с Мегой уже почти два года. Питается от 12в, на его выходе повесил BS170 с резистором на землю для закрытия, и подключил выходы транзистора на стандартный вход Меги. Можно и без транзистора, но прямо на вход МК. Выход датчика прямой, не инверсный. Перемычка H/L в положении H.

pdmitry2
Сообщения: 8
Зарегистрирован: 09 янв 2017, 01:20

Re: Очень интересно, но ничего непонятно!

Сообщение pdmitry2 » 05 июл 2017, 15:26

Только что подключил, пока минут 15 работает чётко. У меня MegaD-2561. Подключал к разъему XT2, P30. Плюс питания взял от блока питания меги (+ 12V), землю блока питания, соединил с разъёмом GND на гребёнке XT2 и с разъёмом GND HC-SR501. Разъём "данные" датчика, подключил к разъёму P30 Меги. В настройках порта выставил IN, Mode поставил P&R. Если Mode поставить R, то ничего не работает - в статусе всегда висела единица. А с P&R, статус меняется, единственная разница - при движении статус у нас 0, а при отсутствии движения, получаем единицу, то есть в MDM, обрабатываем 0, а не 1. Всем спасибо за помощь!

pdmitry2
Сообщения: 8
Зарегистрирован: 09 янв 2017, 01:20

Re: Очень интересно, но ничего непонятно!

Сообщение pdmitry2 » 05 июл 2017, 15:37

Ruslan, за одно спрошу по геркону, вернее по коду. В коде, у Вас есть такой момент $state = substr($state,0,3);, это как я понял защита от дребезга, не могли бы Вы объяснить, что значат эти цифры? Ну то есть, я догадываюсь, что наверно это что бы срабатывало с третьего раза или что то в этом роде, но на будущее хотелось бы знать точнее, что значит 0 и что значит 3, может пригодится когда.

Ответить