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 动作
Section titled “text_sensor.nextion.publish 动作”你还可以使用 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 调用
Section titled “Lambda 调用”从 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): 将背景颜色设置为 Colorset_foreground_color(Color color): 将背景颜色设置为 Colorset_visible(bool visible): 设置可见或不可见。如果设为 false,则不会向组件发送更新。
具有整数值(.val)或 Nextion 变量的 Nextion 组件如果设置了 update_interval,将被自动轮询。 要让 Nextion 发送数据,你可以使用 Nextion 自定义文本传感器协议。将 Nextion 自定义文本传感器协议 添加到 要触发发送的组件或函数中。通常这是在触摸按下事件中,但一些组件(如滑块)应在 触摸释放事件中设置,以捕获所有更改。由于这是一种自定义协议,因此可以从 Nextion 中的任何地方(定时器/函数/组件)发送。
NOTE
不需要为触摸按下事件或触摸释放事件勾选发送组件 ID, 因为这会向 esphome 发送真实值。
使用上面的 yaml 示例:
-
“text0” 将从 Nextion 轮询
text0.txt值并相应设置状态。
NOTE
如果 Nextion 处于睡眠状态,则不会向其发送更新。一旦唤醒,组件将被更新。如果组件不可见,visible(false),则直到设为可见之前都不会更新。
Nextion 自定义文本传感器协议
Section titled “Nextion 自定义文本传感器协议”所有行都是必需的
printh 92prints "text0",0printh 00prints text0.txt,0printh 00printh FF FF FFprinth 92告诉库这是文本传感器。prints "text0",0发送与 component_name 或 variable_name 匹配的名称。printh 00发送一个 NULL。prints text0.txt,0要发送的实际文本。对于变量,使用不带.txt的 Nextion 变量名称text0。printh 00发送一个 NULL。printh FF FF FFNextion 命令 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()); }传递给自动化的参数
Section titled “传递给自动化的参数”-
key(
string): Nextion 使用自定义文本传感器协议发送的名称。 它对应于prints "<name>",0中发送的值。 -
value(
string): 从协议帧解码的文本值。
- 自动化在接收到自定义协议帧时触发,而不是在文本传感器实体更新时触发。
- 定义
text_sensor:条目不是使用此自动化所必需的。 - 现有的 Nextion 文本传感器实体和轮询行为保持不变。
- 此自动化反映 Nextion 自定义文本传感器协议 中描述的相同协议。
- 此机制允许事件驱动地处理 Nextion 文本数据,而无需在不需要持久状态时维护文本传感器实体的开销。