跳转到内容

Nextion 二进制传感器组件

nextion 二进制传感器平台支持 Nextion 中的许多开关组件以及整数变量(>0 == true)。它可以是 Nextion 显示器中的组件或变量。最好在 Nextion Editor 中将组件的 vscope 设置为 global。这样无论页面是否显示,组件都可用。

请参阅 Nextion 设置显示器

# 示例配置条目
display:
- platform: nextion
id: nextion1
# ...
binary_sensor:
- platform: nextion
page_id: 0
component_id: 8
component_name: page0.mode # 仅用于支持更改颜色
id: mode
- platform: nextion
id: r0_binary_sensor
name: "无线电 0 二进制传感器"
component_name: page0.r0 # r0 是 Nextion Editor 第 0 页上的全局组件
update_interval: 4s
- platform: nextion
id: darkmode
name: "暗色模式是否设置"
variable_name: darkmode
  • nextion_id (可选, ID): Nextion 显示器的 ID。
  • component_name (可选, 字符串): Nextion 组件的名称。
  • variable_name (可选, 字符串): Nextion 变量的名称。任何大于 0 的值被认为是开启
  • page_id (可选, 字符串): 组件所在页面的 ID。默认页面使用 0
  • component_id (可选, 字符串): 要跟踪的组件的 ID(数字,不是名称!)。
  • update_interval (可选, 时间): 更新传感器的持续时间。如果使用 Nextion 自定义二进制传感器协议 则不应使用
  • background_color (可选, 颜色): 背景颜色
  • foreground_color (可选, 颜色): 前景颜色
  • visible (可选, 布尔值): 是否可见
  • 所有其他选项来自 二进制传感器

触摸传感器: 当为组件选中 Send Component ID 复选框时,Nextion 将发送 page_idcomponent_id。要启用此本机事件,需要 page_idcomponent_id。不需要 Nextion 自定义二进制传感器协议。如果设置了 page_idcomponent_id,则组件仅对来自 Nextion 的触摸事件做出反应。设置 component_name 将允许设置前景颜色等选项。

NOTE

background_color(s)foreground_color(s)visible 在页面更改时不会保留其状态。二进制传感器设置。可以使用发送当前页面的 Nextion 传感器 执行 API 调用 Update Components By Prefix 来更新该页面的所有组件

示例:

- platform: nextion
id: current_page
nextion_id: nextion1
name: current_page
variable_name: current_page
on_value:
lambda: |-
id(nextion1).update_components_by_page_prefix("page"+x+".");

请参阅 更新方式 获取更多信息

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

示例: nextion_component_name: page0.r0

您还可以使用 binary_sensor.nextion.publish 操作从 YAML 文件的其他位置向 Nextion 二进制传感器发布状态。

# 示例配置条目
binary_sensor:
- platform: nextion
id: nextion_bsensor
...
# 在某个触发器中
on_...:
- binary_sensor.nextion.publish:
id: nextion_bsensor
state: true
# 这些是可选的。默认为 true。
publish_state: true
send_to_nextion: true
# 模板化
- binary_sensor.nextion.publish:
id: nextion_bsensor
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_binarysensor.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 示例:

  • “mode” 是触摸传感器,当用户按下第 0 页 ID 为 8 的组件时将触发

  • “无线电 0 二进制传感器” 将轮询 Nextion 获取 r0.val 值并相应设置状态。

  • “暗色模式是否设置” 不会轮询 Nextion。Nextion 需要使用 Nextion 自定义二进制传感器协议 或使用 lambda:

  • Lambda 调用

NOTE

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

所有行都是必需的

printh 93
prints "r0",0
printh 00
prints r0.val,0
printh FF FF FF
  • printh 93: 告诉库这是二进制传感器布尔/整数数据
  • prints "r0",0: 发送与 nextion_component_namenextion_variable_name 匹配的名称
  • printh 00: 发送 NULL
  • prints r0.val,0: 要发送的实际值。对于变量使用不带 .val 的 Nextion 变量名 r0
  • printh FF FF FF: Nextion 命令确认