本帖最后由 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设置中,并且启用了相应的网络选项
|