Материал из for iRidium developers
Перейти к: навигация, поиск
Other languages:
English • ‎русский
Раздел находится в разработке

Примеры использования JavaScript API iRidium с описаниями.

Обновлено: 26.6.2017
Язык предок: JavaScript
Версия языка: 1.5
Спецификация: ECMAScript Edition 3
Сообщить об ошибке


Драйверы (DDK, Drivers API)

Примеры создания и изменения настроек драйверов с помощью iRidium API


Custom TCP сервер в клиенте iRidium

Custom Server на базе драйвера AV & Custom Systems может принимать подключения клиентов на базе AV & Custom Systems и сторонних приложений, обрабатывать данные, которые присылает клиент и передавать ему команды.

Помните, что сервер, запущенный в приложении i3 pro, работает только пока приложение запущено, он не может хранить базу данных, в отличие от специализированного решения iRidium Server.

Применение "сервера в клиенте" очень ограничено и может использоваться только для синхронизации некоторых данных между панелями управления, когда установка iRidium Server по каким-то причинам невозможна.

// TCP server on port 5678
function start_tcp_server(server_name)
{
   // name, port, max connections
   var name = server_name;
   var port = 5678;
   var max_clients = 10;
   var tcp_device = IR.CreateDevice(IR.DEVICE_CUSTOM_SERVER_TCP, name, "", port, max_clients);
 
   // start server
   tcp_device.Connect();    
 
   // inform when the server online
   IR.AddListener(IR.EVENT_ONLINE, tcp_device, function(text)
   {
      IR.Log("Server is ONLINE");
   });
 
   // register connected client
   IR.AddListener(IR.EVENT_ACCEPT, tcp_device, function(id)
   {  
      IR.Log(tcp_device + " ACCEPT CLIENT "+id);
   });
 
   // process received data
   IR.AddListener(IR.EVENT_RECEIVE_TEXT, tcp_device, function(text)
   {
      //IR.Log("INPUT DATA: "+text);
      var strings = text.split('\r\n');
      var string;
      while(string = strings.shift())
      {
         var parts = string.split(":");  // parse the string with ":" devider
         switch(parts[0])
         {
            case "LOG":    // if the first substring of received data = "LOG"
            IR.GetItem("Page 1").GetItem("Item 1").GetState(0).Text = IR.GetVariable("System.Time.24")+" "+parts[1];
            IR.Log(IR.GetVariable("System.Time.24")+" "+parts[1]);
            break;
            case "ERROR":  // if the first substring = "ERROR"
            IR.GetItem("Page 1").GetItem("Item 2").GetState(0).Text = IR.GetVariable("System.Time.24")+" "+parts[1];
            IR.Log(IR.GetVariable("System.Time.24")+" "+parts[1]);
            break;
            case "DATABASE":  // if the first substring = "DATABASE"
            IR.Log(parts[1]);
            break;
         }
      }
   });
}
 
// start the server when project starts
start_tcp_server("Custom Server TCP");


Интерфейс (GUI API)

Примеры управления свойствами страниц, окон и графических элементов с помощью iRidium API


Анимация элементов с помощью IR.Tween

Твинер уточняет значение переменной на указанном отрезке, вычисленное по какой-либо формуле. Позволяет создать анимацию с движением объекта на определенном отрезке по указанной кривой.

Применим твинер для того, чтобы показанный на странице попап плавно "выезжал" из-за края экрана. Будем использовать линейный твинер, чтобы попап двигался прямо.

function ShowTop() 
{
   TopTween("Popup 1", 820, 34, 250);  // popup, X, Y, moving range from Top
}
 
////////////////////////////////////////////////////////////////////////////////
// Creating Effects
////////////////////////////////////////////////////////////////////////////////
var timer = 0;
var speed = 20;    // showing speed
 
function TopTween(popup, X, Y, range)
{
   IR.ShowPopup(popup);
   IR.GetItem(popup).X = X;
   var Tm = IR.SetInterval(1, function()
   {          
      timer++;
      var Tween = IR.Tween("TWEEN_LINEAR", timer, 0, range, speed); 
      IR.GetItem(popup).Y = Y+Tween; 
      if (timer > speed) IR.ClearInterval(Tm); timer = 0;
   });
}


Управление шрифтом

Установить на элемент шрифт или изменить размер шрифта можно только через свойство состояния .FontId.

FontId - идентификатор шрифта, хранит указатель на шрифт и его размер. Изменить отдельно размер шрифта - нельзя.

Создадим новый шрифт и привяжем его к состоянию элемента через FontId. Важно использовать для создания новых шрифтов идентификаторы, которых еще нет в проекте (редактор также создает свои, системные шрифты, используя идентификаторы, начинающиеся с 1). Для получения свободного идентификатора надо использовать метод IR.FreeFontID;

Укажем, какой файл шрифта брать за основу, какой размер установить. Присвоим новому шрифту идентификатор, ранее не использованный в проекте:

var Font=IR.FreeFontID; //Get free font ID
IR.CreateFont(Font, "tahoma.ttf", IR.GetItem("Страница 1").GetState(0).FontSize+10);//Create new font with new size and id
IR.GetItem("Страница 1").GetState(0).FontId=Font;//Set new font to the state


Уведомления (Push API)

Отправка Push уведомления на панель управления. Уведомление отправляет сервер (других возможностей в v1.0.10 нет).


1 Создайте группы панелей управления

По умолчанию, ни одна панель управления не будет получать Push уведомления до тех пор, пока вы не поместите ее в Группу панелей, которые могут получать Push.

Группы настраивают на сайте, см. инструкцию.

У каждой группы есть ID и имя. Именно ID группы вы будете использовать указывая, каким панелям отправить уведомление.


2 Настройте скрипт отправки уведомлений с сервера

В проекте для сервера создайте новый файл скрипта. Добавьте в него условие отправки уведомления и команду отправки Push. Условием отправки Push может быть изменение любой переменной сервера - связанной с драйвером, или виртуальной.

Пример: отправим уведомление, когда канал "Address 1" драйвера "KNX" примет значение 1. Уведомление получит группа панелей с ID = 1.

function sendPush (text, group) 
{
   IR.SendPush(text, "", group);  
   // text - message that will be displayed in notification
   // group - group of Panels seted up in Cloud Object properties on iRidium Mobile web site
}
 
IR.AddListener(IR.EVENT_TAG_CHANGE, IR.GetDevice("KNX"), function(name, value)
{
   if (name == "Address 1" && value == 1) 
   {
      sendPush("Leakage in the kitchen! The water supply is turned off", 1); 
   } 
});

На панели управления с i3 pro дополнительные настройки и скрипты не нужны, она получит уведомление, если находится в указанной группе.