跳转到内容

Tuya MCU

tuya 组件为平台使用创建到 Tuya MCU 的串行连接。

tuya 串行组件要求配置 UART 总线。 将 tuya 组件放入配置中,它会在配置日志中列出可能的设备。

# 注册 Tuya MCU 连接
tuya:

以下是一个 Tuya 风扇控制器的示例输出:

[12:39:45][C][tuya:023]: Tuya:
[12:39:45][C][tuya:032]: Datapoint 1: switch (value: ON)
[12:39:45][C][tuya:036]: Datapoint 3: enum (value: 1)
[12:39:45][C][tuya:036]: Datapoint 6: enum (value: 0)
[12:39:45][C][tuya:034]: Datapoint 7: int value (value: 0)
[12:39:45][C][tuya:032]: Datapoint 9: switch (value: OFF)
[12:39:45][C][tuya:046]: Product: '{"p":"hqq73kftvzh8c92u","v":"1.0.0","m":0}'

以下是一个 Tuya ME-81H 温控器的另一个示例输出:

[08:51:09][C][tuya:032]: Tuya:
[08:51:09][C][tuya:043]: Datapoint 1: switch (value: ON)
[08:51:09][C][tuya:045]: Datapoint 24: int value (value: 220)
[08:51:09][C][tuya:045]: Datapoint 16: int value (value: 22)
[08:51:09][C][tuya:049]: Datapoint 2: enum (value: 1)
[08:51:09][C][tuya:045]: Datapoint 19: int value (value: 40)
[08:51:09][C][tuya:045]: Datapoint 101: int value (value: 1)
[08:51:09][C][tuya:045]: Datapoint 27: int value (value: -2)
[08:51:09][C][tuya:049]: Datapoint 43: enum (value: 1)
[08:51:09][C][tuya:049]: Datapoint 102: enum (value: 1)
[08:51:09][C][tuya:051]: Datapoint 45: bitmask (value: 0)
[08:51:09][C][tuya:043]: Datapoint 10: switch (value: ON)
[08:51:09][C][tuya:041]: Datapoint 38: raw (value: 06.00.14.08.00.0F.0B.1E.0F.0C.1E.0F.11.00.16.16.00.0F.08.00.16.17.00.0F (24))
[08:51:09][C][tuya:049]: Datapoint 36: enum (value: 1)
[08:51:09][C][tuya:057]: GPIO Configuration: status: pin 14, reset: pin 0 (not supported)
[08:51:09][C][tuya:061]: Status Pin: GPIO14
[08:51:09][C][tuya:063]: Product: '{"p":"gogb05wrtredz3bs","v":"1.0.0","m":0}'
  • time_id (可选, ID): 部分 Tuya 设备支持从 ESPHome 获取本地时间。 指定要使用的 Time 的 ID。

  • status_pin (可选, Pin Schema): 部分 Tuya 设备仅支持通过 gpio 引脚报告 Wi-Fi 状态。 指定配置转储中报告的引脚,否则留空。 更多相关信息见 Tuya 开发者文档。

  • ignore_mcu_update_on_datapoints (可选, list): 一个要忽略 MCU 更新的 datapoint 列表。对 某些损坏/不稳定的硬件和调试很有用。

自动化:

  • on_datapoint_update (可选): 收到 Tuya datapoint 更新时要执行的自动化。参见 on_datapoint_update。

收到 Tuya datapoint 更新时将触发此自动化。 变量 x 会传递给自动化,供在 lambda 中使用。 x 变量的类型取决于 datapoint_type 配置变量:

  • raw: x 是 std::vector<uint8_t>
  • string: x 是 std::string
  • bool: x 是 bool
  • int: x 是 int
  • uint: x 是 uint32_t
  • enum: x 是 uint8_t
  • bitmask: x 是 uint32_t
  • any: x 是 API 参考:tuya::TuyaDatapoint
tuya:
on_datapoint_update:
- sensor_datapoint: 6
datapoint_type: raw
then:
- lambda: |-
ESP_LOGD("main", "on_datapoint_update %s", format_hex_pretty(x).c_str());
id(voltage).publish_state((x[0] << 8 | x[1]) * 0.1);
id(current).publish_state((x[3] << 8 | x[4]) * 0.001);
id(power).publish_state((x[6] << 8 | x[7]) * 0.1);
- sensor_datapoint: 7 # 示例 dp
datapoint_type: string
then:
- lambda: |-
ESP_LOGD("main", "on_datapoint_update %s", x.c_str());
- sensor_datapoint: 8 # 示例 dp
datapoint_type: bool
then:
- lambda: |-
ESP_LOGD("main", "on_datapoint_update %s", ONOFF(x));
- sensor_datapoint: 6
datapoint_type: any # 这是可选的
then:
- lambda: |-
if (x.type == tuya::TuyaDatapointType::RAW) {
ESP_LOGD("main", "on_datapoint_update %s", format_hex_pretty(x.value_raw).c_str());
} else {
ESP_LOGD("main", "on_datapoint_update %hhu", x.type);
}
  • sensor_datapoint (必选, int): 传感器的 datapoint id 编号。
  • datapoint_type (可选, string): datapoint 类型,可选 raw、string、bool、int、uint、enum、 bitmask 或 any。
  • 参见 Automation。