Протокол работы API: Websocket.
Формат и протокол еще не окончательные, но они должен соответствовать следующим требованиям:
- Небольшой объем пересылаемых данных
- Простота разбора (парсинга) и генерации на стороне узла
- Возможность масштабирования
Запросы узла к серверу
Подключение
URL: ws://wall.electro-control-center.ru/ws/<token>
В API не предусмотрено версионирование. Пока бетта режим и нет постоянных подписчиков – все правится на горячую.
Каждая нода (узел) в системе имеет свой сетевой идентификатор (токен). Получить его можно в админке. По этому токену узел однозначно идентифицируется. Токен является авторизационной информацией. Публикация или передача токена другим лицам может привести к несанкционированному использованию вашей системы.
После подключения устанавливается постоянный канал, по которому как нода, так и центр управления могут отправлять и получать сообщения. Сообщения асинхронны, то есть они просто уходят, а дошли они или нет отправитель не знает. Это позволяет не задерживать ноды на отправку.
Сразу после подключения центр управления отправляет ноде то состояние, в котором она в нем сохранена.
Центр управления может пинговать ноду и отключаться, если нода отвалилась. Нода должна поддерживать websocket.ping. Необходимость пинга проставляется галочкой в настройках ноды.
Формат сообщений
Общий формат выглядит так:
<type>:<id>:<state>;<type>:<id>:<state>
type: типы устройств, сейчас:
s – сенсор (датчик)
l – лампа
id: внутренний id устройства уникальный для ардуинки (строка). Можно генерировать как pin_number. В админке это external_id
state: значения разные для разных типов
Для датчиков
state=<значение сенсора>
где <значение сенсора> может принимать значения типа float
Для ламп
state=<on>:<auto>:<level>
on: включена. 1 — включена, 0 — выключена, » — неопределено
auto: включение автоматики на лампу. 1 — включена, 0 — выключена, » — неопределено
level: уровень диммера в процентах
Разделитель команд – точка с запятой.
Сообщения одинаковы при отправке в обе стороны.
Тестовая страница
Для отладки работы взаимодействия ноды и центра управления пока можно воспользоваться вот этой страницей: http://wall.electro-control-center.ru/ws-test#<token>.
Ограничения
Пока снял все ограничения. Но желательно, чтобы не положить сервак ломиться к нему не чаще 1 раза в секунду.
Примеры
Включение лампы (команда из центра управления)
l:2:1
Выключение 3-х ламп, одна из них (5) диммируемая (команда из центра управления)
l:3:0;l:4:0;l:5:0:0:50
Значения датчиков (команда центру управления)
s:17:23.34;s:18:0;s:7:1