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/uk/1-getting-started/lessons/4-connect-internet/README.md

49 KiB

Підключіть свій пристрій до Інтернету

Скетчнот огляд цього уроку

Скетчнот від Nitya Narasimhan. Натисніть на зображення, щоб побачити його у більшому розмірі.

Цей урок був проведений у рамках серії Hello IoT від Microsoft Reactor. Урок складався з двох відео: годинного заняття та години офісних годин, де детальніше розглядалися частини уроку та відповідали на запитання.

Урок 4: Підключіть свій пристрій до Інтернету

Урок 4: Підключіть свій пристрій до Інтернету - Офісні години

🎥 Натисніть на зображення вище, щоб переглянути відео

Тест перед лекцією

Тест перед лекцією

Вступ

Літера I в IoT означає Інтернет — хмарне підключення та сервіси, які забезпечують багато функцій IoT-пристроїв: від збору даних із сенсорів, підключених до пристрою, до надсилання повідомлень для керування виконавчими механізмами. IoT-пристрої зазвичай підключаються до одного хмарного IoT-сервісу за допомогою стандартного протоколу зв’язку, а цей сервіс підключається до решти вашого IoT-додатку: від AI-сервісів для прийняття розумних рішень на основі даних до веб-додатків для керування чи звітності.

🎓 Дані, зібрані сенсорами та надіслані до хмари, називаються телеметрією.

IoT-пристрої можуть отримувати повідомлення з хмари. Часто ці повідомлення містять команди — інструкції для виконання дій або внутрішньо (наприклад, перезавантаження чи оновлення прошивки), або за допомогою виконавчого механізму (наприклад, увімкнення світла).

Цей урок знайомить із деякими протоколами зв’язку, які IoT-пристрої можуть використовувати для підключення до хмари, а також із типами даних, які вони можуть надсилати чи отримувати. Ви також отримаєте практичний досвід роботи з ними, додаючи інтернет-керування до вашого нічника, переміщуючи логіку керування світлодіодом до "серверного" коду, що працює локально.

У цьому уроці ми розглянемо:

Протоколи зв’язку

Існує кілька популярних протоколів зв’язку, які IoT-пристрої використовують для зв’язку з Інтернетом. Найпопулярніші з них базуються на обміні повідомленнями за принципом публікації/підписки через брокер. IoT-пристрої підключаються до брокера, публікують телеметрію та підписуються на команди. Хмарні сервіси також підключаються до брокера, підписуються на всі телеметричні повідомлення та публікують команди для конкретних пристроїв або груп пристроїв.

IoT-пристрої підключаються до брокера, публікують телеметрію та підписуються на команди. Хмарні сервіси підключаються до брокера, підписуються на всю телеметрію та надсилають команди конкретним пристроям.

MQTT є найпопулярнішим протоколом зв’язку для IoT-пристроїв і розглядається в цьому уроці. Інші протоколи включають AMQP та HTTP/HTTPS.

Протокол MQTT

MQTT — це легкий, відкритий стандартний протокол обміну повідомленнями, який може надсилати повідомлення між пристроями. Його було розроблено у 1999 році для моніторингу нафтопроводів, а через 15 років IBM випустила його як відкритий стандарт.

MQTT має одного брокера та кілька клієнтів. Усі клієнти підключаються до брокера, а брокер маршрутизує повідомлення до відповідних клієнтів. Повідомлення маршрутизуються за допомогою іменованих тем, а не надсилаються безпосередньо окремому клієнту. Клієнт може публікувати повідомлення в тему, і будь-які клієнти, які підписані на цю тему, отримають це повідомлення.

IoT-пристрій публікує телеметрію в тему /telemetry, а хмарний сервіс підписується на цю тему

Проведіть дослідження. Якщо у вас багато IoT-пристроїв, як ви можете забезпечити, щоб ваш MQTT-брокер міг обробляти всі повідомлення?

Підключіть свій IoT-пристрій до MQTT

Перший крок у додаванні інтернет-керування до вашого нічника — це підключення його до MQTT-брокера.

Завдання

Підключіть свій пристрій до MQTT-брокера.

У цій частині уроку ви підключите свій IoT-нічник до Інтернету, щоб дозволити його дистанційне керування. Пізніше в цьому уроці ваш IoT-пристрій надішле телеметричне повідомлення через MQTT до публічного MQTT-брокера з рівнем освітлення, де його отримає серверний код, який ви напишете. Цей код перевірить рівень освітлення та надішле командне повідомлення назад до пристрою, вказуючи йому увімкнути або вимкнути світлодіод.

Реальний приклад такого налаштування може бути використаний для збору даних із кількох датчиків освітлення перед прийняттям рішення про ввімкнення світла в місці з великою кількістю освітлення, наприклад, на стадіоні. Це може запобігти ввімкненню світла, якщо лише один датчик був закритий хмарами або птахом, але інші датчики виявили достатньо світла.

Які інші ситуації можуть вимагати оцінки даних із кількох сенсорів перед надсиланням команд?

Замість того, щоб займатися складнощами налаштування MQTT-брокера в рамках цього завдання, ви можете використовувати публічний тестовий сервер, який працює на базі Eclipse Mosquitto, відкритого MQTT-брокера. Цей тестовий брокер доступний за адресою test.mosquitto.org і не вимагає створення облікового запису, що робить його чудовим інструментом для тестування MQTT-клієнтів і серверів.

💁 Цей тестовий брокер є публічним і не захищеним. Будь-хто може слухати те, що ви публікуєте, тому його не слід використовувати для даних, які потрібно зберігати в таємниці.

Схема завдання, що показує зчитування рівнів освітлення, їх перевірку та керування світлодіодом

Виконайте відповідний крок нижче, щоб підключити свій пристрій до MQTT-брокера:

Глибше занурення в MQTT

Теми можуть мати ієрархію, і клієнти можуть підписуватися на різні рівні ієрархії, використовуючи символи підстановки. Наприклад, ви можете надсилати телеметричні повідомлення про температуру в тему /telemetry/temperature і повідомлення про вологість у тему /telemetry/humidity, а у вашому хмарному додатку підписатися на тему /telemetry/*, щоб отримувати як повідомлення про температуру, так і про вологість.

Повідомлення можуть надсилатися з різною якістю обслуговування (QoS), що визначає гарантію отримання повідомлення.

  • Не більше одного разу — повідомлення надсилається лише один раз, і клієнт та брокер не вживають додаткових заходів для підтвердження доставки (відправив і забув).
  • Щонайменше один раз — повідомлення повторно надсилається відправником кілька разів, доки не буде отримано підтвердження (підтверджена доставка).
  • Рівно один раз — відправник і отримувач виконують двоетапне рукостискання, щоб гарантувати отримання лише однієї копії повідомлення (гарантована доставка).

Які ситуації можуть вимагати гарантованої доставки повідомлення замість відправки за принципом "відправив і забув"?

Хоча назва протоколу включає "Message Queueing" (черги повідомлень), MQTT насправді не підтримує черги повідомлень. Це означає, що якщо клієнт відключається, а потім знову підключається, він не отримає повідомлення, надіслані під час відключення, за винятком тих, які він уже почав обробляти за допомогою процесу QoS. Повідомлення можуть мати прапорець "збережено". Якщо цей прапорець встановлено, MQTT-брокер зберігатиме останнє повідомлення, надіслане в тему з цим прапорцем, і надсилатиме його будь-яким клієнтам, які пізніше підпишуться на цю тему. Таким чином, клієнти завжди отримуватимуть останнє повідомлення.

MQTT також підтримує функцію "keep alive", яка перевіряє, чи з’єднання все ще активне під час тривалих пауз між повідомленнями.

🦟 Mosquitto від Eclipse Foundation пропонує безкоштовний MQTT-брокер, який ви можете запустити самостійно для експериментів із MQTT, а також публічний MQTT-брокер для тестування вашого коду, розміщений за адресою test.mosquitto.org.

MQTT-з’єднання можуть бути публічними та відкритими або зашифрованими та захищеними за допомогою імен користувачів і паролів або сертифікатів.

💁 MQTT працює через TCP/IP, той самий базовий мережевий протокол, що й HTTP, але на іншому порту. Ви також можете використовувати MQTT через вебсокети для зв’язку з веб-додатками, які працюють у браузері, або в ситуаціях, коли брандмауери чи інші мережеві правила блокують стандартні з’єднання MQTT.

Телеметрія

Слово "телеметрія" походить від грецьких коренів і означає "вимірювання на відстані". Телеметрія — це процес збору даних із сенсорів і надсилання їх до хмари.

💁 Один із перших пристроїв телеметрії був винайдений у Франції в 1874 році та передавав у реальному часі дані про погоду та глибину снігу з Монблану до Парижа. Він використовував фізичні дроти, оскільки бездротові технології тоді ще не існували.

Повернемося до прикладу розумного термостата з Уроку 1.

Інтернет-підключений термостат із кількома сенсорами в кімнатах

Термостат має сенсори температури для збору телеметрії. Найімовірніше, він має один вбудований сенсор температури та може підключатися до кількох зовнішніх сенсорів температури через бездротовий протокол, наприклад, Bluetooth Low Energy (BLE).

Приклад телеметричних даних, які він може надсилати:

Назва Значення Опис
thermostat_temperature 18°C Температура, виміряна вбудованим сенсором термостата
livingroom_temperature 19°C Температура, виміряна віддаленим сенсором температури, який названо livingroom, щоб ідентифікувати кімнату
bedroom_temperature 21°C Температура, виміряна віддаленим сенсором температури, який названо bedroom, щоб ідентифікувати кімнату

Хмарний сервіс може використовувати ці телеметричні дані для прийняття рішень щодо того, які команди надсилати для керування опаленням.

Надсилання телеметрії з вашого IoT-пристрою

Наступний крок у додаванні інтернет-керування до вашого нічника — це надсилання телеметрії рівня освітлення до MQTT-брокера в тему телеметрії.

Завдання — надішліть телеметрію з вашого IoT-пристрою

Надішліть телеметрію рівня освітлення до MQTT-брокера.

Дані надсилаються у форматі JSON — скорочення від JavaScript Object Notation, стандарту для кодування даних у текстовому вигляді за допомогою пар "ключ/значення".

Якщо ви раніше не стикалися з JSON, ви можете дізнатися більше про нього в документації JSON.org.

Виконайте відповідний крок нижче, щоб надіслати телеметрію з вашого пристрою до MQTT-брокера:

Отримання телеметрії з MQTT-брокера

Немає сенсу надсилати телеметрію, якщо на іншому кінці немає нічого, що її слухає. Телеметрія рівня освітлення потребує чогось, що буде її обробляти. Цей "серверний" код — це той тип коду, який ви розгорнете в хмарному сервісі як частину більшого IoT-додатку, але тут ви запустите цей код локально на своєму комп’ютері (або на вашому Raspberry Pi, якщо ви кодуєте безпосередньо на ньому). Серверний код складається з Python-додатку, який слухає телеметричні повідомлення через MQTT із рівнями освітлення. Пізніше в цьому уроці ви змусите його відповідати командним повідомленням із інструкціями увімкнути або вимкнути світлодіод.

Проведіть дослідження: Що відбувається з MQTT-повідомленнями, якщо немає слухача?

Встановіть Python і VS Code

Якщо у вас локально не встановлені Python і VS Code, вам потрібно буде їх встановити, щоб написати серверний код. Якщо ви використовуєте віртуальний IoT-пристрій або працюєте на своєму Raspberry Pi, ви можете пропустити цей крок, оскільки вони вже мають бути встановлені та налаштовані.

Завдання — встановіть Python і VS Code

Встановіть Python і VS Code.

  1. Встановіть Python. Зверніться до сторінки завантажень Python для інструкцій щодо встановлення останньої версії Python.

  2. Встановіть Visual Studio Code (VS Code). Це редактор, який ви будете використовувати для написання коду вашого віртуального пристрою на Python. Зверніться до документації VS Code для інструкцій щодо встановлення VS Code. 💁 Ви можете використовувати будь-який Python IDE або редактор для цих уроків, якщо у вас є улюблений інструмент, але уроки будуть давати інструкції, засновані на використанні VS Code.

  3. Встановіть розширення Pylance для VS Code. Це розширення для VS Code, яке забезпечує підтримку мови Python. Ознайомтеся з документацією до розширення Pylance для інструкцій щодо встановлення цього розширення у VS Code.

Налаштування віртуального середовища Python

Однією з потужних функцій Python є можливість встановлювати пакети pip — це пакети коду, написані іншими людьми та опубліковані в Інтернеті. Ви можете встановити пакет pip на свій комп’ютер однією командою, а потім використовувати цей пакет у своєму коді. Ви будете використовувати pip для встановлення пакета для комунікації через MQTT.

За замовчуванням, коли ви встановлюєте пакет, він доступний усюди на вашому комп’ютері, і це може призвести до проблем із версіями пакетів — наприклад, одна програма залежить від однієї версії пакета, яка перестає працювати, коли ви встановлюєте нову версію для іншої програми. Щоб уникнути цієї проблеми, ви можете використовувати віртуальне середовище Python, яке є, по суті, копією Python у спеціальній папці, і коли ви встановлюєте пакети pip, вони встановлюються лише в цю папку.

Завдання — налаштувати віртуальне середовище Python

Налаштуйте віртуальне середовище Python і встановіть пакети pip для MQTT.

  1. У вашому терміналі або командному рядку виконайте наступне в обраному вами місці, щоб створити та перейти до нової директорії:

    mkdir nightlight-server
    cd nightlight-server
    
  2. Тепер виконайте наступне, щоб створити віртуальне середовище у папці .venv:

    python3 -m venv .venv
    

    💁 Вам потрібно явно викликати python3, щоб створити віртуальне середовище, на випадок якщо у вас встановлений Python 2 разом із Python 3 (остання версія). Якщо у вас встановлений Python 2, то виклик python використовуватиме Python 2 замість Python 3.

  3. Активуйте віртуальне середовище:

    • У Windows:

      • Якщо ви використовуєте Command Prompt або Command Prompt через Windows Terminal, виконайте:

        .venv\Scripts\activate.bat
        
      • Якщо ви використовуєте PowerShell, виконайте:

        .\.venv\Scripts\Activate.ps1
        
    • У macOS або Linux виконайте:

      source ./.venv/bin/activate
      

    💁 Ці команди слід виконувати з того ж місця, де ви виконували команду для створення віртуального середовища. Вам ніколи не потрібно заходити в папку .venv, ви завжди повинні виконувати команду активації та будь-які команди для встановлення пакетів або запуску коду з папки, в якій ви створили віртуальне середовище.

  4. Після активації віртуального середовища команда python за замовчуванням запускатиме версію Python, яка використовувалася для створення віртуального середовища. Виконайте наступне, щоб отримати версію:

    python --version
    

    Вивід буде схожий на наступний:

    (.venv) ➜  nightlight-server python --version
    Python 3.9.1
    

    💁 Ваша версія Python може відрізнятися — якщо це версія 3.6 або новіша, все добре. Якщо ні, видаліть цю папку, встановіть новішу версію Python і спробуйте ще раз.

  5. Виконайте наступні команди, щоб встановити пакет pip для Paho-MQTT, популярної бібліотеки MQTT.

    pip install paho-mqtt
    

    Цей пакет pip буде встановлений лише у віртуальному середовищі та не буде доступний поза ним.

Написання серверного коду

Тепер можна написати серверний код на Python.

Завдання — написати серверний код

Напишіть серверний код.

  1. У вашому терміналі або командному рядку виконайте наступне у віртуальному середовищі, щоб створити файл Python під назвою app.py:

    • У Windows виконайте:

      type nul > app.py
      
    • У macOS або Linux виконайте:

      touch app.py
      
  2. Відкрийте поточну папку у VS Code:

    code .
    
  3. Коли VS Code запуститься, він активує віртуальне середовище Python. Це буде відображено в нижній панелі стану:

    VS Code показує вибране віртуальне середовище

  4. Якщо термінал VS Code вже працює під час запуску VS Code, віртуальне середовище в ньому не буде активоване. Найпростіше — закрити термінал за допомогою кнопки Kill the active terminal instance:

    Кнопка VS Code Kill the active terminal instance

  5. Запустіть новий термінал VS Code, вибравши Terminal -> New Terminal або натиснувши CTRL+`. Новий термінал завантажить віртуальне середовище, і виклик активації з’явиться в терміналі. Назва віртуального середовища (.venv) також буде вказана в запиті:

    ➜  nightlight-server source .venv/bin/activate
    (.venv) ➜  nightlight 
    
  6. Відкрийте файл app.py у провіднику VS Code і додайте наступний код:

    import json
    import time
    
    import paho.mqtt.client as mqtt
    
    id = '<ID>'
    
    client_telemetry_topic = id + '/telemetry'
    client_name = id + 'nightlight_server'
    
    mqtt_client = mqtt.Client(client_name)
    mqtt_client.connect('test.mosquitto.org')
    
    mqtt_client.loop_start()
    
    def handle_telemetry(client, userdata, message):
        payload = json.loads(message.payload.decode())
        print("Message received:", payload)
    
    mqtt_client.subscribe(client_telemetry_topic)
    mqtt_client.on_message = handle_telemetry
    
    while True:
        time.sleep(2)
    

    Замініть <ID> у рядку 6 на унікальний ID, який ви використовували під час створення коду пристрою.

    ⚠️ Цей ID має бути тим самим, який ви використовували на своєму пристрої, інакше серверний код не зможе підписатися або публікувати повідомлення у правильну тему.

    Цей код створює клієнта MQTT з унікальним ім’ям і підключається до брокера test.mosquitto.org. Потім він запускає цикл обробки, який працює у фоновому потоці, слухаючи повідомлення на будь-яких підписаних темах.

    Клієнт підписується на повідомлення в темі телеметрії та визначає функцію, яка викликається, коли отримується повідомлення. Коли отримується повідомлення телеметрії, викликається функція handle_telemetry, яка виводить отримане повідомлення в консоль.

    Нарешті, нескінченний цикл підтримує роботу програми. Клієнт MQTT слухає повідомлення у фоновому потоці та працює весь час, поки працює основна програма.

  7. У терміналі VS Code виконайте наступне, щоб запустити ваш Python-додаток:

    python app.py
    

    Додаток почне слухати повідомлення від IoT-пристрою.

  8. Переконайтеся, що ваш пристрій працює та надсилає телеметричні повідомлення. Змініть рівні освітлення, які виявляє ваш фізичний або віртуальний пристрій. Отримані повідомлення будуть виводитися в термінал.

    (.venv) ➜  nightlight-server python app.py
    Message received: {'light': 0}
    Message received: {'light': 400}
    

    Файл app.py у віртуальному середовищі nightlight має бути запущений, щоб файл app.py у віртуальному середовищі nightlight-server міг отримувати надіслані повідомлення.

💁 Ви можете знайти цей код у папці code-server/server.

Як часто слід надсилати телеметрію?

Одним із важливих питань щодо телеметрії є те, як часто вимірювати та надсилати дані? Відповідь — це залежить. Якщо вимірювати часто, ви зможете швидше реагувати на зміни у вимірюваннях, але це споживає більше енергії, більше пропускної здатності, генерує більше даних і потребує більше хмарних ресурсів для обробки. Ви повинні вимірювати достатньо часто, але не надто часто.

Для термостата, ймовірно, достатньо вимірювати кожні кілька хвилин, оскільки температура не змінюється так часто. Якщо вимірювати лише раз на день, ви можете опинитися в ситуації, коли опалення працює за нічними температурами посеред сонячного дня, тоді як якщо вимірювати кожну секунду, ви отримаєте тисячі непотрібних повторюваних вимірювань температури, які з’їдатимуть швидкість і пропускну здатність Інтернету користувачів (проблема для людей із обмеженими тарифними планами), споживатимуть більше енергії, що може бути проблемою для пристроїв на батарейках, таких як віддалені датчики, і збільшуватимуть вартість хмарних обчислювальних ресурсів провайдера для їх обробки та зберігання.

Якщо ви контролюєте дані про обладнання на заводі, яке у разі поломки може спричинити катастрофічні збитки та втрату мільйонів доларів доходу, тоді може бути необхідно вимірювати кілька разів на секунду. Краще витратити пропускну здатність, ніж пропустити телеметрію, яка вказує на те, що машину потрібно зупинити та відремонтувати, перш ніж вона зламається.

💁 У такій ситуації ви можете розглянути можливість використання пристрою на краю мережі для попередньої обробки телеметрії, щоб зменшити залежність від Інтернету.

Втрата з’єднання

Інтернет-з’єднання можуть бути ненадійними, і перебої є звичайним явищем. Що має робити IoT-пристрій у таких обставинах — втратити дані чи зберегти їх до відновлення з’єднання? Знову ж таки, відповідь — це залежить.

Для термостата дані, ймовірно, можна втратити, як тільки буде отримано нове вимірювання температури. Систему опалення не цікавить, що 20 хвилин тому температура була 20,5°C, якщо зараз вона становить 19°C, адже саме поточна температура визначає, чи має опалення бути увімкнене чи вимкнене.

Для обладнання ви, можливо, захочете зберегти дані, особливо якщо вони використовуються для аналізу тенденцій. Існують моделі машинного навчання, які можуть виявляти аномалії в потоках даних, аналізуючи дані за певний період часу (наприклад, за останню годину) і виявляючи аномальні дані. Це часто використовується для прогнозного обслуговування, щоб виявити ознаки того, що щось може зламатися найближчим часом, і ви могли б відремонтувати або замінити це до того, як це станеться. Ви, можливо, захочете, щоб кожен біт телеметрії для машини був надісланий, щоб його можна було обробити для виявлення аномалій, тому, як тільки IoT-пристрій зможе відновити з’єднання, він надішле всю телеметрію, згенеровану під час перебою Інтернету.

Дизайнери IoT-пристроїв також повинні враховувати, чи можна використовувати IoT-пристрій під час перебою Інтернету або втрати сигналу через розташування. Розумний термостат повинен мати можливість приймати деякі обмежені рішення для керування опаленням, якщо він не може надіслати телеметрію в хмару через перебій.

Цей Ferrari перестав працювати, бо хтось спробував оновити його під землею, де немає мобільного зв’язку

Для MQTT, щоб впоратися з втратою з’єднання, код пристрою та сервера має бути відповідальним за забезпечення доставки повідомлень, якщо це необхідно, наприклад, вимагаючи, щоб усі надіслані повідомлення отримували відповіді додатковими повідомленнями на темі відповіді, і якщо ні, вони вручну ставляться в чергу для повторної відправки пізніше.

Команди

Команди — це повідомлення, які надсилаються з хмари на пристрій, інструктуючи його щось зробити. Зазвичай це передбачає надання якогось вихідного сигналу через виконавчий механізм, але це може бути інструкція для самого пристрою, наприклад, перезавантажитися або зібрати додаткову телеметрію та повернути її як відповідь на команду.

Інтернет-підключений термостат отримує команду увімкнути опалення

Термостат може отримати команду з хмари увімкнути опалення. На основі телеметричних даних від усіх датчиків хмарний сервіс вирішив, що опалення має бути увімкнене, тому він надсилає відповідну команду.

Надсилання команд до брокера MQTT

Наступний крок для нашого нічника, керованого через Інтернет, — це серверний код, який надсилає команду назад на IoT-пристрій для керування світлом залежно від рівнів освітлення, які він виявляє.

  1. Відкрийте серверний код у VS Code.

  2. Додайте наступний рядок після оголошення client_telemetry_topic, щоб визначити, до якої теми надсилати команди:

    server_command_topic = id + '/commands'
    
  3. Додайте наступний код у кінець функції handle_telemetry:

    command = { 'led_on' : payload['light'] < 300 }
    print("Sending message:", command)
    
    client.publish(server_command_topic, json.dumps(command))
    

    Це надсилає JSON-повідомлення до теми команд зі значенням led_on, встановленим у true або false залежно від того, чи світло менше 300. Якщо світло менше 300, надсилається true, щоб інструктувати пристрій увімкнути світлодіод.

  4. Запустіть код, як і раніше.

  5. Змініть рівні освітлення, які виявляє ваш фізичний або віртуальний пристрій. Отримані повідомлення та надіслані команди будуть записані в термінал:

    (.venv) ➜  nightlight-server python app.py
    Message received: {'light': 0}
    Sending message: {'led_on': True}
    Message received: {'light': 400}
    Sending message: {'led_on': False}
    

💁 Телеметрія та команди надсилаються на одну тему кожна. Це означає, що телеметрія від кількох пристроїв з’являтиметься на одній темі телеметрії, а команди для кількох пристроїв — на одній темі команд. Якщо ви хочете надіслати команду конкретному пристрою, ви можете використовувати кілька тем, названих унікальним ідентифікатором пристрою, наприклад /commands/device1, /commands/device2. Таким чином, пристрій може слухати повідомлення, призначені лише для цього одного пристрою.

💁 Ви можете знайти цей код у папці code-commands/server.

Обробка команд на IoT-пристрої

Тепер, коли команди надсилаються з сервера, ви можете додати код на IoT-пристрій для їх обробки та керування світлодіодом.

Виконайте відповідний крок нижче, щоб слухати команди від брокера MQTT:

Коли цей код буде написаний і запущений, експериментуйте зі зміною рівнів освітлення. Спостерігайте за виводом із сервера та пристрою, а також за світлодіодом, коли ви змінюєте рівні освітлення.

Втрата з’єднання

Що має робити хмарний сервіс, якщо йому потрібно надіслати команду IoT-пристрою, який перебуває в автономному режимі? Знову ж таки, відповідь — це залежить.

Якщо остання команда замінює попередню, то попередні, ймовірно, можна ігнорувати. Якщо хмарний сервіс надсилає команду увімкнути опалення, а потім надсилає команду вимкнути його, то команду увімкнення можна ігнорувати та не надсилати повторно.

Якщо команди потрібно об Для цих пристроїв подумайте, які повідомлення вони можуть надсилати або отримувати. Яку телеметрію вони надсилають? Які повідомлення або команди вони можуть отримувати? Як ви думаєте, чи є вони безпечними?

Тест після лекції

Тест після лекції

Огляд і самостійне навчання

Дізнайтеся більше про MQTT на сторінці Wikipedia про MQTT.

Спробуйте запустити MQTT-брокер самостійно, використовуючи Mosquitto, і підключіться до нього зі свого IoT-пристрою та серверного коду.

💁 Порада - за замовчуванням Mosquitto не дозволяє анонімні підключення (тобто підключення без імені користувача та пароля) і не дозволяє підключення ззовні комп’ютера, на якому він працює.
Ви можете виправити це за допомогою конфігураційного файлу mosquitto.conf з наступним вмістом:

listener 1883 0.0.0.0
allow_anonymous true

Завдання

Порівняйте та зіставте MQTT з іншими протоколами зв’язку


Відмова від відповідальності:
Цей документ був перекладений за допомогою сервісу автоматичного перекладу Co-op Translator. Хоча ми прагнемо до точності, будь ласка, майте на увазі, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ на його рідній мові слід вважати авторитетним джерелом. Для критичної інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникають внаслідок використання цього перекладу.