МаленькоеАпи.ру МаленькоеАпи.ру

API сервиса

Справочник JSON-эндпоинтов для устройств и интеграций

Базовый адрес: https://bigapi.ru. Устройство получает секретный token при инициализации. Публичная страница устройства доступна по url: https://bigapi.ru/[url]. Референсная прошивка — GaMsh/TWL, описание железа — на странице аппаратного обеспечения.

Содержание

POST /init

Регистрация нового устройства или получение актуальной конфигурации. Рекомендуется вызывать при каждом старте (как в прошивке TWL). Тело запроса — JSON. Обязателен только mac.

Параметр Тип Описание
mac string, обязательный MAC-адрес контроллера (например F0:98:9D:1C:93:F6)
deviceId string Chip ID / уникальный идентификатор платы
model, revision, firmware string Модель, ревизия и версия прошивки (сохраняются в device_model)
ssid string Имя Wi‑Fi сети
name, url string Задаются только при создании устройства

Пример запроса

curl -X POST https://bigapi.ru/init \
  -H "Content-Type: application/json" \
  -d '{
    "mac": "F0:98:9D:1C:93:F6",
    "deviceId": "12345678",
    "model": "VeloCliMat",
    "revision": "second",
    "firmware": "6.2",
    "ssid": "HomeWiFi"
  }'

Пример ответа (200 или 201 при создании)

{
  "token": "PA12-45DD-XJR6-AV31",
  "time": 1708978792,
  "state1": "100",
  "state2": "",
  "state3": "",
  "state4": "",
  "state5": "",
  "state6": "",
  "state7": "",
  "state8": "",
  "created": true
}

POST /{token}/data

Приём показаний датчиков. Ключи внутри data — типы сенсоров, уже заведённые на сервере (например BME280, HTU21, SHT31). Неизвестный тип игнорируется.

curl -X POST https://bigapi.ru/PA12-45DD-XJR6-AV31/data \
  -H "Content-Type: application/json" \
  -d '{
    "data": {
      "BME280": {
        "temperature": "12.4",
        "humidity": "67.1",
        "pressure": "754.2"
      },
      "HTU21": {
        "temperature": "23.1",
        "humidity": "41.5"
      }
    }
  }'

Ответ при успехе: пустой JSON-объект {}.

GET /{tokenOrUrl}/data

Последняя запись с устройства. В path можно передать либо секретный token, либо публичный url. Поле data возвращается как массив значений (порядок соответствует порядку полей при отправке).

curl https://bigapi.ru/center/data
{
  "data": ["12.4", "67.1", "754.2"],
  "time": "14:32:01"
}

GET PUT /{token}/state

Чтение и обновление восьми строковых флагов state1–state8. PUT принимает JSON или form-urlencoded. В ответе PUT — массив номеров изменённых слотов.

curl https://bigapi.ru/PA12-45DD-XJR6-AV31/state
{
  "state1": "100",
  "state2": "center",
  "state3": "60000",
  "state4": "Двор",
  "state5": "",
  "state6": "",
  "state7": "",
  "state8": ""
}
curl -X PUT https://bigapi.ru/PA12-45DD-XJR6-AV31/state \
  -H "Content-Type: application/json" \
  -d '{
    "state1": "80",
    "state2": "center",
    "state3": "60000",
    "state4": "Двор"
  }'
# ответ, например: [1, 4]

GET PUT /{token}/info

Публичные метаданные устройства. PUT принимает JSON или form-urlencoded.

Параметр Описание
nameНазвание
locationМестоположение (текст)
ownerВладелец
lat, lonКоординаты для карты
device_modelМодель / прошивка
urlПубличный slug страницы
curl -X PUT https://bigapi.ru/PA12-45DD-XJR6-AV31/info \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Балкон",
    "location": "Санкт-Петербург",
    "owner": "demo",
    "lat": "59.93",
    "lon": "30.33",
    "device_model": "VeloCliMat second 6.2",
    "url": "balcony"
  }'

GET /{token}/show

Последние 100 записей с устройства (по убыванию времени).

curl https://bigapi.ru/PA12-45DD-XJR6-AV31/show
[
  {
    "sensorType": "BME280",
    "data": ["12.4", "67.1", "754.2"],
    "time": "2024-02-26 14:32:01"
  }
]

GET /list

Публичные url устройств с флагами publish и active.

curl https://bigapi.ru/list
{
  "data": ["center", "balcony", "yard"]
}

API v2 (REST)

Параллельный контракт под префиксом /api/v2. Тела ответов те же, что у v1; пути и HTTP-коды — в REST-стиле. Эндпоинты v1 (/init, /{token}/…, /sputnik) не меняются и не deprecated.

Для операций устройства передавайте Authorization: Bearer {token} на маршрутах /api/v2/devices/me/…. Публичное чтение идёт по slug url.

v1 v2 Auth
POST /init POST /api/v2/devices — 201 при создании; в ответе дополнительно id, url —
GET /list GET /api/v2/devices —
GET /{tokenOrUrl}/data GET /api/v2/devices/{url}/data —
POST /{token}/data POST /api/v2/devices/me/data Bearer
GET|PUT /{token}/state GET|PUT /api/v2/devices/me/state Bearer
GET|PUT /{token}/info GET|PUT /api/v2/devices/me/info Bearer
GET /{token}/show GET /api/v2/devices/me/history Bearer
GET /sputnik GET /api/v2/devices/nearby —
— GET /api/v2/devices/{url}/info —
— GET /api/v2/devices/{url}/history —
curl -X POST https://bigapi.ru/api/v2/devices \
  -H "Content-Type: application/json" \
  -d '{"mac":"F0:98:9D:1C:93:F6","url":"center"}'
curl -X POST https://bigapi.ru/api/v2/devices/me/data \
  -H "Authorization: Bearer PA12-45DD-XJR6-AV31" \
  -H "Content-Type: application/json" \
  -d '{"data":{"BME280":{"temperature":"12.4","humidity":"67.1","pressure":"754.2"}}}'
curl https://bigapi.ru/api/v2/devices/center/data
curl https://bigapi.ru/api/v2/devices/nearby

Формат данных датчиков

Как в прошивке TWL: объект data содержит именованные блоки по типу сенсора. При сохранении значения упорядочиваются в массив — поэтому при GET …/data монитор читает data[0], data[1], …

Тип Поля (порядок в массиве) Назначение
BME280 temperature, humidity, pressure Улица (бокс)
HTU21 temperature, humidity Помещение
SHT31 temperature, humidity Помещение
{
  "data": {
    "BME280": {
      "temperature": "12.4",
      "humidity": "67.1",
      "pressure": "754.2"
    },
    "HTU21": {
      "temperature": "23.1",
      "humidity": "41.5"
    },
    "SHT31": {
      "temperature": "22.8",
      "humidity": "43.0"
    }
  }
}

Семантика state1–state8 (прошивка TWL)

Слоты произвольные строки на стороне API. В TWL они используются так:

Слот В прошивке Смысл
state1 LED_BRIGHT Яркость внешнего статусного светодиода
state2 MONITOR_SLUG Публичный url устройства, чьи данные показывать на дисплее (GET /{slug}/data)
state3 MONITOR_INTERVAL Интервал обновления монитора (мс)
state4 MONITOR_NAME Подпись на OLED-дисплее
state5–state8 — Резерв под будущие флаги / GPIO

Служебное и realtime

  • GET /sputnik — упрощённый снимок фиксированного устройства (для сторонних клиентов вроде Garmin data field). Не универсальный публичный API. В v2: GET /api/v2/devices/nearby.
  • После POST /{token}/data сервер публикует событие Mercure в топики https://bigapi.ru/global и https://bigapi.ru/{url} (карта и страница устройства подписаны на обновления).