Интеграция в iH считывателей ключей через MegaD
-
К контроллеру MegaD можно подключить считыватели, имеющие интерфейс подключения 1-Wire/TouchMemory и Wiegand и протоколы обмена с ключами EM-Marine/Mifare. Для этого порт, к которому физически подключен считыватель необходимо сконфигурировать, подробнее тут.
В плагине megad системы intraHouse необходимо создать запись в разделе "Расширения". Например для считывателя с интерфейсом 1-Wire/TouchMemory и протоколом обмена с ключами EM-Marine, подключенным к порту 35 контроллера:
В поле "Входящее от контроллера MegaD" вписан URL, который приходит от контроллера при "срабатывании" считывателя. А в поле "Запустить сценарий" выбран сценарий, обрабатывающий данное сообщение от контроллера.
Сценарий имеет следующий скрипт:const security = Device("ACTOR_SECURITY_SYS00"); //Системный индикатор (кнопки Взятия/Снятия) script({ //Ключи Touch_Button key_aleksey: "123456789ABC", key_nadia: "123456789ABC", key_dima: "123456789ABC", start(param) { const obj = JSON.parse(param); //Постановка и снятие дома с охраны if(obj.pt == 35) { this.log("Активирован ключ с ID = " +obj.ib); let disarm = 0; if(obj.ib == this.key_aleksey) { disarm = 1; //Тут еще действия } else if(obj.ib == this.key_nadia) { disarm = 1; //Тут еще действия } else if(obj.ib == this.key_dima) { disarm = 1; //Тут еще действия } //При успешном считывании нужного ключа меняем состояние Security на противоположное if(disarm) { security.toggle(); //Тут еще действия } } } });
Как видно, в скрипте ключи прописаны как константы уровня скрипта (поэтому к ним нужно обращаться через this, где this - это сам скрипт) - key_aleksey: "123456789ABC". При запуске сценария ему как аргумент передается URL, полученный от контроллера, но преобразованный в JSON-строку с объектом. То есть из /mod_megad.php?pt=35&ib=123456789ABC получаем param = '{pt:35, ib:123456789ABC}'. В результате парсинга входящей строки JSON.parse(param) имеем:
obj.pt - порт контроллера;
obj.ib - идентификатор приложенного к считывателю ключа.
Далее в скрипте идет проверка идентификатора ключа с прописанными константами (key_aleksey, key_nadia, key_dima). В случае истинности переменная disarm принимает истинное значение (disarm = 1), соответственно, актуатор security меняет свое состояние на противоположное. То есть при каждом считывании правильного ключа "охранный" актуатор будет включаться/выключаться по кругу.
Переменная disarm введена в скрипт намеренно, поскольку в каждом операторе if при проверке соответствующего ключа можно вводить дополнительные условия срабатывания других систем. Так, например, у меня в каждом if вписана текстовая строка приветствия пользователя (this.string = "Алексей, я рада Вас видеть!"), которая в дальнейшем преобразуется в речь голосового помощника).
Если не нужны индивидуальные операции для каждого ключа, можно прописать массив ключей и проверять поднесенный ключ таким образом:script({ //Ключи Touch_Button key_array: ['11111','22222','33333'], start(param) { const obj = JSON.parse(param); //Проверка наличия ID ключа в массиве if( this.key_array.includes(obj.ib) ) { this.log("Активирован ключ с ID = " +obj.ib); //Выполняем действия } } });