Протоколы

VizIoT поддерживает два типа соединения с устройствами: односторонний и двусторонний.

Односторонний – реализован отправкой HTTP GET запросов. Сервер получает данные от устройства, но не может отправить данные на устройство.

Двусторонний – реализован через MQTT брокер. Сервер и устройство могут передавать данные друг другу.

HTTP GET запросы

HTTP (англ. HyperText Transfer Protocol — «протокол передачи гипертекста») — протокол прикладного уровня передачи данных. Обмен сообщениями идёт по обыкновенной схеме «запрос-ответ». Для идентификации ресурсов HTTP использует глобальные URI. Каждое HTTP-сообщение состоит из трёх частей, которые передаются в указанном порядке:

  • Стартовая строка (англ. Starting line) — определяет тип сообщения;
  • Заголовки (англ. Headers) — характеризуют тело сообщения, параметры передачи и прочие сведения;
  • Тело сообщения (англ. Message Body) — непосредственно данные сообщения. Обязательно должно отделяться от заголовков пустой строкой. Тело сообщения может отсутствовать, но стартовая строка и заголовок являются обязательными элементами.

Более подробную информацию про протокол можно прочитать тут https://www.w3.org/.

В большинстве устройств HTTP протокол уже реализован:

  • Arduino Uno + Arduino Ethernet Shield – библиотека Ethernet.h.
  • Arduino Uno + Arduino WiFi Shield – библиотека WiFi.h.
  • Arduino Uno + SIM800 – библиотека TinyGsmClient.h и ArduinoHttpClient.h.
  • ESP8266 (среда разработки Arduino IDE) – библиотека ESP8266WiFi.h и WiFiClient.h.
  • Raspberry Pi или другой компьютер на Linux – cURL, Python (библиотека urllib), Node.js (библиотека http).

Основные требования (Все запросы должны соответствовать требованиям иначе будут отклонены):

  • длина запроса должна быть меньше 2083 символов;
  • тело запроса пустое;
  • ключи пишутся латиницей;
  • значения должно быть целое число или число с плавающей запятой;
  • должны присутствовать обязательные параметры;
  • если не передаете параметр date запросы должны быть максимум один раз в секунду.

Обязательные параметры GET запроса:

  • URL адрес запросов https://viziot.com/update или http://viziot.com/update
  • key: ключ доступа вашего устройства
  • pass: пароль доступа вашего устройства

Необязательные параметры:

  • date: используется для указания даты и времени. Значение необходимо указывать в формате Unix Timestamp UTC+0. Если не передавать параметр, то тогда будет использоваться время записи данных на сервере.
  • Все остальные параметры считаются параметрами устройства.

Пример запроса: https://viziot.com/update?key=123456789ABCDEFG&pass=123456789ABCDEFGabcd&date=1527897593

MQTT

MQTT (Message Queue Telemetry Transport) — упрощённый сетевой протокол, работает поверх TCP/IP. Используется для обмена сообщениями между устройствами по принципу издатель-подписчик. Возможности:

  • Прост в использовании. Протокол представляет собой программный блок без лишней функциональности, который может быть легко встроен в любую сложную систему;
  • Шаблон проектирования издатель-подписчик удобен для большинства решений с датчиками. Дает возможность устройствам выходить на связь и публиковать сообщения, которые не были заранее известны или предопределены;
  • Лёгок в администрировании;
  • Снижена нагрузка на канал связи;
  • Работа в условиях постоянной потери связи или других проблем на линии;
  • Нет ограничений на формат передаваемых данных.

Более подробную информацию про протокол можно прочитать тут http://mqtt.org/.

В большинстве устройств MQTT протокол реализован, например, для:

  • Arduino Uno + Arduino Ethernet Shield – библиотека Ethernet.h и PubSubClient.h.
  • Arduino Uno + Arduino WiFi Shield – библиотека WiFi.h и PubSubClient.h.
  • Arduino Uno + SIM800 – библиотека TinyGsmClient.h и PubSubClient.h.
  • ESP8266 (среда разработки Arduino IDE) – библиотека ESP8266WiFi.h, WiFiClient.h и PubSubClient.h.
  • Raspberry Pi или другой компьютер на Linux – Python (библиотека paho-mqtt), Node.js (библиотека mqtt).

Для передачи данных по протоколу MQTT необходимо подключится к нашему MQTT брокеру.

Параметры подключения:

  • SERVER: viziot.com
  • PORT: 48651
  • CLIENTID: любой текст (может совпадать с USERNAME)
  • USERNAME: ключ доступа который генерируется при создании устройства
  • PASSWORD: пароль доступа который генерируется при создании устройства
  • Топик для отправки данных: /devices/USERNAME/packet
  • Топик для получения данных: /devices/USERNAME/param/+

При публикация данных полезная нагрузка должна быть в формате JSON. Например, {"date":"1527897593","rsst":"-64","t1":"28.90"}.

Для указания даты и времени используете ключ date со значением в формате Unix Timestamp UTC+0. Если не передавать параметр, то тогда будет использоваться время записи данных на сервере. Все остальные параметры считаются параметрами устройства.