HomeAssistant发现MQTT设备(温度,湿度,开关)
- 电脑硬件
- 2025-09-02 09:03:02

要通过 MQTT 将温度、湿度数据以及一个灯的开关状态传输到 Home Assistant 并实现设备自动发现,可以按照以下步骤操作:
1.前期准备工作安装MQTT服务器(EMQX)配置好(可以在HA加载项中安装,也可以在NAS上Docker安装)
HA的集成中安装MQTT,并且连接上(EMQX)
2.设备需要通过 MQTT 发送三条配置消息,HA会自动识别: 温度传感器配置消息: 发布到主题: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" } }湿度传感器配置消息: 发布到主题: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"] } }
灯的开关配置消息: 发布到主题: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" } } name "name": "Temperature Sensor"
作用:在 Home Assistant 的设备列表或仪表盘中,这个传感器会显示为“Temperature Sensor”。
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)水浸传感器 state_topic "state_topic": "homeassistant/sensor/esp8266/state"作用:指定设备状态消息的主题。设备会将温度数据发送到这个 MQTT 主题。设备定期发送如下消息到该主题:
{"temperature": 23.5}Home Assistant 会从这个主题读取数据并更新传感器的状态。
unit_of_measurement "unit_of_measurement": "°C"作用:指定传感器数据的单位。这会影响 Home Assistant 如何显示数据。在 Home Assistant 的界面中,温度数据会显示为 23.5°C。
value_template "value_template": "{{ value_json.temperature }}"作用:定义如何从设备发送的 JSON 数据中提取实际的温度值。假设设备发送的消息是:
{"temperature": 23.5, "humidity": 45.2}使用 {{ value_json.temperature }},Home Assistant 会提取 temperature 的值23.5 作为温度传感器的值。
unique_id "unique_id": "temp_sensor"作用:为设备设置一个唯一的标识符,用于区分不同的设备。 重要性:确保每个设备的 unique_id 是唯一的,否则 Home Assistant 可能会覆盖或拒绝重复的设备。 示例:temp_sensor 是这个温度传感器的唯一标识符。
device "device": { "identifiers": ["esp8266_sensor"], "name": "ESP8266 Sensor", "manufacturer": "Espressif", "model": "ESP8266EX" }作用:定义设备的详细信息,这些信息用于将传感器与其他设备关联起来,形成一个设备的“设备”。 identifiers:设备的唯一标识符,用于在 Home Assistant 中识别设备。 name:设备的名称,用于在 Home Assistant 的设备列表中显示。 manufacturer:设备的制造商。 model:设备的型号。
HomeAssistant发现MQTT设备(温度,湿度,开关)由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“HomeAssistant发现MQTT设备(温度,湿度,开关)”