Работа с драйверами
Содержание
Описание
С помощью iRidiumScript вы можете:
- Создавать драйвера
- Редактировать драйвера
- Отсылать данные на устройство
- Принимать и редактировать данные пришедшие с устройства
Создание драйвера
1. Для создания драйвера с помощью iRidiumScript необходимо использовать команду
IR.CreateDevice(Device_Type, "Device_Name", "IP", Port);
- Device_Type - тип протокола с которым работает устройство. В настоящий момент вы можете использовать следующие типы свободно конфигурируемых протоколов:
- IR.DEVICE_CUSTOM_TCP
- IR.DEVICE_CUSTOM_UDP
- IR.DEVICE_CUSTOM_HTTP_TCP
- Device_Name - имя устройства(Задается пользователем)
- IP - IP-адрес устройства
- Port - порт на устройстве, через который будут приниматься и отправляться данные
2. Когда драйвер создан, необходимо подключить его к устройству командой
IR.GetDevice("Device_Name").Connect;
IR.AddListener(IR.EVENT_START, 0, function() //Событие, которое срабатывает при начале работы приложения { IR.CreateDevice(IR.DEVICE_CUSTOM_TCP, "DEVICE", "192.168.0.116", 80); //Команда для создания драйвера IR.GetDevice("DEVICE").Connect(); //Команда для подключения к устройству });
Изменение драйвера
С помощью iRidiumScript вы можете в любой момент изменить любые свойства драйвера, для это вам следует присвоить драйвер переменной с помощью команды
IR.GetDevice("Driver_Name");
После этого обратитесь в свойству драйвера и присвойте ему новое значение используя конструкцию:
driver.Name = "New_Device";
IR.AddListener(IR.EVENT_START, 0, function() //Событие, которое срабатывает при начале работы приложения { var driver = IR.GetDevice("DEVICE");//Присваиваем драйвер переменной driver.Name = "New_Device"; //Изменяем имя драйвера });
Отправка данных
С помощью iRidiumScript Вы можете отправлять на устройство необходимые инструкции. Для этого следует использовать команду
IR.GetDevice("Device_Name").Send([command]);
- Device_Name - имя устройства созданного в iRidium GUI или в iRidiumScript
- command - инструкция, отправляемая на устройство
IR.AddListener(IR.EVENT_START, 0, function() //Событие, которое срабатывает при начале работы приложения { IR.CreateDevice(IR.DEVICE_CUSTOM_TCP, "DEVICE", "192.168.0.116", 80); //Команда для создания драйвера IR.GetDevice("DEVICE").Send(['getverion\r\n HTTP 1.1\r\n\r\n']);//Команда отправляет на устройство инструкцию('getverion\r\n HTTP 1.1\r\n\r\n') });
Получение и разбор данных
С помощью iRidiumScript вы можете получить данные, пришедшие с устройства с помощью слушателя
IR.AddListener(Тип_отображения_информации, Имя_устройства, function(text)
- Тип_отображения_информации - в каком виде будет отображаться полученная информация (текстовый формат - IR.EVENT_RECEIVE_TEXT или битовый формат - IR.EVENT_RECEIVE_DATA)
- Имя_устройства - имя устройства созданного в iRidium GUI или с помощью iRidiumScript
DEVICE = IR.GetDevice("Global") //Указываем имя устройства IR.AddListener(IR.EVENT_RECEIVE_TEXT, DEVICE, function(text) //Событие срабатывающее при принятии данных от устройства { IR.Log(text) //В лог выводим текст });
Работа с UPnP
UPnP (Universal Plug and Play) — это архитектура многоранговых соединений между персональными компьютерами и интеллектуальными устройствами, например, в домашней локальной сети. UPnP строится на основе стандартов и технологий Интернета, таких как TCP/IP, HTTP и XML, и обеспечивает автоматическое подключение интллектуальных устройств друг к другу и их совместную работу в сетевой среде, в результате чего сеть (например, домашняя) становится лёгкой для настройки большему числу пользователей.
В iRidiumScript вы можете находить, настраивать и управлять всеми устройствами поддерживающими UPnP. Если вы работаете с UPnP, то вам не нужно знать IP-адрес и порт вашего устройства. Система сама найдет все устройства в вашей сети и отобразит их.
Для создания UPnP драйвера используется команда
upnpControl = IR.CreateDevice(IR.DEVICE_UPNP_CONTROL, "MyUPnP");
- MyUPnP - имя UPnP драйвера
- IR.DEVICE_UPNP_CONTROL - указание типа UPnP
- upnpControl - переменная, которой присваивается идентификатор драйвера.
После этого драйвер нужно включить с помощью команды
upnpControl.Connect();
При запуске клиента, драйвер начнет опрашивать сеть на предмет наличия UPnP устройств. Чтобы вы могли манипулировать найденными устройствами следует использовать слушателя:
IR.AddListener(IR.EVENT_DEVICE_FOUND, 0, FoundDevice);
- IR.EVENT_DEVICE_FOUND - событие, которое активируется в случае идентификации устройства поддерживающего UPnP
- FoundDevice - функция, которая запустится при активации события IR.EVENT_DEVICE_FOUND
Инструкция по созданию драйверов
Для создания драйверов следует использовать объектно-ориентированную парадигму. Драйвера создаются в несколько этапов:
- 1 этап. Создание Главного класса
На данном этапе Вы должны создать главный класс с помощью которого вы в итоге будете создавать экземпляры драйвера. В iRidiumScript главный класс создается как функция:
var GlobalCache = function() //Инициализация главного класса { //тело класса }
- 2 этап. Подключение экземпляра класса к драйверу в GUI Editor
Для корректной работы, каждому устройству, с которым Вы будете работать, нужно создать базовый драйвер в GUI Editor, в окне Device Tree. После этого требуется описать подключение каждого экземпляра драйвера с базовому устройству (драйверу) из Device Tree редактора GUI Editor.
Базовые драйвера различаются по именам, поэтому во время инициализации экземпляров класса надо присваивать каждый экземпляр класса к своему базовому драйверу из Device Tree по его имени. В главном классе это реализуется следующим образом:
this.DEVICE = IR.GetDevice(this.DriverName);
- this.DEVICE - переменная хранящая идентификатор драйвера полученный по указанному имени
- this.DriverName - переменная хранящая имя базового драйвера, которое указал пользователь
var GlobalCache = function() //Инициализация главного класса { this.DriverName; //Имя драйвера, задающееся пользователем this.DEVICE; //Указатель на базовый драйвер в Device Tree function initalization()//Метод инициализации экземпляра класса { this.DEVICE = IR.GetDevice(this.DriverName); //определение указателя на базовый драйвер по его имени } this.Init = initalization; // Определение метода инициализации экземпляра драйвера }
- 3 этап. Делаем проверку сетевого статуса устройства (Online/Offline)
Делается это затем, чтобы была возможность проверки, запустилось или нет устройство (открылась ли сессия подключения к управляемому оборудованию). В первоначальном состоянии that.Online = false, что означает что девайс не вошел в сеть, но после этого происходит запуск устройства и статус that.Online меняется на that.Online = true. Если устройство не в сети (подключение не установилось), то мы не сможем посылать на него команды.
//------------------------------------------------------- // Обработчик перехода устройства в Online //------------------------------------------------------- IR.AddListener(IR.EVENT_ONLINE, that.DEVICE, function(text) { IR.Log(that.DriverName+" DEVICE is Online"); that.OnLine = true; }, that); //------------------------------------------------------- // Обработчик перехода устройства в Offline //------------------------------------------------------- IR.AddListener(IR.EVENT_OFFLINE, that.DEVICE, function(text) { IR.Log(that.DriverName+" DEVICE is Offline"); that.OnLine = false; }, that); });
- 4 этап. Отправка команды с помощью скрипта
С помощью iRidiumScript можно отсылать команды, например:
function SendGetDevice() { Device.Send(['getdevices',13]); //Отправка команды getdevices }; this.sendgetdevice = SendGetDevice function SendGetVersion() { Device.Send(['getversion',13]); //Отправка команды getversion }; this.sendgetversion = SendGetVersion
- 5 этап. Вывод данных в лог
В iRidiumScript в лог можно выводить как текстовые так и бинарные данные:
IR.AddListener(IR.EVENT_RECEIVE_TEXT,0.function(text) //обработка текстовых данных { IR.Log(text) }); IR.AddListener(IR.EVENT_RECEIVE_DATA,0.function(text) //обработка бинарных данных { IR.Log(text) });
- 6 этап. Парсер и вызов методов парсера (обработчик входящих данных)
В iRidiumScript есть возможность парсить данные как через поиск (text.indexOf) так и через регулярное выражение (text.search)
this.IsDeviceRegex = "DEVICE"; this.IsVersionRegex = "version"; IR.AddListener(IR.EVENT_RECEIVE_TEXT, this.DEVICE, function(text) { IR.Log("responce text = "+text); that.IsDevice = text.indexOf(that.IsDeviceRegex.toLowerCase()); that.IsVersion = text.indexOf(that.IsVersionRegex); if (that.IsDevice != -1) { that.getdevices(text); } else if (that.IsVersion != -1) { that.getversion(text); } });
- 7 этап. Обращение к функции после парсинга
Для того, чтобы произошло обращение к функциям, нужно:
this.ResponceGetDevices; function GetDevices(text) { var EndPacketRegex = 'endlistdevices'; var EndPacket = text.indexOf(EndPacketRegex); var Responce; Responce = text.slice(0,EndPacket); that.ResponceGetDevices = Responce; } this.getdevices = GetDevices; this.ResponceGetVersion; function GetVersion(text) //Функция обработки канала getversion { var EndPacket = text.length; var Module; var Version; Module = text.slice(8,9); Version = text.slice(10,EndPacket-1); that.ResponceGetVersion = "Module: "+Module; that.ResponceGetVersion = "Version: "+Version; } this.getversion = GetVersion;
- 8 этап. Создание экземпляра драйвера
var [Имя_устройства] = new GlobalCache(); [Имя_устройства].DriverName = "Имя_драйвера(указанное в DEVICE TREE)"; [Имя_устройства].Init(); var GC06 = new GlobalCache(); GC06.DriverName = "gc-2"; GC06.Init();
- 9 этап. Привязка методов и свойств к элементам GUI (интерфейса)
IR.AddListener(IR.EVENT_ITEM_PRESS,IR.GetItem("Page 1").GetItem("Item 1"),function() { GC06.sendgetversion() });