VizIoT поддерживает два типа соединения с устройствами: односторонний и двусторонний.
Односторонний – реализован отправкой HTTP GET запросов. Сервер получает данные от устройства,
но не может отправить данные на устройство.
Двусторонний – реализован через MQTT брокер. Сервер и устройство могут передавать данные друг другу.
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:48656/update
- key: ключ доступа вашего устройства
- pass: пароль доступа вашего устройства
Необязательные параметры:
- date: используется для указания даты и времени. Значение необходимо указывать в формате Unix Timestamp UTC+0.
Если не передавать параметр, то тогда будет использоваться время записи данных на сервере.
- Все остальные параметры считаются параметрами устройства.
Пример запроса: https://viziot.com:48656/update?key=123456789ABCDEFG&pass=123456789ABCDEFGabcd&date=1527897593
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. Если не передавать параметр, то тогда
будет использоваться время записи данных на сервере. Все остальные параметры считаются параметрами устройства.