Плагин MegaD



  • Вчера выполняя указания Dev увидел, что и в версии 1.1.10 порт 16 переключился в режим P.
    Это не сказалось на работоспособности потому, что проставился чекбокс рядом с установкой режима.

    Соответственно, номера версии работающего без ошибки плагина нет.

    Но есть такой вопрос. У меня в настройках обоих контроллеров "имя скрипта" пустое, и расширения в плагине тоже не содержат имени скрипта.

    Это не может влиять?



  • Имя скрипта MegaD отправляет в запросе перед отправкой параметров (перед знаком вопроса):

    То есть:
    имя скрипта = megad.php --> запрос будет /megad.php?pt=16
    имя скрипта пустое --> запрос будет /?pt=16

    То есть пустое имя скрипта - это нормальный рабочий вариант



  • Добрый день, можно как то дать запрос на мегу чтобы узнать статус реле, включено или выключено реле? У меня внешние ролокасети на 3 провода (1 общий, 2,3 верх, низ). Хочу что бы Ih помнил статус (последние действие), проверял или реле активно у меня сейчас работает без обратной связи а ето не удобно. У меня реализировано команду устройству.



  • @amgstone

    Создайте кнопку.
    В ней выбирете "команда плагина", выберите свою мегу и напишите эту команду.
    /%pwd%/?cmd=all
    вместо pwd - свой пароль на меге.
    Кнопка будет обновлять состояния всех каналов этой меги.



  • @Erik у маня созданы ACTOR для каждой ролокасети, можно как то чтобы в ACTORе обновлялось состояние, нету описания на эту тему. Чтобы использовать эти значения в сценарии.
    Ну и у меня открытие и закрытие подключено к 2 разных реле через: ```

    this.pluginCommand({unit:'megad3', command:'/258/?cmd='+jalusi.getParam('point_open')+':1;p200;'+jalusi.getParam('point_open')+':0'});
    

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

    скрипт

    /** 
    * @name Новый мультисценарий 
    * @desc  
    * @version 4 
    */
    const switch_1 = Device("ActorE","Switch");
    const jalusi = Device("ActorD","Actor",[
        {"name":"point_open", "note":"Пін відкриття", "type":"number", "val":15},
        {"name":"point_close", "note":"Пін закриття", "type":"number", "val":16}
      ]);
    
    startOnChange([switch_1,jalusi]); 
    
    script({
        start() {
          if(this.isChanged(switch_1)){
            this.onSwitch();
          }
          if(this.isChanged(jalusi)){
            this.onJalusi();
          }
        },
        onSwitch(){
          switch(switch_1.value){
              case 0:
                if(jalusi.id === "ACTOR7"){
                  jalusi.on();
                  this.pluginCommand({unit:'megad3', command:'/258/?cmd='+jalusi.getParam('point_open')+':1;p200;'+jalusi.getParam('point_open')+':0'});
                }
                if(jalusi.id === "ACTOR8"){
                  //this.pluginCommand({unit:'megad2', command:'/258/?cmd='+jalusi.getParam('point_open')+':1;p210;'+jalusi.getParam('point_open')+':0'});
                }
                if(jalusi.id === "ACTOR9"){
                  //this.pluginCommand({unit:'megad2', command:'/258/?cmd='+jalusi.getParam('point_open')+':1;p230;'+jalusi.getParam('point_open')+':0'});
                }
              break;
              case 1:
                //this.pluginCommand({unit:'megad3', command:'/258/?cmd='+jalusi.getParam('point_open')+':0;'+jalusi.getParam('point_close')+':0'});
              break;
              case 2:
                if(jalusi.id === "ACTOR7"){
                  jalusi.off();
                  this.pluginCommand({unit:'megad3', command:'/258/?cmd='+jalusi.getParam('point_close')+':1;p200;'+jalusi.getParam('point_close')+':0'});
                }
                if(jalusi.id === "ACTOR8"){
                  jalusi.off();
                  this.pluginCommand({unit:'megad2', command:'/258/?cmd='+jalusi.getParam('point_close')+':1;p210;'+jalusi.getParam('point_close')+':0'});
                }
                if(jalusi.id === "ACTOR9"){
                  this.startTimer('T1', 30, 'turnAllOff');
                }
              break;
            }
            this.log('Жалюзі статус : '+switch_1.value+' '+jalusi.id);
        },
        turnAllOff(){
          jalusi.off();
          this.pluginCommand({unit:'megad2', command:'/258/?cmd='+jalusi.getParam('point_close')+':1;p240;'+jalusi.getParam('point_close')+':0'});
          this.exit();
        },
        onJalusi(){
          //this.log(this.isChanged(jalusi)+' 38 line');
          if(jalusi.isOn()){
            //this.log('jalusi On');
            if(jalusi.id === "ACTOR7"){
              this.pluginCommand({unit:'megad3', command:'/258/?cmd='+jalusi.getParam('point_open')+':1;p200;'+jalusi.getParam('point_open')+':0'});
            }
            if(jalusi.id === "ACTOR8"){
              this.pluginCommand({unit:'megad2', command:'/258/?cmd='+jalusi.getParam('point_open')+':1;p210;'+jalusi.getParam('point_open')+':0'});
            }
            if(jalusi.id === "ACTOR9"){
              this.pluginCommand({unit:'megad2', command:'/258/?cmd='+jalusi.getParam('point_open')+':1;p240;'+jalusi.getParam('point_open')+':0'});
            }
          }else{
            //this.log('jalusi Off');
            if(jalusi.id === "ACTOR7"){
              this.pluginCommand({unit:'megad3', command:'/258/?cmd='+jalusi.getParam('point_close')+':1;p200;'+jalusi.getParam('point_close')+':0'});
            }
            if(jalusi.id === "ACTOR8"){
              this.pluginCommand({unit:'megad2', command:'/258/?cmd='+jalusi.getParam('point_close')+':1;p210;'+jalusi.getParam('point_close')+':0'});
            }
            if(jalusi.id === "ACTOR9"){
              this.pluginCommand({unit:'megad2', command:'/258/?cmd='+jalusi.getParam('point_close')+':1;p240;'+jalusi.getParam('point_close')+':0'});
            }
          }
          this.exit();
        }
    });
    

    а так в админке http://joxi.ru/DmBRwpQSJvnMNm



  • В этом же скрипте после действия присвойте атуатору нужное значение.
    После каждого действия присвоение соответствующего значения.
    Актуатор будет всегда иметь значение, соответствующее последнему действию.



  • версию 1.1.14 убрали?
    Обновление предлагается на 1.1.13 сегодня.
    alt text



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

    версию 1.1.14 убрали?

    Версия 1.1.14 была сделана для тестирования и официально еще не публиковалась.
    При желании ее можно взять на гитхабе.



  • Значит это нервное уже.
    А что в ней нового?



  • @Erik можете подсказать что дописать?



  • После открытия
    Actor.On();
    после закрытия
    Actor.Off();

    Вместо Actor - название нужного актуатора.



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

    А что в ней нового?

    В версии v1.1.14 изменение только для параметра канала
    "Использовать функцию обработки при получении данных от контроллера"

    Ранее функция была привязана к номеру порта контроллера, теперь - к идентификатору канала, чтобы это работало для расширенных портов (MCP, I2C)

    Сегодня на github планируем выложить версию v1.1.15, в которой будет:

    1. Решение для одновременной сработки датчиков, подключенных к MCP
      (модуль MegaD-16I-XT)

    2. Возможность обработать в сценарии ответ от контроллера для команды pluginCommand

    Также на github выложен список изменений плагина за этот год :
    https://github.com/intrahouseio/intraHouse.plugin-MegaD файл CHANGELOG



  • @intrapro будет реализована обратная связь (pluginCommand) с ролокасетами? То что я так долго ждал?



  • @amgstone, реализовано получение ответа от контроллера в сценарий:

    script({
        start() {
            // Передать запрос на megad1, ответ придет в сценарий (onResponse:'raw')
            this.pluginCommand({unit:'megad1', command:{url:'/sec/?pt=7&cmd=get', onResponse:'raw'}}, 'getResponse');
            // Взвести таймер на случай, если ответа от контроллера нет
            this.startTimer('T1', 3, 'onTimeout');
        },
        
        getResponse(body) {
          // body 
          this.log('getResponse body= '+body);
         // Анализируем body ....
          this.exit();
        },
        
        onTimeout() {
          this.log('Истек таймаут, ответ от megad1 не получен');
          this.exit();
        }
    });
    

    Если это поможет, то да 🙂



  • @intrapro, так в body будет всего лишь "Done". Какой смысл его анализировать? Собственно, тут написал как правильнее сделать @amgstone



  • @Alex_Jet а у Вас ролета подключена к 2 реле, одно на открытие а второе на закрытие?



  • @amgstone, нет - у меня одно выбирает направление, другое подает питание))). Но от этого суть не меняется.



  • @intrapro, даже не представляю какая полезность будет от доработки по п.2...
    А вы мои выкладки тут не анализировали?
    И да - для Формулы расчета входного значения нужно добавить конвертацию типа данных чтобы не писать "Number(value)+2".

    Update: тестируя версию 1.1.14, я на старом форуме в личных сообщениях писал что не работает.



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

    @intrapro, даже не представляю какая полезность будет от доработки по п.2...

    • Во-первых, такой функционал (функция-обработчик для ответа при выполнении pluginCommand ) добавлен в ядре, и при доработке плагинов добавляем всем, тут просто совпало.
    • Во-вторых, можно ведь послать команду на опрос канала, как в примере:
    this.pluginCommand({unit:'megad1', command:{url:'/sec/?pt=7&cmd=get', onResponse:'raw'}}, 'getResponse');
    

    Для выхода контроллер вернет "ON" или "OFF". Можно иногда использовать, если выход постоянно не опрашивать. Или еще какой экзотический запрос. Да, не несущая конструкция, но пригодится

    И да - для Формулы расчета входного значения нужно добавить конвертацию типа данных чтобы не писать "Number(value)+2".

    Это на сервере считается, в релизе нужно будет поправить

    Update: тестируя версию 1.1.14, я на старом форуме в личных сообщениях писал что не работает.

    Не работает функция для подканала? А мы так поняли что работает 🙂 Личка старого форума к сожалению больше не доступна.

    А вы мои выкладки тут не анализировали?

    Конечно, анализировали, спасибо за подробное описание и предложения. Но пока не хочется ничего менять сущностно. Для версии сервера 5.x будем переделывать плагин с использованием иерархических структур.
    Цель последнего изменения - решение для датчиков, подключенных к MCP. Сейчас нет никакой возможности обработать одновременные сработки.



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

    Подскажите, будет ли доработан плагин для обработки одновременных срабатываний каналов MegaD-16I-XT?
    Подключил датчики движения, там через раз происходят одновременные срабатывания которые не обрабатываются плагином. Периодически опрашивать датчики движения, как вы понимаете, нет ни какого смысла.

    На github выложена новая версия плагина v1.1.15:
    https://github.com/intrahouseio/intraHouse.plugin-MegaD/releases/tag/v1.1.15

    Нужно скачать zip архив и загрузить его:
    Плагины -> меню Command -> Загрузить из .zip файла

    В новой версии плагина в Расширениях добавлен флаг:
    Расширенный порт (одновременная сработка датчиков)

    Все датчики одного порта pt, которые могут сработать одновременно, нужно прописать в одном запросе (обратите внимание, что MCP расширения (ext) нумеруются с 0, а каналы на сервере с 1, т е ext0 - это 32_1 )

    Пример настройки расширений для порта 32:
    Входящее от контроллера:
    /?pt=32&ext0=*&ext1=*&ext2=*&ext3=*&ext4=*&ext5=*&ext6=*&ext7=*

    Установить состояния каналов:
    32_1=%ext0%&32_2=%ext1%&32_3=%ext2%&32_4=%ext3%&32_5=%ext4%&32_6=%ext5%&32_7=%ext6%&32_8=%ext7%

    Расширенный порт: Да

    В результате, например, такого входящего запроса /pt=32&ext1=1&ext7=0 будут присвоены значения 32_2=1 и 32_8=0

    Просьба счастливых обладателей расширенных портов протестировать функционал 🙂


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