|
|
<!--
|
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
|
{
|
|
|
"original_hash": "c527ce85d69b1a3875366ec61cbed8aa",
|
|
|
"translation_date": "2025-08-28T17:12:46+00:00",
|
|
|
"source_file": "1-getting-started/lessons/4-connect-internet/single-board-computer-commands.md",
|
|
|
"language_code": "uk"
|
|
|
}
|
|
|
-->
|
|
|
# Керуйте нічним світлом через Інтернет - Віртуальне IoT обладнання та Raspberry Pi
|
|
|
|
|
|
У цій частині уроку ви будете підписуватися на команди, які надсилаються з MQTT брокера на ваш Raspberry Pi або віртуальний IoT пристрій.
|
|
|
|
|
|
## Підписка на команди
|
|
|
|
|
|
Наступний крок — підписатися на команди, які надсилаються з MQTT брокера, і реагувати на них.
|
|
|
|
|
|
### Завдання
|
|
|
|
|
|
Підпишіться на команди.
|
|
|
|
|
|
1. Відкрийте проєкт нічного світла у VS Code.
|
|
|
|
|
|
1. Якщо ви використовуєте віртуальний IoT пристрій, переконайтеся, що термінал працює у віртуальному середовищі. Якщо ви використовуєте Raspberry Pi, віртуальне середовище не потрібне.
|
|
|
|
|
|
1. Додайте наступний код після визначення `client_telemetry_topic`:
|
|
|
|
|
|
```python
|
|
|
server_command_topic = id + '/commands'
|
|
|
```
|
|
|
|
|
|
`server_command_topic` — це MQTT-тема, на яку пристрій буде підписуватися для отримання команд для LED.
|
|
|
|
|
|
1. Додайте наступний код прямо над основним циклом, після рядка `mqtt_client.loop_start()`:
|
|
|
|
|
|
```python
|
|
|
def handle_command(client, userdata, message):
|
|
|
payload = json.loads(message.payload.decode())
|
|
|
print("Message received:", payload)
|
|
|
|
|
|
if payload['led_on']:
|
|
|
led.on()
|
|
|
else:
|
|
|
led.off()
|
|
|
|
|
|
mqtt_client.subscribe(server_command_topic)
|
|
|
mqtt_client.on_message = handle_command
|
|
|
```
|
|
|
|
|
|
Цей код визначає функцію `handle_command`, яка читає повідомлення як JSON-документ і шукає значення властивості `led_on`. Якщо значення встановлено на `True`, LED увімкнеться, інакше він вимкнеться.
|
|
|
|
|
|
MQTT-клієнт підписується на тему, на яку сервер надсилатиме повідомлення, і встановлює функцію `handle_command`, яка буде викликатися при отриманні повідомлення.
|
|
|
|
|
|
> 💁 Обробник `on_message` викликається для всіх тем, на які підписано. Якщо ви пізніше напишете код, який слухає кілька тем, ви можете отримати тему, на яку було надіслано повідомлення, з об'єкта `message`, переданого до функції-обробника.
|
|
|
|
|
|
1. Запустіть код так само, як ви запускали код з попередньої частини завдання. Якщо ви використовуєте віртуальний IoT пристрій, переконайтеся, що додаток CounterFit працює, а датчик світла та LED створені на правильних пинах.
|
|
|
|
|
|
1. Відрегулюйте рівні освітлення, які виявляє ваш фізичний або віртуальний пристрій. Повідомлення, які отримуються, і команди, які надсилаються, будуть записані в термінал. LED також буде вмикатися та вимикатися залежно від рівня освітлення.
|
|
|
|
|
|
> 💁 Ви можете знайти цей код у папці [code-commands/virtual-device](../../../../../1-getting-started/lessons/4-connect-internet/code-commands/virtual-device) або [code-commands/pi](../../../../../1-getting-started/lessons/4-connect-internet/code-commands/pi).
|
|
|
|
|
|
😀 Ви успішно запрограмували ваш пристрій на реагування на команди від MQTT брокера.
|
|
|
|
|
|
---
|
|
|
|
|
|
**Відмова від відповідальності**:
|
|
|
Цей документ був перекладений за допомогою сервісу автоматичного перекладу [Co-op Translator](https://github.com/Azure/co-op-translator). Хоча ми прагнемо до точності, будь ласка, майте на увазі, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ на його рідній мові слід вважати авторитетним джерелом. Для критичної інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникають внаслідок використання цього перекладу. |