Integrace tiskárny¶
Modul integrace umožňuje zařízení iDryer/iHeater připojit se k systémům třetích stran: Home Assistant, Bambu Lab (LAN), Moonraker/Klipper. Zahrňte samostatně:
Integrace jsou volitelný modul. Storage Link je nepoužívá. Jsou implementovány pro iDryer LINK a iHeater LINK.
LinkIntegrationsManager¶
Hlavní třída modulu. Spravuje jednu aktivní integraci najednou. Zapojeno prostřednictvím objektu produktu CommandHandler — stejný handler použitý pro MQTT a místní WS.
LinkIntegrationsStore intStore;
idryer::cloud::LinkIntegrationsManager intManager(&s_mqtt, &intStore);
static void handleCommand(const char* cmd, JsonObjectConst data) {
if (strcmp(cmd, "link_integration") == 0) {
intManager.handleLinkIntegrationCommand(data); return;
}
if (strcmp(cmd, "bambu_apply") == 0) {
intManager.handleBambuApplyCommand(data); return;
}
// ... ostatní příkazy produktu ...
}
// v setup():
runtime.setCommandHandler(handleCommand);
local.setCommandSink(handleCommand);
intManager.begin(); // po runtime.begin()
// v loop(): intManager.loop();
Manager ukládá konfigurace všech tří integrací v NVS prostřednictvím LinkIntegrationsStore. Přepínání aktivní integrace se provádí příkazem:
Stav je publikován na idryer/{serial}/integrations/status (zachován) při změně a každých 30 sekund.
Bambu Lab¶
BambuClient se připojuje k tiskárně přes MQTT v místní síti (TLS, port 8883, vlastnoruční podepsaný certifikát, setInsecure).
Dva režimy provozu v závislosti na typu zařízení:
| Režim | DeviceType | Chování |
|---|---|---|
| Writer | Dryer | odešle ams_filament_setting na tiskárnu při bambu_apply |
| Reader | Heater / IHeaterLink | přihlásí se k odběru device/{printerSerial}/report, předá stav tiskárny zpětnému volání |
Parametry připojení:
BambuConfig cfg;
cfg.ip = "192.168.1.50";
cfg.serial = "PRINTER_SERIAL";
cfg.lanAccessCode = "LAN_CODE";
cfg.enabled = true;
bambuClient.configure(cfg);
Připojení s exponenciálním zpátky od 1 s do 60 s.
Zpětná volání:
bambuClient.setPrinterStatusCallback([](const BambuPrinterStatus& s) {
// s.gcodeState, s.nozzleTemp, s.trayType, ...
});
Home Assistant¶
HaIntegrationAdapter + HaMqttClient — připojení k brokerovi HA MQTT (nikoli ke cloudu HA, ale k vestavěnému serveru HA MQTT).
Nakonfigurováno prostřednictvím příkazu link_integration:
{"type": "ha", "enabled": true, "host": "homeassistant.local", "port": 1883, "username": "...", "password": "..."}
Adaptér podporuje zjišťování hostů přes mDNS (řetězec homeassistant.local) a přímé připojení IP. Připojení s exponenciálním zpátky.
HaMqttClient je vystaveno prostřednictvím intManager.haMqttClient() — produkt může publikovat entity HA.
Zařízení musí nastavit své ID klienta:
Moonraker / Klipper¶
MoonrakerClient se připojuje přes WebSocket (ws://host:port/websocket) a používá JSON-RPC 2.0 pro přihlášení k odběru objektů Klipperu.
Primární případ použití — iHeater: příjem cílové teploty komory prostřednictvím gcode_macro VIRTUAL_CHAMBER.
Klient se přihlásí k odběru objektů Klipperu včetně gcode_macro VIRTUAL_CHAMBER, print_stats, display_status a teplotních senzorů.
Zpětná volání:
intManager.setVirtualChamberCallback([](const VirtualChamberData& vc) {
// vc.target — cílová teplota komory
// vc.available — objekt VIRTUAL_CHAMBER viditelný v Klipperu
});
intManager.setMoonrakerStatusCallback([](const MoonrakerStatus& s) {
// s.printerState, s.nozzleTemp, s.progress, ...
});
Omezení¶
- Jedna aktivní integrace najednou. Přepínání je atomické: stará se zastaví, nová se spustí.
- Jedna instance
BambuClientna zařízení (singleton prostřednictvím statického ukazatele). LinkIntegrationsStoreukládá konfiguraci v NVS — nastavení přetrvává přes restartování.- Zařízení musí zadat svůj typ (
setDeviceType) pro správný výběr režimu Bambu: