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

 找回密码
 立即注册
12
返回列表 发新帖
楼主: yun59t

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

[复制链接]

2

主题

58

帖子

395

积分

论坛技术达人

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

用同一个topic应该也没有问题,都用 SamsungTouch006 吧,还省事了( 看起来有可能会进入循环?未测试,慎用 )( 更新:别这样用,确认会循环)
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: SamsungTouch006
          payload: "on"
    on_turn_off:
      - mqtt.publish:
          topic: SamsungTouch006
          payload: "off"
还有就是注意 mqtt: 和 api: 冲突的问题,尽量不要一起用
回复

使用道具 举报

34

主题

189

帖子

896

积分

高级会员

Rank: 4

积分
896
金钱
707
HASS币
0
 楼主| 发表于 2024-9-3 08:41:46 | 显示全部楼层
ganguotu 发表于 2024-9-3 01:51
用同一个topic应该也没有问题,都用 SamsungTouch006 吧,还省事了( 看起来有可能会进入循环?未测试,慎用 ...

OK,搞定了,非常感谢
回复

使用道具 举报

24

主题

591

帖子

2765

积分

金牌会员

Rank: 6Rank: 6

积分
2765
金钱
2174
HASS币
0
发表于 2024-9-4 02:15:08 | 显示全部楼层
ganguotu 发表于 2024-9-3 01:51
用同一个topic应该也没有问题,都用 SamsungTouch006 吧,还省事了( 看起来有可能会进入循环?未测试,慎用 ...

请假大佬 当有2个以上的relay要控制时怎么写?
还有 编译时出现这个怎么处理?
Compiling .pioenvs/a222222/src/main.cpp.o
/config/a222222.yaml: In lambda function:
/config/a222222.yaml:51:24: warning: comparison with string literal results in unspecified behavior [-Waddress]
   51 |               lambda: 'return x.c_str() == "on";'
      |               ~~~~~~~~~^~~~~~~
Linking .pioenvs/a222222/firmware.elf
RAM:   [====      ]  43.8% (used 35876 bytes from 81920 bytes)
Flash: [=====     ]  48.7% (used 508901 bytes from 1044464 bytes)
Building .pioenvs/a222222/firmware.bin

虽然结果可以编译上传
但是无论怎么发送on 都只会执行switch.turn_off
回复

使用道具 举报

2

主题

58

帖子

395

积分

论坛技术达人

积分
395
金钱
337
HASS币
10
发表于 2024-9-4 04:20:30 | 显示全部楼层
本帖最后由 ganguotu 于 2024-9-4 08:11 编辑
kjjuhfv 发表于 2024-9-4 02:15
请假大佬 当有2个以上的relay要控制时怎么写?
还有 编译时出现这个怎么处理?

我测试了一下,可以直接用‘return x == "on";’判断,但是,在某些 mqtt 服务器中,同一个话题表示命令和状态,会导致进入循环,尽量别那样用。
可以试试这样:
mqtt:
  broker: !secret mqtt_broker
  port: !secret mqtt_port
  username: !secret mqtt_username
  password: !secret mqtt_password
  topic_prefix: null
  discovery: false
  reboot_timeout: 0s
  on_message: 
    - topic: led006
      then: 
        - if:
            condition:
              lambda: 'return x == "on";'
            then:
              - light.turn_on: activity_led
        - if:
            condition:
              lambda: 'return x == "off";'
            then:
              - light.turn_off: activity_led

再用不同的话题 ledstate 表示设备状态以免进入循环:
light:
  - platform: esp32_rmt_led_strip
    id: activity_led
    name: "${friendly_name} LED"
    rgb_order: GRB
    pin: GPIO48
    num_leds: 1
    rmt_channel: 0
    chipset: ws2812
    on_turn_on:
      - mqtt.publish:
          topic: ledstate
          payload: "on"
    on_turn_off:
      - mqtt.publish:
          topic: ledstate
          payload: "off"

踩坑点:在巴法云中,mqtt.on_message:   不可以重复订阅同一个topic,一直报错,客户端重复断连!只发现巴法云这样的,其他的 mqtt 服务器是可以的!


回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-12-23 09:11 , Processed in 0.065409 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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