Home Assistant 支持通过 MQTT 协议与设备通信;
使用 C# 和 .NET 可以开发 Home Assistant 集成,但需要结合 MQTT 协议或第三方库实现。
.NET 可以通过 MQTT 库(MQTTnet)实现设备控制与状态上报。
例如:
自动发现设备:按照 MQTT 发现消息格式发布配置信息(如 [homeassistant/button/pc/mac/config](@ref)),Home Assistant 会自动识别设备1
。
状态控制:通过发布消息到 command_topic 控制设备,订阅 availability_topic 更新设备状态
我们已经成功在 Home Assistant 平台添加了 MQTT 服务器。通过 MQTT Client, 自己开发的设备或者传感器都能很方便的接入 Home Assistant
我们将介绍如何在.NET 中使用MQTTnet来创建一个简单的MQTT发布和订阅示例。这个示例包括一个树莓派上运行的MQTT服务端(home assistant)和一个MQTT客户端。
hass关于Discovery格式原文地址:https://www.home-assistant.io/integrations/mqtt/#mqtt-discovery
Discovery topic
<discovery_prefix>/<component>/[<node_id>/]<object_id>/config
本次选用的类库为c# MQTTnet
MQTTnet的源码托管在GitHub上,地址为:https://github.com/dotnet/MQTTnet
https://github.com/dotnet/MQTTnet
C#的MQTT系列
MQTT(一)C#使用 MQTTnet 快速实现 MQTT 通信
MQTT(二)在windows64位上安装Python环境
MQTT(三)Python客户端+net客户端+net服务端 简单通信
MQTT(四)树莓派开机自动运行Python客户端
MQTT(五)实现开源MQTT消息服务器
可以通过MQTT协议实现设备之间的通信,包括设备的发现、状态更新等功能。
使用.NET为Home Assistant添加自定义设备,实现电脑远程关机的功能
利用 MQTT auto discovery 特点来自动创建实体
Table of Contents
使用MQTTnet
官网项目网址:https://github.com/chkr1011/MQTTnet
首先我们需要在 .NET 中实现 MQTT 客户端
一种是更新ha中已有的实体;
一种是用自动发现直接在ha中创建实体
项目准备
首先,我们需要创建1个.NET 控制台项目,用作客户端。这个项目将实现MQTT消息发布和订阅功能。
然后,我们需要安装MQTTnet包。在本示例中,我们选择安装MQTTnet。
step 1.客户端-新建一个控制台项目
step 2.添加Nuget包:安装MQTTnet
<ItemGroup>
<PackageReference Include="MQTTnet" Version="5.0.1.1416" />
</ItemGroup>
设备需要通过 MQTT 发送一条配置消息,HA会自动识别:
温度传感器配置消息:
发布到主题:homeassistant/sensor/temp_sensor/config
{
"name": "Temperature Sensor",
"device_class": "temperature",
"state_topic": "homeassistant/all/esp8266/state",
"unit_of_measurement": "°C",
"value_template": "{
{ value_json.temperature }}",
"unique_id": "temp_sensor",
"device": {
"identifiers": ["esp8266_sensor"],
"name": "ESP8266 Sensor",
"manufacturer": "Espressif",
"model": "ESP8266EX",
"sw_version": "1.0.0"
}
}
// CPU占用
homeassistant/sensor/computer/cpu/config
{
"unique_id": "computer_cpu_usage",
"name": "电脑 CPU 占用",
"state_topic": "home/computer/status/cpu",
"unit_of_measurement": "%",
"device_class": "power",
"value_template": "{{ value }}",
"device": {
"identifiers": ["computer_unique_identifier"],
"name": "电脑",
"manufacturer": "期望氢气球",
"model": "PC-Model",
"sw_version": "1.0"
}
}
// 内存占用
homeassistant/sensor/computer/memory/config
{
"unique_id": "computer_memory_usage",
"name": "电脑 内存占用",
"state_topic": "home/computer/status/memory",
"unit_of_measurement": "%",
"device_class": "power",
"value_template": "{{ value }}",
"device": {
"identifiers": ["computer_unique_identifier"],
"name": "电脑",
"manufacturer": "期望氢气球",
"model": "PC-Model",
"sw_version": "1.0"
}
}
// 上传速度
homeassistant/sensor/computer/upload_speed/config
{
"unique_id": "computer_upload_speed",
"name": "电脑 上传速度",
"state_topic": "home/computer/status/upload_speed",
"unit_of_measurement": "bytes/s",
"device_class": "data_rate",
"value_template": "{{ value }}",
"device": {
"identifiers": ["computer_unique_identifier"],
"name": "电脑",
"manufacturer": "期望氢气球",
"model": "PC-Model",
"sw_version": "1.0"
}
}
// 下载速度
homeassistant/sensor/computer/download_speed/config
{
"unique_id": "computer_download_speed",
"name": "电脑 下载速度",
"state_topic": "home/computer/status/download_speed",
"unit_of_measurement": "bytes/s",
"device_class": "data_rate",
"value_template": "{{ value }}",
"device": {
"identifiers": ["computer_unique_identifier"],
"name": "电脑",
"manufacturer": "期望氢气球",
"model": "PC-Model",
"sw_version": "1.0"
}
}
// 开关配置
homeassistant/switch/computer/shutdown/config
{
"unique_id": "computer_shutdown_switch",
"name": "电脑关机开关",
"command_topic": "home/computer/command/shutdown",
"payload_on": "ON",
"payload_off": "OFF",
"device": {
"identifiers": ["computer_unique_identifier"],
"name": "电脑",
"manufacturer": "期望氢气球",
"model": "PC-Model",
"sw_version": "1.0"
}
}
// 开关配置
homeassistant/switch/computer/shutdown/config
{
"unique_id": "computer_shutdown_switch",
"name": "电脑关机开关",
"command_topic": "home/computer/command/shutdown",
"payload_on": "ON",
"payload_off": "OFF",
"device": {
"identifiers": ["computer_unique_identifier"],
"name": "电脑",
"manufacturer": "期望氢气球",
"model": "PC-Model",
"sw_version": "1.0"
}
}
local disk: F:\developer_mqtt_client\mqtt_client
remote github:https://github.com/iaspnetcore/mqtt_client.git
blog:https://www.iaspnetcore.com/Blog/BlogPost/67647cc2709e6b8b87a4d742/c-implementing-mqtt-communication-protocol-open-source-library-mqttnet
useful links
https://www.cnblogs.com/duhaoran/p/12718305.html
ASP.NET Core 实现 MQTT通讯协议 Demo(开源库:MQTTnet)
MQTTnet:在.NET 7中实现MQTT消息传输
https://www.mqtt.cn/616.html
ha and c#
https://blog.csdn.net/qq_41830158/article/details/131605651