esphome: name: gf-toilet-thermostat bk72xx: board: generic-bk7231t-qfn32-tuya uart: rx_pin: RX1 tx_pin: TX1 baud_rate: 9600 # Enable logging logger: # Enable Home Assistant API api: password: "" mqtt: broker: mqtt.blu3cat username: openhab password: Hl3Yr6cT2mgSp1eW ota: - platform: esphome password: "" wifi: ssid: "blu3cat-legacy" password: "tubbychristison" # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "Gf Toilet Thermostat" password: "yOfdzvIhC1Qd" captive_portal: time: - platform: sntp id: sntp_time timezone: Europe/London servers: - blu3cat.blu3cat - 192.168.3.1 tuya: # The MCU uses this for displaying the time in the display as well as for # scheduled programmes one may have configured in their thermostat. time_id: sntp_time # (Optional) # Schedules are not modeled in neither ESPHome nor Home Assistant. # # This parses the data point and emitting it as a string in the logs, and # serves as an example for users desiring more advanced configurations. on_datapoint_update: - sensor_datapoint: 101 datapoint_type: raw then: - lambda: |- // Apparently these vary per model; these are valid for the BHT-002 const int POS_HOUR = 1; const int POS_MINUTE = 0; const float TEMPERATURE_MULTIPLIER = 0.5f; const std::map DAY_OFFSET = { {0, "days 1-5"}, {6, "day 6"}, {12, "day 7"}, }; for (auto& day : DAY_OFFSET) { for (int period = 0; period < 6; period++) { int offset = (day.first + period) * 3; int hour = x[offset + POS_HOUR]; int minute = x[offset + POS_MINUTE]; float temp = x[offset + 2] * TEMPERATURE_MULTIPLIER; ESP_LOGD("custom", "Scheduled program for %s %02d:%02d set at %.1f C", day.second.c_str(), hour, minute, temp); } } climate: - platform: tuya name: "Thermostat" switch_datapoint: 1 target_temperature_datapoint: 2 current_temperature_datapoint: 3 preset: eco: datapoint: 5 temperature: 18 °C temperature_multiplier: 0.5 visual: min_temperature: 15 °C max_temperature: 30 °C temperature_step: 0.1 °C sensor: - platform: "tuya" name: "Temperature" sensor_datapoint: 3 unit_of_measurement: "°C" device_class: "temperature" accuracy_decimals: 1 filters: - multiply: 0.5 # The climate component already includes temperature, but having the # temperature as a separate sensor can be useful disabled_by_default: false # The external temperature sensor, if wired - platform: "tuya" name: "Temperature (external)" sensor_datapoint: 102 unit_of_measurement: "°C" device_class: "temperature" accuracy_decimals: 1 filters: - multiply: 0.5 disabled_by_default: false switch: - platform: "tuya" name: "Lock" icon: "mdi:lock" switch_datapoint: 6 - platform: "tuya" name: "Device Power" switch_datapoint: 1 select: - platform: "tuya" name: "Scheduled programming" icon: "mdi:calendar" enum_datapoint: 4 options: 0: Use scheduled programs 1: Manual control