SlideShare una empresa de Scribd logo
1 de 25
От Всемирной паутины к Интернету вещей
В глобальной сети массовыми станут взаимодействия не только людей между собой,
но и человека с устройствами, а также полностью “роботизированные” обмены
данными устройство-устройство
2005 г. 2014 г.2010 г. 2030 г.
Количество
подключенных
устройств
10 млрд.
Количество
подключенных
устройств
30 млрд.
Количество
пользователей
972 млн.
Количество
пользователей
2,98 млрд.
Количество
пользователей
2,4 млрд.
Одно решение – множество платформ
Как минимум три: device, cloud, app
Множество платформ – различные протоколы
Binary, RESTful, MQTT, etc
Множество платформ – усложнение разработки
Logging, profiling, authentication/authorization
Осень 2012 года – запуск проекта DeviceHive
Платформа с открытым исходным кодом, использующая сетевые и облачные
технологии. Позволяет реализовывать решения для обмена информацией
между устройствами по принципу M2M.
•облачный API
•административный портал
•набор компонентов и описаний
– гибкая, масштабируемая, простая в применении платформа.
Использование DeviceHive в разработке M2M-систем:
•экономит время,
•смещает фокус разработки на основной функционал системы.
Благодаря DeviceHive построение M2M-решений
становится простым и прозрачным процессом
Open source проект – доступен широкой аудитории.
Широкий спектр использования в проектах: безопасность, экологически
чистые технологии, умный дом, удаленное управление объектами, логистика.
Если установить все компоненты DeviceHive, то с помощью легко
настраиваемого API возможно организовать очередь и доставку команд
между устройствами и клиентскими приложениями.
Скачать все компоненты прямо с сайта – http://www.devicehive.com/
С примерами использования, публикациями экспертов и евангелистов
Устройство – это подключенное к сети «железо», использующее бинарный или RESTful протокол.
Модуль DeviceHive для устройства обеспечивает его подключение к сети и отправку команд/нотификаций.
Доступны Framework библиотеки для следующих платформ: .NET -C#, C++, Python, iOS, Android, Си для
MCU.
Шлюз – это мост между устройствами и сетью передачи данных облака.
Он может принимать или отправлять сообщения между устройствами и сетью.
Типовое применение шлюза – это обеспечение обмена данными между бинарным и RESTful протоколами.
Доступны Framework библиотеки для следующих платформ: С++, .NET - C# и Python.
Сервер – это ядро обработки сообщений. Он может находится как в облаке, так и в локальной сети.
Основные задачи сервера – это обеспечение обмена сообщениями между устройствами, поддержка сети и
прав
доступа пользователей.
Доступны Framework библиотеки для следующих платформ: .NET - C#, Java.
Клиент – это программное обеспечение, например веб-приложение или мобильный клиент,
которое подключается к DeviceHive серверу для получения информации или контроля над устройствами.
Доступны Framework библиотеки для следующих платформ: .NET - C#, iOS, Android, JavaScript.
Библиотеки DeviceHive для различных технологий
-Playground
-Docker
-JuJu Charms
- Windows MSI Installer
DeviceHive Server Deployment
Devicehive API является центральной частью фреймфорка, в котором различные компоненты взаимодействуют
друг с другом. API обеспечивает доступ к информации о зарегистрированных в системе компонентах, и позволяет
им обмениваться сообщениями в режиме реального времени.
Варианты использования
Есть три типа элементов,
взаимодействующих с Devicehive API
Устройство – это элемент, на котором функционирует микрокод, и он взаимодействует с API, в следующих случаях:
при запуске, передавая уникальный идентификатор, отображают имя и другую метаинформацию, устройство отправляет
уведомления с произвольным форматом содержимого для уведомления других компонентов об изменениях
в окружении этого устройства, слушает команды, поступающие от других компонентов и должным образом выполняет их.
Клиент – это приложение, которое используется для контроля устройств и/или управления ими.
Это может быть пользовательский интерфейс, или полностью автоматизированное программное обеспечение,
которое управляет всей сетью устройств. Клиенты могут взаимодействовать с API в следующих случаях:
опрашивает все устройства в сети, просматривает их статус и другую метаинформацию, клиент слушает нотификации устройств
и обрабатывает их соответствующим образом, клиент отправляет команды устройствам, чтобы сработала логика на стороне
устройства.
Администратор контролирует все аспекты окружения, с полным доступом к API.
Как правило, администраторы должны использовать эту API в следующих случаях:
создает и управляет пользователями API (клиентами и другими администраторами), администратор создает и управляет сетями
устройств и связывает пользователей с ними, следит за устройствами и контролирует все полученные и отправленные данные.
Devicehive API
Маршрутизация в DeviceHive
Одна из основных особенностей сервиса – это возможность подключения устройств с
клиентами в режиме реального времени.
На стороне сервера это достигается путем маршрутизации новых команд и уведомлений
их получателям с минимальными задержками.
Есть три способа получения входящих сообщений для клиентов API:
-Polling: клиент периодически запрашивает сервер для получения новых команд и уведомлений.
Запрос должен содержать параметр waitTimeout = 0, чтобы отключить ожидание на сервере.
-Long Polling: клиент делает запрос к серверу, но сервер отвечает только тогда, когда
новое сообщение доступно, или, если тайм-аут ожидания истек (указывается в параметре
waitTimeout).
Такой подход, как правило, более эффективный и минимизирует задержки при приеме сообщения.
-WebSocket: отдельный WebSocket API позволяет клиентам открыть постоянные соединения с
сервером, подписавшись на конкретные команды или уведомлений, а затем получать сообщения
от этого сервера.
Аутентификация
API поддерживает два типа аутентификации: для пользователей и устройств.
В аутентификации пользователей с помощью HTTP Basic Authentication доступ
предоставляется на основании аутентификации в роли пользователя
(клиента или администратора).
Устройство аутентифицируется, передавая два пользовательских HTTP заголовка:
- Auth-DeviceID: Уникальный идентификатор устройства.
-Auth-DeviceKey: Ключ аутентификации устройств.
Уникальный идентификатор устройства и ключ аутентификации задаются при
регистрации устройства.
<html>
<head>
<script>
function turnOnOff(onOff) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open('POST', 'http://nn7ХХХ.pg.devicehive.com/api/device/82d1cfb9-43f8-4a22-b708-45bb4f68ae54/command', true);
xmlhttp.setRequestHeader("Authorization", "Basic " + btoa(«********:********"));
xmlhttp.setRequestHeader("Content-type", "application/json; charset=UTF-8");
var myjson = {};
myjson["command"]='UpdateLedState';
myjson["parameters"]={};
myjson["parameters"]["equipment"]="LED";
myjson["parameters"]["state"]=onOff;
xmlhttp.send(JSON.stringify(myjson));
xmlhttp.onreadystatechange = function() {
if(xmlhttp.readyState == 4 && (xmlhttp.status < 200 || xmlhttp.status> 299))
alert('Last request return ' + xmlhttp.status + ' ' + xmlhttp.responseText);
}
}
</script>
</head>
<body>
<input type=button value=On onclick="turnOnOff('1')">
<input type=button value=Off onclick="turnOnOff('0')">
</body>
</html>
Пример страницы-клиента
JavaScript библиотека является простой оберткой вокруг DeviceHive RESTful протокола, который включает в себя
набор методов для доступа к соответствующим ресурсам DeviceHive.
Код библиотеки предоставляет все необходимые параметры для каждого вызова, такие как метод HTTP, URL,
параметры запроса, тип содержимого и проверки подлинности.
Все методы библиотеки возвращают Deferred объекты, таким образом, клиентское приложение может использовать
done,
fail, always и другие методы Deferred объектов и для обработки асинхронно возвращаемых результатов
использовать
обработчик done. Первым параметром в этот обработчик будет передан JavaScript объект, содержащий ответ от
сервера.
Клиентская библиотека также реализует механизм постоянного получения нотификаций от устройств с помощью
WebSocket или HTTP long-polling механизмов, поддерживаемых DeviceHive.
Для того, чтобы обеспечить эту функциональность, библиотека использует концепцию каналов для передачи
сообщений
между сервером и клиентом.
Клиенты просто открывают канал, подписываются на нотификации, а затем обрабатывают их в соответствующих
callback методах.
Javascript библиотека DeviceHive
Создайте новый экземпляр DHClient или DHDevice.
// Создание экземпляра DHClient, указав логин и пароль в качестве аутентификационных параметров
var dhClient = new DHClient("http://nnXXXX.pg.devicehive.com/api", "login", "password");
// Создание экземпляра DHClient, указав ключ доступа в качестве аутентификационных параметров
var dhClient = new DHClient("http://nnXXXX.pg.devicehive.com/api", "AccessKeyExampleAccessKeyExampleAccessKeyEx=");
// Создание экземпляра DHDevice, указав device id и device key в качестве аутентификационных параметров
var dhDevice = new HDevice("http://nnXXXX.pg.devicehive.com/api", "someDeviceId_123-456", "someCustomDeviceKey");
// Создание экземпляра DHDevice, указав device id и ключ доступа в качестве аутентификационных параметров
var dhDevice = new HDevice("http://nnXXXX.pg.devicehive.com/api", "someDeviceId_123456",
"AccessKeyExampleAccessKeyExampleAccessKeyEx=");
или, если вы хотите использовать Deferreds, используйте методы из объектов JQuery
var dhDevice = $.dhDevice("http://nnXXXX.pg.devicehive.com/api", "login", "password");
После создания нового экземпляра вы сможете получить соответствующую информацию от DeviceHive облака
dhClient.getDevices(function(err, res){
.... });
Также вы можете зарегистрироваться и обновлять данные в облаке. Идентификатор устройства будет установлен в ID устройство,
указанного при создании экземпляра DHDevice
dhDevice.registerDevice({name: "testDevice"}, function(err, res){
.... });
Первый аргумент в этом callback – это ошибка, а второй аргумент – результат операции. Ошибка будет null, если ошибок нет.
Использование Javascript DeviceHive библиотеки
Python библиотека DeviceHive
Python библиотека DeviceHive построена на основе пакета Twisted.
Её основное назначение – предоставить разработчику необходимый инструментарий, каркас для построения, специфичного для
конкретного приложения, DeviceHive маршрутизатора, но так же может быть использована для программирования устройств и
клиентов DeviceHive.
Библиотека организует логический канал связи для передачи команд, отчётов о выполнении команд и информационных
сообщений. При этом на прикладном уровне могут быть использованы либо Long-polling HTTP протокол, либо WebSocket.
Библиотека абстрагирует пользователя от используемого протокола, позволяя прозрачно, либо даже
автоматически, переключаться межу ними, не требуя при этом внесения изменений в логику приложения.
Следующее программное обеспечение должно быть установлено на Вашем компьютере для работы библиотеки:
Python 2.7 http://python.org
Twisted http://twistedmatrix.com
Чтобы установить Python библиотеку DeviceHive, необходимо запустить следующую команду:
python setup.py install
Если пакет setuptools установлен на Вашем компьютере, то команда, указанная выше, автоматически установит библиотеку
DeviceHive и все её зависимости. Так же Вы можете установить необходимое программное обеспечение на новой raspbian системе,
выполнив следующую команду:
sudo apt-get install python-pip python-dev
sudo apt-get install python-twisted
Пример создания DeviceHive приложения на Python
from twisted.internet import reactor
from zope.interface import implements
import devicehive
import devicehive.interfaces
import devicehive.poll
import devicehive.device.ws
Эти строки импортируют большинство модулей, которые могут понадобиться Вам при реализации DeviceHive
приложения. Определения публично доступных интерфейсов находятся в модуле devicehive.interfaces.
Их типовая реализация определена в модуле devicehive.
Несмотря на то, что обычно python программы используют утиную типизацию, мы описали базовые интерфейсы
объектов в коде модуля, для того, чтобы эти определения можно было использовать в качестве справочного
материала. Основной объект, который будет описываться пользователем библиотеки, должен реализовать
интерфейс devicehive.interfaces.IProtoHandler.
Этот объект должен предоставлять реализацию для всех определённых интерфейсом методов, даже если их
использование не предполагается. Особое внимание стоит уделить реализации методов on_connected и
on_command. Метод on_connected будет вызван, когда библиотека установит соединение с DeviceHive
ервером.
def on_connected(self):
self.factory.device_save(self.DEVICE_INFO)
В этом методе вызывается метод device_save – регистрирующий устройства на сервере DeviceHive.
В метод device_save передаётся переменная DEVICE_INFO, которая должна соответствовать интерфейсу
devicehive.interfaces.IDeviceInfo. Вы можете определить свою собственную реализацию этого интерфейса или
использовать класс devicehive.DeviceInfoClass.
Поскольку регистрационная информация устройства в этом примере является статической и никогда не будет
изменяться, мы можем создать объект DEVICE_INFO следующим образом:
Обьект DEVICE_INFO
def generate_info():
return devicehive.DeviceInfo(
id = '0204eede-2297-11e2-882c-e0cb4eb92129',
key = 'Exmaple Device Key’,
name = 'DeviceHive Python Example’,
status = ‘Online',
network = devicehive.Network(
key = 'Network Name',
name = 'Network Name', descr = 'Network Description'),
device_class = devicehive.DeviceClass(
name = 'Example Network’,
version = ‘1.0',
is_permanent = False
),
equipment = [devicehive.Equipment(
name = ‘ExampleEquipment',
code = ‘ExampleCode',
type = ‘ExampleType')])
DEVICE_INFO = generate_info()
Метод notify фабрики может быть вызван и до установления соединения с сервером, но сообщения будут
отправлены только после успешного соединения.
Так же нужно правильное указание идентификатора устройства – это обязанность программиста.
Далее Вам необходимо создать экземпляр своего объекта-обработчика.
Используя одну из доступных в библиотеке фабрик создать транспорт и запустить реактор.
Например:
if __name__ == ‘__main__’:
handler = YourHandlerObject()
transport = devicehive.auto.AutoFactory(handler)
transport.connect(devicehive_url)
reactor.run()
Здесь используется AutoFactory.
Она автоматически обнаруживает доступный протокол DeviceHive.
Далее код вызывает метод transport.connect, принимающий в качестве первого аргумента URL
к серверу DeviceHive и фабрику протокола в качестве второго параметра.
Если это необходимо, можно заменить AutoFactory на фабрику конкретного протокола:
transport = devicehive.device.ws.WebSocketFactory(handler)
transport.connect('ws://pg.devicehive.com:8010')
Другая альтернатива – фабрика PollFactory из модуля devicehive.poll.
Пример создания DeviceHive приложения на Python
Поскольку регистрация устройства – относительно длительный процесс, библиотека делает это в
асинхронном режиме, и возвращает Deferred объект, при этом не блокируя поток выполнения программы.
Deferred объекты определены в Twisted таким образом, что с ними можно ассоциировать callback функции. В
примере, приведенном ниже, для этого используется метод addCallbacks, первым аргументом передаётся
функция, которая будет выполнена в случае успешного завершения процесса регистрации, а вторым – в
случае ошибки.
def on_connected(self):
def on_subscribe(result) :
self.factory.subscribe(
self.DEVICE_INFO.id,
self.DEVICE_INFO.key)
def on_failed(reason):
log.err('Failed to save device {0}. Reason:
{1}.'.format(self.DEVICE_INFO, reason))
self.factory.device_save(self.DEVICE_INFO).addCallbacks(on_subscribe, on_failed)
В простых случаях, сразу же после успешной регистрации устройства в сети, объект должен сигнализировать
DeviceHive серверу о том, что он получает передаваемые от клиента (или административной консоли) команды.
Метод subsribe также возвращает deferred объект. В примере, приведенном ниже, по аналогии с методом
device_save, устанавливается callback функция, в которой на сервер отправляется сообщение от имени
обслуживаемого маршрутизатором устройства.
def on_connected(self):
def on_subscribe(result) :
def on_subscribed(result):
self.factory.notify(“notification_name”, {‘p1’:1}, device_id = self.DEVICE_INFO.id, self.DEVICE_INFO.ke
self.factory.subscribe(self.DEVICE_INFO.id, self.DEVICE_INFO.key).addCallback(on_subscribe)
self.factory.device_save(self.DEVICE_INFO).addCallbacks(on_subscribe, on_failed)
DeviceHive библиотека для микроконтроллеров реализует подключение DeviceHive через бинарный протокол.
Библиотека, написана на Cи и с незначительными изменениями, может быть использована со многими
микроконтроллерами, такими как Atmel или Microchip. Рассмотрим какие шаги необходимо пройти, чтобы добавить
DeviceHive к встраиваемым проектам:
-необходимо скачать исходный код DeviceHive фрейморка;
-добавить следующие файлы в проект: $uCdeviceSourceSrcDeviceHiveEngine.c, $uCDeviceSourceInclude*.*
- объявить и выполнить функцию int SendBytes (unsigned char *buf, int length), которая посылает байт;
- объявить и выполнить функцию int ReceiveBytes (unsigned char *buf, int length), которая получает байт;
- скомпилировать проект и загрузить его в микроконтроллер.
DEVICEHIVE СИ БИБЛИОТЕКА ДЛЯ МИКРОКОНТРОЛЛЕРОВ
Бинарный протокол DeviceHive используется для передачи
сообщений между различными устройствами нижнего уровня и шлюзом.
В DeviceHive архитектуре, шлюз выступает в качестве прокси-сервера
между устройствами и DeviceHive облаком и преобразует двоичные
сообщения в REST API вызовы и наоборот.
Устройства, подключенные к шлюзу, представляют собой очень простое
оборудование, не реализуют TCP/IP стек самостоятельно и не имеют
прямого доступа к Интернет.
Для маршрутизации сообщений от/в облако эти устройства
подключаются к шлюзу, используя различные интерфейсы, такие как
COM, SPI или ZigBee и используют бинарный протокол обмена данными
с различными событиями в системе.
Бинарный протокол DeviceHive
DeviceHive Raspberry Pi Discovery Platform (Platform 1)
Датчики и модули Platform 1 и Platform 2
Датчик/Модуль Интерфейс Описание Кол-во
DS18B20 1-Wire Цифровой термометр с программируемым разрешением 2
DHT-11 Single Wire Цифровой датчик температуры и влажности 1
DS-1307 I2C Часы реального времени 1
LM-75 I2C Цифровой датчик температуры с контролем диапазона 1
MCP23008 I2C Расширитель портов ввода-вывода 4
MCP23S17 SPI Расширитель портов ввода-вывода 2
Xbee RS232 Модуль беспроводной связи по протоколу ZigBee 1
Piezo PWM Пьезоизлучатель звукового диапазона 1
Photosensor GPIO Датчик освещенности (фоторезистор) 1
LEDs GPIO Светодиоды 13
Buttons GPIO Набор кнопок (клавиатура) 12
Relays GPIO Блок реле 3
IR receiver GPIO Приемник ИК-излучения 1
IR transmitter GPIO ИК-передатчик 1

Más contenido relacionado

Similar a IT talk Odessa. Device Hive

Hivext – облачная платформа для быстрой разработки интернет приложений
Hivext – облачная платформа для быстрой разработки  интернет приложений Hivext – облачная платформа для быстрой разработки  интернет приложений
Hivext – облачная платформа для быстрой разработки интернет приложений
guest800050
 
C# Web. Занятие 03.
C# Web. Занятие 03.C# Web. Занятие 03.
C# Web. Занятие 03.
Igor Shkulipa
 
UAFPUG6 - PureMVC
UAFPUG6 - PureMVCUAFPUG6 - PureMVC
UAFPUG6 - PureMVC
mandrew182
 
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha DmitryUafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Max Rozdobudko
 
Flash Media Server
Flash Media ServerFlash Media Server
Flash Media Server
dinosaur
 

Similar a IT talk Odessa. Device Hive (20)

Hivext 04.2010
Hivext 04.2010Hivext 04.2010
Hivext 04.2010
 
Hivext – облачная платформа для быстрой разработки интернет приложений
Hivext – облачная платформа для быстрой разработки  интернет приложений Hivext – облачная платформа для быстрой разработки  интернет приложений
Hivext – облачная платформа для быстрой разработки интернет приложений
 
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineHTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
 
C# Web. Занятие 03.
C# Web. Занятие 03.C# Web. Занятие 03.
C# Web. Занятие 03.
 
Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"
 
Сервлеты
СервлетыСервлеты
Сервлеты
 
HTML 5
HTML 5HTML 5
HTML 5
 
Vpn
VpnVpn
Vpn
 
Auth methods lomalkin
Auth methods lomalkinAuth methods lomalkin
Auth methods lomalkin
 
МАИ, Сети ЭВМ, Лекция №4
МАИ, Сети ЭВМ, Лекция №4МАИ, Сети ЭВМ, Лекция №4
МАИ, Сети ЭВМ, Лекция №4
 
Лекция 1. Модель OSI.
Лекция 1. Модель OSI.Лекция 1. Модель OSI.
Лекция 1. Модель OSI.
 
Как защитить сеть от web-угроз с помощью Cisco WSA (ex IronPort)
Как защитить сеть от web-угроз с помощью Cisco WSA (ex IronPort)Как защитить сеть от web-угроз с помощью Cisco WSA (ex IronPort)
Как защитить сеть от web-угроз с помощью Cisco WSA (ex IronPort)
 
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet APIПротокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
 
Present.pps
Present.ppsPresent.pps
Present.pps
 
Present.pps
Present.ppsPresent.pps
Present.pps
 
C-S
C-SC-S
C-S
 
UAFPUG6 - PureMVC
UAFPUG6 - PureMVCUAFPUG6 - PureMVC
UAFPUG6 - PureMVC
 
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha DmitryUafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
 
PureMVC and Papervision
PureMVC and PapervisionPureMVC and Papervision
PureMVC and Papervision
 
Flash Media Server
Flash Media ServerFlash Media Server
Flash Media Server
 

Más de Marina Peregud

Эллина Азадова "Что за зверь Usability... и как его протестировать"
Эллина Азадова "Что за зверь Usability... и как его протестировать"Эллина Азадова "Что за зверь Usability... и как его протестировать"
Эллина Азадова "Что за зверь Usability... и как его протестировать"
Marina Peregud
 
Антон Бойко "Разделяй и властвуй — набор практик для построения масштабируемо...
Антон Бойко "Разделяй и властвуй — набор практик для построения масштабируемо...Антон Бойко "Разделяй и властвуй — набор практик для построения масштабируемо...
Антон Бойко "Разделяй и властвуй — набор практик для построения масштабируемо...
Marina Peregud
 
Александр Демура "Сферы применения разных типов менеджмента"
Александр Демура "Сферы применения разных типов менеджмента"Александр Демура "Сферы применения разных типов менеджмента"
Александр Демура "Сферы применения разных типов менеджмента"
Marina Peregud
 
Михаил Сердюк "Приятности Руби или Зачем писать красивый код"
Михаил Сердюк "Приятности Руби или Зачем писать красивый код"Михаил Сердюк "Приятности Руби или Зачем писать красивый код"
Михаил Сердюк "Приятности Руби или Зачем писать красивый код"
Marina Peregud
 

Más de Marina Peregud (6)

IT talk #18 Odessa: Alexey Rybakov "Android TV"
IT talk #18 Odessa: Alexey Rybakov "Android TV"IT talk #18 Odessa: Alexey Rybakov "Android TV"
IT talk #18 Odessa: Alexey Rybakov "Android TV"
 
Автоматическое тестирование и с чем его едят
Автоматическое тестирование и с чем его едятАвтоматическое тестирование и с чем его едят
Автоматическое тестирование и с чем его едят
 
Эллина Азадова "Что за зверь Usability... и как его протестировать"
Эллина Азадова "Что за зверь Usability... и как его протестировать"Эллина Азадова "Что за зверь Usability... и как его протестировать"
Эллина Азадова "Что за зверь Usability... и как его протестировать"
 
Антон Бойко "Разделяй и властвуй — набор практик для построения масштабируемо...
Антон Бойко "Разделяй и властвуй — набор практик для построения масштабируемо...Антон Бойко "Разделяй и властвуй — набор практик для построения масштабируемо...
Антон Бойко "Разделяй и властвуй — набор практик для построения масштабируемо...
 
Александр Демура "Сферы применения разных типов менеджмента"
Александр Демура "Сферы применения разных типов менеджмента"Александр Демура "Сферы применения разных типов менеджмента"
Александр Демура "Сферы применения разных типов менеджмента"
 
Михаил Сердюк "Приятности Руби или Зачем писать красивый код"
Михаил Сердюк "Приятности Руби или Зачем писать красивый код"Михаил Сердюк "Приятности Руби или Зачем писать красивый код"
Михаил Сердюк "Приятности Руби или Зачем писать красивый код"
 

IT talk Odessa. Device Hive

  • 1.
  • 2. От Всемирной паутины к Интернету вещей В глобальной сети массовыми станут взаимодействия не только людей между собой, но и человека с устройствами, а также полностью “роботизированные” обмены данными устройство-устройство 2005 г. 2014 г.2010 г. 2030 г. Количество подключенных устройств 10 млрд. Количество подключенных устройств 30 млрд. Количество пользователей 972 млн. Количество пользователей 2,98 млрд. Количество пользователей 2,4 млрд.
  • 3.
  • 4.
  • 5. Одно решение – множество платформ Как минимум три: device, cloud, app Множество платформ – различные протоколы Binary, RESTful, MQTT, etc Множество платформ – усложнение разработки Logging, profiling, authentication/authorization
  • 6. Осень 2012 года – запуск проекта DeviceHive Платформа с открытым исходным кодом, использующая сетевые и облачные технологии. Позволяет реализовывать решения для обмена информацией между устройствами по принципу M2M. •облачный API •административный портал •набор компонентов и описаний – гибкая, масштабируемая, простая в применении платформа. Использование DeviceHive в разработке M2M-систем: •экономит время, •смещает фокус разработки на основной функционал системы. Благодаря DeviceHive построение M2M-решений становится простым и прозрачным процессом
  • 7. Open source проект – доступен широкой аудитории. Широкий спектр использования в проектах: безопасность, экологически чистые технологии, умный дом, удаленное управление объектами, логистика. Если установить все компоненты DeviceHive, то с помощью легко настраиваемого API возможно организовать очередь и доставку команд между устройствами и клиентскими приложениями. Скачать все компоненты прямо с сайта – http://www.devicehive.com/ С примерами использования, публикациями экспертов и евангелистов
  • 8. Устройство – это подключенное к сети «железо», использующее бинарный или RESTful протокол. Модуль DeviceHive для устройства обеспечивает его подключение к сети и отправку команд/нотификаций. Доступны Framework библиотеки для следующих платформ: .NET -C#, C++, Python, iOS, Android, Си для MCU. Шлюз – это мост между устройствами и сетью передачи данных облака. Он может принимать или отправлять сообщения между устройствами и сетью. Типовое применение шлюза – это обеспечение обмена данными между бинарным и RESTful протоколами. Доступны Framework библиотеки для следующих платформ: С++, .NET - C# и Python. Сервер – это ядро обработки сообщений. Он может находится как в облаке, так и в локальной сети. Основные задачи сервера – это обеспечение обмена сообщениями между устройствами, поддержка сети и прав доступа пользователей. Доступны Framework библиотеки для следующих платформ: .NET - C#, Java. Клиент – это программное обеспечение, например веб-приложение или мобильный клиент, которое подключается к DeviceHive серверу для получения информации или контроля над устройствами. Доступны Framework библиотеки для следующих платформ: .NET - C#, iOS, Android, JavaScript.
  • 9. Библиотеки DeviceHive для различных технологий
  • 10. -Playground -Docker -JuJu Charms - Windows MSI Installer DeviceHive Server Deployment
  • 11. Devicehive API является центральной частью фреймфорка, в котором различные компоненты взаимодействуют друг с другом. API обеспечивает доступ к информации о зарегистрированных в системе компонентах, и позволяет им обмениваться сообщениями в режиме реального времени. Варианты использования Есть три типа элементов, взаимодействующих с Devicehive API Устройство – это элемент, на котором функционирует микрокод, и он взаимодействует с API, в следующих случаях: при запуске, передавая уникальный идентификатор, отображают имя и другую метаинформацию, устройство отправляет уведомления с произвольным форматом содержимого для уведомления других компонентов об изменениях в окружении этого устройства, слушает команды, поступающие от других компонентов и должным образом выполняет их. Клиент – это приложение, которое используется для контроля устройств и/или управления ими. Это может быть пользовательский интерфейс, или полностью автоматизированное программное обеспечение, которое управляет всей сетью устройств. Клиенты могут взаимодействовать с API в следующих случаях: опрашивает все устройства в сети, просматривает их статус и другую метаинформацию, клиент слушает нотификации устройств и обрабатывает их соответствующим образом, клиент отправляет команды устройствам, чтобы сработала логика на стороне устройства. Администратор контролирует все аспекты окружения, с полным доступом к API. Как правило, администраторы должны использовать эту API в следующих случаях: создает и управляет пользователями API (клиентами и другими администраторами), администратор создает и управляет сетями устройств и связывает пользователей с ними, следит за устройствами и контролирует все полученные и отправленные данные. Devicehive API
  • 12. Маршрутизация в DeviceHive Одна из основных особенностей сервиса – это возможность подключения устройств с клиентами в режиме реального времени. На стороне сервера это достигается путем маршрутизации новых команд и уведомлений их получателям с минимальными задержками. Есть три способа получения входящих сообщений для клиентов API: -Polling: клиент периодически запрашивает сервер для получения новых команд и уведомлений. Запрос должен содержать параметр waitTimeout = 0, чтобы отключить ожидание на сервере. -Long Polling: клиент делает запрос к серверу, но сервер отвечает только тогда, когда новое сообщение доступно, или, если тайм-аут ожидания истек (указывается в параметре waitTimeout). Такой подход, как правило, более эффективный и минимизирует задержки при приеме сообщения. -WebSocket: отдельный WebSocket API позволяет клиентам открыть постоянные соединения с сервером, подписавшись на конкретные команды или уведомлений, а затем получать сообщения от этого сервера.
  • 13. Аутентификация API поддерживает два типа аутентификации: для пользователей и устройств. В аутентификации пользователей с помощью HTTP Basic Authentication доступ предоставляется на основании аутентификации в роли пользователя (клиента или администратора). Устройство аутентифицируется, передавая два пользовательских HTTP заголовка: - Auth-DeviceID: Уникальный идентификатор устройства. -Auth-DeviceKey: Ключ аутентификации устройств. Уникальный идентификатор устройства и ключ аутентификации задаются при регистрации устройства.
  • 14. <html> <head> <script> function turnOnOff(onOff) { var xmlhttp = new XMLHttpRequest(); xmlhttp.open('POST', 'http://nn7ХХХ.pg.devicehive.com/api/device/82d1cfb9-43f8-4a22-b708-45bb4f68ae54/command', true); xmlhttp.setRequestHeader("Authorization", "Basic " + btoa(«********:********")); xmlhttp.setRequestHeader("Content-type", "application/json; charset=UTF-8"); var myjson = {}; myjson["command"]='UpdateLedState'; myjson["parameters"]={}; myjson["parameters"]["equipment"]="LED"; myjson["parameters"]["state"]=onOff; xmlhttp.send(JSON.stringify(myjson)); xmlhttp.onreadystatechange = function() { if(xmlhttp.readyState == 4 && (xmlhttp.status < 200 || xmlhttp.status> 299)) alert('Last request return ' + xmlhttp.status + ' ' + xmlhttp.responseText); } } </script> </head> <body> <input type=button value=On onclick="turnOnOff('1')"> <input type=button value=Off onclick="turnOnOff('0')"> </body> </html> Пример страницы-клиента
  • 15. JavaScript библиотека является простой оберткой вокруг DeviceHive RESTful протокола, который включает в себя набор методов для доступа к соответствующим ресурсам DeviceHive. Код библиотеки предоставляет все необходимые параметры для каждого вызова, такие как метод HTTP, URL, параметры запроса, тип содержимого и проверки подлинности. Все методы библиотеки возвращают Deferred объекты, таким образом, клиентское приложение может использовать done, fail, always и другие методы Deferred объектов и для обработки асинхронно возвращаемых результатов использовать обработчик done. Первым параметром в этот обработчик будет передан JavaScript объект, содержащий ответ от сервера. Клиентская библиотека также реализует механизм постоянного получения нотификаций от устройств с помощью WebSocket или HTTP long-polling механизмов, поддерживаемых DeviceHive. Для того, чтобы обеспечить эту функциональность, библиотека использует концепцию каналов для передачи сообщений между сервером и клиентом. Клиенты просто открывают канал, подписываются на нотификации, а затем обрабатывают их в соответствующих callback методах. Javascript библиотека DeviceHive
  • 16. Создайте новый экземпляр DHClient или DHDevice. // Создание экземпляра DHClient, указав логин и пароль в качестве аутентификационных параметров var dhClient = new DHClient("http://nnXXXX.pg.devicehive.com/api", "login", "password"); // Создание экземпляра DHClient, указав ключ доступа в качестве аутентификационных параметров var dhClient = new DHClient("http://nnXXXX.pg.devicehive.com/api", "AccessKeyExampleAccessKeyExampleAccessKeyEx="); // Создание экземпляра DHDevice, указав device id и device key в качестве аутентификационных параметров var dhDevice = new HDevice("http://nnXXXX.pg.devicehive.com/api", "someDeviceId_123-456", "someCustomDeviceKey"); // Создание экземпляра DHDevice, указав device id и ключ доступа в качестве аутентификационных параметров var dhDevice = new HDevice("http://nnXXXX.pg.devicehive.com/api", "someDeviceId_123456", "AccessKeyExampleAccessKeyExampleAccessKeyEx="); или, если вы хотите использовать Deferreds, используйте методы из объектов JQuery var dhDevice = $.dhDevice("http://nnXXXX.pg.devicehive.com/api", "login", "password"); После создания нового экземпляра вы сможете получить соответствующую информацию от DeviceHive облака dhClient.getDevices(function(err, res){ .... }); Также вы можете зарегистрироваться и обновлять данные в облаке. Идентификатор устройства будет установлен в ID устройство, указанного при создании экземпляра DHDevice dhDevice.registerDevice({name: "testDevice"}, function(err, res){ .... }); Первый аргумент в этом callback – это ошибка, а второй аргумент – результат операции. Ошибка будет null, если ошибок нет. Использование Javascript DeviceHive библиотеки
  • 17. Python библиотека DeviceHive Python библиотека DeviceHive построена на основе пакета Twisted. Её основное назначение – предоставить разработчику необходимый инструментарий, каркас для построения, специфичного для конкретного приложения, DeviceHive маршрутизатора, но так же может быть использована для программирования устройств и клиентов DeviceHive. Библиотека организует логический канал связи для передачи команд, отчётов о выполнении команд и информационных сообщений. При этом на прикладном уровне могут быть использованы либо Long-polling HTTP протокол, либо WebSocket. Библиотека абстрагирует пользователя от используемого протокола, позволяя прозрачно, либо даже автоматически, переключаться межу ними, не требуя при этом внесения изменений в логику приложения. Следующее программное обеспечение должно быть установлено на Вашем компьютере для работы библиотеки: Python 2.7 http://python.org Twisted http://twistedmatrix.com Чтобы установить Python библиотеку DeviceHive, необходимо запустить следующую команду: python setup.py install Если пакет setuptools установлен на Вашем компьютере, то команда, указанная выше, автоматически установит библиотеку DeviceHive и все её зависимости. Так же Вы можете установить необходимое программное обеспечение на новой raspbian системе, выполнив следующую команду: sudo apt-get install python-pip python-dev sudo apt-get install python-twisted
  • 18. Пример создания DeviceHive приложения на Python from twisted.internet import reactor from zope.interface import implements import devicehive import devicehive.interfaces import devicehive.poll import devicehive.device.ws Эти строки импортируют большинство модулей, которые могут понадобиться Вам при реализации DeviceHive приложения. Определения публично доступных интерфейсов находятся в модуле devicehive.interfaces. Их типовая реализация определена в модуле devicehive. Несмотря на то, что обычно python программы используют утиную типизацию, мы описали базовые интерфейсы объектов в коде модуля, для того, чтобы эти определения можно было использовать в качестве справочного материала. Основной объект, который будет описываться пользователем библиотеки, должен реализовать интерфейс devicehive.interfaces.IProtoHandler. Этот объект должен предоставлять реализацию для всех определённых интерфейсом методов, даже если их использование не предполагается. Особое внимание стоит уделить реализации методов on_connected и on_command. Метод on_connected будет вызван, когда библиотека установит соединение с DeviceHive ервером. def on_connected(self): self.factory.device_save(self.DEVICE_INFO) В этом методе вызывается метод device_save – регистрирующий устройства на сервере DeviceHive. В метод device_save передаётся переменная DEVICE_INFO, которая должна соответствовать интерфейсу devicehive.interfaces.IDeviceInfo. Вы можете определить свою собственную реализацию этого интерфейса или использовать класс devicehive.DeviceInfoClass. Поскольку регистрационная информация устройства в этом примере является статической и никогда не будет изменяться, мы можем создать объект DEVICE_INFO следующим образом:
  • 19. Обьект DEVICE_INFO def generate_info(): return devicehive.DeviceInfo( id = '0204eede-2297-11e2-882c-e0cb4eb92129', key = 'Exmaple Device Key’, name = 'DeviceHive Python Example’, status = ‘Online', network = devicehive.Network( key = 'Network Name', name = 'Network Name', descr = 'Network Description'), device_class = devicehive.DeviceClass( name = 'Example Network’, version = ‘1.0', is_permanent = False ), equipment = [devicehive.Equipment( name = ‘ExampleEquipment', code = ‘ExampleCode', type = ‘ExampleType')]) DEVICE_INFO = generate_info()
  • 20. Метод notify фабрики может быть вызван и до установления соединения с сервером, но сообщения будут отправлены только после успешного соединения. Так же нужно правильное указание идентификатора устройства – это обязанность программиста. Далее Вам необходимо создать экземпляр своего объекта-обработчика. Используя одну из доступных в библиотеке фабрик создать транспорт и запустить реактор. Например: if __name__ == ‘__main__’: handler = YourHandlerObject() transport = devicehive.auto.AutoFactory(handler) transport.connect(devicehive_url) reactor.run() Здесь используется AutoFactory. Она автоматически обнаруживает доступный протокол DeviceHive. Далее код вызывает метод transport.connect, принимающий в качестве первого аргумента URL к серверу DeviceHive и фабрику протокола в качестве второго параметра. Если это необходимо, можно заменить AutoFactory на фабрику конкретного протокола: transport = devicehive.device.ws.WebSocketFactory(handler) transport.connect('ws://pg.devicehive.com:8010') Другая альтернатива – фабрика PollFactory из модуля devicehive.poll. Пример создания DeviceHive приложения на Python
  • 21. Поскольку регистрация устройства – относительно длительный процесс, библиотека делает это в асинхронном режиме, и возвращает Deferred объект, при этом не блокируя поток выполнения программы. Deferred объекты определены в Twisted таким образом, что с ними можно ассоциировать callback функции. В примере, приведенном ниже, для этого используется метод addCallbacks, первым аргументом передаётся функция, которая будет выполнена в случае успешного завершения процесса регистрации, а вторым – в случае ошибки. def on_connected(self): def on_subscribe(result) : self.factory.subscribe( self.DEVICE_INFO.id, self.DEVICE_INFO.key) def on_failed(reason): log.err('Failed to save device {0}. Reason: {1}.'.format(self.DEVICE_INFO, reason)) self.factory.device_save(self.DEVICE_INFO).addCallbacks(on_subscribe, on_failed) В простых случаях, сразу же после успешной регистрации устройства в сети, объект должен сигнализировать DeviceHive серверу о том, что он получает передаваемые от клиента (или административной консоли) команды. Метод subsribe также возвращает deferred объект. В примере, приведенном ниже, по аналогии с методом device_save, устанавливается callback функция, в которой на сервер отправляется сообщение от имени обслуживаемого маршрутизатором устройства. def on_connected(self): def on_subscribe(result) : def on_subscribed(result): self.factory.notify(“notification_name”, {‘p1’:1}, device_id = self.DEVICE_INFO.id, self.DEVICE_INFO.ke self.factory.subscribe(self.DEVICE_INFO.id, self.DEVICE_INFO.key).addCallback(on_subscribe) self.factory.device_save(self.DEVICE_INFO).addCallbacks(on_subscribe, on_failed)
  • 22. DeviceHive библиотека для микроконтроллеров реализует подключение DeviceHive через бинарный протокол. Библиотека, написана на Cи и с незначительными изменениями, может быть использована со многими микроконтроллерами, такими как Atmel или Microchip. Рассмотрим какие шаги необходимо пройти, чтобы добавить DeviceHive к встраиваемым проектам: -необходимо скачать исходный код DeviceHive фрейморка; -добавить следующие файлы в проект: $uCdeviceSourceSrcDeviceHiveEngine.c, $uCDeviceSourceInclude*.* - объявить и выполнить функцию int SendBytes (unsigned char *buf, int length), которая посылает байт; - объявить и выполнить функцию int ReceiveBytes (unsigned char *buf, int length), которая получает байт; - скомпилировать проект и загрузить его в микроконтроллер. DEVICEHIVE СИ БИБЛИОТЕКА ДЛЯ МИКРОКОНТРОЛЛЕРОВ
  • 23. Бинарный протокол DeviceHive используется для передачи сообщений между различными устройствами нижнего уровня и шлюзом. В DeviceHive архитектуре, шлюз выступает в качестве прокси-сервера между устройствами и DeviceHive облаком и преобразует двоичные сообщения в REST API вызовы и наоборот. Устройства, подключенные к шлюзу, представляют собой очень простое оборудование, не реализуют TCP/IP стек самостоятельно и не имеют прямого доступа к Интернет. Для маршрутизации сообщений от/в облако эти устройства подключаются к шлюзу, используя различные интерфейсы, такие как COM, SPI или ZigBee и используют бинарный протокол обмена данными с различными событиями в системе. Бинарный протокол DeviceHive
  • 24. DeviceHive Raspberry Pi Discovery Platform (Platform 1)
  • 25. Датчики и модули Platform 1 и Platform 2 Датчик/Модуль Интерфейс Описание Кол-во DS18B20 1-Wire Цифровой термометр с программируемым разрешением 2 DHT-11 Single Wire Цифровой датчик температуры и влажности 1 DS-1307 I2C Часы реального времени 1 LM-75 I2C Цифровой датчик температуры с контролем диапазона 1 MCP23008 I2C Расширитель портов ввода-вывода 4 MCP23S17 SPI Расширитель портов ввода-вывода 2 Xbee RS232 Модуль беспроводной связи по протоколу ZigBee 1 Piezo PWM Пьезоизлучатель звукового диапазона 1 Photosensor GPIO Датчик освещенности (фоторезистор) 1 LEDs GPIO Светодиоды 13 Buttons GPIO Набор кнопок (клавиатура) 12 Relays GPIO Блок реле 3 IR receiver GPIO Приемник ИК-излучения 1 IR transmitter GPIO ИК-передатчик 1