پرش به مطلب اصلی

Command و Execution ACK

Backend routing
→ dn/cmd
→ CommandRouter
→ GatewayConfigResolver
→ GatewayDriver
→ NativeBusExecutor
→ Child

Analyzer در این مسیر وجود ندارد.

Command​

{
"mid": "cmd-0001",
"deviceSerial": "AIRN0987654321",
"groupKey": "rgb",
"operationKey": "on_off",
"commandKey": "on",
"params": {}
}

mid برای Correlation و bounded deduplication استفاده می‌شود.

PUBACK != Success​

QoS 1 فقط تحویل MQTT را تأیید می‌کند. Success زمانی است که Driver طبق Contract Native خودش evidence کافی از اجرای موفق دارد.

Final ACK​

{
"mid": "cmd-0001",
"deviceSerial": "AIRN0987654321",
"status": "success",
"code": "success",
"retry": "none",
"completedAtUtc": "2026-09-14T08:12:03Z",
"diagnostic": {"message": null, "nativeCode": null}
}

Status​

  • success: نتیجه اجرا مشخصاً موفق است
  • failed: نتیجه اجرا مشخصاً ناموفق است
  • unknown: معلوم نیست Child اجرا کرده یا نه

unknown نباید خودکار Retry شود؛ ممکن است Command اجرا شده باشد ولی Response گم شده باشد.

Duplicate mid​

  • Duplicate در حال اجرا → اجرای Native دوم ایجاد نشود.
  • Duplicate کامل‌شده در cache محدود → ACK قبلی replay شود.
  • History بی‌نهایت نگه‌داری نشود.

State بعد از Command​

ACK موفق به‌تنهایی مجوز Fabricate کردن State نیست. State فقط وقتی تغییر داده شود که Driver State نهایی authoritative ارائه کند یا Observation بعدی آن را تأیید کند.