Сервер iRidium и Мegad-2561

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
Ответить
Vladimir
Сообщения: 7
Зарегистрирован: 21 апр 2017, 12:58

Сервер iRidium и Мegad-2561

Сообщение Vladimir » 12 май 2017, 14:06

В списке серверов, поддерживающих Мegad-2561 прибавилось.
Делюсь опытом интеграции контроллера Мegad-2561 с приложением iRidium pro.
Приложение платное, подробное описание на сайте разработчика http://www.iridiummobile.ru/pro/
iRidium Script Часть 1: http://www.iridiummobile.ru/academy/script/
iRidium Script Часть 2: http://www.iridiummobile.ru/academy/script_part_2/
Создание анимированных элементов в интерфейсах iRidium: http://www.iridiummobile.ru/academy/animation_webinar/

Не смотря на минимальные познания в программировании, с созданием драйвера (отправка команд на MegaD) проблем не было. Сложности у меня возникли с получением обратной связи. При тех. поддержке команды иридия, и Andrey_B, интеграция прошла успешно.
На данный момент на Мegad реализовано управление освещением (кнопки, датчик движения, таймеры, диммер), получение температуры, влажности, получение статуса “вкл/выкл” AV оборудования датчиками напряжения U-Sensor, снятие показаний счетчиков ХВС(НАМУР), ГВС(Геркон). Так же в проекте снятие показаний электросчетчика Микрон СЭБ-2А.

Подключение сервера iRidium к контроллеру Мegad-2561 по протоколу HTTP.
http://dev.iridiummobile.net/AV_%26_Cus ... ems_(HTTP)
1. Контроллер MegaD-2561 конфигурируется для автономной работы.
2. В серверном проекте iRidium необходимо из базы данных создать драйвер AV & Custom Systems (HTTP)
http://dev.iridiummobile.net/Editor_Ser ... е_драйвера
3. В драйвере создать “Commands / Channels” - каналы через которые скриптом будут отправляться команды методом “. Send” на контроллер MegaD.
http://dev.iridiummobile.net/Editor_Ser ... _и_сервера
http://dev.iridiummobile.net/Drivers_API#.Send
В проекте MegaD-2561+ MegaD-7I7O-SD+ MegaD-7I7O-R, соответственно каналы управления выходами:
MegaD-7I7O-SD “Out_7… Out_12, Out_Dimm_13”
MegaD-7I7O-R “Out_22… Out_28“
Commands.png
Commands.png (177 КБ) 3231 просмотр
4. В драйвере создать “Feedback / Tags” каналы обратной связи для записи из скрипта состояния портов:
MegaD-2561 XT2 “In_30… In_35”, XP5 “In_36”, XP6 “In_37”
MegaD-7I7O-SD “In_0… In_6” и “Out_7… Out_12, Out_Dimm_13”
MegaD-7I7O-R “In_15… In_21” и “Out_23… Out_28”
Feedback.png
Feedback.png (209.64 КБ) 3231 просмотр

5. Создать в серверном проекте необходимые виртуальные “Channels” и “Tags”
6. Создать скрипт для чтения и записи стояния портов в переменные проекта.
http://dev.iridiummobile.net/JS_Guide#П ... бор_данных

Код: Выделить всё

var Module = function(name)
{
  var g_Device = IR.GetDevice(name);
////////////////////////////////////////////////////////////////////////////////    
    function mFeedback() 
        {g_Device.Send(['GET,/sec/?cmd=all'])}  // запрос состояния всех портов          

    IR.AddListener(IR.EVENT_START,0,function()
        {IR.SetInterval(800, mFeedback ) });     //Таймер на запрос      
 
   IR.AddListener(IR.EVENT_RECEIVE_TEXT, g_Device, function(text) 
      {IR.Log("MegaD = " +text)
        
          
// parser    
  if(text != "Done")
    { var arr = text.split(';');
       for(var i = 0; i < arr.length; i++) 
       {
// In/Out
            if(arr[i].substring(0,3) == "OFF")     
               {IR.SetVariable("Drivers.MegaD_2561.Tags.In_" + [i], 0);
               } else 
            if(arr[i].substring(0,2) == "ON")    
               { IR.SetVariable("Drivers.MegaD_2561.Tags.In_" + [i], 1)}
           
            if(arr[i] == "OFF")       
               {IR.SetVariable("Server.Tags.MegaD_2561.Out_" + [i], 0);
               } else 
            if(arr[i] == "ON")    
               { IR.SetVariable("Server.Tags.MegaD_2561.Out_" + [i], 1)}  
// Диммер 
         
            if(arr[13] >= "0" )       
               { IR.SetVariable("Server.Tags.Virtual_Dimmer_13", arr[13])};            
               
// HTU21D Темп,Влаж.            
      { var arr33 = arr[33].split(/[/:]/);
         { if(arr33[1] != "200")    
                {IR.SetVariable("Server.Tags.Virtual_Temp_bath_33", arr33[1])}
           if(arr33[3] != "200")    
                {IR.SetVariable("Server.Tags.Virtual_Hum_bath_33", arr33[3])}   
          } 
       }                            
       { var arr31 = arr[31].split(/[/:]/);
          { if(arr31[1] != "200")    
                {IR.SetVariable("Server.Tags.Virtual_Temp_out_31", arr31[1])}
            if(arr31[3] != "200")    
                {IR.SetVariable("Server.Tags.Virtual_Hum_out_31", arr31[3])}  
          }                         
       } 
// Счетчик (НАМУР->АЦП) ХВС
       { var ADC37 = arr[37] 
            if (+ADC37 > 400)
            {IR.SetVariable("Server.Tags.MegaD_2561.In_37", 1 );                     
            }else
             if (+ADC37 < 180 )
                 {IR.SetVariable("Server.Tags.MegaD_2561.In_37", 0)}; 
       }                    
      } 
  }     
//////
 });
  

}
var Mega_1 = Module("MegaD_2561"); // Имя девайса из DRIVERS
Все. сервер iRidium отправляет команды, и получает состояние портов контроллера Мegad-2561.

kontur
Сообщения: 166
Зарегистрирован: 09 окт 2016, 12:31

Re: Сервер iRidium и Мegad-2561

Сообщение kontur » 13 май 2017, 10:07

Спасибо, иридиум очень интересен. Я так понял, для 1 панели достаточно купить лицензию с драйвером AV&custom за 9375?

empenoso
Сообщения: 1039
Зарегистрирован: 11 ноя 2015, 08:03
Откуда: Пермь

Re: Сервер iRidium и Мegad-2561

Сообщение empenoso » 13 май 2017, 17:00

А что за "панель"?

kontur
Сообщения: 166
Зарегистрирован: 09 окт 2016, 12:31

Re: Сервер iRidium и Мegad-2561

Сообщение kontur » 13 май 2017, 20:31

Панель управления, т.е. телефон, планшет.

Vladimir
Сообщения: 7
Зарегистрирован: 21 апр 2017, 12:58

Re: Сервер iRidium и Мegad-2561

Сообщение Vladimir » 26 май 2017, 12:23

kontur писал(а):Спасибо, иридиум очень интересен. Я так понял, для 1 панели достаточно купить лицензию с драйвером AV&custom за 9375?
При регистрации на сайте Iridium цена лицензии на 1 панель + сервер + драйвер AV&custom 6250р.

Bonefolder
Сообщения: 617
Зарегистрирован: 30 мар 2017, 11:15
Откуда: г.Севастополь

Re: Сервер iRidium и Мegad-2561

Сообщение Bonefolder » 26 май 2017, 14:13

А стоимость за дополнительные панели?
У конкурентов, при меньшей стоимости, количество подключаемых панелей ограничивается лишь покупательской способностью, этих самых панелей, владельцем))

d.v.ermakov
Администратор
Сообщения: 2187
Зарегистрирован: 29 май 2015, 21:23
Откуда: Екатеринбург, Нижний Тагил

Re: Сервер iRidium и Мegad-2561

Сообщение d.v.ermakov » 26 май 2017, 16:31

Не стоит вестись на незадачливый продакт-плейсмент моих земляков (и их столичных продаванов), ИМХО. Их решение предназначено для профи, а не для DIY. И дорого, и без каждодневной практики и поддержки может быть тяжеловато, в сравнении.

Vladimir
Сообщения: 7
Зарегистрирован: 21 апр 2017, 12:58

Re: Сервер iRidium и Мegad-2561

Сообщение Vladimir » 26 май 2017, 17:05

d.v.ermakov писал(а):Не стоит вестись на незадачливый продакт-плейсмент моих земляков (и их столичных продаванов), ИМХО. Их решение предназначено для профи, а не для DIY. И дорого, и без каждодневной практики и поддержки может быть тяжеловато, в сравнении.
Стоит не стоит... как вы пишите все в сравнении.
К "продованам" отношения не имею. Поделился возможностью интеграции, по просьбе владельца сайта.
Служба поддержки ваших земляков работает на отлично, ИМХО )

Bonefolder
Сообщения: 617
Зарегистрирован: 30 мар 2017, 11:15
Откуда: г.Севастополь

Re: Сервер iRidium и Мegad-2561

Сообщение Bonefolder » 26 май 2017, 18:17

Vladimir писал(а):К "продованам" отношения не имею. Поделился возможностью интеграции, по просьбе владельца сайта.
Служба поддержки ваших земляков работает на отлично, ИМХО )
Таки, имеете... "по просьбе..." на лицо, неприкрытый пиар.

Vladimir
Сообщения: 7
Зарегистрирован: 21 апр 2017, 12:58

Re: Сервер iRidium и Мegad-2561

Сообщение Vladimir » 26 май 2017, 19:02

Bonefolder писал(а):
Vladimir писал(а):К "продованам" отношения не имею. Поделился возможностью интеграции, по просьбе владельца сайта.
Служба поддержки ваших земляков работает на отлично, ИМХО )
Таки, имеете... "по просьбе..." на лицо, неприкрытый пиар.
Ледненько, каждый кулик... ))

Vladimir
Сообщения: 7
Зарегистрирован: 21 апр 2017, 12:58

Re: Сервер iRidium и Мegad-2561

Сообщение Vladimir » 02 июл 2017, 16:06

Доработал взаимодействие сервера с MegaD.
Для отслеживания срабатывания входов MegaD, в сервер Iridium необходимо добавить драйвер MQTT.
При старте, сервер отправляет запрос через драйвер HTTP, "cmd=all". Далее состояние всех портов "out" отслеживается сервером.
Получение значений с датчиков, также по запросу "cmd=all" раз в две минуты.
пример

Код: Выделить всё

var Module = function(name)
{
  var g_Device = IR.GetDevice(name);
   
    function mFeedback() 
        {g_Device.Send(['GET,/sec/?cmd=all'])} // Запрос статуса всех портов по таймеру         

    IR.AddListener(IR.EVENT_START,0,function()
        {g_Device.Send(['GET,/sec/?cmd=all'])  // Запрос статуса всех портов при запуске контроллера
         IR.SetInterval(120000, mFeedback )    // Таймер на запрос статуса 
        });          
 
   IR.AddListener(IR.EVENT_RECEIVE_TEXT, g_Device, function(text) 
      {IR.Log("MegaD_16 = " +text)
        
          
// parser    
  if(text != "Done")
    { var arr = text.split(';');
       for(var i = 0; i < arr.length; i++) 
       {
          
            if(arr[i] == "OFF")       
               {IR.SetVariable("Server.Tags.MegaD_2561.Out_" + [i], 0);
               } else 
            if(arr[i] == "ON")    
               { IR.SetVariable("Server.Tags.MegaD_2561.Out_" + [i], 1)}  
// Диммер 
         
            if(arr[13] >= "0" )       
               { IR.SetVariable("Server.Tags.Virtual_Dimmer_13", arr[13])
                 IR.SetVariable("Server.Tags.status_panel_Dimmer", arr[13])};    
               
// HTU21D Темп,Влаж. №1            
      {   var arr33 = arr[33].split(/[/:]/);
          { if(arr33[1] != "200")    
                {IR.SetVariable("Server.Tags.Virtual_Temp_bath_33", arr33[1])}
            if(arr33[3] != "200")    
                {IR.SetVariable("Server.Tags.Virtual_Hum_bath_33", arr33[3])} 
                
          }           
       } 
// HTU21D Темп,Влаж. №2                                  
       { var arr31 = arr[31].split(/[/:]/);
          { if(arr31[1] != "200")    
                {IR.SetVariable("Server.Tags.Virtual_Temp_out_31", arr31[1])}
            if(arr31[3] != "200")    
                {IR.SetVariable("Server.Tags.Virtual_Hum_out_31", arr31[3])}  
          }                         
       } 
     } 
  }     
//////
});
}
var Mega_1 = Module("MegaD_2561"); // Имя девайса из DRIVERS
Драйвер MQTT отслеживает состояние "in" на MegaD.
пример

Код: Выделить всё

IR.AddListener(IR.EVENT_TAG_CHANGE, IR.GetDevice("MQTT"), function(name, value) 
{  
   IR.Log(name+": "+value)
      
  if (name == "MQTT Feedback_16")    
   { var arr_MQTT_16 = value.split(/[{}:"",]/)
 
       {
// Датчик движения MegaD порт "P0" Mode "P&R"     
              if(arr_MQTT_16[5] == "0" && arr_MQTT_16[11] == "1"){
                   IR.SetVariable("Server.Tags.MegaD_2561.In_0", 0)   //  Запись значения в переменную проекта                           
              } else
              if(arr_MQTT_16[5] == "0" && arr_MQTT_16[11] == "2")
                {IR.SetVariable("Server.Tags.MegaD_2561.In_0", 1)};   
// MegaD, порт "P1" Click Mode "Click 1"           
              if(arr_MQTT_16[5] == "1" && arr_MQTT_16[11] == "1"){  
                IR.SetVariable("Server.Channels.MQTT.MQTT_Commands_16", "27:2") //Отправка команды на MegaD
                 if(IR.GetVariable ("Server.Tags.MegaD_2561.Out_27") == "0")  
                    {IR.SetVariable("Server.Tags.MegaD_2561.Out_27", 1)       // Запись значения (замена OFF на ON)
                    }else 
                      {IR.SetVariable("Server.Tags.MegaD_2561.Out_27", 0)};   // Запись значения (замена ON на OFF) 
// MegaD, порт "P1" Click Mode "Click 2"                     
              }else  
              {if(arr_MQTT_16[5] == "1" && arr_MQTT_16[11] == "2"){ 
                IR.SetVariable("Server.Channels.MQTT.MQTT_Commands_16", "12:2")    
                 if(IR.GetVariable ("Server.Tags.MegaD_2561.Out_12") == "0")  
                    {IR.SetVariable("Server.Tags.MegaD_2561.Out_12", 1)
                    }else       
                      {IR.SetVariable("Server.Tags.MegaD_2561.Out_12", 0)}}};
   
// MegaD, порт "P4"  Mode "P"   
              if(arr_MQTT_16[5] == "4" && arr_MQTT_16[8] == "cnt"){  
                IR.SetVariable("Server.Channels.MQTT.MQTT_Commands_16", "28:2")
                 if(IR.GetVariable ("Server.Tags.MegaD_2561.Out_28") == "0")  
                     {IR.SetVariable("Server.Tags.MegaD_2561.Out_28", 1)
                     }else       
                     {IR.SetVariable("Server.Tags.MegaD_2561.Out_28", 0)}}; 
            
// Счетчик ХВС Mode "P"               
              if(arr_MQTT_16[5] == "34" && arr_MQTT_16[8] == "cnt")  
                {IR.SetVariable("Server.Tags.MegaD_2561.In_34", 1)};
// Счетчик ГВС Mode "P"               
              if(arr_MQTT_16[5] == "35" && arr_MQTT_16[8] == "cnt")  
                {IR.SetVariable("Server.Tags.MegaD_2561.In_35", 1)};               
                       
       }        
    }
       
});   
Отправлять команды с сервера на контроллер, можно через оба драйвера. Запросы через драйвер HTTP.

Ответить