SlideShare a Scribd company logo
1 of 25
Download to read offline
От Всемирной паутины к Интернету вещей
В глобальной сети массовыми станут взаимодействия не только людей между собой, но и
человека с устройствами, а также полностью “роботизированные” обмены данными
устройство-устройство
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.key)    
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

More Related Content

Viewers also liked

Игорь Савка "Как выжить в безнадежном проекте. Личный опыт"
Игорь Савка "Как выжить в безнадежном проекте. Личный опыт"Игорь Савка "Как выжить в безнадежном проекте. Личный опыт"
Игорь Савка "Как выжить в безнадежном проекте. Личный опыт"DataArt
 
автоматизированное тестирование. С чего начать Part2
автоматизированное тестирование. С чего начать Part2автоматизированное тестирование. С чего начать Part2
автоматизированное тестирование. С чего начать Part2DataArt
 
«QA Community: что делать с людьми, которые хотят работать побольше» Евгений ...
«QA Community: что делать с людьми, которые хотят работать побольше» Евгений ...«QA Community: что делать с людьми, которые хотят работать побольше» Евгений ...
«QA Community: что делать с людьми, которые хотят работать побольше» Евгений ...DataArt
 
«Особенности разработки 2D игры в Unity на примере проекта “Маша и Медведь”»....
«Особенности разработки 2D игры в Unity на примере проекта “Маша и Медведь”»....«Особенности разработки 2D игры в Unity на примере проекта “Маша и Медведь”»....
«Особенности разработки 2D игры в Unity на примере проекта “Маша и Медведь”»....DataArt
 
Андрей Беляев - 20 лет Java
Андрей Беляев - 20 лет JavaАндрей Беляев - 20 лет Java
Андрей Беляев - 20 лет JavaDataArt
 
«Экстремальный менеджмент», Лидия Котлярова, Plarium
«Экстремальный менеджмент», Лидия Котлярова, Plarium«Экстремальный менеджмент», Лидия Котлярова, Plarium
«Экстремальный менеджмент», Лидия Котлярова, PlariumDataArt
 
Андраш Густи «Интерфейсы, которые вызывают привыкание, или Как перепрошить по...
Андраш Густи «Интерфейсы, которые вызывают привыкание, или Как перепрошить по...Андраш Густи «Интерфейсы, которые вызывают привыкание, или Как перепрошить по...
Андраш Густи «Интерфейсы, которые вызывают привыкание, или Как перепрошить по...DataArt
 
Slides coder dojoparma
Slides coder dojoparmaSlides coder dojoparma
Slides coder dojoparmaCoderdojoParma
 
sistema de gestión de contenidos
sistema de gestión de contenidossistema de gestión de contenidos
sistema de gestión de contenidosDiego Rojas
 
Андрей Вересов - .NET Reflection
Андрей Вересов - .NET ReflectionАндрей Вересов - .NET Reflection
Андрей Вересов - .NET ReflectionDataArt
 
Thriller powerpoint finished
Thriller powerpoint finishedThriller powerpoint finished
Thriller powerpoint finishedAbbey Cotterill
 
A Journey to Power Intelligent IT - Big Data Employed
A Journey to Power Intelligent IT - Big Data EmployedA Journey to Power Intelligent IT - Big Data Employed
A Journey to Power Intelligent IT - Big Data EmployedMohamed Sohail
 
8 Things Business Owners Wish They Knew
8 Things Business Owners Wish They Knew8 Things Business Owners Wish They Knew
8 Things Business Owners Wish They KnewUrbanBound
 

Viewers also liked (16)

Игорь Савка "Как выжить в безнадежном проекте. Личный опыт"
Игорь Савка "Как выжить в безнадежном проекте. Личный опыт"Игорь Савка "Как выжить в безнадежном проекте. Личный опыт"
Игорь Савка "Как выжить в безнадежном проекте. Личный опыт"
 
автоматизированное тестирование. С чего начать Part2
автоматизированное тестирование. С чего начать Part2автоматизированное тестирование. С чего начать Part2
автоматизированное тестирование. С чего начать Part2
 
«QA Community: что делать с людьми, которые хотят работать побольше» Евгений ...
«QA Community: что делать с людьми, которые хотят работать побольше» Евгений ...«QA Community: что делать с людьми, которые хотят работать побольше» Евгений ...
«QA Community: что делать с людьми, которые хотят работать побольше» Евгений ...
 
«Особенности разработки 2D игры в Unity на примере проекта “Маша и Медведь”»....
«Особенности разработки 2D игры в Unity на примере проекта “Маша и Медведь”»....«Особенности разработки 2D игры в Unity на примере проекта “Маша и Медведь”»....
«Особенности разработки 2D игры в Unity на примере проекта “Маша и Медведь”»....
 
Андрей Беляев - 20 лет Java
Андрей Беляев - 20 лет JavaАндрей Беляев - 20 лет Java
Андрей Беляев - 20 лет Java
 
«Экстремальный менеджмент», Лидия Котлярова, Plarium
«Экстремальный менеджмент», Лидия Котлярова, Plarium«Экстремальный менеджмент», Лидия Котлярова, Plarium
«Экстремальный менеджмент», Лидия Котлярова, Plarium
 
Андраш Густи «Интерфейсы, которые вызывают привыкание, или Как перепрошить по...
Андраш Густи «Интерфейсы, которые вызывают привыкание, или Как перепрошить по...Андраш Густи «Интерфейсы, которые вызывают привыкание, или Как перепрошить по...
Андраш Густи «Интерфейсы, которые вызывают привыкание, или Как перепрошить по...
 
Slides coder dojoparma
Slides coder dojoparmaSlides coder dojoparma
Slides coder dojoparma
 
Pen pc
Pen pcPen pc
Pen pc
 
sistema de gestión de contenidos
sistema de gestión de contenidossistema de gestión de contenidos
sistema de gestión de contenidos
 
Music video regulations
Music video regulationsMusic video regulations
Music video regulations
 
Sam mendes
Sam mendesSam mendes
Sam mendes
 
Андрей Вересов - .NET Reflection
Андрей Вересов - .NET ReflectionАндрей Вересов - .NET Reflection
Андрей Вересов - .NET Reflection
 
Thriller powerpoint finished
Thriller powerpoint finishedThriller powerpoint finished
Thriller powerpoint finished
 
A Journey to Power Intelligent IT - Big Data Employed
A Journey to Power Intelligent IT - Big Data EmployedA Journey to Power Intelligent IT - Big Data Employed
A Journey to Power Intelligent IT - Big Data Employed
 
8 Things Business Owners Wish They Knew
8 Things Business Owners Wish They Knew8 Things Business Owners Wish They Knew
8 Things Business Owners Wish They Knew
 

Similar to Олег Крут (DataArt) "Что такое интернет вещей и как с ним работать"

Лекции и задания по рнр
Лекции и задания по рнрЛекции и задания по рнр
Лекции и задания по рнрRauan Ibraikhan
 
SignalR
SignalRSignalR
SignalRmstDe3
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.Igor Shkulipa
 
Мировые информационные ресурсы. Лекция 2
Мировые информационные ресурсы. Лекция 2Мировые информационные ресурсы. Лекция 2
Мировые информационные ресурсы. Лекция 2Dmitriy Krukov
 
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineHTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineVolha Banadyseva
 
C# Web. Занятие 01.
C# Web. Занятие 01.C# Web. Занятие 01.
C# Web. Занятие 01.Igor Shkulipa
 
Интеграция мобильных приложений с Window azure
Интеграция мобильных приложений с Window azureИнтеграция мобильных приложений с Window azure
Интеграция мобильных приложений с Window azureИлья Родин
 
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet APIПротокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet APIEkaterina Kuchinskaya
 
Hivext – облачная платформа для быстрой разработки интернет приложений
Hivext – облачная платформа для быстрой разработки  интернет приложений Hivext – облачная платформа для быстрой разработки  интернет приложений
Hivext – облачная платформа для быстрой разработки интернет приложений guest800050
 
Лекция 1. Модель OSI.
Лекция 1. Модель OSI.Лекция 1. Модель OSI.
Лекция 1. Модель OSI.Alexey Furmanov
 
Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"Fwdays
 
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.Alexander Frolov
 
C# Web. Занятие 03.
C# Web. Занятие 03.C# Web. Занятие 03.
C# Web. Занятие 03.Igor Shkulipa
 

Similar to Олег Крут (DataArt) "Что такое интернет вещей и как с ним работать" (20)

Лекции и задания по рнр
Лекции и задания по рнрЛекции и задания по рнр
Лекции и задания по рнр
 
SignalR
SignalRSignalR
SignalR
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.
 
Мировые информационные ресурсы. Лекция 2
Мировые информационные ресурсы. Лекция 2Мировые информационные ресурсы. Лекция 2
Мировые информационные ресурсы. Лекция 2
 
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineHTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
 
HTML 5
HTML 5HTML 5
HTML 5
 
Сервлеты
СервлетыСервлеты
Сервлеты
 
C# Web. Занятие 01.
C# Web. Занятие 01.C# Web. Занятие 01.
C# Web. Занятие 01.
 
Интеграция мобильных приложений с Window azure
Интеграция мобильных приложений с Window azureИнтеграция мобильных приложений с Window azure
Интеграция мобильных приложений с Window azure
 
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet APIПротокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
 
Vpn
VpnVpn
Vpn
 
Hivext 04.2010
Hivext 04.2010Hivext 04.2010
Hivext 04.2010
 
Hivext – облачная платформа для быстрой разработки интернет приложений
Hivext – облачная платформа для быстрой разработки  интернет приложений Hivext – облачная платформа для быстрой разработки  интернет приложений
Hivext – облачная платформа для быстрой разработки интернет приложений
 
Лекция 1. Модель OSI.
Лекция 1. Модель OSI.Лекция 1. Модель OSI.
Лекция 1. Модель OSI.
 
Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"
 
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
 
C# Web. Занятие 03.
C# Web. Занятие 03.C# Web. Занятие 03.
C# Web. Занятие 03.
 
Present.pps
Present.ppsPresent.pps
Present.pps
 
Present.pps
Present.ppsPresent.pps
Present.pps
 
C-S
C-SC-S
C-S
 

More from DataArt

DataArt Custom Software Engineering with a Human Approach
DataArt Custom Software Engineering with a Human ApproachDataArt Custom Software Engineering with a Human Approach
DataArt Custom Software Engineering with a Human ApproachDataArt
 
DataArt Healthcare & Life Sciences
DataArt Healthcare & Life SciencesDataArt Healthcare & Life Sciences
DataArt Healthcare & Life SciencesDataArt
 
DataArt Financial Services and Capital Markets
DataArt Financial Services and Capital MarketsDataArt Financial Services and Capital Markets
DataArt Financial Services and Capital MarketsDataArt
 
About DataArt HR Partners
About DataArt HR PartnersAbout DataArt HR Partners
About DataArt HR PartnersDataArt
 
Event management в IT
Event management в ITEvent management в IT
Event management в ITDataArt
 
Digital Marketing from inside
Digital Marketing from insideDigital Marketing from inside
Digital Marketing from insideDataArt
 
What's new in Android, Igor Malytsky ( Google Post I|O Tour)
What's new in Android, Igor Malytsky ( Google Post I|O Tour)What's new in Android, Igor Malytsky ( Google Post I|O Tour)
What's new in Android, Igor Malytsky ( Google Post I|O Tour)DataArt
 
DevOps Workshop:Что бывает, когда DevOps приходит на проект
DevOps Workshop:Что бывает, когда DevOps приходит на проектDevOps Workshop:Что бывает, когда DevOps приходит на проект
DevOps Workshop:Что бывает, когда DevOps приходит на проектDataArt
 
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArtIT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArtDataArt
 
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
 «Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han... «Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...DataArt
 
Communication in QA's life
Communication in QA's lifeCommunication in QA's life
Communication in QA's lifeDataArt
 
Нельзя просто так взять и договориться, или как мы работали со сложными людьми
Нельзя просто так взять и договориться, или как мы работали со сложными людьмиНельзя просто так взять и договориться, или как мы работали со сложными людьми
Нельзя просто так взять и договориться, или как мы работали со сложными людьмиDataArt
 
Знакомьтесь, DevOps
Знакомьтесь, DevOpsЗнакомьтесь, DevOps
Знакомьтесь, DevOpsDataArt
 
DevOps in real life
DevOps in real lifeDevOps in real life
DevOps in real lifeDataArt
 
Codeless: автоматизация тестирования
Codeless: автоматизация тестированияCodeless: автоматизация тестирования
Codeless: автоматизация тестированияDataArt
 
Selenoid
SelenoidSelenoid
SelenoidDataArt
 
Selenide
SelenideSelenide
SelenideDataArt
 
A. Sirota "Building an Automation Solution based on Appium"
A. Sirota "Building an Automation Solution based on Appium"A. Sirota "Building an Automation Solution based on Appium"
A. Sirota "Building an Automation Solution based on Appium"DataArt
 
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...DataArt
 
IT talk: Как я перестал бояться и полюбил TestNG
IT talk: Как я перестал бояться и полюбил TestNGIT talk: Как я перестал бояться и полюбил TestNG
IT talk: Как я перестал бояться и полюбил TestNGDataArt
 

More from DataArt (20)

DataArt Custom Software Engineering with a Human Approach
DataArt Custom Software Engineering with a Human ApproachDataArt Custom Software Engineering with a Human Approach
DataArt Custom Software Engineering with a Human Approach
 
DataArt Healthcare & Life Sciences
DataArt Healthcare & Life SciencesDataArt Healthcare & Life Sciences
DataArt Healthcare & Life Sciences
 
DataArt Financial Services and Capital Markets
DataArt Financial Services and Capital MarketsDataArt Financial Services and Capital Markets
DataArt Financial Services and Capital Markets
 
About DataArt HR Partners
About DataArt HR PartnersAbout DataArt HR Partners
About DataArt HR Partners
 
Event management в IT
Event management в ITEvent management в IT
Event management в IT
 
Digital Marketing from inside
Digital Marketing from insideDigital Marketing from inside
Digital Marketing from inside
 
What's new in Android, Igor Malytsky ( Google Post I|O Tour)
What's new in Android, Igor Malytsky ( Google Post I|O Tour)What's new in Android, Igor Malytsky ( Google Post I|O Tour)
What's new in Android, Igor Malytsky ( Google Post I|O Tour)
 
DevOps Workshop:Что бывает, когда DevOps приходит на проект
DevOps Workshop:Что бывает, когда DevOps приходит на проектDevOps Workshop:Что бывает, когда DevOps приходит на проект
DevOps Workshop:Что бывает, когда DevOps приходит на проект
 
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArtIT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
 
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
 «Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han... «Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
 
Communication in QA's life
Communication in QA's lifeCommunication in QA's life
Communication in QA's life
 
Нельзя просто так взять и договориться, или как мы работали со сложными людьми
Нельзя просто так взять и договориться, или как мы работали со сложными людьмиНельзя просто так взять и договориться, или как мы работали со сложными людьми
Нельзя просто так взять и договориться, или как мы работали со сложными людьми
 
Знакомьтесь, DevOps
Знакомьтесь, DevOpsЗнакомьтесь, DevOps
Знакомьтесь, DevOps
 
DevOps in real life
DevOps in real lifeDevOps in real life
DevOps in real life
 
Codeless: автоматизация тестирования
Codeless: автоматизация тестированияCodeless: автоматизация тестирования
Codeless: автоматизация тестирования
 
Selenoid
SelenoidSelenoid
Selenoid
 
Selenide
SelenideSelenide
Selenide
 
A. Sirota "Building an Automation Solution based on Appium"
A. Sirota "Building an Automation Solution based on Appium"A. Sirota "Building an Automation Solution based on Appium"
A. Sirota "Building an Automation Solution based on Appium"
 
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
 
IT talk: Как я перестал бояться и полюбил TestNG
IT talk: Как я перестал бояться и полюбил TestNGIT talk: Как я перестал бояться и полюбил TestNG
IT talk: Как я перестал бояться и полюбил TestNG
 

Олег Крут (DataArt) "Что такое интернет вещей и как с ним работать"

  • 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.key)     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