Git Product home page Git Product logo

swarm's Introduction

SWARM

MQTT

Описание протокола и что именно наблюдает swarm

Брокер

MQTT брокер находится по адресу: x.ks.ua с портом 9001 для WS либо 1883 для TCP. Без сертификатов.

Топики MQTT

У всех топиков есть префикс из полученного ранее токена. Токеном является MAC адрес HUB

Устройство будет общатся только через свой токен:

/{token}/{cmd}

Чтение запись указывается со стороны устройства:

  • R - Устройство будет публиковать данные в данный топик, но не будет подписано на него
  • W - Устройство подпишется на данный топик, но не публикует в него
  • RW - Устройство подписывается и публикует в данный топик
  • E - Устройство подписывается и публикует в данный топик, выполняем топик, указанное действие выполняется только если в данный топик публикуется название топика.
Название R/W/RW/E Тип данных описание
/reg W uint32_t Регистрация устройства на сервере
/hub RW uint32_t Поиск хаба по ID устройства
/{token}/time W uint32_t Сервер обновляет время на хабе и всех подключенных устройствах . Завершает регистрацию устройства
/{token}/lqi R int32_t Отдает уровень сигнала (Link Quality information)
/{token}/lifetime W uint32_t Максимальное время между отправкой статуса устройством. Указано в секундах. По-умолчанию 60 сек.
/{token}/info R uint32_t Данные о подключенном хабе, отправляются после регистрации, отдает список подключенных устройств
/{token}/status R uint32_t Текущее состояние устройства. Хранит число событий с момента регистрации
/{token}/ping E Простой запрос, что бы убедится, что девайс еще с нами,девайсы всегда возвращает "OK"
/{token}/error W uint32_t Номер ошибки хаба
/{token}/{instance-id}/{reg} RW uint32_t Доступ к регистрам. По умолчанию данное устройство имеет instance-id = reg[0]
/{token}/{instance-id}/type RE uint32_t Тип устройства
/{token}/{instance-id}/version E char[128] Версия устройства, максимальный размер строки: 128 байт
/{token}/{instance-id}/status R uint32_t Статус устройтсва (какое количество событий произошло с момента регистрации)
/{token}/{instance-id}/read RW {uint32_t; uint8_t} Чтение памяти устройства (расписание, итд), По умолчанию данное устройство имеет instance-id = reg[0]
/{token}/{instance-id}/write RW {uint32_t; base64} Запись памяти устройства По умолчанию данное устройство имеет instance-id = reg[0]
/{token}/{instance-id}/reset RW uint32_t Сброс устройства в состояние по-умолчанию (то же 31 бит, 8-го регистра) (0/1).
Для сброса необходимо опубликовать значение instance-id

Топик /hub используется для поиска устройства без знания токена хаба, пример:

111222345 => /hub            # Клиент отправляет серийный номер устройства на броке
/hub => aa:bb:cc:dd:ee:ff    # Хаб который содержит данное устройство отвечает со своим токеном

Преобразование значений

Передача значений регистров всегда происходит в формате беззнакового 32 битного числа (uint32) пример:

/b8:27:eb:f2:97:2c/21032420/11 => 1106352370

Каждый регистр отвечает за разный функционал, для получения функционального значения необходимо произвести приведение типов. На данный момент, описание типов и функционального назначения выполняется в файле 'devices.json'

Используемые типы в devices.json

Название Параметры Описание
int step - Размер приращения (Шаг) Знаковое число, в конвертации не нуждается.
minimum - Минимальное значение Пример: 12345 => 12345
maximum - Максимальное значение
unixtime - Время в секундах от 01.01.1970 00:00:00
Пример: 1627260919 => Mon Jul 26 2021 00:55:19 GMT+0000
float step - Размер приращения (Шаг) Число с плавающей запятой IEE754
minimum - Минимальное значение Пример: 1106352370 => 30.1996803284
maximum - Максимальное значение см: https://www.h-schmidt.net/FloatConverter/IEEE754.html
bitfield bits - Описание битов Битовое значение. В описании битов указывается назначение (name) и возможность изменения (readonly)
Пример: 72 => 0100 1000 => Включен 3-ий и 6-ой бит (8 + 64 = 72)

Описание устройства

Устройство описывается в файле devices.json и имеет следующую структуру:

{
"Тип устройства (int)" : {
    "name" : "Имя типа устройства, пример 'Терморегулятор'",
    "regs" : [ // Описание регистров устройства
        {
            "id": "Номер регистра (int)",
            "name": "Функциональное назначение регистра",
            "readonly": "Регистр только для чтения или нет",
            "type": { // Тип данных
                "name": "Название типа данных"
                ...
            }
        },
        ...
        ]
    }
}

swarm's People

Contributors

intx82 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.