跳转到内容

Nextion 文本传感器组件

nextion 文本传感器平台支持文本字符串。它可以是 Nextion 显示中的组件或变量。 最好将组件的 vscope 在 Nextion 编辑器中设为全局。这样,无论页面是否显示,组件都可用。

有关设置显示,请参见 Nextion

# 示例配置条目
display:
- platform: nextion
id: nextion1
# ...
text_sensor:
- platform: nextion
nextion_id: nextion1
name: text0
id: text0
update_interval: 4s
component_name: text0
  • nextion_id(可选,ID):Nextion 显示的 ID。
  • component_name(必选,string):Nextion 组件的名称。
  • update_interval(可选,Time):更新传感器的持续时间。如果使用 Nextion 自定义文本传感器协议,则不应使用此项。
  • background_color(可选,Color):背景颜色。
  • foreground_color(可选,Color):前景颜色。
  • font_id(可选,int):组件的字体 id。
  • visible(可选,boolean):可见或不可见。
  • 来自 Text Sensor 的所有其他选项。

只能设置一个 component_name 或 variable_name

更多信息参见 如何更新

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

示例: component_name: page0.text0

你还可以使用 text_sensor.nextion.publish 动作从 YAML 文件的其他位置向 Nextion 文本传感器发布状态。

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

配置变量:

  • id(必选,ID):Nextion 文本传感器的 ID。

  • state(必选,string,templatable):要发布的字符串。

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

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

NOTE

此动作也可以在 lambda 中编写。参见 Lambda Calls

从 lambda 中,你可以调用多个方法来访问 一些更高级的函数(更多信息请参见完整 API 参考:nextion_textsensor.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_foreground_color(Color color) : 将背景颜色设置为 Color
  • set_visible(bool visible) : 设置可见或不可见。如果设为 false,则不会向组件发送更新。

具有整数值(.val)或 Nextion 变量的 Nextion 组件如果设置了 update_interval,将被自动轮询。 要让 Nextion 发送数据,你可以使用 Nextion 自定义文本传感器协议。将 Nextion 自定义文本传感器协议 添加到 要触发发送的组件或函数中。通常这是在触摸按下事件中,但一些组件(如滑块)应在 触摸释放事件中设置,以捕获所有更改。由于这是一种自定义协议,因此可以从 Nextion 中的任何地方(定时器/函数/组件)发送。

NOTE

不需要为触摸按下事件或触摸释放事件勾选发送组件 ID, 因为这会向 esphome 发送真实值。

使用上面的 yaml 示例:

  • “text0” 将从 Nextion 轮询 text0.txt 值并相应设置状态。

  • Lambda Calls。

NOTE

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

所有行都是必需的

printh 92
prints "text0",0
printh 00
prints text0.txt,0
printh 00
printh FF FF FF
  • printh 92 告诉库这是文本传感器。
  • prints "text0",0 发送与 component_name 或 variable_name 匹配的名称。
  • printh 00 发送一个 NULL。
  • prints text0.txt,0 要发送的实际文本。对于变量,使用不带 .txt 的 Nextion 变量名称 text0。
  • printh 00 发送一个 NULL。
  • printh FF FF FF Nextion 命令 ack。

响应自定义文本传感器协议帧(自动化)

Section titled “响应自定义文本传感器协议帧(自动化)”

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

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

  • 轻量级命令消息
  • CSV 或结构化文本负载
  • 不需要 Home Assistant 文本传感器实体的自定义通信模式
display:
- platform: nextion
id: nextion1
uart_id: uart_nextion
on_custom_text_sensor:
then:
- lambda: |-
// key: Nextion 发送的名称(string)
// value: 解码的文本值
if (key == "text0") {
ESP_LOGI("nextion", "Received text: %s", value.c_str());
}
  • key(string): Nextion 使用自定义文本传感器协议发送的名称。 它对应于 prints "<name>",0 中发送的值。

  • value(string): 从协议帧解码的文本值。

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