Nextion 二进制传感器组件
nextion 二进制传感器平台支持 Nextion 中的许多开关组件以及整数变量(>0 == true)。它可以是 Nextion 显示中的组件或变量。
最好将组件的 vscope 在 Nextion 编辑器中设为全局。这样,无论页面是否显示,组件都可用。
有关设置显示,请参见 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: "Radio 0 Binary Sensor" component_name: page0.r0 # r0 是 Nextion 编辑器第 0 页上的全局组件 update_interval: 4s - platform: nextion id: darkmode name: "Is Darkmode Set" variable_name: darkmode- nextion_id(可选,ID):Nextion 显示的 ID。
- component_name(可选,string):Nextion 组件的名称。
- variable_name(可选,string):Nextion 变量的名称。任何大于
0的值都被视为on - page_id(可选,string):组件所在页面的 ID。默认页面使用
0。 - component_id(可选,string):要跟踪的组件的 ID(编号,不是名称!)。
- update_interval(可选,Time):更新传感器的持续时间。如果使用 Nextion 自定义二进制传感器协议,则不应使用此项
- background_color(可选,Color):背景颜色
- foreground_color(可选,Color):前景颜色
- visible(可选,boolean):可见或不可见
- 来自 Binary Sensor 的所有其他选项。
触摸传感器: 当为组件选中发送组件 ID复选框时,Nextion 会发送 page_id 和 component_id。要启用 此本机事件,page_id 和 component_id 是必需的。不需要 Nextion 自定义二进制传感器协议。如果设置了 page_id 和 component_id,则组件只会对来自 Nextion 的触摸事件做出反应。设置 component_name 将允许设置前景颜色等选项。
NOTE
background_color(s)、foreground_color(s) 和 visible 在页面更改时不会保留其状态。Binary Sensor Settings。
具有自定义协议的 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 动作
Section titled “binary_sensor.nextion.publish 动作”你还可以使用 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(必选,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_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): 将背景颜色设置为 Colorset_background_pressed_color(Color color): 将背景颜色设置为 Colorset_foreground_color(Color color): 将背景颜色设置为 Colorset_foreground_pressed_color(Color color): 将背景颜色设置为 Colorset_visible(bool visible): 设置可见或不可见。如果设为 false,则不会向组件发送更新
具有整数值(.val)或 Nextion 变量的 Nextion 组件如果设置了 update_interval,将被自动轮询。 要让 Nextion 发送数据,你可以使用 Nextion 自定义二进制传感器协议。将 Nextion 自定义二进制传感器协议 添加到 要触发发送的组件或函数中。通常这是在触摸按下事件中,但一些组件(如滑块)应在 触摸释放事件中设置,以捕获所有更改。由于这是一种自定义协议,因此可以从 Nextion 中的任何地方(定时器/函数/组件)发送。
NOTE
不需要为整数值的组件勾选触摸按下事件或触摸释放事件中的发送组件 ID, 因为这会向 esphome 发送真实值, 但对于触摸传感器,请确保两者都勾选。
使用上面的 yaml 示例:
-
“mode” 是触摸传感器,当用户按下页面
0中具有 ID8的组件时将触发 -
“Radio 0 Binary Sensor” 将从 Nextion 轮询
r0.val值并相应设置状态。 -
“Is Darkmode Set” 不会轮询 Nextion。Nextion 需要使用 Nextion 自定义二进制传感器协议 或使用 lambda:
NOTE
如果 Nextion 处于睡眠状态,则不会向其发送更新。一旦唤醒,组件将被更新。如果组件不可见,visible(false),则直到设为可见之前都不会更新。
Nextion 自定义二进制传感器协议
Section titled “Nextion 自定义二进制传感器协议”所有行都是必需的
printh 93prints "r0",0printh 00prints r0.val,0printh FF FF FFprinth 93告诉库这是二进制传感器布尔/整数数据prints "r0",0发送与 nextion_component_name 或 nextion_variable_name 匹配的名称printh 00发送一个 NULLprints r0.val,0要发送的实际值。对于变量,使用不带.val的 Nextion 变量名称r0printh FF FF FFNextion 命令 ack
响应自定义二进制传感器协议帧(自动化)
Section titled “响应自定义二进制传感器协议帧(自动化)”除了更新 Nextion 二进制传感器实体外,Nextion 自定义二进制传感器协议(0x93) 还可以直接在 Nextion 显示组件上触发自动化。
当来自 Nextion 的二进制数据打算作为事件处理而不是作为持久状态时,这非常有用,例如:
- 应立即触发逻辑的按钮或模式更改
- 轻量级命令或控制信号
- 不需要 Home Assistant 实体的自定义交互模式
display: - platform: nextion id: nextion1 uart_id: uart_nextion on_custom_binary_sensor: then: - lambda: |- // key: Nextion 发送的名称(string) // value: 解码的布尔值 if (key == "r0") { ESP_LOGI("nextion", "Binary sensor r0 = %s", ONOFF(value)); }传递给自动化的参数
Section titled “传递给自动化的参数”-
key(
string): Nextion 使用自定义二进制传感器协议发送的名称。 它对应于prints "<name>",0中发送的值。 -
value(
bool): 从协议帧解码的布尔值。 任何大于0的值都被解释为true。
- 自动化在接收到自定义协议帧时触发,而不是在二进制传感器实体更新时触发。
- 定义
binary_sensor:条目不是使用此自动化所必需的。 - 现有的 Nextion 二进制传感器实体和轮询行为保持不变。
- 此自动化反映 Nextion 自定义二进制传感器协议 中描述的相同协议。
- 此机制允许事件驱动地处理 Nextion 二进制数据,而无需在不需要持久状态时维护二进制传感器实体的开销。