Бесшовная интеграция PLCnext в Home Assistant для умного дома
Обзор демо-проекта
Этот проект демонстрирует, как использовать контроллер PLCnext в качестве устройства умного дома в открытом ПО Home Assistant через REST API и Modbus TCP. С контроллером PLCnext можно использовать модули Axioline для расширения возможностей: мощные выходы вместо GPIO Raspberry Pi, датчики температуры Pt100, шины DALI и др. Необходимы: рабочая установка Home Assistant и контроллер PLCnext с небольшим проектом.
Предварительные требования
- Home Assistant Core 2021.1.5
- Balena
- PLCnext Engineer 2020.6
- AXC F 2152FW 2020.0 LTS
- Образ Raspberry Pi 2 (запуск может занять до часа)
Библиотеки:
- Modbus_TCP (Build 8) для PLCnext Engineer
Сервисы Home Assistant:
- Telegram
- SMTP
Описание функционала
Проект показывает две возможности подключения PLCnext к Home Assistant. Контроллер может жестко перезагружать другие устройства, управляя их питанием через реле. Перезагрузки инициируются командами Telegram-бота, после чего отправляется email-уведомление.
Архитектура
Подключение через Modbus TCP
В проект PLCnext добавляется Modbus-сервер с помощью библиотеки Modbus TCP. Конфигурация аналогична примеру библиотеки. Переменные отображаются в coil-регистры. Важно: Modbus-сервер не поддерживает более одного соединения одновременно. При обрыве соединения сервер может войти в ошибку и потребует ручного перезапуска. Рекомендуется запрограммировать автоматический рестарт сервера в проекте PLCnext.
Для Modbus-клиента в Home Assistant есть два основных варианта: Node-RED или настройка сущности в configuration.yaml. Пример настройки переключателя (switch) для boolean-переменных:
modbus:
type: tcp
host: YOUR_SERVER_IP
port: 502
name: hub1
switch:
- platform: modbus
coils:
- name: restartMB
hub: hub1
slave: 1
coil: 13
При использовании Node-RED учтите, что он обычно открывает разные соединения для чтения и записи, что вызовет ошибку сервера. Решение: использовать Modbus UDP или два Modbus-сервера в PLCnext (один для чтения, другой для записи).
Подключение через REST API
Второй вариант — REST-интерфейс данных PLCnext. Он связан с HMI, поэтому в проекте должна быть хотя бы одна HMI-страница (даже пустая), а переменные должны иметь флаг HMI. Подробнее — в PLCnext Info Center.
На стороне Home Assistant используется Node-RED для генерации HTTP-запросов. Установка аддона описана в инструкциях. Если в проекте PLCnext включена аутентификация HMI-пользователей, аутентификация в Node-RED выглядит так:
Поток выполняет аутентификацию и сохраняет access token для последующих запросов. Структура HTTP-запросов описана в документации PLCnext Info Center.
Для доступа к данным Home Assistant в Node-RED используются встроенные ноды. Нижний поток создает новую сущность в Home Assistant, верхний отслеживает её изменения. Если сущность становится true, переменная в PLCnext также устанавливается в true и запускает перезагрузку. Так как переменная перезагрузки в PLCnext автоматически сбрасывается в false, сущность в Home Assistant также сбрасывается через 5 секунд.
Telegram-бот
Для связи с Home Assistant используется Telegram Bot API. Регистрация бота — по инструкции. Конфигурация в configuration.yaml:
telegram_bot:
- platform: polling
api_key: YOUR_API_TOKEN
allowed_chat_ids:
- YOUR_CHAT_ID_1
- YOUR_CHAT_ID_2
Узнать свой chat_id можно, написав боту сообщение и запросив https://api.telegram.org/botYOUR_API_TOKEN/getUpdates.
Пример использования: бот сообщает погоду каждое утро. В этом проекте бот выполняет жесткую перезагрузку PLC по команде /MBrestartPLC (через Modbus) или /RESTrestartPLC (через REST API).
SMTP
Home Assistant может отправлять email через SMTP. Настройка в configuration.yaml:
notify:
- name: SMTP_MESSENGER
platform: smtp
server: SMTP_SERVER
port: 587
timeout: 15
sender: YOUR_EMAIL_ADRESS
encryption: starttls
username: YOUR_USERNAME
password: YOUR_PASSWORD
recipient:
- EMAIL_ADRESS_OF_THE_RECIPIENT
sender_name: My Home Assistant
Автоматизации
Сервисы и библиотеки объединяются в автоматизациях в automations.yaml. Структура проста: alias (имя), trigger (условие), action (действие). Пример для двух способов подключения:
| Modbus TCP | REST API |
- id: '1'
alias: 'Trigger a reset of a controller via modbus'
trigger:
platform: event
event_type: telegram_command
event_data:
command: '/MBrestartPLC'
action:
- service: switch.turn_on
entity_id: switch.restartMB
- service: notify.SMTP_MESSENGER
data:
title: 'PLC message'
message: 'PLC restart initiated via modbus!' |
- id: '2'
alias: 'Trigger a reset of a controller via rest api'
trigger:
platform: event
event_type: telegram_command
event_data:
command: '/RESTrestartPLC'
action:
- service: switch.turn_on
entity_id: switch.restartREST
- service: notify.SMTP_MESSENGER
data:
title: 'PLC message'
message: 'PLC restart initiated via rest!' |
Заключение
Проект доказывает простоту интеграции PLCnext в домашнюю автоматизацию. Доступность всех данных PLC в Home Assistant открывает путь к более сложным приложениям: управление сложными PLC-программами в зависимости от погоды или других данных Home Assistant.
Промышленные технологии
- Device Management: масштабирование развертываний умных счетчиков через миллионы устройств
- Как технологии умного дома трансформируют повседневную жизнь
- Ускорение интеграции Modbus-устройств с открытым IIoT пограничным шлюзом
- Создание умного домашнего контроллера 433 МГц с Sensorflare и Raspberry Pi
- Преодоление разрыва навыков умного дома: почему Британия отстает от Европы
- Почему VIA-in-Pad улучшает производительность ПП: ключевые преимущества
- Доступные настольные ЧПУ-станки для прецизионной резки металла дома
- Безопасный удаленный gRPC доступ с grpcurl на устройствах PLCnext
- Оптимизация PLCnext Control с SNMP: Практическое руководство
- Установка пакетного менеджера APT на PLCnext Linux: пошаговое руководство