Files
ponics-protocol/DEVICE_BEHAVIOR.md
T
progl 6655dd3d7a init: спецификация протокола WegaBox ↔ ponics.online
MQTT топики, REST API, поведение устройства, маппинг датчиков.
Mermaid диаграммы: flow подключения, обработка сообщений, FSM устройства.
2026-05-05 11:42:57 +03:00

3.6 KiB

Device Behavior

Конечный автомат устройства

stateDiagram-v2
    [*] --> Booting: Включение питания
    Booting --> WiFiConnect: Инициализация
    WiFiConnect --> MQTTConnect: WiFi OK
    WiFiConnect --> WiFiConnect: Retry (30s)
    MQTTConnect --> Connected: MQTT OK
    MQTTConnect --> MQTTConnect: Retry (10s)

    Connected --> Publishing: Таймер сбора данных
    Publishing --> Connected: Данные отправлены

    Connected --> ExecutingCmd: Получена команда
    ExecutingCmd --> Connected: Команда выполнена

    Connected --> Disconnected: Потеря связи
    Disconnected --> MQTTConnect: Reconnect

    Connected --> [*]: Команда reboot / WDT reset

Последовательность запуска

  1. Boot — инициализация I2C, SPI, OneWire периферии
  2. WiFi — подключение, получение IP
  3. MQTT connect — handshake с брокером
  4. Publish {UID}/status = "connected" — уведомление сервера
  5. Получить preferences — сервер отвечает {UID}/set/preferences/all
  6. Применить калибровку — записать коэффициенты в память
  7. Запуск основного цикла — периодический сбор и публикация данных

Периодичность публикации данных

Датчик Интервал
pH, EC, Temp ~10 сек
AirTemp, AirHum ~30 сек
RSSI, uptime ~60 сек
MixerWeight ~5 сек (если mixer_enabled)
readGPIO при изменении

Обработка команд

Все команды fire-and-forget — ответ не отправляется.

cmd/reboot

  1. Завершить активные операции помп (стоп)
  2. ESP.restart()

cmd/gpio/{pin}

  1. Проверить pin ∈ [0, 15]
  2. MCP23017 → setPin(pin, state)

set/pump/{id}/run

  1. Проверить id ∈ [1, 8], time ∈ [1, 60000]
  2. Включить помпу
  3. Запустить таймер
  4. По истечении времени — выключить

set/pump/{id}/dispense

  1. Проверить id ∈ [1, 8], grams ∈ [0.1, 1000]
  2. Рассчитать время через ml/sec калибровку помпы
  3. Включить → таймер → выключить
  4. Обновить счётчик total_dispensed

cmd/pump/{id}/stop

  1. Немедленно выключить помпу
  2. Сбросить таймер

set/preferences/all

  1. Разобрать JSON
  2. Обновить только пришедшие поля в NVS / RAM
  3. Применить новые коэффициенты калибровки без перезагрузки

Reconnect логика

  • WiFi: авто-реконнект встроенный в ESP-IDF
  • MQTT: переподключение каждые 10 секунд
  • При восстановлении MQTT: снова публикует {UID}/status = "connected"
  • Сервер снова отправляет preferences (идемпотентно)

OTA обновления

URL прошивки: preferences.updateUrl
По умолчанию: https://ponics.online/static/wegabox/esp32-local/firmware.bin

Триггер обновления: команда (TBD) или автоматически при запуске если новая версия.