跳转到内容

Nextion 传感器组件

nextion 传感器平台支持整数或浮点数(Xfloat)。它可以是 Nextion 显示屏中的组件、变量或波形。 最好在 Nextion 编辑器中将组件的 vscope 设置为全局。这样,无论页面是否显示,该组件都将可用。

NOTE

Nextion 可以接收整数,但它只能为负整数发送 3 个字节。如果使用 Nextion 自定义传感器协议,范围是: -16777215 到 4294967295

有关设置显示屏的说明,请参见 Nextion

# Example configuration entry
display:
- platform: nextion
id: nextion1
# ...
sensor:
- platform: nextion
name: "Current Humidity"
component_name: humidity # pageX.humidity for a global
precision: 1
update_interval: 4s
- platform: nextion
nextion_id: nextion1
name: "Current Temperature"
variable_name: temperature
- platform: nextion
id: s01
component_id: 2
wave_channel_id: 0
wave_max_value: 100
waveform_send_last_value: "true"
wave_max_length: 400
update_interval: 1s
- platform: nextion
id: s02
component_id: 2
wave_channel_id: 1
wave_max_value: 100
update_interval: 1s
  • nextion_id (可选,ID): 手动指定 Nextion 显示屏的 ID。

  • component_name (可选,string): 手动指定 Nextion 组件的名称。

  • variable_name (可选,string): 手动指定 Nextion 变量的名称。

  • update_interval (可选,Time): 更新传感器的持续时间

  • precision (可选,int): 这是针对 Nextion 浮点组件的。此设置 将组件设置为精度。这通常是组件的 vvs1 设置。

  • background_color (可选,Color): 背景颜色

  • foreground_color (可选,Color): 前景颜色

  • visible (可选,boolean): 是否可见

  • wave_channel_id (可选,int): 波形 ID,范围为 0-3

  • wave_max_value (可选,int): 最大值。在 Nextion 编辑器中将 dis 设置为组件的高度 并将此值设置为要发送的最大值。这将设置适当的缩放。

  • waveform_send_last_value (可选,int): 这将在更新间隔期间发送最后设置的值。设置为 true 将提供时序图样式的图表

  • wave_max_length (可选,int): 存储多少个数据点。通常这是 Nextion 中组件的宽度

  • update_interval (可选,Time): 更新传感器的持续时间。这通常应设置为波形,以便发送定期更新。

  • 来自 Sensor 的其他所有选项。

只能设置 一个 component_name 或 variable_name

NOTE

background_color、foreground_color 和 visible 在页面更改时不会保留其状态。传感器设置。 可以使用带有自定义协议发送当前页面的 Nextion 传感器 来执行 API 调用 通过前缀更新组件 以更新该页面的所有组件

有关更多信息,请参见 如何更新

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

示例: component_name: page0.humidity

您还可以使用 sensor.nextion.publish 操作从 YAML 文件的其他地方向 Nextion 传感器发布状态。

# Example configuration entry
sensor:
- platform: nextion
id: nextion_sensor
...
# in some trigger
on_...:
- sensor.nextion.publish:
id: nextion_sensor
state: 100.0
# 这些是可选的。默认为 true。
publish_state: true
send_to_nextion: true
# Templated
- sensor.nextion.publish:
id: nextion_sensor
state: !lambda 'return 100.0;'
# 这些是可选的。默认为 true。
publish_state: true
send_to_nextion: true

配置变量:

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

  • state(必选,string,可模板化): 要发布的浮点状态。

  • publish_state (可选,bool,可模板化): 向 Home Assistant 发布新状态。 默认为 true。

  • send_to_nextion (可选,bool,可模板化): 向 Nextion 显示屏发布新状态以更新组件。默认为 true。

NOTE

此操作也可以用 lambda 编写。参见 Lambda 调用

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

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

NOTE

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

使用上面的 yaml 示例:

  • “Current Humidity” 将轮询 Nextion 获取 humidity.val 值并相应设置传感器。
  • “Current Temperature” 不会轮询 Nextion。Nextion 将需要使用 Nextion 自定义传感器协议 或使用 lambda:
  • Lambda 调用。

NOTE

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

所有行均为必需

printh 91
prints "temperature",0
printh 00
prints temperature.val,0
printh FF FF FF
  • printh 91 告知库这是传感器(int)数据
  • prints "temperature",0 发送与 component_name 或 variable_name 匹配的名称
  • printh 00 发送 NULL
  • prints temperature.val,0 要发送的实际值。对于变量,使用不带 .val 的 Nextion 变量名 temperature
  • printh FF FF FF Nextion 命令确认

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

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

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

当传感器数据打算作为 事件 而不是持久状态处理时,这非常有用,例如:

  • 轻量级命令或控制消息
  • 紧凑型数值负载
  • 不需要 Home Assistant 实体的自定义协议
display:
- platform: nextion
id: nextion1
uart_id: uart_nextion
on_custom_sensor:
then:
- lambda: |-
// key: Nextion 发送的名称(string)
// value: 解码的整数值
if (key == "temperature") {
ESP_LOGI("nextion", "Temperature=%d", value);
}
  • key (string):
    Nextion 使用自定义传感器协议发送的名称。
    这对应于在 prints "<name>",0 中发送的值。

  • value (int):
    从协议帧解码的整数值。

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