| 本帖最后由 guitengyue 于 2023-5-31 22:57 编辑 
 要在Home Assistant中将参数值传递到ESPHome编程的变量中,可以使用ESPHome的API,具体步骤如下: 
首先,在ESPHome编程中创建一个带有可调参数的组件。例如,以下组件将创建一个灯光并提供可调的亮度参数: light:
  - platform: esp8266_pwm
    id: my_light
    pin: GPIO12
    name: "My Light"
    optimistic: true
    restore_mode: ALWAYS_OFF
    # 添加可调参数
    brightness: 100%
 
然后,在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
 
接下来,在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() 让灯光组件反应出新设置。 
最后,在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设置中,并且启用了相应的网络选项
 |