Перейти к содержанию

Как устроена idryer-core

idryer-core — библиотека для ESP32. Она берёт на себя всё, что связывает устройство с порталом и приложением:

  • Wi-Fi: сеть передаёт приложение iDryer (ESPTouch) или веб-страница по USB (Improv);
  • привязку к аккаунту одноразовым токеном и отвязку;
  • защищённую MQTT-сессию с переподключением;
  • доступ по локальной сети: приложение управляет устройством и без интернета;
  • публикацию телеметрии и статуса, доставку команд;
  • обновление прошивки по воздуху;
  • карточку устройства на портале и в приложении.

Вы пишете только своё: читаете датчики, управляете нагрузкой, объявляете, что показать на карточке и какие операции она запускает.

#include <iDryer.h>

static const iDryer::Config CFG = {
    .deviceType      = iDryer::DeviceType::Unknown,   // своё устройство
    .unitsCount      = 1,
    .hasAirTemp      = true,                          // ячейка температуры
    .hardwareVersion = "1.0",
    .firmwareVersion = "0.1.0",
    .model           = "My Device",
};
static iDryer::Link s_link(CFG);

void setup() {
    s_link.begin();
    s_link.onCommand("revoke", [](JsonObjectConst) { s_link.handleRevoke(); });
}

void loop() {
    s_link.loop();
    s_link.telemetry.airTempC[0] = readTemperature();   // ваш код
}
Вы делаете Ядро делает
заполняете s_link.telemetry.* публикует раз в 30 с, в простое — раз в 60 с
меняете s_link.status.* (режим, уставка, время) и вызываете publishStatusNow() доставляет статус; карточка переключается по режиму
объявляете s_link.card(): датчики, контролы, действия собирает card-манифест и публикует его
регистрируете s_link.onCommand(...) передаёт команды из облака и из локальной сети

Карточка устройства

Портал и приложение рисуют карточку по card-манифесту, который присылает устройство:

  • флаги Config.has* дают готовые ячейки: температура, влажность, мощность нагрева, вентилятор и другие;
  • card().sensor(...) добавляет свою величину по пути в телеметрии;
  • card().action(...) объявляет операцию: режим юнита после неё и параметры запуска.

Кода на портале для этого не нужно. Подробно — Карточка устройства: card-манифест.

mqtt_contract.yaml — источник правды

contracts/mqtt_contract.yaml описывает протокол: топики, поля телеметрии и статуса, возможности устройств, card-манифест. Из него генерируются:

Что Куда
iDryer::Config (флаги has*) и структуры API src/_generated/iDryer_api.h
MQTT-топики contracts/_generated/mqtt_topics.h
UART-протокол ESP32 ↔ контроллер contracts/_generated/uart_protocol.h
типы TypeScript для портала contracts/_generated/mqtt-api.types.ts

Warning

Файлы в _generated/ не правят руками: contracts/regen.sh перезаписывает их из контракта.

Своя величина не требует правки контракта: её объявляет card().sensor(...). Контракт меняют, когда новая возможность нужна всем продуктам: сначала mqtt_contract.yaml, потом regen.sh, потом код.

Продукты на ядре

  • iDryer Link — модуль связи сушилки: ESP32 рядом с контроллером, обмен по UART.
  • iDryer Storage — подсветка стеллажа с катушками: адресная лента и датчик SHT31.
  • iHeater Link — управление нагревателем iHeater, интеграции с Bambu Lab, Klipper/Moonraker и Home Assistant.

Что дальше

Запустить за 5 минут.