Плагин MegaD



  • Коллеги, а все же что сделал Андрей в последней прошивке?



  • @Alex_Jet
    Вероятно, ошибка распределения памяти, какое-то наложение данных, зависящее от длины буфера.
    Всех с наступившим Новым годом! Удачи в Новом году 🎅



  • @intrapro

    В очередной раз снимаю шляпу перед поддержкой IH!!!!

    СПАСИБО ОГРОМНОЕ!!!
    С Новым Годом!



  • На github выложена новая версия плагина v1.1.15:
    https://github.com/intrahouseio/intraHouse.plugin-
    Просьба счастливых обладателей расширенных портов протестировать функционал 🙂

    Протестировал с MegaD-16I-XT - все работает как надо. Спасибо большое за доработку плагина!



  • К MegaD можно подключить считыватели ключей TouchMemory и Wiegand-26. Подскажите, пожалуйста, как настроить плагин MegaD для получения информации с этих устройств. Как вообще организовать работу в Intrahouse с ключами и метками чтобы, например, использовать их для управления режимом охраны или включения/выключения других устройств. Если у кого есть подобный опыт, просьба поделиться.



  • @gis я планирую делать, жду когда придут nfc-считыватели. очевидно, в плагине нужно обрабатывать php-запрос в котором приходит uid ключа. Далее я вижу два пути:

    1. Аналоговый датчик с текстом (в значении uid ключа). Значения сенсора обрабатываются по аналогии с плагином telegramm в скрипте. Как uid передать в датчик пока не думал. Таким образом каждый uid обрабатывается персонально
    2. Для каждого ключа делаем расширение в плагине megad, каждое расширение привязываем к бинарному датчику, к одному датчику можно привязать несколько ключей (датчик имитирует сущность пользователя). Обрабатываем в скриптах включение датчика, по окончанию сценария меняем состояние датчика на "выключено", таким образом каждый пользователь может иметь несколько ключей, привязанных к одному датчику. Для каждого пользователя могут исполняться разные сценарии.
      Очевиднее и проще второй вариант, но первый мне нравится отсутствием большого количества виртуальных устройств. Группировать можно в сценарии через "или".


  • @homa спасибо за ответ! Если хотите поэкспериментировать, то можно использовать любой домофонный ключ TouchMemory (таблетку) - для него не нужен специальный считыватель и логика работы с ним будет та же. Проблема как настроить канал и расширения в плагине, чтобы присваивался идентификатор ключа устройству.



  • @gis Считывателей и ключей вагон) но без нфс не хочу запускать. Второй вариант точно взлетит, необходимые эксперименты я провел. Настройка канала и расширения прям по инструкции от плагина. У меня стенд на работе, поэтому только в понедельник могу показать конфиг



  • @homa если не затруднит, пожалуйста, опубликуйте здесь конфиг как будет такая возможность.



  • @gis, написал тут. Коллеги, можно вас поправлю - от контроллера приходит GET-запрос (часть HTTP-протокола) с UID ключа, а не php (это такой язык программирования)... в частности у меня приходит вот такой запрос:

    /mod_megad.php?pt=35&ib=123456789ABC
    

    Здесь mod_megad.php - это часть url, который прописан в контроллере (ссылка Config, поле Script). У меня так сложилось исторически, поскольку раньше все контроллеры взаимодействовали с самописной системой управления на основе php/js.



  • Участник @Alex_Jet написал в Плагин MegaD:

    @gis, написал тут.

    @Alex_Jet - спасибо огромное, всегда очень помогают ваши сообщения!
    Хорошо было бы, если бы разработчики добавили обработку GET-запросов от ключей и меток в самом плагине, чтобы присваивался идентификатор ключа/метки аналоговому датчику (устройству). Тогда их просто можно будет использовать в диаграммах сценариев, не изучая для этого js и создавая сценарии с использованием этого языка.



  • @gis, я обсуждал это вместе с разработчиками, но пришли к выводу что сценарии - это очень гибко! А так, тоже хотел чтобы ID ключа передавался, например, аналоговому датчику. Но опять же - где хранить ID ключей и как их сравнивать с нужными? - только в сценарии.
    Ну и хочу добавить, что если вы не знаете Pascal/C/PHP и подобные языки, то JS довольно легко освоить. Ну а с системой, написанной на основе фреймворка Node.js, грех это не сделать, особенно если вы не просто пользователь системы, а ее администратор:)



  • Добрый день!
    Нужно проверить, но присвоить id ключа аналоговому датчику, полагаю, получится:

    1. Создать канал с id='IB1' (любой строковый id) типа AI, привязать к нему датчик
    2. В расширениях прописать:
      Входящее: pt=35&ib=*
      Установить состояние каналов: IB1=%ib%

    В сценарии нужно сравнивать с разрешенными ключами + сбрасывать значение после обработки.

    Решение,которое предлагает @Alex_Jet с вызовом сценария при поступлении сообщения от контроллера, лично мне нравится больше по нескольким причинам:

    1. Запуск сценария жестко связан с получением сообщения от контроллера (то есть с моментом прикладывания ключа).
    2. Список допустимых ключей в одном месте
    3. Нет лишних устройств


  • Уважаемые разработчики. В своем проекте использую несколько контроллеров MegaD-2561. Использую несколько датчиков с i2c интерфейсов. Все работает прекрасно. Задумал подключить к контроллеру Ардуину и управлять ею через i2c API. Однако Andrey_B предлагает для этого библиотеку на РНР. Собственно вопрос. Можно ли как-то послать байт через контроллер на устройство с определенным адресом по протоколу i2c.



  • @int144, так у контроллера есть API для I2C! Собственно от него отталкиваетесь, а на контроллер из iH можно послать что угодно! Например, функция для отправки команд на ленту WS:

        //Функция формирования данных для ленты WS2818
        SendDataToWS2818(plugin, channel, cmd, chip) {
          this.pluginCommand({unit: plugin, command: '/sec/?pt=' +channel+ '&ws=' +cmd+ '&chip=' +chip});
        }
    

    В случае с I2C можно сделать такую функцию:

    SendDataToMegaD(plugin, cmd, data) {
          this.pluginCommand({unit: plugin, command: '/sec/?pt=35&scl=34&i2c_' +cmd+ '=' +data});
        }
    

    Таким образом, чтобы дать команду на отправку данных нужно в скрипте указать:

    script({
      plugin: 'megad1',
      cmd: '',
      data: '',
        
      start() {
        //Инициализация
        this.cmd = 'cmd';
        this.data = 1;
        SendDataToMegaD(this.plugin, this.cmd, this.data);
        
        //Старт
        this.cmd = 'cmd';
        this.data = 2;
        SendDataToMegaD(this.plugin, this.cmd, this.data);
        
        //Отправка данных в hex-виде
        this.cmd = 'send';
        this.data = 80;
        SendDataToMegaD(this.plugin, this.cmd, this.data);
        
        //и т.д.
      } 
    });
    


  • @Alex_Jet , спасибо за быстрый и развернутый ответ. Но у меня есть некотрые сомнения. Вашу функцию управления лентой я видел. Но ее управление поддерживается прошивкой контроллера. Достаточно в http запросе присвоить правильное значение и лента работает. При использовании i2c API в запросе фигурирует "i2c_send=". Эта функция есть в библиотке Andrey_B. Она распределяет данные на адрес и направление передачи, кажется. Поэтому я и засомневался. А Вы не пробовали таким образом передавать данные i2c устройствам, не поддерживаемым прошивкой?



  • @int144, нет, у меня особенных I2C девайсов нет, которые не поддерживаются прошивкой.
    Я же вам привел как минимум половину цикла работы с шиной - инициализация, старт, передача данных! Вы обратите внимание на входные аргументы. Все это можно переписать/объединить в одну большую функцию отправки-приема данных. Думаю, вы это сами сможете сделать, поскольку у меня нет времени на эти эксперименты и эксперименты ни к чему.



  • @Alex_Jet , прошу прощения, что туплю, буду пробовать. Еще раз большое спасибо



  • Здравствуйте! устройство megad-2w (3 шт.). При формировании запроса плагин выдает в дебагере:
    localhost => 192.168.0.14 HTTP GET /sec/?cmd=32A:0&adr=92af39000000.
    а в инcтрукции написано что запрос должен быть : /sec/?cmd=32A:0&addr=92af39000000 (с двумя d);



  • @ted, интересно! У меня тоже выдает так:

    16.01 20:15:36.436 megad1: localhost => 192.168.11.21 HTTP GET /sec/?cmd=35A:1&adr=9a2938000000
    

    При этом канал включается и выключается!!! Хотя в описании написано так - Если к шине подключено несколько модулей, то для включения или выключения всех каналы "А" или "B" всех модулей достаточно исключить из запроса параметр "addr".
    Поэтому раз в команде есть adr, то контроллер его просто не видит...в итоге дает команду общую. А у меня на шине висит всего лишь один MegaD-2W


Log in to reply