CheckForUpdates

/osc/checkForUpdates API به‌روزرسانی‌های وضعیت را با مقایسه آخرین وضعیت شناخته‌شده stateFingerprint مشتری با fingerprint فعلی دوربین شناسایی می‌کند.

ورودی

نام تایپ کنید شرح
stateFingerprint رشته اثر انگشت وضعیت دوربین از آخرین باری که مشتری /osc/state یا /osc/checkForUpdates صدا زد.
waitTimeout عدد صحیح (اختیاری) تعداد ثانیه منتظر ماندن برای تغییر وضعیت در دوربین قبل از بازگشت پاسخ. هنگامی که waitTimeout منقضی می‌شود، حتی اگر اثر انگشت تغییر نکرده باشد، دوربین باید پاسخ دهد. اگر قبل از انقضای waitTimeout یک تغییر وضعیت تشخیص داده شود، یا اگر waitTimeout حذف شود، دوربین باید فوراً پاسخ را بازگرداند. توجه: دوربین می‌تواند قبل از منقضی شدن waitTimeout پاسخ بدهد، حتی اگر اثر انگشت تغییر نکرده باشد، اما بهترین کار این است که منتظر بمانید تا waitTimeout منقضی شود.

نکات پیاده سازی دوربین:

  • به محض دریافت این تماس، دوربین اثر انگشت وضعیت فعلی خود را با پارامتر stateFingerprint دریافتی مقایسه می کند. اگر اثر انگشت تغییر کرده باشد، دوربین باید فورا اثر انگشت جدید را برگرداند.

خروجی

نام تایپ کنید شرح
stateFingerprint رشته اثر انگشت جدید از وضعیت دوربین (همانند در /osc/state API).
throttleTimeout عدد صحیح تعداد ثانیه های توصیه شده برای انتظار مشتری قبل از تماس بعدی checkForUpdates . مشتریان می توانند قبل از انقضای throttleTimeout درخواست دهند و دوربین ها در صورت امکان باید این درخواست های اولیه را مجاز کنند.

نکات پیاده سازی مشتری:

  • به محض دریافت پاسخ، مشتری باید stateFingerprint دریافتی را با کپی آن مقایسه کند. اگر آنها مطابقت ندارند، مشتری باید با استفاده از _/osc/state API وضعیت فعلی دوربین را درخواست کند.
  • مشتریان هوشمند بدون توجه به پاسخ دوربین، درخواست ها را کنترل می کنند. به عنوان مثال، اگر یک دوربین یک پاسخ غیر استاندارد (فورا، بدون تغییر و یک throttleTimeout) را برگرداند، مشتری باید قبل از درخواست checkForUpdates دیگر از دوربین، throttleTimeout خود را اعمال کند.

نکات پیاده سازی دوربین:

  • هنگام پاسخ دادن به checkForUpdates , دوربین باید یک throttleTimeout معقول را تعیین کند . اگر دوربین از منطق درخواست طولانی مدت پشتیبانی می کند (اگر وضعیت تغییر نکرده است، فقط پس از waitTimeout پاسخ دهید)، خوب است که throttleTimeout را 0 برگردانید. در این حالت، مشتریان می توانند بلافاصله درخواست به روز رسانی کنند.
  • اگر دوربین فقط از پاسخ‌های سریع پشتیبانی می‌کند ( توصیه نمی‌شود )، باید یک throttleTimeout معقول برگرداند تا از ترافیک درخواست/پاسخ دائمی با مشتری جلوگیری کند. به عنوان مثال، یک throttleTimeout معقول 60 ثانیه خواهد بود تا یک درخواست مشتری در هر دقیقه امکان پذیر باشد.
  • بهترین روش این است که یک throttleTimeout مناسب با قابلیت های دوربین را برگردانید. اگر سرور به دلیل مشکل سرور نتواند یک throttleTimeout مناسب را تعیین کند، دوربین باید با کد وضعیت 5XX و بدنه JSON حاوی کد خطای خطای serverError پاسخ دهد.

خطا

کد خطا شرح
missingParameter stateFingerprint مشخص نشده است.
invalidParameterName یک یا چند نام پارامتر ورودی شناسایی نشده است.
invalidParameterValue نام پارامترها شناسایی می شوند، اما یک یا چند مقدار نامعتبر است. به عنوان مثال، waitTimeout خارج از محدوده است یا نوع آن نادرست است.
serverError سرور قادر به تعیین مقدار throttleTimeout مناسب برای پاسخ خود نبود. مشکل سرور با مقدار 5XX بازگردانده شده در پاسخ شناسایی می شود. سازندگان دوربین باید جدولی از کدهای 5XX و حالت های سرور مربوطه را ارائه کنند که می تواند این خطا را ایجاد کند.

مثال

درخواست
POST /osc/checkForUpdates HTTP/1.1
Host: [camera ip address]:[httpUpdatesPort]
Content-Type: application/json;charset=utf-8
Accept: application/jsonContent-Length: {CONTENT_LENGTH}
X-XSRF-Protected: 1

{
    "stateFingerprint": "12EGA33",
    "waitTimeout": 300
}
واکنش
HTTP/1.1 200 OK
Content-Type: application/json;charset=utf-8
Content-Length: {CONTENT_LENGTH}
X-Content-Type-Options: nosniff

{
    "stateFingerprint": "12EGA86",
    "throttleTimeout": 60
}
درخواست
POST /osc/checkForUpdates HTTP/1.1
Host: [camera ip address]:[httpUpdatesPort]
Content-Type: application/json;charset=utf-8
Accept: application/jsonContent-Length: {CONTENT_LENGTH}
X-XSRF-Protected: 1

{
    "stateFingerprint": "12EGA33",
    "waitTimeout": 300
}
واکنش
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=utf-8
Content-Length: {CONTENT_LENGTH}
X-Content-Type-Options: nosniff

{
    "name": "camera.checkForUpdates",
    "state": "error",
    "error": {
        "code": "missingParameter",
        "message": "parameter stateFingerprint is missing."
    }
}