Интеграция в iH считывателей ключей через MegaD



  • К контроллеру MegaD можно подключить считыватели, имеющие интерфейс подключения 1-Wire/TouchMemory и Wiegand и протоколы обмена с ключами EM-Marine/Mifare. Для этого порт, к которому физически подключен считыватель необходимо сконфигурировать, подробнее тут.
    В плагине megad системы intraHouse необходимо создать запись в разделе "Расширения". Например для считывателя с интерфейсом 1-Wire/TouchMemory и протоколом обмена с ключами EM-Marine, подключенным к порту 35 контроллера:

    iH_MegaD_1-Wire_EM-Marine.png
    В поле "Входящее от контроллера 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);
          //Выполняем действия
        }
      }
    });
    

Авторизуйтесь, чтобы ответить