将 PLCnext 控制器无缝接入 Home Assistant 实现智能家居控制
本演示项目展示如何通过 REST API 和 Modbus TCP,将 PLCnext 控制器作为智能家居设备轻松接入开源家庭自动化软件 Home Assistant。借助 PLCnext 控制器,您可在自动化中使用 Axioline 组件,轻松扩展比树莓派 GPIO 引脚更强大的输出能力、Pt100 温度传感器以及 DALI 等总线系统。所需条件仅为一套正常运行的 Home Assistant 安装和一个包含可运行项目的 PLCnext 控制器。
前置条件
- Home Assistant Core 2021.1.5
- Balena
- PLCnext Engineer 2020.6
- AXC F 2152FW 2020.0 LTS
- 树莓派 2 镜像(启动可能耗时一小时)
所需库:
- Modbus_TCP(Build 8)for PLCnext Engineer
Home Assistant 服务:
- Telegram
- SMTP
功能描述
为简要展示 PLCnext 控制器作为智能家居设备的可能性,项目演示了通过继电器控制供电电压,利用发送给 Telegram Bot 的命令对其他设备进行硬复位,并在重启前发送邮件通知。本例将展示两种将 PLCnext 控制器接入 Home Assistant 环境的不同方式。
架构图
Modbus TCP 连接方式
首先,在 PLCnext 项目中使用 Modbus TCP 库添加 Modbus 服务器,配置同库示例。Modbus 寄存器的选择取决于数据类型及用途,本例将变量映射到线圈寄存器。
注意: Modbus 服务器不支持多连接。若连接未正确结束(测试时常发生),服务器将进入错误状态,需手动重启。建议在 PLCnext 项目中编程实现 Modbus 服务器自动重启。
Home Assistant 端作为 Modbus 客户端有两种主流方案:一是使用 Node-RED 插件及其可用的 Modbus 库;二是更直观地在 Home Assistant 的 configuration.yaml 中配置实体。下例使用标准开关服务处理布尔变量,因其内置 turn_on/turn_off 功能可直接设置/复位变量。
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 服务器报错。可通过使用 Modbus UDP 或在 PLCnext 项目中运行两个 Modbus 服务器(一读一写)规避。
REST API 连接方式
第二种方式是 PLCnext REST 数据接口。该接口关联 PLCnext HMI,因此项目中至少需包含一个 HMI 页面(可为空)以启用 REST API,且变量需标记 HMI 标志。详细信息请参阅 PLCnext Info Center。
本例在 Home Assistant 侧使用 Node-RED 插件发起 HTTP 请求。安装步骤请参考相关说明并完成两步操作。
若 PLCnext 项目启用了 HMI 用户认证,Node-RED 中的认证流程如下图所示:
该流程执行认证并存储访问令牌供后续请求使用。HTTP 请求的具体结构请查阅 PLCnext Info Center 文档。
要在 Node-RED 中获取 Home Assistant 数据,可使用 Node-RED 插件自带的多种节点。下图底部的简短流程在 Home Assistant 中创建新实体并监测其变化:当实体设为 true 时,PLCnext 控制器对应变量也置 true 触发复位;因 PLCnext 项目中复位变量会自动复位为 false,Home Assistant 实体也在 5 秒延迟后自动置 false。
Telegram Bot 集成
通过 Telegram Bot API 与 Home Assistant 通信。需按说明注册新 Bot。
telegram_bot:
- platform: polling
api_key: YOUR_API_TOKEN
allowed_chat_ids:
- YOUR_CHAT_ID_1
- YOUR_CHAT_ID_2
获取 Chat ID 的最简方法:给 Bot 发送一条消息,然后请求 https://api.telegram.org/botYOUR_API_TOKEN/getUpdates。
实用示例:Bot 每天早报天气提醒穿衣;本项目中,发送 "/MBrestartPLC" 命令触发 Home Assistant 自动化脚本,修改 Modbus 线圈寄存器值实现硬复位;"/RESTrestartPLC" 则通过 REST API 实现相同功能。
SMTP 邮件通知
Home Assistant 可通过 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
自动化规则
所有服务和库就绪后,需在 Home Assistant 的 automations.yaml 中编写自动化规则将其串联。自动化结构简单:alias 为名称,trigger 定义触发条件(如特定 Telegram 命令),action 定义执行任务(如设置变量、发送邮件)。
| Modbus TCP | REST API |
|---|---|
|
|
总结
该演示项目证明了将 PLCnext 控制器集成到家庭自动化系统中非常简单。PLC 所有数据在 Home Assistant 中可用,为基于天气或其他数据的更复杂 PLC 程序控制与监控铺平了道路。
工业技术
- 基于 Sensorflare 与树莓派的 433 MHz 智能家居控制器构建指南
- 设备管理:支撑智能电表百万级规模部署
- 盘中过孔(VIA-in-Pad)提升PCB性能的关键优势
- 桌面级CNC金属加工机:家庭工坊的高性价比精密制造利器
- 在PLCnext设备上用grpcurl安全远程访问gRPC
- 利用 SNMP 优化 PLCnext Control 设备:实用指南
- 在 PLCnext Linux 上安装 APT 包管理器:分步指南
- 智能家居技术如何重塑日常生活
- 借助开源IIoT边缘网关加速Modbus设备集成
- 智能家居无缝无线组网:从开箱到安全远程配置的完整指南
- Modbus协议在IIoT边缘开发中的实战:树莓派构建安全传感器数据流
- 弥合智能家居技能差距:为何英国落后于欧洲