『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 148|回复: 6

[求助] esphome中使用mqtt.publish发布消息

[复制链接]

5

主题

86

帖子

256

积分

中级会员

Rank: 3Rank: 3

积分
256
金钱
170
HASS币
0
发表于 2024-5-7 15:16:52 | 显示全部楼层 |阅读模式
大佬求救,esphome中esp32的配置文件如下,其中定义了一个switch,在on_turn_on和off的两个动作中想加入mqtt发布主题的动作,但是mqtt中对应的主题死活接收不到消息,不知道是接收消息的主题名称不对,还是消息压根就没发出,请求解答,NR中代码图也附上
esphome:
name: esp32
friendly_name: esp32

esp32:
board: esp32dev
framework:
type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
encryption:
key: "kxM7Yn6/ea38KhP8VHhR+uCb3WAdvLQDda19OygwkuE="

ota:
password: "c0304138ad69dd675ba8ab7d591d17bc"

wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password

# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Esp32 Fallback Hotspot"
password: "aKy5SQIaWcNF"

captive_portal:


switch:
- platform: gpio
name: "msg_switch"
pin:
number: 13
inverted: true
on_turn_on:
- mqtt.publish:
topic: "some/topic"
payload: "turn on"
qos: 0
on_turn_off:
- mqtt.publish:
topic: "some/topic"
payload: "turn off"
qos: 0

mqtt:
broker: 192.168.30.201
username: daner
password: a
NR中mqtt节点可以正常收到esp32自动注册的状态主题,也可以使用自动注册的控制主题,但是就是接收不到上面代码中自定义的这个“some/topic”的主题,我把主题的前缀是换了一个遍,都无法收到消息,所以现在不确定是接收消息的主题名称不对,还是压根esp32的switch在动作的时候根本没有发出mqtt消息 微信图片_20240507151534.png
回复

使用道具 举报

23

主题

646

帖子

4452

积分

元老级技术达人

积分
4452
金钱
3791
HASS币
30

教程狂人

QQ
发表于 2024-5-7 17:21:12 | 显示全部楼层
主题名字搞错了,主题是some/topic,而不是NodeRed中的esp32/some/topic
回复

使用道具 举报

10

主题

112

帖子

573

积分

高级会员

Rank: 4

积分
573
金钱
461
HASS币
0
发表于 2024-5-7 17:43:16 | 显示全部楼层
on_turn_on:
- mqtt.publish:
topic: "some/topic"
payload: "turn on"
qos: 0
on_turn_off:
- mqtt.publish:
topic: "some/topic"
payload: "turn off"
qos: 0
这几行不用写试试,

只要配置好服务器、帐号密码,上电后连接上MQTT服务端,HA里面MQTT页面下自己就找到设备了,可以看ESP32的日志,没连接上MQTT会有报错
回复

使用道具 举报

10

主题

112

帖子

573

积分

高级会员

Rank: 4

积分
573
金钱
461
HASS币
0
发表于 2024-5-7 17:45:01 | 显示全部楼层
格式是这样的

[17:34:24][C][mqtt.switch:041]: MQTT Switch 'Wireless AP':
[17:34:24][C][mqtt.switch:042]:   State Topic: 'esp32-s--lan8720/switch/wireless_ap/state'
[17:34:24][C][mqtt.switch:042]:   Command Topic: 'esp32-s--lan8720/switch/wireless_ap/command'
回复

使用道具 举报

5

主题

86

帖子

256

积分

中级会员

Rank: 3Rank: 3

积分
256
金钱
170
HASS币
0
 楼主| 发表于 2024-5-8 09:30:07 | 显示全部楼层
alei643 发表于 2024-5-7 17:21
主题名字搞错了,主题是some/topic,而不是NodeRed中的esp32/some/topic

跪谢大佬,确实主题用some/topic就可以了,不用加任何前缀。我把官方文档意思理解错了,官方文档中如此描述“topic_prefix (Optional, string): The prefix used for all MQTT messages. Should not contain trailing slash. Defaults to <APP_NAME>.Use null to disable publishing or subscribing of any MQTT topic unless it is explicitly configured.”,我误解了 Defaults to <APP_NAME>的正确意思,所以才在接收消息的时候给topic前加了esp32前缀
万分感谢,万分感谢!!
回复

使用道具 举报

5

主题

86

帖子

256

积分

中级会员

Rank: 3Rank: 3

积分
256
金钱
170
HASS币
0
 楼主| 发表于 2024-5-8 09:38:43 | 显示全部楼层
qxdnzx 发表于 2024-5-7 17:45
格式是这样的

[17:34:24][C][mqtt.switch:041]: MQTT Switch 'Wireless AP':

谢谢大佬帮忙,已经解决了,万分感谢
回复

使用道具 举报

5

主题

86

帖子

256

积分

中级会员

Rank: 3Rank: 3

积分
256
金钱
170
HASS币
0
 楼主| 发表于 2024-5-8 09:40:53 | 显示全部楼层
qxdnzx 发表于 2024-5-7 17:43
on_turn_on:
- mqtt.publish:
topic: "some/topic"

谢谢大佬,问题已经解决了,万分感谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-5-20 08:53 , Processed in 0.055680 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表