Как устроена idryer-core¶
idryer-core — библиотека для ESP32. Она берёт на себя всё, что связывает устройство с порталом и приложением:
- Wi-Fi: сеть передаёт приложение iDryer (ESPTouch) или веб-страница по USB (Improv);
- привязку к аккаунту одноразовым токеном и отвязку;
- защищённую MQTT-сессию с переподключением;
- доступ по локальной сети: приложение управляет устройством и без интернета;
- публикацию телеметрии и статуса, доставку команд;
- обновление прошивки по воздуху;
- карточку устройства на портале и в приложении.
Вы пишете только своё: читаете датчики, управляете нагрузкой, объявляете, что показать на карточке и какие операции она запускает.
Одна точка входа: iDryer::Link¶
#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.