С помощью этого руководства вы научитесь основам IoT-автоматизации и выполните проект по управлению температурой в умном доме.
Вы создадите виртуальную машину Ubuntu 22.04, разработаете и развернете на ней систему умного дома, которая будет управлять кондиционером в зависимости от температуры в помещении.
Вы будете использовать скрипты в качестве эмуляторов умных устройств, но полученные навыки можно применять и при работе с физическими устройствами.
Для взаимодействия со скриптами используется MQTT-брокер Mosquitto и программа Node-RED. После того как эмулятор датчика публикует данные в определенный топик, центр управления или другие умные устройства получают MQTT-сообщения. Node-RED подписывается на MQTT-сообщения, обрабатывает данные и запускает действия умных устройств.
В этом практическом руководстве эмулятор датчика выводит показатели температуры, Node-RED обрабатывает данные и включает или выключает кондиционер.
Вы будете использовать следующие сервисы:
Виртуальные машины — сервис, в рамках которого предоставляется виртуальная машина для размещения приложения.
Публичный IP-адрес для доступа к сервису через интернет.
Node-RED — программа для визуального проектирования автоматизаций.
Mosquitto — брокер MQTT для обмена сообщениями между умными устройствами.
Шаги:
Перед началом работы
-
Если вы уже зарегистрированы, войдите под своей учетной записью.
Сгенерируйте ключевую пару и загрузите публичный ключ в Cloud.ru Evolution.
1. Разверните ресурсы в облаке
На этом шаге вы подготовите сеть, группу безопасности, виртуальную машину.
Создайте виртуальную сеть с названием vpc-home.
Создайте подсеть со следующими параметрами:
Название: subnet-home.
VPC: vpc-home.
Адрес: 10.10.1.0/24.
DNS-серверы: 8.8.8.8.
Создайте группу безопасности с названием sg-home и добавьте в нее правила:
Правила входящего трафика:
Протокол
Порт
Тип источника
Источник
TCP
1883
IP-адрес
0.0.0.0/0
TCP
1880
IP-адрес
0.0.0.0/0
TCP
22
IP-адрес
0.0.0.0/0
Правила исходящего трафика:
Протокол
Порт
Тип адресата
Адресат
TCP
1883
IP-адрес
0.0.0.0/0
Любой
Любой
IP-адрес
0.0.0.0/0
Создайте виртуальную машину со следующими параметрами:
Название: vm-home.
Образ: публичный образ Ubuntu 22.04.
Сетевой интерфейс: выберите тип Подсеть с публичным IP.
VPC: vpc-home.
Подсеть: subnet-home.
Публичный IP: оставьте Арендовать новый или выберите IP-адрес из списка арендованных.
Группы безопасности: добавьте sg-home.
Метод аутентификации: Публичный ключ.
Публичный ключ: укажите ключ, созданный ранее.
Остальные параметры оставьте по умолчанию или выберите на свое усмотрение.
Убедитесь, что ресурсы созданы и отображаются в личном кабинете:
На странице Сети → VPC отображается сеть vpc-home, а в списке ее подсетей — subnet-home.
На странице Сети → Группы безопасности отображается группа безопасности sg-home со статусом «Создана».
На странице Инфраструктура → Виртуальные машины отображается виртуальная машина vm-home со статусом «Запущена».
2. Настройте окружение виртуальной машины
На этом шаге вы установите необходимые пакеты и подготовите среду для системы умного дома.
Обновите систему и установите утилиты:
sudo apt update && sudo apt upgrade -ysudo apt install curl wget unzip software-properties-common -yУстановите пакетный менеджер pip и обновите его до последней версии:
sudo apt install -y python3-pip &&python3 -m pip install --upgrade pipУстановите Node.js и npm:
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -sudo apt install -y nodejs build-essentialУстановите Node-RED:
sudo npm install -g --unsafe-perm node-redНастройте автоматический запуск Node-RED:
sudo npm install -g pm2pm2 start $(which node-red) --name noderedpm2 save && pm2 startupУстановите Mosquitto:
sudo apt install -y mosquitto mosquitto-clientssudo systemctl enable mosquittoУстановите Python-библиотеку paho-mqtt для работы с MQTT-протоколом с разрешением на модификацию системных пакетов:
pip3 install paho-mqtt --break-system-packages
3. Настройте основные компоненты умного дома
На этом шаге вы добавите компоненты умного дома — скрипты-эмуляторы датчика температуры и кондиционера.
Создайте директорию проекта и перейдите в нее:
mkdir smart_home && cd smart_homeСоздайте файл temp_sensor.py:
nano temp_sensor.pyДобавьте в файл скрипт-эмулятор датчика температуры, который каждые 5 секунд генерирует случайный показатель температуры в диапазоне 18–35 °C.
import timeimport randomimport paho.mqtt.client as mqttbroker = "localhost"topic = "/home/room1/temp"client = mqtt.Client()client.connect(broker, 1883, 60)while True:temp = round(random.uniform(18.0, 35.0), 1)print(f"[Sensor] Current temperature: {temp} °C")client.publish(topic, temp)time.sleep(5)Где:
broker = "localhost" — указывает брокер. Значение localhost используется, если Mosquitto установлен на той же машине, на которой запускается эмулятор.
topic = "/home/room1/temp" — указывает MQTT-топик, в который публикуется сгенерированный показатель.
Создайте файл ac_emulator.py:
nano ac_emulator.pyДобавьте в файл скрипт-эмулятор кондиционера, который подключается к Mosquitto и подписывается на MQTT-топик /home/room1/ac. При получении сообщения скрипт выводит информацию о том, включен кондиционер или нет.
import paho.mqtt.client as mqtttopic = "/home/room1/ac"def on_connect(client, userdata, flags, rc):print("[AC] Connected with result code " + str(rc))client.subscribe(topic)def on_message(client, userdata, msg):command = msg.payload.decode()print(f"[AC] Received command: {command}")if command.upper() == "ON":print("[AC] ❄️ Air conditioner turned ON")elif command.upper() == "OFF":print("[AC] 🔕 Air conditioner turned OFF")else:print("[AC] ⚠️ Unknown command")client = mqtt.Client()client.on_connect = on_connectclient.on_message = on_messageclient.connect("localhost", 1883, 60)client.loop_forever()
4. Визуализируйте работу компонентов умного дома
На этом шаге вы настроите узлы блок-схемы в Node-RED, чтобы создать сценарий работы умного дома.
На компьютере откройте браузер и перейдите по адресу http://<ip-address>:1880/, где <ip-address> — это публичный IP-адрес виртуальной машины.
Откроется веб-интерфейс Node-RED.
Перетащите в рабочую область следующие узлы:
mqtt in
function
mqtt out
Настройте узел mqtt in:
В рабочей области дважды нажмите на первый элемент mqtt.
В открывшемся окне cправа от поля Сервер нажмите +.
Укажите параметры:
Имя: my_server;
Адрес: localhost;
Порт: 1883.
Нажмите Добавить.
Укажите остальные параметры узла:
Тема: /home/room1/temp.
Quality of Service (QoS): 0.
Имя: Температура.
Нажмите Готово.
Настройте узел function, чтобы он сравнивал температуру с пороговыми значениями и отправлял кондиционеру команду ON или OFF.
В рабочей области дважды нажмите на элемент function.
В поле Имя введите значение Порог температуры.
На вкладке Функция в поле ввода вставьте код:
let temp = parseFloat(msg.payload);if (temp > 26) {msg.payload = "ON";} else {msg.payload = "OFF";}return msg;
Настройте узел mqtt out.
Дважды нажмите на второй элемент mqtt.
Укажите следующие значения параметров:
Сервер: my_server;
Тема: /home/room1/ac;
Имя: Кондиционер.
Нажмите Готово.
Соедините узлы.
5. Протестируйте сценарий
На этом шаге вы запустите скрипты-эмуляторы умных устройств, чтобы протестировать сценарий.
Откройте два окна терминала. В обоих окнах подключитесь по SSH к виртуальной машине, на которой вы настраивали систему умного дома.
В одном терминале запустите эмулятор датчика температуры:
python3 temp_sensor.pyВо втором терминале запустите эмулятор кондиционера:
python3 ac_emulator.pyНа странице Node-RED http://<ip-address>:1880/ нажмите Развернуть.
Откройте терминал с запущенным эмулятором кондиционера.
В терминале будет отображаться информация о включении и выключении кондиционера в зависимости от полученной из топика температуры.
Результат
Вы настроили рабочий поток на основе MQTT-сообщений. В пределах этого потока сервер умного дома Node-RED отслеживает изменения полученной с датчика температуры информации и при необходимости включает или выключает кондиционер.
Далее вы можете настроить отправку сообщений о температуре и состоянии кондиционера в Telegram.
- Перед началом работы
- 1. Разверните ресурсы в облаке
- 2. Настройте окружение виртуальной машины
- 3. Настройте основные компоненты умного дома
- 4. Визуализируйте работу компонентов умного дома
- 5. Протестируйте сценарий
- Результат