将DHT11数据接入小爱

admin 2025年6月19日21:18:15评论3 views字数 2619阅读8分43秒阅读模式

在前期的文章中,我们讲到了如何将DHT11传感器的数据接入Homeassistant。但是数据却无法同步到小爱同学。本文,让我们一起来解决此问题。

将DHT11数据接入小爱
DHT11数据接入HA

原因分析

目前,我是通过巴法云插件接入的小爱。通过阅读官方文档,得知我的数据格式不对。

将DHT11数据接入小爱即,数据格式需为#25#56这样的,而目前我们是json数据格式{"humi":53,"temp":21} 因此,我们需要对数据格式进行转换。

代码

#include<ESP8266WiFi.h>
#include<PubSubClient.h>
#include<DHT.h>

// 网络配置
constchar* ssid = "PDCN";
constchar* password = "1234567890";

// MQTT配置
constchar* mqtt_server = "mqtt服务器IP";
constint mqtt_port = 1883;
constchar* mqtt_user = "admin";
constchar* mqtt_pass = "admin";
constchar* topic = "xiaoyaozi";#订阅主题
constchar* clientId = "biaoge666";#设备id

// DHT11配置
#define DHTPIN D3        // D3引脚连接DHT11
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

WiFiClient espClient;
PubSubClient client(espClient);

voidsetup_wifi(){
  delay(10);
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
}

voidreconnect(){
while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
if (client.connect("ESP8266Client", mqtt_user, mqtt_pass)) {
      Serial.println("connected");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" retrying in 5 seconds");
      delay(5000);
    }
  }
}

voidsetup(){
  Serial.begin(115200);
  dht.begin();
  setup_wifi();
  client.setServer(mqtt_server, mqtt_port);
}

voidloop(){
if (!client.connected()) {
    reconnect();
  }
  client.loop();

staticunsignedlong lastMsgTime = 0;
unsignedlong now = millis();

// 每2秒读取一次数据
if (now - lastMsgTime > 2000) {
    lastMsgTime = now;

float h = dht.readHumidity();
float t = dht.readTemperature();

if (isnan(h) || isnan(t)) {
      Serial.println("Failed to read from DHT sensor!");
return;
    }

// 创建数据格式 #温度#湿度
char msg[20];
snprintf(msg, sizeof(msg), "#%d#%d", (int)t, (int)h);

    Serial.print("Publish message: ");
    Serial.println(msg);

    client.publish(topic, msg);
  }
}

完成后,发送数据效果如下:

将DHT11数据接入小爱

配置HA

接下来,我们需要对HA的配置文件进行修改。

 # 温度传感器
    - unique_id: dht11_temperature
      name: "Living Room Temperature"
      state_topic: "xiaoyaozi"  # 与Arduino代码中的主题一致
      unit_of_measurement: "℃"
      value_template: >
        {% set parts = value.split('#') %}
        {{ parts[1] | float }}
      device_class: temperature
      suggested_display_precision: 1

    # 湿度传感器
    - unique_id: dht11_humidity
      name: "Living Room Humidity"
      state_topic: "xiaoyaozi"  # 与Arduino代码中的主题一致
      unit_of_measurement: "%"
      value_template: >
        {% set parts = value.split('#') %}
        {{ parts[2] | float }}
      device_class: humidity
      suggested_display_precision: 1

代码说明:

对于输入数据#21#45

  • value.split('#') 将字符串分割为数组:['', '21', '45']

温度值位于索引1parts[1] = "21"

湿度值位于索引2parts[2] = "45"

  • float 将字符串转换为浮点数
将DHT11数据接入小爱
注意格式

接下来,配置设备

将DHT11数据接入小爱

同步到巴法云

将DHT11数据接入小爱
将DHT11数据接入小爱
将DHT11数据接入小爱

同步完成后,在米家更新同步。最终效果如下:

将DHT11数据接入小爱
BREAK AWAY
相关推荐
01
一文玩转MQTT(基于esp8266 DHT11 MQTT Mysql实现)
02
小米温湿度计2 刷第三方固件 接入HA
03
Esp8266 接入小爱 基于MQTT

原文始发于微信公众号(kali笔记):将DHT11数据接入小爱

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月19日21:18:15
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   将DHT11数据接入小爱https://cn-sec.com/archives/4180681.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息