|
|
<!--
|
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
|
{
|
|
|
"original_hash": "c527ce85d69b1a3875366ec61cbed8aa",
|
|
|
"translation_date": "2025-08-26T23:09:20+00:00",
|
|
|
"source_file": "1-getting-started/lessons/4-connect-internet/single-board-computer-commands.md",
|
|
|
"language_code": "ru"
|
|
|
}
|
|
|
-->
|
|
|
# Управляйте ночником через Интернет - Виртуальное 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-топик, на который устройство подпишется для получения команд управления светодиодом.
|
|
|
|
|
|
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`, светодиод включается, в противном случае он выключается.
|
|
|
|
|
|
MQTT-клиент подписывается на топик, по которому сервер будет отправлять сообщения, и устанавливает функцию `handle_command` для вызова при получении сообщения.
|
|
|
|
|
|
> 💁 Обработчик `on_message` вызывается для всех топиков, на которые выполнена подписка. Если позже вы напишете код для прослушивания нескольких топиков, вы сможете получить топик, на который было отправлено сообщение, из объекта `message`, переданного в функцию-обработчик.
|
|
|
|
|
|
1. Запустите код так же, как вы запускали код из предыдущей части задания. Если вы используете виртуальное IoT-устройство, убедитесь, что приложение CounterFit запущено, а датчик света и светодиод созданы на правильных пинах.
|
|
|
|
|
|
1. Изменяйте уровень освещенности, который фиксирует ваше физическое или виртуальное устройство. Сообщения, которые принимаются и отправляются, будут отображаться в терминале. Светодиод также будет включаться и выключаться в зависимости от уровня освещенности.
|
|
|
|
|
|
> 💁 Этот код можно найти в папке [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). Хотя мы стремимся к точности, пожалуйста, имейте в виду, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникшие в результате использования данного перевода. |