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

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

[技术探讨] 在ha 上把一个需要设定 参数值 传递到 esphome ...

[复制链接]

20

主题

133

帖子

850

积分

高级会员

Rank: 4

积分
850
金钱
717
HASS币
0
发表于 2023-5-31 15:17:03 | 显示全部楼层 |阅读模式
本帖最后由 tettr 于 2023-5-31 22:41 编辑

1、在ha 上把一个需要设定 参数值 传递到 esphome 编程 里面的一个变量,用esphome这怎样编写程程呢?

比如一个应用场景,ha控制风扇定时关机,把定时的时间值,1-300分钟(可人工设定时间值),这个 时间参数值 传递到 esphome 编程 里面的一个变量,8266收到这个变量用来控制风扇关闭的时间,用esphome这怎样编写程程呢?
2、主要目的的想 实现的 ha 设置的参数值,传递到 8266上,比如在ha上设定的 温度值,时间值,pwm值等参数,然后 esphome 编程传递到8266上执行
回复

使用道具 举报

2

主题

138

帖子

1763

积分

金牌会员

Rank: 6Rank: 6

积分
1763
金钱
1625
HASS币
0
发表于 2023-5-31 15:45:47 | 显示全部楼层
HA辅助元素建个input_number,然后esphome里调用
回复

使用道具 举报

24

主题

579

帖子

2681

积分

金牌会员

Rank: 6Rank: 6

积分
2681
金钱
2102
HASS币
0
发表于 2023-5-31 15:56:34 | 显示全部楼层
直接在ha里面定时关风扇不行吗?
回复

使用道具 举报

8

主题

157

帖子

905

积分

高级会员

Rank: 4

积分
905
金钱
748
HASS币
0
发表于 2023-5-31 21:37:01 | 显示全部楼层
adamjensen 发表于 2023-5-31 15:45
HA辅助元素建个input_number,然后esphome里调用

请问,esphome固件怎么写。可以实现调用HA里的数值?

给个范例就行
回复

使用道具 举报

66

主题

779

帖子

4407

积分

论坛元老

Rank: 8Rank: 8

积分
4407
金钱
3623
HASS币
20
发表于 2023-5-31 22:56:36 | 显示全部楼层
本帖最后由 guitengyue 于 2023-5-31 22:57 编辑

要在Home Assistant中将参数值传递到ESPHome编程的变量中,可以使用ESPHome的API,具体步骤如下:

  1. 首先,在ESPHome编程中创建一个带有可调参数的组件。例如,以下组件将创建一个灯光并提供可调的亮度参数:
light:
  - platform: esp8266_pwm
    id: my_light
    pin: GPIO12
    name: "My Light"
    optimistic: true
    restore_mode: ALWAYS_OFF

    # 添加可调参数
    brightness: 100%
  1. 然后,在Home Assistant中创建一个输入数值实体,以便用户可以调整参数值。例如,以下代码将创建一个名为“ My Light Brightness”的输入数值实体:
input_number:
  my_light_brightness:
    name: "My Light Brightness"
    icon: mdi:brightness-7
    initial: 50
    min: 0
    max: 100
    step: 1
  1. 接下来,在ESPhome编程中添加一个API端点来接收从Home Assistant中发送的参数值。例如,以下代码将为我们的灯光组件添加一个API端点:
api:
  web_server:
    port: 80

  # 添加API端点
  on_request:
    - url: '/my-light-brightness'
      method: 'POST'
      then:
        - lambda: |-
            auto brightness = id(my_light).get_brightness();
            int new_brightness = int(id(my_light).brightness * 255 / 100);
            if (new_brightness != state) {
              auto call = id(my_light).turn_on();
              call.set_brightness(new_brightness);
              call.perform();
            }

在上面的代码中,我们使用 on_request 选项添加了一个 API 端点,并指定 URL 和 HTTP 方法。在 lambda 函数中,我们首先获取当前的亮度值,然后将输入数值从百分比转换为 0-255 范围内的整数(此为 ESPHome 内部使用的亮度值范围)。最后,我们检查输入值是否与当前设置相同,并使用 turn_on() 让灯光组件反应出新设置。

  1. 最后,在Home Assistant 中编写一个自动化程序,在输入数值实体更新时发送请求到 ESPHome 的 API 端点。例如,以下代码将创建一个名为“ My Light Brightness”的自动化程序:
automation:
  - alias: "Update My Light Brightness"
    trigger:
      platform: state
      entity_id: input_number.my_light_brightness
    action:
      service: esphome.my_esphome_component_post
      data_template:
        endpoint: "/my-light-brightness"
        json_data: '{"state": {{states("input_number.my_light_brightness") | int}}}'

在上面的代码中,我们使用了 esphome.my_esphome_component_post 服务来发送 POST 请求到 ESPHome 的 API 端点。在data_template中我们使用模板语言将输入数值实体的状态值传递给 ESPHome 的 lambda 函数。在这个例子中,我们使用 JSON 格式来传递参数值,但是您也可以根据需要使用其他格式。

总之,您可以根据您的需要和具体情况来修改这些代码。请注意,在使用 ESPHome API 时,请确保将正确的端口号指定在ESPHome的API设置中,并且启用了相应的网络选项


回复

使用道具 举报

8

主题

157

帖子

905

积分

高级会员

Rank: 4

积分
905
金钱
748
HASS币
0
发表于 2023-6-1 09:29:44 | 显示全部楼层
强大。不过看中文解释有点GPT的味道 @guitengyue
回复

使用道具 举报

9

主题

195

帖子

1512

积分

金牌会员

Rank: 6Rank: 6

积分
1512
金钱
1317
HASS币
0
发表于 2024-11-1 22:19:29 | 显示全部楼层
不用这么麻烦啊,esphome自己就有number,只需要在esphome里面添加代码就好了:

#hass交互设定定时关闭倒计时        
  - platform: template
    name: "Timer"
    id: close_timer
    icon: mdi:timer
    optimistic: true
    restore_value: true
    min_value: 1
    max_value: 300
    unit_of_measurement: "分"
    step: 1
    on_value:
      then:
        - delay: !lambda "return x * 1000;"
        - switch.turn_off: ......
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-22 23:48 , Processed in 0.158022 second(s), 30 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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