MQTT témata a zprávy¶
Všechna témata mají formu idryer/{serial}/{suffix}, kde {serial} je sériové číslo zařízení.
Tento dokument popisuje témata a příkazy implementované pomocí MqttClient z idryer-core. Úplné rozhraní platformy (všechny příkazy backendu pro všechny typy zařízení) je v contracts/portal_backend_status.md.
Zařízení → backend¶
info¶
Publikováno jednou, když se zařízení poprvé přejde do stavu Online, a znovu při příjmu příkazu ping.
Payload je definován produktem prostřednictvím IProfile::buildInfoJson(). Pole očekávaná backendem minimálně: hardwareVersion, firmwareVersion, timestamp.
Příklad pro Storage Link:
{
"deviceType": "storage_link",
"firmwareVersion": "1.0.0",
"hardwareVersion": "1.0",
"timestamp": "2026-04-28T10:00:00Z"
}
telemetry¶
Publikováno produktem prostřednictvím pub.publishTelemetry(). Knihovna nepublikuje automaticky.
Příklad pro Storage Link (senzor klimatu):
status¶
Publikováno produktem při změně stavu prostřednictvím pub.publishStatus(). Payload je definován produktem.
config¶
Publikováno po přijetí device.getConfig (invoke) nebo v odpovědi na get_config. Voláno prostřednictvím pub.publishConfig() nebo pub.publishConfigRaw().
Pro velké payload (> 16000 bajtů) publikováno v blocích: každý blok obsahuje tid, idx, total, last, d.
config/delta¶
Částečná aktualizace konfigurace prostřednictvím pub.publishConfigDelta(). Backend očekává pole d (objekt se změnami).
events¶
Publikováno produktem prostřednictvím pub.publishEvent(). Knihovna negeneruje události automaticky.
integrations/status¶
Publikováno pomocí LinkIntegrationsManager. Obsahuje stav aktivního připojení integrace.
offline (LWT)¶
Nastaveno brokerem automaticky, když TCP spojení padne. Zařízení nikdy tento typ manuálně nepublikuje.
Backend → zařízení¶
Zařízení se přihlašuje k tématu idryer/{serial}/commands/#.
commands/ping¶
Zpracováno přímo pomocí IdryerRuntime — synchronizuje systémový čas prostřednictvím settimeofday() a znovu publikuje info.
commands/invoke¶
Preferovaná cesta pro akce produktu. Knihovna předá příkaz CommandHandler produktu (doporučená cesta). Pokud není CommandHandler zaregistrován, příkaz přejde na vestavěný ActionDispatcher (fallback).
Vestavěná akce device.getConfig je zpracována runtimem nebo handlerem produktu — volá IProfile::getConfig() a publikuje výsledek.
commands/set¶
Nastaví jeden parametr konfigurace. Předán CommandHandler produktu (doporučená cesta). Fallback — vestavěný ActionDispatcher::handleSet(), pokud není CommandHandler zaregistrován.
commands/link_integration¶
Správa integrací. Zpracováno pomocí LinkIntegrationsManager prostřednictvím CommandHandler produktu.
commands/bambu_apply¶
Aplikuj parametry filamentu na slot AMS tiskárny Bambu. Zpracováno pomocí LinkIntegrationsManager.
Ostatní příkazy platformy¶
Příkazy drying, storage, profile, stop, get_config, read_rfid, write_rfid a další jsou součástí úplného rozhraní platformy iDryer. Nejsou zpracovány idryer-core přímo; jsou doručeny CommandHandler produktu. Odkaz: contracts/portal_backend_status.md.
Formát tématu¶
// Konstrukce tématu
idryer_make_topic(buf, sizeof(buf), serialNumber, "telemetry");
// → "idryer/DEVICE_AABBCCDDEEFF/telemetry"
Konstanty suffixu jsou definovány v mqtt/idryer_topics.h:
#define IDRYER_TOPIC_INFO "info"
#define IDRYER_TOPIC_TELEMETRY "telemetry"
#define IDRYER_TOPIC_STATUS "status"
#define IDRYER_TOPIC_CONFIG "config"
#define IDRYER_TOPIC_CONFIG_DELTA "config/delta"
#define IDRYER_TOPIC_EVENTS "events"
#define IDRYER_TOPIC_OFFLINE "offline"
#define IDRYER_TOPIC_INTEGRATIONS_STATUS "integrations/status"
#define IDRYER_TOPIC_CMD_WILDCARD "commands/#"