跳转到内容

Nextion 开关组件

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

请参阅 Nextion 来设置显示屏

# 示例配置条目
display:
- platform: nextion
id: nextion1
# ...
switch:
- platform: nextion
id: r0_switch
name: "Radio 0 Switch"
component_name: r0 # pageX.r0 表示全局组件
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可选时间):更新传感器的持续时间。如果使用 Nextion 自定义开关协议,则不应使用此选项
  • background_color可选颜色):背景颜色
  • background_pressed_color可选颜色):按下时的背景颜色
  • foreground_color可选颜色):前景颜色
  • foreground_pressed_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 开关发布状态。

# 示例配置条目
sensor:
- platform: nextion
id: nextion_switch
...
# 在某个触发器中
on_...:
- switch.nextion.publish:
id: nextion_switch
state: true
# 这些是可选的。默认为 true。
publish_state: true
send_to_nextion: true
# 模板化
- switch.nextion.publish:
id: nextion_switch
state: !lambda 'return true;'
# 这些是可选的。默认为 true。
publish_state: true
send_to_nextion: true

配置选项:

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

  • state必填,字符串,可模板化):要发布的布尔状态。

  • publish_state可选,布尔值,可模板化):将新状态发布到 Home Assistant。 默认为 true。

  • send_to_nextion可选,布尔值,可模板化):将新状态发布到 Nextion 显示屏,这将更新组件。默认为 true。

NOTE

此动作也可以在 lambda 中编写。请参阅 Lambda 调用

lambda 中,您可以调用多个方法来访问一些更高级的功能(更多信息请参阅完整的 API Reference: 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,则不会向组件发送任何更新

如果设置了 update_interval,具有整数值(.val)的 Nextion 组件或 Nextion 变量将被自动轮询。 要让 Nextion 发送数据,您可以为此使用 Nextion 自定义开关协议。将 Nextion 自定义开关协议添加到您想要触发发送的组件或函数中。通常这在 Touch Press Event 中,但某些组件(如滑块)应在 Touch Release Event 中设置以捕获所有更改。由于这是自定义协议,它可以从 Nextion 中的任何地方(定时器/函数/组件)发送。

NOTE

不需要为 Touch Press EventTouch Release Event 勾选 Send Component 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 告诉库这是开关布尔/整数数据
  • prints "r0",0 发送与 component_namevariable_name 匹配的名称
  • printh 00 发送一个 NULL
  • prints r0.val,0 要发送的实际值。对于变量,使用不带 .val 的 Nextion 变量名 r0
  • printh FF FF FF Nextion 命令确认