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

 找回密码
 立即注册
查看: 899|回复: 13

[求助] esphome设备直接接入巴法云

[复制链接]

34

主题

189

帖子

896

积分

高级会员

Rank: 4

积分
896
金钱
707
HASS币
0
发表于 2024-9-2 12:50:20 | 显示全部楼层 |阅读模式
本帖最后由 yun59t 于 2024-9-3 10:11 编辑

一、来由:企业VX打卡麻烦,准备自己做个电容触摸手指,毕竟米家的真贵,手指+网关遭不住,自己制作esp32+电容触摸模块,还能上点别的功能。问题是,这个东西准备放办公室用,办完有wifi但没有ha主机,想想用什么办法能把它直接通过联网接入ha,或者退求其次,怎样异地控制esphome的web页面。

二、要准备的材料及做法:
①硬件材料:esp32-C3、电阻若干、光耦若干、游戏导电硅胶按钮若干;(或者淘宝上有直接屏幕点击触发模块,但我想把电路部份尽量归一起)
②软件方面:esphome制作固件、巴法云mqtt同步及远程控制。(因为办公室没有ha主机,也没有内网穿透的设备。理论上是不是也可以用esp制作一个或者直接在这个esphome设备里面集成相应功能,但我不会!)


三、进度:
1、硬件:淘宝中~~!
2、软件部分:已基本完成框架,剩下就是功能的完善。
在此。要先感谢@ganguotu大佬的热心指导,本人是外行小白,今年4月初开始倒腾这些东西,对代码编程一窍不通,基本是靠翻论坛+ai来倒腾这些东西。所以遇到一些问题,有人帮忙指导方向,并给出具体做法,能边抄边学是非常重要的。
mqtt互交代码:
①有些备注可能会影响编译,记得自行去除;
②巴法云提供了两种登录方式,方法一:主机+端口+秘钥;方法二:主机+端口+用户名+登录密码。
③如果用方法一和二都登录不上,出现无法识别ip的提示,记得在静态ip后增加dns设置,我不太懂这个,是不是dns是用来将网址解析成IP地址形式。
mqtt:
  broker: "bemfa.com"
  port: 9501
  client_id: "你的秘钥"  
  topic_prefix: null
  discovery: false
  reboot_timeout: 0s

  on_message:  # 当收到MQTT消息时的处理逻辑
    - topic: SamsungTouch006  # 监听的MQTT主题名称
      then: 
        - lambda: |-
            ESP_LOGD("custom", "Received message: %s", x.c_str());  //这步是读取esp收到的消息是on还是off
            if (x == "on") {
              id(samsung_touch_switch).turn_on();    //收到on则打开开关
            } else if (x == "off") {
              id(samsung_touch_switch).turn_off();   //收到off则关闭开关
            }


switch:
  - platform: gpio                                # 使用GPIO平台的开关
    pin: GPIO0                                        # 定义开关连接的GPIO引脚
    name: "SamsungTouch Switch"       # 开关的名称
    id: samsung_touch_switch               # 为开关设置ID以便在其他地方引用
    on_turn_on:                                      # 当开关被打开时的动作
      - mqtt.publish:
          topic: "SamsungTouch006"              # 要发布到巴法云里对应的的MQTT主题
          payload: "on"                                    # 发送的消息内容为小写"on"
    on_turn_off:                                       # 当开关被关闭时的动作
      - mqtt.publish:
          topic: "SamsungTouch006"               # 要发布到巴法云里对应的的MQTT主题
          payload: "off"                                     # 发送的消息内容为小写"off"
顺便上下IP配置
# 配置Wi-Fi网络
wifi:   #配置路由器wifi名称和密码
  networks:
  - ssid: "XXX"
    password: "XXX"
  - ssid: "YYY"
    password: "YYY"

  # 配置静态 IP,便于管理,缩短wifi连接时间
  manual_ip:
    static_ip: 192.168.8.43 # 本设备ip,不要和已被占用的IP冲突
    gateway: 192.168.8.1    # 网关=路由器ip
    subnet: 255.255.255.0   # 子网掩码
    dns1: 114.114.114.114   # 免费全国通用dns
    dns2: 8.8.8.8           # 免费全球通用dns

巴法云:
Snipaste_2024-09-03_09-12-19.png


四、控制效果
目前成果如下,后面还需要进一步完善功能。
Snipaste_2024-09-03_09-41-19.png


五、其他一些备忘或想法
1、有没其他办法,在esp32设备只能联网,没有其他设备中转或的情况下,远程控制它的web操作页面,或者将一些内网穿透的功能直接编进去?
2、巴法云文档:https://cloud.bemfa.com/docs/src/index_device.html
3、arduino做法参考:https://blog.51cto.com/u_15440897/4673140
六、新的问题:
1、esp32联网运行时都没问题,但办公室网络经常掉线,esp32在离线后,通电状态下,还能定时进行动作么,或者说esp32有没内部时钟,能离线状态下,判断时间到8点了,开始自动化打卡操作。还是说需要给它接个时钟类元件,作为记时及触发条件。



回复

使用道具 举报

24

主题

591

帖子

2765

积分

金牌会员

Rank: 6Rank: 6

积分
2765
金钱
2174
HASS币
0
发表于 2024-9-2 14:34:36 | 显示全部楼层
找个公共的mqtt服务器
不过我没在手机用过mqtt的app
不知道有什么好用的
回复

使用道具 举报

34

主题

189

帖子

896

积分

高级会员

Rank: 4

积分
896
金钱
707
HASS币
0
 楼主| 发表于 2024-9-2 15:12:36 | 显示全部楼层
kjjuhfv 发表于 2024-9-2 14:34
找个公共的mqtt服务器
不过我没在手机用过mqtt的app
不知道有什么好用的

接入巴法了,还能远程接入ha
回复

使用道具 举报

2

主题

58

帖子

395

积分

论坛技术达人

积分
395
金钱
337
HASS币
10
发表于 2024-9-2 22:12:34 | 显示全部楼层
巴法那边选错了,选mqtt设备云,而不是tcp创客云,mqtt是带认证信息的,然后在esphome监听topic
回复

使用道具 举报

2

主题

58

帖子

395

积分

论坛技术达人

积分
395
金钱
337
HASS币
10
发表于 2024-9-2 23:24:39 | 显示全部楼层
找了一下我之前设置的,给你参考:
mqtt:
  broker: !secret mqtt_broker1
  port: !secret mqtt_port1
  username: !secret mqtt_username1
  password: !secret mqtt_password1
  topic_prefix: null
  discovery: false
  reboot_timeout: 0s
  on_message: 
    - topic: c3mp006
      then: 
        - media_player.play_media: !lambda "return x;"
回复

使用道具 举报

34

主题

189

帖子

896

积分

高级会员

Rank: 4

积分
896
金钱
707
HASS币
0
 楼主| 发表于 2024-9-2 23:55:17 | 显示全部楼层
ganguotu 发表于 2024-9-2 23:24
找了一下我之前设置的,给你参考:

失败了,usrname是指帐号名称么,password是不是帐号密码,好像没用到秘钥。我填了刷进去后提示:
Couldn't resolve IP address for 'bemfa.com'!
Error resolving MQTT broker IP address: -6代码:
mqtt:
  broker: bemfa.com  # 替换为巴法云的MQTT服务器地址
  port: 9501  # 根据巴法云的要求修改端口号
  username: "[email protected]"
  password: "XXX"
  topic_prefix: null
  discovery: false
  reboot_timeout: 0s

  on_message: 
    - topic: SamsungTouch/switch/command
      then: 
        - if:
            condition:
              lambda: 'return x == "ON";'
            then:
              - switch.turn_on: samsung_touch_switch
            else:
              - switch.turn_off: samsung_touch_switch

switch:
  - platform: gpio
    pin: GPIO0
    name: "SamsungTouch Switch"
    id: samsung_touch_switch
    on_turn_on:
      - mqtt.publish:
          topic: "SamsungTouch/switch/state"
          payload: "ON"
    on_turn_off:
      - mqtt.publish:
          topic: "SamsungTouch/switch/state"
          payload: "OFF"
Snipaste_2024-09-02_23-54-43.png
回复

使用道具 举报

2

主题

58

帖子

395

积分

论坛技术达人

积分
395
金钱
337
HASS币
10
发表于 2024-9-3 00:31:23 | 显示全部楼层
本帖最后由 ganguotu 于 2024-9-3 00:40 编辑
yun59t 发表于 2024-9-2 23:55
失败了,usrname是指帐号名称么,password是不是帐号密码,好像没用到秘钥。我填了刷进去后提示:
Couldn ...

看步骤二: https://cloud.bemfa.com/docs/src/mqtt.html
我用的是方法二认证的,username 和 password 是调用 api接口中用户接口6号接口 生成的
mqtt:
  broker: "bemfa.com"
  port: 9501
  username: "beid_xxxx"
  password: "LXXXXXX"
你也可以用方式一, client_id 就是八法云左上角的用户私钥
mqtt:
  broker: "bemfa.com"
  port: 9501
  client_id: "client_id_here"


回复

使用道具 举报

34

主题

189

帖子

896

积分

高级会员

Rank: 4

积分
896
金钱
707
HASS币
0
 楼主| 发表于 2024-9-3 01:03:03 | 显示全部楼层
本帖最后由 yun59t 于 2024-9-3 01:20 编辑
ganguotu 发表于 2024-9-3 00:31
看步骤二: https://cloud.bemfa.com/docs/src/mqtt.html
我用的是方法二认证的,username 和 password 是 ...

接入成功了,主要问题不是出在这两种方式。而是dns的设置,之前一直不成功,突然搜到有人加了这个,我也加上去就成功了,搞不懂为啥。加了最后两行。但新的一个问题,开关设置后,巴法云上能收到开关的状态,但显示订阅者离线,esphome操作开关,巴法云上能看到,但巴法云不能操作这个开关,显示离线。能帮忙看看为啥不。 Snipaste_2024-09-03_01-17-13.png
mqtt:
  broker: "bemfa.com"
  port: 9501
  client_id: "XXXX"  
  keep_alive: 60
  topic_prefix: null
  discovery: false
  reboot_timeout: 0s

  on_message: 
    - topic: SamsungTouch006/switch/command
      then: 
        - if:
            condition:
              lambda: 'return x == "ON";'
            then:
              - switch.turn_on: samsung_touch_switch
            else:
              - switch.turn_off: samsung_touch_switch

switch:
  - platform: gpio
    pin: GPIO0
    name: "SamsungTouch Switch"
    id: samsung_touch_switch
    on_turn_on:
      - mqtt.publish:
          topic: "SamsungTouch006/switch/state"
          payload: "ON"
    on_turn_off:
      - mqtt.publish:
          topic: "SamsungTouch006/switch/state"
          payload: "OFF"
  # 配置静态 IP,便于管理,缩短wifi连接时间
  manual_ip:
    static_ip: 192.168.8.43 # 本设备ip,不要和已被占用的IP冲突
    gateway: 192.168.8.1    # 网关=路由器ip
    subnet: 255.255.255.0   # 子网掩码
    dns1: 114.114.114.114
    dns2: 8.8.8.8



回复

使用道具 举报

2

主题

58

帖子

395

积分

论坛技术达人

积分
395
金钱
337
HASS币
10
发表于 2024-9-3 01:25:34 | 显示全部楼层
我先确认下,你这个ON是设备发给巴法云的吗?我觉得ESPHome那边写法有问题,根本没有订阅巴法云的主题 SamsungTouch006
回复

使用道具 举报

2

主题

58

帖子

395

积分

论坛技术达人

积分
395
金钱
337
HASS币
10
发表于 2024-9-3 01:28:57 | 显示全部楼层
本帖最后由 ganguotu 于 2024-9-4 06:38 编辑

你对巴法云的 mqtt 有些误会,在巴法云中,默认一个设备的 topic 只有一个,没有二级三级目录,不分 state 和 command
在你的例子中,你要明白你新建的 SamsungTouch 是一个话题而不是一个设备,但貌似你把 SamsungTouch 当成一个设备了,分了二级三级topic表示状态和指令,但实际上巴法云是没有 二级三级 topic 的
当然也可以像你这样用两个 topic( SamsungTouchState 和 SamsungTouchCommand )表示一个设备,但注意这两个 topic 是独立的、没有归属关系的
适合你的最佳用法是这样,两个主题,command 和 state 分开
mqtt:
  broker: "bemfa.com"
  port: 9501
  client_id: "XXXX"  
  keep_alive: 60
  topic_prefix: null
  discovery: false
  reboot_timeout: 0s

  on_message: 
    - topic: SamsungTouch006
      then: 
        - if:
            condition:
              lambda: 'return x == "on";'
            then:
              - switch.turn_on: samsung_touch_switch
            else:
              - switch.turn_off: samsung_touch_switch

switch:
  - platform: gpio
    pin: GPIO0
    name: "SamsungTouch Switch"
    id: samsung_touch_switch
    on_turn_on:
      - mqtt.publish:
          topic: SamsungTouchState
          payload: "on"
    on_turn_off:
      - mqtt.publish:
          topic: SamsungTouchState
          payload: "off"



回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-12-23 09:16 , Processed in 0.252577 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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