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

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 بعدی آن را تأیید کند.