Опрос


Что для Вас Умный Дом?


Результаты

Подключение к MegaD-328 датчиков движения. Сигнализация по Ethernet

10/08/2013 13:40:54

Охранная и пожарная сигнализации - важнейшие элементы системы Умного Дома. До сих пор для охраны дома я использовал независимый блок CCU6225. Это стандартная по своему функционалу GSM-сигнализация, которая старательно и исправно служила мне многие годы. К сожалению у подобных решений есть один существенный недостаток. Такие модули имеют очень слабые возможности для интеграции в единую систему. Все, что я смог выжать из этой черной коробочки - это текущий режим работы (Наблюдение или Охрана). Настройка сигнализации возможна только с помощью специализированного ПО для Windows, подключаемого к COM-порту. Настройки "зашиваются" в модуль жестко и работа сигнализации не может учитывать какие-то внешние параметры. Но самое плохое это то, что система Умного Дома не имеет никакой возможности оперативно получать данные с датчиков, подключенных к блоку сигнализации. Такое положение вещей меня не устраивало.

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

Простой пример. В случае, если система Умного Дома находится в режиме "Охрана", сигнал с датчика движения будет являться тревожным событием и генерировать включение сирены, звонок на мобильник и выпуск отравляющих газов. В случае же, если система находится в режиме "Наблюдение", в темное время суток она может по сигналу датчика движения автоматически включать свет, а затем и выключать при отсутствии в зоне работы извещателя активности.

В этом материале речь пойдет об подключении к систему Умного Дома охранных ИК-извещателей. У меня дома используются простейшие ИК-извещатели пассивного типа Pyronix Colt XS. Почему эти? А потому что эти датчики самые дешевые, что я нашел пару лет назад в местном ларьке, торгующим охранными системами. Кажется, тогда они стоили около 150 руб за штуку. Можно использовать любые другие датчики подобного типа. Для интеграцию в единую систему я использовал стандартный комплект MegaD-328 Kit, состоящий из интерфейсного модуля MegaD-328 и исполнительного MegaD-7I7O. Важно заметить, что никакие изменения в конструкции или прочие доработки модуля или датчика не требуются!

Подключение ИК-извещателей к Умному Дому

Подключая простейший ИК-извещатели к комплекту MegaD-328 Kit, мы получаем сразу несколько преимуществ. Во-первых, все датчики у нас обретают интерфейс Ethernet и протокол HTTP, которые позволяют настраивать какие угодно программные алгоритмы работы. Во-вторых, MegaD-328 может либо сообщать об активном состоянии датчика на сервер, обеспечивая тем самым интеграцию датчика в единую систему, либо работать с ним самостоятельно, так как в модуле реализована поддержка сценариев (поле Action). Например, MegaD-328 может включить сирену или выполнить другие действия. В третьих, поскольку в неактивном состоянии извещатель нормально-замкнут, мы можем как визуально (по светодиодам на входных портах), так и программно определять работоспособность подключенных к модулю датчиков.

Подключение охранного ИК-извещателя

Подключение ИК-извещателя очень простое. Сняв верхнюю крышку, мы можем обнаружить клемму:
+ --- плюс 12В
-  --- минус 12В
N --- к правой клемме входа MegaD-7I7O
C --- к левой клемме входа MegaD-7I7O

Питание датчика (12В) проще всего взять из того же блока питания, к которому подключен MegaD-328 Kit. В моем случае это DR-60-12 на DIN-рейку.

Датчик движения подключен к P4. После включения питания, загорается соответствующий светодиод. Это означает, что извещатель подключен верно. Следующий шаг - правильная настройка порта. Настройка очень простая. Поскольку датчик нормально замкнут, необходимо настроить порт IN так, чтобы он срабатывал на переход из замкнутого состояния в разомкнутое. Сделать это можно указав значение поле "Mode" - "R" (что значит "Release"). Если MegaD-328 работает с сервером, необходимо в сетевых настройках указать также адрес сервера и имя скрипта, а если самостоятельно, то в поле Action прописать сценарий по умолчанию. Подробнее о логике работы MegaD-328.

Теперь остались сущие пустяки - написать простейшую программу. Но для этого необходимо произвести некоторые изменения в единой БД и интерфейсе. Во-первых, необходимо создать виртуальный ключ, который будет определять режим работы системы: Охрана / Наблюдение.

А, во-вторых, создать журнал работы датчиков. Это необходимо, например, чтобы система генерировала звонок на мобильный не при каждом срабатывание датчика, а раз в 10-20 минут (настраивается в коде), а также для автоматического выключения света в режиме наблюдения, когда ИК-датчик используется в ином качестве.

Программа. Здесь все элементарно. Фрагмент кода mod_megad.php (полная версия скрипта, а также система управления ab-cms доступна в исходниках демо-интерфейса)

<?
require_once("ab-cms/class/main_class.php");
$ab = new cms_lib();

// Обработка сообщений MegaD-328
if ( $_SERVER['REMOTE_ADDR'] == "192.168.0.120" )
{
    // Извещатель на лестнице
    if ( $_GET['pt'] == "4" )
    {
        // Определяем режим работы системы
        $alarm_mode = $ab->mod_read($ab->get_id("keys"), "#key_pio#", "", 1, "key_label='alarm'");
        // Если режим "Охрана"
        if ( $alarm_mode == 1 )
        {
            // Получаем время последнего срабатывания датчика
            $sen_j = $ab->doc_read($ab->get_id("sen_j"));
            $sen_j_date = $ab->select_line("SELECT UNIX_TIMESTAMP(sen_j_date) sen_j_date FROM tmp_".$sen_j['ListID']." WHERE ContID=".$sen_j['ContID']." AND sen_j_label='alarm' ORDER BY sen_j_date DESC LIMIT 1");

            // Если датчик срабатывал более 10 минут назад, то генерируем тревожное событие
            if ( $sen_j_date['sen_j_date'] < time() - 600 )
            {
                // Формируем звонок на мобильный телефон, отправляем электронную почту и т.д.
                file_get_contents("http://192.168.0.251/alarm2.php");
                $ab->email("Дом: Сработала сигнализация!", "Дом: Сработала сигнализация!");
                $ab->mod_write($sen_j['ContID'], "NOW(), 'alarm', 1");
            }
        }
        // Если режим наблюдение
        else
        {
            // Включаем освещение, подключенное к порту P12
            echo "12:1";
            $ab->mod_write($sen_j['ContID'], "NOW(), 'alarm', 1");
        }

    }
}
?>

Звонок на мобильник генерируется у меня командой
file_get_contents("http://192.168.0.251/alarm2.php");
Все дело в том, что Asterisk у меня установлен на втором сервере. Содержание скрипта alarm.php и принцип его работы я описывал вот в этой статье.

Таким образом, один и тот же простейший ИК-датчик стал этаким многофункциональным прибором учета. С помощью одного и того же извещателя можно включать или выключать свет, детектировать наличие людей в помещении или их активность (в системах экономии энергоресурсов), определять факт проникновения в дом, строить аналитику по наиболее популярным зонам и помещениям дома, чтобы, возможно, даже предугадывать действия жильцов. Это направления, безусловно, очень интересное. Я постараюсь и дальше публиковать свои наработки по этой теме.

Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.



Добавить комментарий:



Сортировка комментариев: Последние сверху | Первые сверху

2016-06-07 17:13:48 | Andrey_B
Александр, со стандартным модулем MegaD-7I7O работать не будет. С модулем MegaD-14-IN будет работать в режиме (положение джампера) цифрового датчика. Настройка входа как IN.


2016-06-07 01:05:42 | Александр
Андрей, он выдает 3.3В - цифровой 1 или 0. А вот как правильно подключить и как считать?


2016-06-06 17:00:39 | Andrey_B
Александр, я не имел дело с HC-SR501, но думаю подключить его можно.


2016-06-06 00:07:13 | Александр
Андрей, подскажите, можно ли подключать датчики движения, типа HC-SR501, где присутствует всего один цифровой вывод, без "NC" и "NR"?


2015-11-08 23:53:35 | Andrey_B
Андрей, ZPAS WZ-PS3U-00-00-011.
У нас ими торгует фирма АБН. Ну, не дешево, конечно.


2015-11-08 22:20:20 | Андрей
Андрей, тоже добыл себе серверный шкафчик. Есть желание всю слаботочку запихнуть в него. Да чего греха таить, даже 220 некоторое. Ну скажите, где, и главное какую взять рамку с дин-рейкой, чтоб закрепить в креплениях шкафа, например как у вас на фото.


2015-02-22 17:54:28 | Данил
Спасибо, Андрей. Буду подбирать датчик схожий с тем что в статье. Никак не могу подобрать модель для скоытого монтажа в потолок. Наверное стоит использовать сам датчик как в статье, а корпус для монтажа подобрать под свои потребности, например корпус потолочного светильника.


2015-02-21 22:26:24 | Andrey_B
Данил, судя по описанию этот датчик предназначен для работы в сети 220В и коммутирует непосредственно нагрузку 220В. Его нельзя использовать без какой-то модификации со стандартным входом.


2015-02-21 17:11:14 | Данил
Добрый день! Подскажите как подключить к входу датчик с тремя контактами? Если я правильно понял, два это питание... Вот такой например ESYLUX PD C360i/6


2014-01-28 20:19:13 | cezium
Andrey_B, нет, ничего такого я не хочу :) абсолютно не задумываясь вбил имя машины вместо IP. Само собой поддержка netbios совершенно необязательна.


2014-01-26 15:51:31 | Andrey_B
cezium, вы слишком много хотите от микроконтроллера с 32Кб флеша и 2Кб оперативки ;) Конечно, в нем нет реализации ни NetBIOS, ни DNS. И хотя все это можно добавить, практического смысла в разрезе домашней автоматизации не очень много. Лучше память занять чем-то по-настоящему полезным.
Но вы, тем не менее, выявили очень интересную проблему, связанную с NetAction. Проверю.


2014-01-26 13:17:53 | cezium
Andrey_B, как выяснилось - причина не аппаратная. на разные БП я уже пересаживал их, не помогло.
Методом научного тыка - Мегадевайс не понимает имена компьютеров в windows-сети. Сменил NetActions в настройках портов на IP-адреса машин - всё заработало.


2014-01-26 10:44:22 | Andrey_B
cezium, причина может скрываться в самом блоке питания. Если БП недостаточно мощный, то напряжение может "просаживаться", что вызывает сбои в работе Ethernet, так как именно эта часть устройства имеет наибольшее потребление. Попробуйте для начала подключить другой блок питания. Какой БП используется у вас в данный момент?


2014-01-25 22:55:55 | cezium
Добрый вечер. Не подскажите. случайно, в чём может быть проблема?
Есть датчик АСТРА-515А. При включении на один БП с мегадевайсом вызывает сбои в его работе. Хотя в инструкции указано что не создаёт помех.
Сбои проявляются только в работе Ethernet на мегадевайсе - он просто пропадает из сети. При этом визуально всё работает как и раньше. Входные, выходные порты переключаются (и датчиком вдижения в том числе), то есть устройство не "висит".
Сбои начинаются не сразу после включения, а через некоторое время (от секунд до минут)


2014-01-14 20:56:27 | Максим
Простите Андрей, но сообщение " Я был бы признателен весьма, если бы Вы отобразили скрипт для просмотра" я не писал. Может это просто совпадение, и автора сообщения тоже зовут Максим, а может кто-то написал от моего имени.


2014-01-14 17:08:53 | Andrey_B
Максим, поясните пожалуйста, что значит отобразить скрипт для просмотра?
Полный набор скриптов вы можете найти в архиве с демо-интерфейсом.


2014-01-13 23:32:42 | Максим
Я был бы признателен весьма, если бы Вы отобразили скрипт для просмотра


2014-01-11 21:20:39 | Andrey_B
Максим, я делаю так.
У меня в БД есть специальная табличка, которая имеет следующую структуру (поля):
1. Дата и время срабатывания датчика
2. Идентификатор датчика движения
3. Связанные с датчиком движения зоны освещения
Алгоритм следующий
При срабатывании датчика включается свет, после этого пишется в БД дата и время срабатывания датчика
Каждую минуту запускается скрипт, который проверяет указанную таблицу в БД и если датчик последний раз срабатывал более определенного количества времени (поле 1), то все связанные с ним зоны освещения отключаются (поле 3). Если необходимо, я могу включить этот скрипт в демо-интерфейс.
Но этого одно из решений. Они могут быть разные.


2014-01-08 18:02:50 | Максим
Добрый день, Андрей. Приобрел данное устройство пока что в экспериментальных целях. Пока все очень нравится, но без Вашей помощи необойтись. Подскажите, как правильно сделать отключение света через 5 минут, который включается по датчику движения. Я думал через sleep, но не уверен что это правильное решение. Заранее спасибо.


2014-01-08 15:43:58 | Andrey_B
Александр, например, так:
$cnt = preg_replace("/w*//", "", strip_tags(file_get_contents("http://192.168.0.14/sec/?pt=4&cmd=get")));
В переменной $cnt у вас будет значение счетчика.


2014-01-08 15:33:58 | Andrey_B
С отравляющими газами - это, конечно же, шутка. Что касается доп. проверок, то все зависит от конкретных требований. В подавляющей большинстве бытовых случаев космическая надежность и 3-х кратное дублирование излишне. Перегорание лампочки в быту - совершенно обычное явление, никому же не приходит в голову закладывать обязательное дублирование на подобный случай.
Что касается датчиков, то контроль их работоспособности может выполняться автоматически. Например, датчик движения в неактивном состоянии держит высокий логический уровень. Таким образом если вход длительное время разомкнут - этого говорит о неисправности датчика.


2014-01-07 21:41:09 | Александр
Андрей, вопрос по коду. В коде вверху пример обработки срабатывания датчика:

/ Извещатель на лестнице
if ( $_GET['pt'] == "4" )
.. И дальше идёт обработка в соответствии с двумя режимами сигнализации. Подскажите, как бы здесь считать показание счетчика срабатываний?


2014-01-07 04:13:20 | Александр
Интересная идея с отравляющими газами и грабителями:) MegaD-328 точно не заглючит..; ну а если датчик заглючит, и, контакты разомкнутся в то время, когда домочадцы дома?

Но идея хороша, особенно в небытовых, возможно, складских помещениях. Все равно необходимы запасные "парашюты". Не думали над возможными вариантами доп.проверок? В конце-концов это касается не только данного примера с "газами". А что, если идёт полив в теплице; ты заводишь туда друга, похвастаться системой отключения, назад получаешь струю воды в лицо от спринклера, в обмен на надежды сразу же выключить полив. Или ещё что-то, что требует проверки.

Хотя какая тут проверка, разве что дублирование с помощью дополнительного датчика, от другого MegaD..