Hranice: knihovna a produkt¶
Co je v knihovně¶
Knihovna (lib/idryer-core/) obsahuje:
- Celý stack sítě: WiFi, HTTP, MQTT, TLS.
- Protokol provisioning/claiming.
- Stavový stroj cloudu (
CloudStateMachine). - UART most a frame protokol.
- Integrační klienty (Bambu, HA, Moonraker).
- Rozhraní zařízení (
IWifiManager,ICredentialStore,IHttpClient,IProfile). - Arduino implementace těchto rozhraní.
- MQTT témata a logika publish/subscribe.
Test na kód patřící do knihovny: jakýkoli produkt s jakýmkoli hardwarem jej může používat bez modifikace.
Co je v produktu¶
Produkt (src/) obsahuje:
- Implementaci
IProfile— konfiguraci, informační zátěž,applyConfig. - Obchodní logiku specifickou pro zařízení (LED kontrola, sušení, topení).
- Obsluhy
onInvoke/onSetCommand. - Senzory produktu a publikování telemetrie.
- Inicializaci periférie (FastLED, Wire, ImprovWiFi).
- Kořen kompozice v
main.cpp.
Test na kód patřící do produktu: bez změny hardwaru nebo konfigurace je to bezvýznamné.
Konkrétní příklady¶
| Kód | Kde žije | Proč |
|---|---|---|
MqttClient |
knihovna | každý produkt potřebuje MQTT |
CloudStateMachine |
knihovna | provisioning/claiming je stejné pro všechny |
ArduinoWifiManager |
knihovna | WiFi připojení nezávisí na produktu |
LedStripProfile |
produkt | specifické pro Storage Link |
LedStripExecutor |
produkt | řídí FastLED, není potřeba pro jiná zařízení |
Sht31ClimateSensor |
produkt | specifický senzor pro konkrétní produkt |
StorageTelemetryPublisher |
produkt | zná formát telemetrie Storage Link |
IProfile |
knihovna | smlouva, kterou knihovna volá |
BambuClient |
knihovna | integrace je znovu použita přes iDryer a iHeater |
Rozhraní jako hranice¶
Knihovna zná produkt pouze přes IProfile. Veškerá interakce probíhá přes pět metod:
profile->onOnline(); // knihovna → produkt: poprvé online
profile->loop(); // knihovna → produkt: každý cyklus
profile->buildInfoJson(buf, len); // knihovna → produkt: potřeba informační zátěž
profile->getConfig(doc); // knihovna → produkt: potřeba konfigurace
profile->applyConfig(id, val); // knihovna → produkt: přijat set příkaz
Produkt zná knihovnu přes MqttClient (pro publikování telemetrie/events) a přes zpětná volání ActionDispatcher (pro příkazy).
Co nesmí překročit hranici¶
- Knihovna nesmí zahrnovat hlavičky produktu.
- Produkt nesmí volat
CloudStateMachine::handleProvisioning()nebo jiné privátní metody stack přímo — jen skrze veřejné API. - Telemetrie produktu se publikuje přímo skrze
s_mqtt.publishTelemetry()— runtime ji nevidí.