跳转到内容

Nextion 开关组件

nextion 开关平台支持 Nextion 中的许多开关组件以及整型变量。它可以是 Nextion 显示器中的组件或变量。 最好在 Nextion Editor 中将组件的 vscope 设置为 global。这样无论页面是否显示,该组件都可用。

参见 Nextion 了解如何设置显示器

# Example configuration entry
display:
- platform: nextion
id: nextion1
# ...
switch:
- platform: nextion
id: r0_switch
name: "Radio 0 Switch"
component_name: r0 # pageX.r0 for a global
update_interval: 4s
- platform: nextion
id: darkmode
name: "Is Darkmode Set"
variable_name: darkmode
  • nextion_id(可选,ID):Nextion 显示器的 ID。
  • component_name(可选,字符串):Nextion 组件的名称。
  • variable_name(可选,字符串):Nextion 变量的名称。任何大于 0 的值都视为 打开
  • update_interval(可选,Time):更新传感器的持续时间。如果使用 Nextion 自定义开关协议,则不应使用此项
  • background_color(可选,Color):背景色
  • background_pressed_color(可选,Color):按下时的背景色
  • foreground_color(可选,Color):前景色
  • foreground_pressed_color(可选,Color):按下时的前景色
  • visible(可选,布尔值):可见或不可见
  • Switch 中的所有其他选项。

只能设置 一个 component_name 或 variable_name

参见 更新机制 以获取更多信息

Nextion 在页面切换时不会保留数据。此外,如果页面已更改且该页面上不存在 component_name,则 不会更新任何内容。为了解决这个问题,可以将 Nextion 组件更改为 vscope 为 global。如果设置了此项,则 component_name 应以页面名称为前缀(page0/page1 或你更改的名称)。

示例:component_name: page0.r0

你也可以使用 switch.nextion.publish 操作从 YAML 文件中的其他地方向 Nextion 开关发布状态。

# Example configuration entry
sensor:
- platform: nextion
id: nextion_switch
...
# in some trigger
on_...:
- switch.nextion.publish:
id: nextion_switch
state: true
# These are optional. Defaults to true.
publish_state: true
send_to_nextion: true
# Templated
- switch.nextion.publish:
id: nextion_switch
state: !lambda 'return true;'
# These are optional. Defaults to true.
publish_state: true
send_to_nextion: true

配置选项:

  • id(必填,ID):Nextion 开关的 ID。

  • state(必填,字符串,templatable):要发布的布尔状态。

  • publish_state(可选,bool,templatable):将新状态发布到 Home Assistant。 默认为 true。

  • send_to_nextion(可选,bool,templatable):将新状态发布到 Nextion 显示器,显示器将更新组件。默认为 true。

NOTE

此操作也可以在 lambdas 中编写。参见 Lambda 调用

在 lambdas 中,你可以调用几种方法来访问 一些更高级的功能(更多信息请参见完整的 API 参考:nextion_switch.h)。

  • set_state(bool value, bool publish, bool send_to_nextion) : 将状态设置为 value。将新状态发布到 HASS。Send_to_Nextion 用于将状态发布到 Nextion。
  • update() : 从 Nextion 轮询
  • set_background_color(Color color) : 将背景色设置为 Color
  • set_background_pressed_color(Color color) : 将背景色设置为 Color
  • set_foreground_color(Color color) : 将背景色设置为 Color
  • set_foreground_pressed_color(Color color) : 将背景色设置为 Color
  • set_visible(bool visible) : 设置可见或不可见。如果设置为 false,则不会向组件发送任何更新

具有整数值(.val)的 Nextion 组件或 Nextion 变量如果设置了 update_interval,将自动轮询。 要让 Nextion 发送数据,可以为 组件或函数添加 Nextion 自定义开关协议。通常这设置在 触摸按下事件 中,但某些组件(如滑块)应该在 触摸释放事件 中设置,以捕获所有更改。由于这是自定义协议,它可以 在 Nextion 中的任何位置(定时器/函数/组件)发送。

NOTE

无需检查 触摸按下事件 或 触摸释放事件 的 发送组件 ID, 因为这将向 esphome 发送真实值。

使用上面的 yaml 示例:

  • “Radio 0 switch” 将轮询 Nextion 获取 r0.val 值并相应地设置状态。

  • “Is Darkmode Set” 不会轮询 Nextion。需要让 Nextion 使用 Nextion 自定义开关协议 或使用 lambda:

  • Lambda 调用。

NOTE

如果 Nextion 处于休眠状态,则不会向其发送更新。一旦唤醒,组件将被更新。如果组件不可见,visible(false),则在将其设置为可见之前不会更新。

所有行都是必需的

printh 90
prints "r0",0
printh 00
prints r0.val,0
printh FF FF FF
  • printh 90 告知库这是开关 bool/integer 数据
  • prints "r0",0 发送与 component_name 或 variable_name 匹配的名称
  • printh 00 发送一个 NULL
  • prints r0.val,0 要发送的实际值。对于变量,使用 Nextion 变量名 r0(不带 .val)
  • printh FF FF FF Nextion 命令确认

响应自定义开关协议帧(自动化)

Section titled “响应自定义开关协议帧(自动化)”

除了更新 Nextion 开关实体外,Nextion 自定义开关协议(0x90) 还可以在 Nextion 显示器组件上直接触发自动化。

当来自 Nextion 的开关数据打算作为事件而不是持久状态处理时,这非常有用,例如:

  • 对用户交互的即时响应
  • 轻量级命令或控制消息
  • 无需 Home Assistant 开关实体的自定义逻辑
display:
- platform: nextion
id: nextion1
uart_id: uart_nextion
on_custom_switch:
then:
- lambda: |-
// key: name sent by the Nextion (string)
// value: decoded boolean value
if (key == "r0") {
ESP_LOGI("nextion", "Switch r0 = %s", ONOFF(value));
}
  • key(string):
    Nextion 使用自定义开关协议发送的名称。
    这对应于 prints "<name>",0 中发送的值。

  • value(bool):
    从协议帧解码的布尔值。
    任何大于 0 的值都被解释为 true。

  • 自动化在 收到自定义协议帧时 触发,而不是在开关实体更新时触发。
  • 不需要 定义 switch: 条目即可使用此自动化。
  • 现有的 Nextion 开关实体和轮询行为不变。
  • 此自动化反映与 Nextion 自定义开关协议 中描述的相同协议。
  • 此机制允许在不需要持久状态时无需维护开关实体即可实现事件驱动的 Nextion 开关数据处理。