You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/fa/2-farm/lessons/4-migrate-your-plant-to-the.../README.md

45 KiB

انتقال گیاه شما به فضای ابری

نمای کلی درس به صورت اسکچ‌نوت

اسکچ‌نوت توسط نیتیا ناراسیمهان. برای مشاهده نسخه بزرگ‌تر روی تصویر کلیک کنید.

این درس به عنوان بخشی از پروژه IoT برای مبتدیان - سری کشاورزی دیجیتال از Microsoft Reactor آموزش داده شده است.

اتصال دستگاه شما به فضای ابری با Azure IoT Hub

آزمون پیش از درس

آزمون پیش از درس

مقدمه

در درس قبلی، یاد گرفتید که چگونه گیاه خود را به یک بروکر MQTT متصل کنید و یک رله را از طریق کدی که به صورت محلی اجرا می‌شود کنترل کنید. این اساس سیستم آبیاری خودکار متصل به اینترنت است که از گیاهان خانگی تا مزارع تجاری استفاده می‌شود.

دستگاه IoT با یک بروکر عمومی MQTT ارتباط برقرار کرد تا اصول را نشان دهد، اما این روش چندان قابل اعتماد یا امن نیست. در این درس، درباره فضای ابری و قابلیت‌های IoT ارائه‌شده توسط خدمات عمومی فضای ابری یاد خواهید گرفت. همچنین یاد خواهید گرفت که چگونه گیاه خود را از بروکر عمومی MQTT به یکی از این خدمات ابری منتقل کنید.

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

فضای ابری چیست؟

پیش از فضای ابری، زمانی که یک شرکت می‌خواست خدماتی را به کارکنان خود (مانند پایگاه داده یا ذخیره‌سازی فایل) یا به عموم مردم (مانند وب‌سایت‌ها) ارائه دهد، باید یک مرکز داده ایجاد و مدیریت می‌کرد. این مراکز داده می‌توانستند از یک اتاق کوچک با تعداد کمی کامپیوتر تا یک ساختمان بزرگ با تعداد زیادی کامپیوتر متغیر باشند. شرکت باید همه چیز را مدیریت می‌کرد، از جمله:

  • خرید کامپیوترها
  • نگهداری سخت‌افزار
  • تأمین برق و خنک‌کننده
  • شبکه‌سازی
  • امنیت، شامل امنیت ساختمان و نرم‌افزارهای موجود در کامپیوترها
  • نصب و به‌روزرسانی نرم‌افزارها

این فرآیند می‌توانست بسیار پرهزینه باشد، نیازمند کارکنان ماهر در زمینه‌های مختلف باشد و تغییرات مورد نیاز را بسیار کند انجام دهد. برای مثال، اگر یک فروشگاه آنلاین می‌خواست برای فصل تعطیلات شلوغ آماده شود، باید ماه‌ها قبل برنامه‌ریزی می‌کرد تا سخت‌افزار بیشتری خریداری کند، آن را پیکربندی کند، نرم‌افزار نصب کند و فرآیند فروش خود را اجرا کند. پس از پایان فصل تعطیلات و کاهش فروش، کامپیوترهایی که خریداری شده‌اند تا فصل شلوغ بعدی بلااستفاده باقی می‌ماندند.

آیا فکر می‌کنید این روش به شرکت‌ها اجازه می‌دهد سریع عمل کنند؟ اگر یک فروشگاه آنلاین لباس به دلیل دیده شدن لباس‌هایش توسط یک سلبریتی ناگهان محبوب شود، آیا می‌تواند قدرت محاسباتی خود را به سرعت افزایش دهد تا از پس افزایش ناگهانی سفارش‌ها برآید؟

کامپیوتر شخص دیگری

فضای ابری اغلب به شوخی به عنوان "کامپیوتر شخص دیگری" نامیده می‌شود. ایده اولیه ساده بود - به جای خرید کامپیوتر، شما کامپیوتر شخص دیگری را اجاره می‌کنید. شخص دیگری، یک ارائه‌دهنده خدمات فضای ابری، مراکز داده عظیمی را مدیریت می‌کند. آن‌ها مسئول خرید و نصب سخت‌افزار، مدیریت برق و خنک‌کننده، شبکه‌سازی، امنیت ساختمان، به‌روزرسانی سخت‌افزار و نرم‌افزار و همه چیز هستند. به عنوان مشتری، شما کامپیوترهایی را که نیاز دارید اجاره می‌کنید، در زمان افزایش تقاضا بیشتر اجاره می‌کنید و در زمان کاهش تقاضا تعداد اجاره‌ها را کاهش می‌دهید. این مراکز داده ابری در سراسر جهان قرار دارند.

یک مرکز داده ابری مایکروسافت برنامه توسعه یک مرکز داده ابری مایکروسافت

این مراکز داده می‌توانند چندین کیلومتر مربع وسعت داشته باشند. تصاویر بالا چند سال پیش در یک مرکز داده ابری مایکروسافت گرفته شده‌اند و اندازه اولیه و برنامه توسعه را نشان می‌دهند. منطقه‌ای که برای توسعه پاکسازی شده است بیش از ۵ کیلومتر مربع وسعت دارد.

💁 این مراکز داده به دلیل نیاز به مقادیر زیادی برق، برخی از ایستگاه‌های برق خود را دارند. به دلیل اندازه و سطح سرمایه‌گذاری ارائه‌دهندگان خدمات ابری، معمولاً بسیار دوستدار محیط زیست هستند. آن‌ها کارآمدتر از تعداد زیادی مراکز داده کوچک هستند، عمدتاً از انرژی‌های تجدیدپذیر استفاده می‌کنند و ارائه‌دهندگان خدمات ابری تلاش زیادی برای کاهش ضایعات، کاهش مصرف آب و بازکاشت جنگل‌ها انجام می‌دهند. می‌توانید درباره تلاش‌های یک ارائه‌دهنده خدمات ابری برای پایداری در سایت پایداری Azure بیشتر بخوانید.

تحقیق کنید: درباره ابرهای بزرگ مانند Azure از مایکروسافت یا GCP از گوگل مطالعه کنید. آن‌ها چند مرکز داده دارند و این مراکز در کجاهای جهان قرار دارند؟

استفاده از فضای ابری هزینه‌ها را برای شرکت‌ها کاهش می‌دهد و به آن‌ها اجازه می‌دهد روی کاری که بهترین انجام می‌دهند تمرکز کنند، در حالی که تخصص در زمینه محاسبات ابری در دست ارائه‌دهنده خدمات باقی می‌ماند. شرکت‌ها دیگر نیازی به اجاره یا خرید فضای مرکز داده، پرداخت به ارائه‌دهندگان مختلف برای اتصال و برق یا استخدام کارشناسان ندارند. در عوض، آن‌ها می‌توانند یک صورتحساب ماهانه به ارائه‌دهنده خدمات ابری پرداخت کنند تا همه چیز مدیریت شود.

ارائه‌دهنده خدمات ابری می‌تواند از اقتصاد مقیاس برای کاهش هزینه‌ها استفاده کند، کامپیوترها را به صورت عمده با هزینه کمتر خریداری کند، در ابزارهایی سرمایه‌گذاری کند که بار کاری نگهداری را کاهش دهد و حتی سخت‌افزار خود را طراحی و تولید کند تا خدمات ابری خود را بهبود بخشد.

مایکروسافت Azure

Azure ابر توسعه‌دهندگان مایکروسافت است و این همان ابری است که در این درس‌ها از آن استفاده خواهید کرد. ویدئوی زیر یک نمای کلی کوتاه از Azure ارائه می‌دهد:

ویدئوی نمای کلی Azure

ایجاد اشتراک فضای ابری

برای استفاده از خدمات فضای ابری، باید در یک اشتراک با یک ارائه‌دهنده خدمات ابری ثبت‌نام کنید. برای این درس، شما در یک اشتراک Microsoft Azure ثبت‌نام خواهید کرد. اگر قبلاً یک اشتراک Azure دارید، می‌توانید این کار را نادیده بگیرید. جزئیات اشتراک توصیف‌شده در اینجا در زمان نگارش صحیح هستند، اما ممکن است تغییر کنند.

💁 اگر از طریق مدرسه خود به این درس‌ها دسترسی دارید، ممکن است قبلاً یک اشتراک Azure در دسترس شما باشد. با معلم خود بررسی کنید.

دو نوع اشتراک رایگان Azure وجود دارد که می‌توانید در آن ثبت‌نام کنید:

  • Azure برای دانش‌آموزان - این اشتراک برای دانش‌آموزان بالای ۱۸ سال طراحی شده است. برای ثبت‌نام نیازی به کارت اعتباری ندارید و از آدرس ایمیل مدرسه خود برای تأیید اینکه دانش‌آموز هستید استفاده می‌کنید. هنگام ثبت‌نام، ۱۰۰ دلار آمریکا برای استفاده از منابع ابری دریافت می‌کنید، همراه با خدمات رایگان از جمله نسخه رایگان یک سرویس IoT. این اشتراک به مدت ۱۲ ماه معتبر است و هر سال که دانش‌آموز باقی بمانید می‌توانید آن را تمدید کنید.

  • اشتراک رایگان Azure - این اشتراک برای هر کسی است که دانش‌آموز نیست. برای ثبت‌نام در این اشتراک به کارت اعتباری نیاز دارید، اما کارت شما صورتحساب نمی‌شود، فقط برای تأیید اینکه شما یک انسان واقعی هستید، نه یک ربات، استفاده می‌شود. شما ۲۰۰ دلار اعتبار برای استفاده در ۳۰ روز اول در هر سرویس دریافت می‌کنید، همراه با سطوح رایگان خدمات Azure. پس از اتمام اعتبار شما، کارت شما صورتحساب نمی‌شود مگر اینکه به اشتراک پرداختی تبدیل کنید.

💁 مایکروسافت یک اشتراک Azure برای دانش‌آموزان زیر ۱۸ سال ارائه می‌دهد، اما در زمان نگارش این متن از هیچ سرویس IoT پشتیبانی نمی‌کند.

وظیفه - ثبت‌نام برای یک اشتراک رایگان فضای ابری

اگر دانش‌آموز بالای ۱۸ سال هستید، می‌توانید برای یک اشتراک Azure برای دانش‌آموزان ثبت‌نام کنید. برای تأیید باید از یک آدرس ایمیل مدرسه استفاده کنید. این کار را می‌توانید به دو روش انجام دهید:

  • ثبت‌نام برای بسته توسعه‌دهندگان دانش‌آموز GitHub در education.github.com/pack. این بسته به شما دسترسی به مجموعه‌ای از ابزارها و پیشنهادات، از جمله GitHub و Microsoft Azure، می‌دهد. پس از ثبت‌نام در بسته توسعه‌دهندگان، می‌توانید پیشنهاد Azure برای دانش‌آموزان را فعال کنید.

  • مستقیماً برای یک حساب Azure برای دانش‌آموزان در azure.microsoft.com/free/students ثبت‌نام کنید.

⚠️ اگر آدرس ایمیل مدرسه شما شناخته نشد، یک مشکل در این مخزن مطرح کنید و ما بررسی می‌کنیم که آیا می‌توان آن را به لیست مجاز Azure برای دانش‌آموزان اضافه کرد.

اگر دانش‌آموز نیستید یا آدرس ایمیل مدرسه معتبر ندارید، می‌توانید برای یک اشتراک رایگان Azure ثبت‌نام کنید.

خدمات IoT در فضای ابری

بروکر عمومی MQTT که از آن استفاده کرده‌اید، ابزاری عالی برای یادگیری است، اما به عنوان ابزاری برای استفاده در محیط تجاری چندین مشکل دارد:

  • قابلیت اطمینان - این یک سرویس رایگان بدون تضمین است و ممکن است هر زمان خاموش شود
  • امنیت - عمومی است، بنابراین هر کسی می‌تواند به داده‌های شما گوش دهد یا دستورات ارسال کند تا سخت‌افزار شما را کنترل کند
  • عملکرد - برای تعداد کمی پیام آزمایشی طراحی شده است و نمی‌تواند حجم زیادی از پیام‌ها را مدیریت کند
  • کشف - هیچ راهی برای دانستن اینکه چه دستگاه‌هایی متصل هستند وجود ندارد

خدمات IoT در فضای ابری این مشکلات را حل می‌کنند. این خدمات توسط ارائه‌دهندگان بزرگ فضای ابری که سرمایه‌گذاری زیادی در قابلیت اطمینان انجام داده‌اند، نگهداری می‌شوند و آماده رفع هرگونه مشکل هستند. آن‌ها امنیت را به صورت داخلی دارند تا از دسترسی هکرها به داده‌های شما یا ارسال دستورات مخرب جلوگیری کنند. همچنین عملکرد بالایی دارند و می‌توانند میلیون‌ها پیام را هر روز مدیریت کنند، با استفاده از فضای ابری برای مقیاس‌پذیری در صورت نیاز.

💁 اگرچه برای این مزایا باید هزینه ماهانه پرداخت کنید، اکثر ارائه‌دهندگان خدمات ابری نسخه رایگان سرویس IoT خود را با تعداد محدودی پیام در روز یا دستگاه‌هایی که می‌توانند متصل شوند ارائه می‌دهند. این نسخه رایگان معمولاً برای یک توسعه‌دهنده کافی است تا درباره سرویس یاد بگیرد. در این درس از نسخه رایگان استفاده خواهید کرد.

دستگاه‌های IoT به یک سرویس ابری یا از طریق یک SDK دستگاه (کتابخانه‌ای که کدی برای کار با ویژگی‌های سرویس ارائه می‌دهد) یا مستقیماً از طریق یک پروتکل ارتباطی مانند MQTT یا HTTP متصل می‌شوند. SDK دستگاه معمولاً ساده‌ترین مسیر است زیرا همه چیز را برای شما مدیریت می‌کند، مانند دانستن اینکه چه موضوعاتی باید منتشر یا مشترک شوند و چگونه امنیت را مدیریت کند.

دستگاه‌ها با استفاده از SDK دستگاه به سرویس متصل می‌شوند. کد سرور نیز از طریق SDK به سرویس متصل می‌شود

دستگاه شما سپس از طریق این سرویس با سایر بخش‌های برنامه شما ارتباط برقرار می‌کند - مشابه نحوه ارسال داده‌های تله‌متری و دریافت دستورات از طریق MQTT. این معمولاً با استفاده از یک SDK سرویس یا کتابخانه مشابه انجام می‌شود. پیام‌ها از دستگاه شما به سرویس ارسال می‌شوند، جایی که سایر اجزای برنامه شما می‌توانند آن‌ها را بخوانند، و پیام‌ها می‌توانند به دستگاه شما ارسال شوند.

دستگاه‌هایی که کلید مخفی معتبر ندارند نمی‌توانند به سرویس IoT متصل شوند

این خدمات امنیت را با دانستن همه دستگاه‌هایی که می‌توانند متصل شوند و داده ارسال کنند، اجرا می‌کنند، یا با ثبت‌نام قبلی دستگاه‌ها در سرویس یا با دادن کلیدهای مخفی یا گواهی‌نامه‌هایی به دستگاه‌ها که می‌توانند هنگام اولین اتصال خود را در سرویس ثبت کنند. دستگاه‌های ناشناخته نمی‌توانند متصل شوند، اگر تلاش کنند سرویس اتصال را رد می‌کند و پیام‌های ارسال‌شده توسط آن‌ها را نادیده می‌گیرد.

تحقیق کنید: معایب داشتن یک سرویس IoT باز که هر دستگاه یا کدی می‌تواند به آن متصل شود چیست؟ آیا می‌توانید مثال‌های خاصی از سوءاستفاده هکرها پیدا کنید؟

سایر اجزای برنامه شما می‌توانند به سرویس IoT متصل شوند و درباره همه دستگاه‌های متصل یا ثبت‌شده اطلاعات کسب کنند و به صورت انفرادی یا گروهی با آن‌ها ارتباط برقرار کنند. 💁 خدمات اینترنت اشیا همچنین قابلیت‌های اضافی را پیاده‌سازی می‌کنند و ارائه‌دهندگان خدمات ابری دارای خدمات و برنامه‌های اضافی هستند که می‌توانند به این سرویس متصل شوند. به عنوان مثال، اگر بخواهید تمام پیام‌های تله‌متری ارسال‌شده توسط تمام دستگاه‌ها را در یک پایگاه داده ذخیره کنید، معمولاً تنها با چند کلیک در ابزار پیکربندی ارائه‌دهنده خدمات ابری می‌توانید سرویس را به پایگاه داده متصل کرده و داده‌ها را به آن منتقل کنید.

ایجاد یک سرویس IoT در فضای ابری

حالا که اشتراک Azure دارید، می‌توانید برای یک سرویس IoT ثبت‌نام کنید. سرویس IoT مایکروسافت به نام Azure IoT Hub شناخته می‌شود.

لوگوی Azure IoT Hub

ویدئوی زیر یک مرور کوتاه از Azure IoT Hub ارائه می‌دهد:

ویدئوی مرور Azure IoT Hub

🎥 روی تصویر بالا کلیک کنید تا ویدئو را مشاهده کنید

کمی وقت بگذارید و درباره IoT Hub تحقیق کنید و مرور کلی آن را در مستندات Microsoft IoT Hub بخوانید.

سرویس‌های ابری موجود در Azure را می‌توان از طریق یک پورتال مبتنی بر وب یا یک رابط خط فرمان (CLI) پیکربندی کرد. برای این کار، شما از CLI استفاده خواهید کرد.

وظیفه - نصب Azure CLI

برای استفاده از Azure CLI، ابتدا باید آن را روی کامپیوتر یا مک خود نصب کنید.

  1. دستورالعمل‌های موجود در مستندات Azure CLI را دنبال کنید تا CLI را نصب کنید.

  2. Azure CLI از تعدادی افزونه پشتیبانی می‌کند که قابلیت‌های مدیریت طیف گسترده‌ای از سرویس‌های Azure را اضافه می‌کنند. افزونه IoT را با اجرای دستور زیر از خط فرمان یا ترمینال خود نصب کنید:

    az extension add --name azure-iot
    
  3. از خط فرمان یا ترمینال خود، دستور زیر را اجرا کنید تا از طریق Azure CLI وارد اشتراک Azure خود شوید.

    az login
    

    یک صفحه وب در مرورگر پیش‌فرض شما باز خواهد شد. با استفاده از حسابی که برای اشتراک Azure ثبت‌نام کرده‌اید وارد شوید. پس از ورود، می‌توانید تب مرورگر را ببندید.

  4. اگر چندین اشتراک Azure دارید، مانند اشتراک ارائه‌شده توسط مدرسه و اشتراک Azure for Students خودتان، باید اشتراکی را که می‌خواهید استفاده کنید انتخاب کنید. دستور زیر را اجرا کنید تا لیست تمام اشتراک‌هایی که به آن‌ها دسترسی دارید را مشاهده کنید:

    az account list --output table
    

    در خروجی، نام هر اشتراک همراه با SubscriptionId آن را مشاهده خواهید کرد.

    ➜  ~ az account list --output table
    Name                    CloudName    SubscriptionId                        State    IsDefault
    ----------------------  -----------  ------------------------------------  -------  -----------
    School-subscription     AzureCloud   cb30cde9-814a-42f0-a111-754cb788e4e1  Enabled  True
    Azure for Students      AzureCloud   fa51c31b-162c-4599-add6-781def2e1fbf  Enabled  False
    

    برای انتخاب اشتراکی که می‌خواهید استفاده کنید، از دستور زیر استفاده کنید:

    az account set --subscription <SubscriptionId>
    

    <SubscriptionId> را با شناسه اشتراکی که می‌خواهید استفاده کنید جایگزین کنید. پس از اجرای این دستور، دوباره دستور لیست حساب‌ها را اجرا کنید. خواهید دید که ستون IsDefault برای اشتراکی که به تازگی تنظیم کرده‌اید به عنوان True علامت‌گذاری شده است.

وظیفه - ایجاد یک گروه منابع

سرویس‌های Azure، مانند نمونه‌های IoT Hub، ماشین‌های مجازی، پایگاه‌های داده یا سرویس‌های هوش مصنوعی، به عنوان منابع شناخته می‌شوند. هر منبع باید در داخل یک گروه منابع قرار گیرد، که یک گروه منطقی از یک یا چند منبع است.

💁 استفاده از گروه‌های منابع به شما امکان می‌دهد چندین سرویس را به طور همزمان مدیریت کنید. به عنوان مثال، پس از اتمام تمام درس‌های این پروژه، می‌توانید گروه منابع را حذف کنید و تمام منابع داخل آن به طور خودکار حذف خواهند شد.

  1. چندین مرکز داده Azure در سراسر جهان وجود دارد که به مناطق تقسیم شده‌اند. هنگامی که یک منبع یا گروه منابع Azure ایجاد می‌کنید، باید مشخص کنید که می‌خواهید آن را کجا ایجاد کنید. دستور زیر را اجرا کنید تا لیست مکان‌ها را دریافت کنید:

    az account list-locations --output table
    

    لیستی از مکان‌ها را مشاهده خواهید کرد. این لیست طولانی خواهد بود.

    💁 در زمان نگارش این متن، 65 مکان وجود دارد که می‌توانید در آن‌ها مستقر شوید.

        ➜  ~ az account list-locations --output table
    DisplayName               Name                 RegionalDisplayName
    ------------------------  -------------------  -------------------------------------
    East US                   eastus               (US) East US
    East US 2                 eastus2              (US) East US 2
    South Central US          southcentralus       (US) South Central US
    ...
    

    مقدار ستون Name منطقه نزدیک به خود را یادداشت کنید. می‌توانید مناطق را روی نقشه در صفحه جغرافیای Azure پیدا کنید.

  2. دستور زیر را اجرا کنید تا یک گروه منابع به نام soil-moisture-sensor ایجاد کنید. نام گروه منابع باید در اشتراک شما منحصر به فرد باشد.

    az group create --name soil-moisture-sensor \
                    --location <location>
    

    <location> را با مکانی که در مرحله قبل انتخاب کرده‌اید جایگزین کنید.

وظیفه - ایجاد یک IoT Hub

اکنون می‌توانید یک منبع IoT Hub در گروه منابع خود ایجاد کنید.

  1. از دستور زیر برای ایجاد منبع IoT Hub خود استفاده کنید:

    az iot hub create --resource-group soil-moisture-sensor \
                      --sku F1 \
                      --partition-count 2 \
                      --name <hub_name>
    

    <hub_name> را با یک نام برای هاب خود جایگزین کنید. این نام باید به صورت جهانی منحصر به فرد باشد - یعنی هیچ IoT Hub دیگری که توسط کسی ایجاد شده باشد نمی‌تواند همان نام را داشته باشد. این نام در یک URL که به هاب اشاره می‌کند استفاده می‌شود، بنابراین باید منحصر به فرد باشد. از چیزی مانند soil-moisture-sensor- استفاده کنید و یک شناسه منحصر به فرد مانند چند کلمه تصادفی یا نام خود را به انتهای آن اضافه کنید.

    گزینه --sku F1 به آن می‌گوید از یک سطح رایگان استفاده کند. سطح رایگان از 8,000 پیام در روز همراه با اکثر ویژگی‌های سطوح پولی پشتیبانی می‌کند.

    🎓 سطوح مختلف قیمت‌گذاری سرویس‌های Azure به عنوان سطوح شناخته می‌شوند. هر سطح هزینه متفاوتی دارد و ویژگی‌ها یا حجم داده‌های متفاوتی ارائه می‌دهد.

    گزینه --partition-count 2 تعداد جریان‌های داده‌ای که IoT Hub پشتیبانی می‌کند را تعریف می‌کند. پارتیشن‌های بیشتر باعث کاهش انسداد داده‌ها می‌شوند زمانی که چندین چیز از IoT Hub می‌خوانند و می‌نویسند. پارتیشن‌ها خارج از محدوده این درس‌ها هستند، اما این مقدار باید تنظیم شود تا یک IoT Hub سطح رایگان ایجاد شود.

    💁 شما فقط می‌توانید یک IoT Hub سطح رایگان در هر اشتراک داشته باشید.

IoT Hub ایجاد خواهد شد. ممکن است یک دقیقه یا بیشتر طول بکشد تا این فرآیند کامل شود.

ارتباط با IoT Hub

در درس قبلی، شما از MQTT استفاده کردید و پیام‌ها را در موضوعات مختلف ارسال و دریافت کردید، با موضوعات مختلف که اهداف متفاوتی داشتند. به جای ارسال پیام‌ها در موضوعات مختلف، IoT Hub چندین روش تعریف‌شده برای ارتباط دستگاه با هاب یا هاب با دستگاه دارد.

💁 در پشت صحنه این ارتباط بین IoT Hub و دستگاه شما می‌تواند از MQTT، HTTPS یا AMQP استفاده کند.

  • پیام‌های دستگاه به ابر (D2C) - این‌ها پیام‌هایی هستند که از یک دستگاه به IoT Hub ارسال می‌شوند، مانند داده‌های تله‌متری. سپس این پیام‌ها می‌توانند توسط کد برنامه شما از IoT Hub خوانده شوند.

    🎓 در پشت صحنه، IoT Hub از یک سرویس Azure به نام Event Hubs استفاده می‌کند. هنگامی که کدی برای خواندن پیام‌های ارسال‌شده به هاب می‌نویسید، این‌ها اغلب به عنوان رویدادها شناخته می‌شوند.

  • پیام‌های ابر به دستگاه (C2D) - این‌ها پیام‌هایی هستند که از کد برنامه، از طریق IoT Hub به یک دستگاه IoT ارسال می‌شوند.

  • درخواست‌های روش مستقیم - این‌ها پیام‌هایی هستند که از کد برنامه از طریق IoT Hub به یک دستگاه IoT ارسال می‌شوند تا درخواست کنند که دستگاه کاری انجام دهد، مانند کنترل یک عملگر. این پیام‌ها نیاز به پاسخ دارند تا کد برنامه شما بتواند بگوید که آیا با موفقیت پردازش شده است یا خیر.

  • دوقلو‌های دستگاه - این‌ها اسناد JSON هستند که بین دستگاه و IoT Hub همگام‌سازی می‌شوند و برای ذخیره تنظیمات یا سایر ویژگی‌هایی که توسط دستگاه گزارش شده‌اند یا باید روی دستگاه تنظیم شوند (به عنوان مطلوب شناخته می‌شوند) توسط IoT Hub استفاده می‌شوند.

IoT Hub می‌تواند پیام‌ها و درخواست‌های روش مستقیم را برای یک دوره زمانی قابل تنظیم ذخیره کند (به طور پیش‌فرض یک روز)، بنابراین اگر یک دستگاه یا کد برنامه اتصال خود را از دست بدهد، می‌تواند پس از اتصال مجدد پیام‌های ارسال‌شده در حالی که آفلاین بود را بازیابی کند. دوقلو‌های دستگاه به طور دائمی در IoT Hub نگهداری می‌شوند، بنابراین در هر زمان یک دستگاه می‌تواند دوباره متصل شود و آخرین دوقلو دستگاه را دریافت کند.

تحقیق کنید: درباره این نوع پیام‌ها بیشتر بخوانید در راهنمای ارتباطات دستگاه به ابر، و راهنمای ارتباطات ابر به دستگاه در مستندات IoT Hub.

اتصال دستگاه شما به سرویس IoT

پس از ایجاد هاب، دستگاه IoT شما می‌تواند به آن متصل شود. فقط دستگاه‌های ثبت‌شده می‌توانند به یک سرویس متصل شوند، بنابراین ابتدا باید دستگاه خود را ثبت کنید. هنگامی که ثبت می‌کنید، می‌توانید یک رشته اتصال دریافت کنید که دستگاه می‌تواند برای اتصال استفاده کند. این رشته اتصال مخصوص دستگاه است و شامل اطلاعاتی درباره IoT Hub، دستگاه و یک کلید مخفی است که به این دستگاه اجازه اتصال می‌دهد.

🎓 رشته اتصال یک اصطلاح عمومی برای یک قطعه متن است که جزئیات اتصال را شامل می‌شود. این‌ها هنگام اتصال به IoT Hubها، پایگاه‌های داده و بسیاری از سرویس‌های دیگر استفاده می‌شوند. آن‌ها معمولاً شامل یک شناسه برای سرویس، مانند یک URL، و اطلاعات امنیتی مانند یک کلید مخفی هستند. این‌ها به SDKها منتقل می‌شوند تا به سرویس متصل شوند.

⚠️ رشته‌های اتصال باید امن نگه داشته شوند! امنیت در درس آینده به طور مفصل‌تر پوشش داده خواهد شد.

وظیفه - ثبت دستگاه IoT شما

دستگاه IoT می‌تواند با استفاده از Azure CLI در IoT Hub شما ثبت شود.

  1. دستور زیر را اجرا کنید تا یک دستگاه ثبت کنید:

    az iot hub device-identity create --device-id soil-moisture-sensor \
                                      --hub-name <hub_name>
    

    <hub_name> را با نامی که برای IoT Hub خود استفاده کردید جایگزین کنید.

    این یک دستگاه با شناسه soil-moisture-sensor ایجاد خواهد کرد.

  2. هنگامی که دستگاه IoT شما با استفاده از SDK به IoT Hub شما متصل می‌شود، باید از یک رشته اتصال استفاده کند که URL هاب را همراه با یک کلید مخفی ارائه می‌دهد. دستور زیر را اجرا کنید تا رشته اتصال را دریافت کنید:

    az iot hub device-identity connection-string show --device-id soil-moisture-sensor \
                                                      --output table \
                                                      --hub-name <hub_name>
    

    <hub_name> را با نامی که برای IoT Hub خود استفاده کردید جایگزین کنید.

  3. رشته اتصال نمایش داده‌شده در خروجی را ذخیره کنید زیرا بعداً به آن نیاز خواهید داشت.

وظیفه - اتصال دستگاه IoT شما به فضای ابری

راهنمای مربوطه را دنبال کنید تا دستگاه IoT خود را به فضای ابری متصل کنید:

وظیفه - نظارت بر رویدادها

فعلاً کد سرور خود را به‌روزرسانی نخواهید کرد. در عوض می‌توانید از Azure CLI برای نظارت بر رویدادهای دستگاه IoT خود استفاده کنید.

  1. مطمئن شوید که دستگاه IoT شما در حال اجرا است و مقادیر تله‌متری رطوبت خاک را ارسال می‌کند.

  2. دستور زیر را در خط فرمان یا ترمینال خود اجرا کنید تا پیام‌های ارسال‌شده به IoT Hub خود را نظارت کنید:

    az iot hub monitor-events --hub-name <hub_name>
    

    <hub_name> را با نامی که برای IoT Hub خود استفاده کردید جایگزین کنید.

    پیام‌ها را در خروجی کنسول مشاهده خواهید کرد همانطور که توسط دستگاه IoT شما ارسال می‌شوند.

    Starting event monitor, use ctrl-c to stop...
    {
        "event": {
            "origin": "soil-moisture-sensor",
            "module": "",
            "interface": "",
            "component": "",
            "payload": "{\"soil_moisture\": 376}"
        }
    },
    {
        "event": {
            "origin": "soil-moisture-sensor",
            "module": "",
            "interface": "",
            "component": "",
            "payload": "{\"soil_moisture\": 381}"
        }
    }
    

    محتوای payload با پیام ارسال‌شده توسط دستگاه IoT شما مطابقت خواهد داشت.

    در زمان نگارش این متن، افزونه az iot به طور کامل روی Apple Silicon کار نمی‌کند. اگر از دستگاه Apple Silicon استفاده می‌کنید، باید پیام‌ها را به روش دیگری نظارت کنید، مانند استفاده از ابزارهای Azure IoT برای Visual Studio Code.

  3. این پیام‌ها تعدادی ویژگی به طور خودکار به آن‌ها متصل شده‌اند، مانند زمان ارسال آن‌ها. این‌ها به عنوان حاشیه‌نویسی‌ها شناخته می‌شوند. برای مشاهده تمام حاشیه‌نویسی‌های پیام، از دستور زیر استفاده کنید:

    az iot hub monitor-events --properties anno --hub-name <hub_name>
    

    <hub_name> را با نامی که برای IoT Hub خود استفاده کردید جایگزین کنید.

    پیام‌ها را در خروجی کنسول مشاهده خواهید کرد همانطور که توسط دستگاه IoT شما ارسال می‌شوند.

    Starting event monitor, use ctrl-c to stop...
    {
        "event": {
            "origin": "soil-moisture-sensor",
            "module": "",
            "interface": "",
            "component": "",
            "properties": {},
            "annotations": {
                "iothub-connection-device-id": "soil-moisture-sensor",
                "iothub-connection-auth-method": "{\"scope\":\"device\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}",
                "iothub-connection-auth-generation-id": "637553997165220462",
                "iothub-enqueuedtime": 1619976150288,
                "iothub-message-source": "Telemetry",
                "x-opt-sequence-number": 1379,
                "x-opt-offset": "550576",
                "x-opt-enqueued-time": 1619976150277
            },
            "payload": "{\"soil_moisture\": 381}"
        }
    }
    

    مقادیر زمانی در حاشیه‌نویسی‌ها در زمان UNIX هستند، که تعداد ثانیه‌ها از نیمه‌شب 1 ژانویه 1970 را نشان می‌دهند.

    هنگامی که نظارت بر رویدادها را به پایان رساندید، از آن خارج شوید.

وظیفه - کنترل دستگاه IoT شما

شما همچنین می‌توانید از Azure CLI برای فراخوانی روش‌های مستقیم روی دستگاه IoT خود استفاده کنید.

  1. دستور زیر را در خط فرمان یا ترمینال خود اجرا کنید تا روش relay_on را روی دستگاه IoT فراخوانی کنید:

    az iot hub invoke-device-method --device-id soil-moisture-sensor \
                                    --method-name relay_on \
                                    --method-payload '{}' \
                                    --hub-name <hub_name>
    

    Replace ` <hub_name> با نامی که برای IoT Hub خود استفاده کرده‌اید جایگزین کنید.

این درخواست یک متد مستقیم برای متدی که با method-name مشخص شده ارسال می‌کند. متدهای مستقیم می‌توانند یک payload شامل داده‌های مورد نیاز متد دریافت کنند، و این داده‌ها می‌توانند به صورت JSON در پارامتر method-payload مشخص شوند.

شما خواهید دید که رله روشن می‌شود و خروجی مربوطه از دستگاه IoT شما نمایش داده می‌شود:

    Direct method received -  relay_on
    ```

1. مرحله بالا را تکرار کنید، اما مقدار `--method-name` را به `relay_off` تغییر دهید. خواهید دید که رله خاموش می‌شود و خروجی مربوطه از دستگاه IoT نمایش داده می‌شود.

---

## 🚀 چالش

نسخه رایگان IoT Hub اجازه ارسال ۸,۰۰۰ پیام در روز را می‌دهد. کدی که نوشتید هر ۱۰ ثانیه یک پیام تله‌متری ارسال می‌کند. اگر هر ۱۰ ثانیه یک پیام ارسال شود، در یک روز چند پیام ارسال خواهد شد؟

فکر کنید که اندازه‌گیری رطوبت خاک هر چند وقت یک‌بار باید ارسال شود؟ چگونه می‌توانید کد خود را تغییر دهید تا در محدوده نسخه رایگان باقی بمانید و همچنان به اندازه کافی داده‌ها را بررسی کنید اما نه بیش از حد؟ اگر بخواهید یک دستگاه دوم اضافه کنید چه اتفاقی می‌افتد؟

## آزمون پس از درس

[آزمون پس از درس](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/16)

## مرور و مطالعه شخصی

SDK مربوط به IoT Hub برای هر دو پلتفرم Arduino و Python متن‌باز است. در مخازن کد موجود در GitHub نمونه‌های متعددی وجود دارد که نشان می‌دهند چگونه می‌توان با ویژگی‌های مختلف IoT Hub کار کرد.

* اگر از Wio Terminal استفاده می‌کنید، به [نمونه‌های Arduino در GitHub](https://github.com/Azure/azure-iot-pal-arduino/tree/master/pal/samples) مراجعه کنید.
* اگر از Raspberry Pi یا دستگاه مجازی استفاده می‌کنید، به [نمونه‌های Python در GitHub](https://github.com/Azure/azure-iot-sdk-python/tree/master/azure-iot-hub/samples) مراجعه کنید.

## تکلیف

[درباره خدمات ابری یاد بگیرید](assignment.md)

**سلب مسئولیت**:  
این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفه‌ای انسانی توصیه می‌شود. ما هیچ مسئولیتی در قبال سوء تفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.