当前位置: 首页 > news >正文

HomeAssistant 发现MQTT设备(温度,湿度,开关)

要通过 MQTT 将温度、湿度数据以及一个灯的开关状态传输到 Home Assistant 并实现设备自动发现,可以按照以下步骤操作:

1.前期准备工作

  1. 安装MQTT服务器(EMQX)配置好(可以在HA加载项中安装,也可以在NAS上Docker安装)
    在这里插入图片描述

  2. HA的集成中安装MQTT,并且连接上(EMQX)
    在这里插入图片描述

2.设备需要通过 MQTT 发送三条配置消息,HA会自动识别:

  1. 温度传感器配置消息:
    发布到主题:homeassistant/sensor/temp_sensor/config
{
  "name": "Temperature Sensor",
  "device_class": "temperature",
  "state_topic": "homeassistant/sensor/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"
  }
}

在这里插入图片描述


  1. 湿度传感器配置消息:
    发布到主题:homeassistant/sensor/hum_sensor/config
{
  "name": "Humidity Sensor",
  "device_class": "humidity",
  "state_topic": "homeassistant/sensor/esp8266/state",
  "unit_of_measurement": "%",
  "value_template": "{{ value_json.humidity }}",
  "unique_id": "hum_sensor",
  "device": {
    "identifiers": ["esp8266_sensor"]
  }
}

在这里插入图片描述


  1. 灯的开关配置消息:
    发布到主题:homeassistant/switch/light/config
{
  "name": "Light Switch",
  "command_topic": "homeassistant/switch/light/set",
  "state_topic": "homeassistant/switch/light/state",
  "unique_id": "light_switch",
  "device": {
    "identifiers": ["esp8266_sensor"]
  }
}

在这里插入图片描述


上面只是分别将3个传感器暴露给HA,并没有附带数据

3.状态消息

设备需要定期发送状态消息,包含温度、湿度和灯的状态:
发布到主题:homeassistant/sensor/esp8266/state

{
  "temperature": 23.5,
  "humidity": 45.2,
  "light": "ON"
}

在这里插入图片描述

"light": "ON"  // 或 "OFF"

灯的状态也可以单独发布到 homeassistant/switch/light/state

"ON"

4.配置分析

{
  "name": "Temperature Sensor",
  "device_class": "temperature",
  "state_topic": "homeassistant/sensor/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"
  }
}
  1. name
"name": "Temperature Sensor"

作用:在 Home Assistant 的设备列表或仪表盘中,这个传感器会显示为“Temperature Sensor”。

  1. device_class
"device_class": "temperature"

作用:指定设备的类别。device_class 告诉 Home Assistant 这是一个温度传感器,从而可以正确地处理和显示数据。Home Assistant 会根据设备类别自动选择合适的图标和单位显示方式。

device_class用途单位示例
temperature测量温度°C 或 °F温度传感器、恒温器等
humidity测量湿度%(百分比)湿度传感器
pressure测量压力hPa(百帕)等气压传感器、水压传感器
gas测量气体浓度ppm(百万分之一)、ppb(十亿分之一)等一氧化碳传感器、天然气传感器
pm25(PM2.5)浓度µg/m³(微克/立方米)空气质量传感器
pm10(PM10)浓度µg/m³(微克/立方米空气质量传感器
voltage测量电压V(伏特)电池电压传感器、电源电压传感器
current测量电流A(安培)电流传感器、电源电流传感器
power测量功率W(瓦特)功率传感器、智能插座功率监测
energy测量能量消耗kWh(千瓦时)电表、智能插座能量监测
frequency测量频率Hz(赫兹)频率传感器
distance测量距离m(米)、cm(厘米)等超声波距离传感器、激光测距仪
illuminance测量光照强度lx(勒克斯)光照传感器
carbon_dioxide测量二氧化碳浓度ppm(百万分之一)室内空气质量传感器
battery测量电池电量%(百分比)设备电池电量传感器
signal_strength信号强度dB(分贝)、dBm(分贝毫瓦)Wi-Fi 信号强度传感器、蓝牙信号强度传感器
water水位或水量m³(立方米)、L(升)等水表、水位传感器
door / window检测门或窗的开合状态无(状态为 open 或 closed)门磁传感器、窗磁传感器
smoke检测烟雾无(状态为 detected 或 clear)烟雾报警器
carbon_monoxide检测一氧化碳无(状态为 detected 或 clear)一氧化碳报警器
flame检测火焰无(状态为 detected 或 clear)火焰传感器
moisture检测水浸或湿度无(状态为 detected 或 clear)水浸传感器
  1. state_topic
"state_topic": "homeassistant/sensor/esp8266/state"

作用:指定设备状态消息的主题。设备会将温度数据发送到这个 MQTT 主题。设备定期发送如下消息到该主题:

{"temperature": 23.5}

Home Assistant 会从这个主题读取数据并更新传感器的状态。

  1. unit_of_measurement
"unit_of_measurement": "°C"

作用:指定传感器数据的单位。这会影响 Home Assistant 如何显示数据。在 Home Assistant 的界面中,温度数据会显示为 23.5°C。

  1. value_template
"value_template": "{{ value_json.temperature }}"

作用:定义如何从设备发送的 JSON 数据中提取实际的温度值。假设设备发送的消息是:

{"temperature": 23.5, "humidity": 45.2}

使用 {{ value_json.temperature }},Home Assistant 会提取 temperature 的值23.5 作为温度传感器的值。

  1. unique_id
"unique_id": "temp_sensor"

作用:为设备设置一个唯一的标识符,用于区分不同的设备。
重要性:确保每个设备的 unique_id 是唯一的,否则 Home Assistant 可能会覆盖或拒绝重复的设备。
示例:temp_sensor 是这个温度传感器的唯一标识符。

  1. device
"device": {
  "identifiers": ["esp8266_sensor"],
  "name": "ESP8266 Sensor",
  "manufacturer": "Espressif",
  "model": "ESP8266EX"
}

作用:定义设备的详细信息,这些信息用于将传感器与其他设备关联起来,形成一个设备的“设备”。
identifiers:设备的唯一标识符,用于在 Home Assistant 中识别设备。
name:设备的名称,用于在 Home Assistant 的设备列表中显示。
manufacturer:设备的制造商。
model:设备的型号。

相关文章:

  • DelayQueue实现原理
  • 基于Vulhub靶场 | CVE-2017-12615 Tomcat文件上传漏洞
  • resultType与resultMap的区别
  • C++基础:引用,内联函数,auto,类的两种定义方式
  • 【含文档+PPT+源码】基于微信小程序的校园志愿者管理系统的设计与实现
  • CSS3 面试题 超基础 一
  • DAY07 Collection、Iterator、泛型、数据结构
  • Docker 部署 Dify:轻松集成 Ollama 和 DeepSeek
  • HTML应用指南:利用GET请求获取全国乐乐茶门店位置信息
  • 关于 C++ 二叉树的总结汇报
  • 对话智面创始人陶然:一是初心和心态,二是坚持和心力
  • TinyVue自动导入插件重大升级,@opentiny/unplugin-tiny-vue1.0.0版本开启单组件包引入新模式
  • Visual Studio Code的下载安装与汉化
  • 深入解析 Flutter Riverpod:从原理到实战
  • 2024年国赛高教杯数学建模C题农作物的种植策略解题全过程文档及程序
  • 理解三种哈希算法:MD5、CRC、SHA256
  • git:恢复纯版本库
  • Windows的注册表有什么用,Linux怎么没有
  • 深入解析 Flutter GetX
  • 文本操作基础知识:正则表达式
  • 法治日报整版聚焦:儿童能否成为短视频主角?该如何监管?
  • 男子退机票被收票价90%的手续费,律师:虽然合规,但显失公平
  • 国务院新闻办公室发布《新时代的中国国家安全》白皮书
  • 新造古镇丨乌镇的水太包容了,可以托举住任何一种艺术
  • 5年建成强化城市核心功能新引擎,上海北外滩“风景文化都是顶流”
  • 普京提议恢复直接谈判,泽连斯基:望俄明日停火,乌愿谈判