通过 MQTT 从 HomeAssistant 发送值到 ESP8266

物联网 MQTT ESP8266 家庭助理
2021-06-02 05:20:16

我想通过 MQTT 将值从 HomeAssistant 发送到 ESP8266。我已经成功地以另一种方式完成了它(通过 MQTT 将温度值从 ESP 发送到 HomeAssistant)但是现在我希望能够通过 HomeAssistant 接口将值发送到 ESP。

这是否可以做到这一点(是否有传感器开关之类的组件可以做到这一点)?

我很乐意为您提供任何帮助,并随时询问是否有任何不清楚的地方。

2个回答

如果您已通过 MQTT 将数据从设备发送到 HomeAssistant,那么您肯定可以反过来进行。MQTT 是完全双向的,没有 HTTP 中的服务器和客户端的概念,而是代理和客户端,所有客户端都是一等公民。

您必须确定 HomeAssistant 使用什么主题来发送数据(比方说/my-cool-device/commands),并且您必须配置设备以便它订阅/my-cool-device/command和处理传入的消息。

我使用 HA 从 ESP8266 触发主题更新推送。

在 ESP8226 代码中,在 setup 中,注册一个订阅主题的回调函数。 mqttClient.setCallback(callback);

在该 MQTT 回调函数中,读取主题和有效负载消息,并在匹配时执行您的 ESP8266 代码。

 if (strcmp(topic, inTopicPub) == 0) {// fishtank/pub
    pubAll();
  }

在代码初始化时,创建一个主题名称: const char* inTopicPub = "fishtank/pub";

在 MQTT 连接序列中,注册该主题的订阅请求。 mqttClient.subscribe(inTopicPub);

在 .homeassistant/configuration.yaml 中创建一个开关条目:

switch 9:
  - platform: mqtt
    name: "Synch"
    command_topic: "fishtank/pub"
    payload_on: "91"
    payload_off: "90"
    qos: 0
    retain: false

重新加载 HA 以使用更改的配置。

编辑 HA 仪表板添加按钮卡(希望从下拉选项中填充)。

type: button
tap_action:
  action: toggle
entity: switch.synch