Інтегруємо чайник в Home Assitstant
🎉 З радістю повідомляю про створення форуму української спільноти розумного будинку.
Привіт усім у цій публікації поділюсь досвідом інтеграції CakesTwix та MihMihMihMi розумного чайника ProfiCook PC-WKS 1167G в ESPHome та Home Assistant. Взагалі сам чайник і так працює дистанційно через застосунок Tuya Smart, проте для власника чайника принципово було відв’язати чайник від хмари та керувати ним локально через Tasmota, або ESPHome. Для цього знадобилось трохи модифікувати пристрій на рівні заліза, замінивши відпаявши Tuya плату WBR3 та замінити її на ESP32.
Для чайника ProfiCook уже є готова прошивка під ESPHome та Tasmota. Проте тут ці конфігурації не підходять, оскільки новіші моделі чайників мають на борту не ESP32, а власний чіп під назвою WBR3, який хоч і підтримується ESPHome, але не працює прошивка по повітрю (OTA). Тому рішенням стало заміна WBR3 на ESP32.
У цього чайника схема підключення виглядає так: WBR3 — Tuya MCU — Залізо
Після модифікації змінилась на таку: esp32-c3-devkitm-1 — Tuya MCU — Залізо (чайник)
ESP32 підключена контактами GPIO20 (RX) та GPIO21 (TX) до Tuya MCU і керує ним через UART.







Також додаю конфігурацію ESPHome
esphome:
name: proficook-pc-wks-1167g
friendly_name: ProfiCook PC-WKS 1167G
esp32:
board: esp32-c3-devkitm-1
framework:
type: arduino # idf не працює, йде в bootloop
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "/790pJKEywnmVNLXGZylVTSxNI74ptiBAjeqgPltlHc="
# Over-the-air updates
ota:
password: "your password" # Сюди свій пароль вписати
wifi:
output_power: 8.5dB # Важлива хрінь, не прибирати
ssid: !secret HO_wifi_ssid
password: !secret HO_wifi_password
# Enable fallback hotspot (captive portal) in case WiFi connection fails
ap:
ssid: "Proficook-Pc-Wks-1167G"
password: "0000000009"
captive_portal:
uart:
rx_pin: GPIO20
tx_pin: GPIO21
baud_rate: 9600
# Register the Tuya MCU connection
tuya:
text_sensor:
- platform: template
name: Kettle State
icon: mdi:kettle
id: text_state
- platform: template
name: Kettle Error
icon: mdi:alert-circle-outline
id: text_error
select:
- platform: template
name: "Kettle mode"
id: kettle_control
options:
- 45°
- 60°
- 85°
- 100°
- 100° and off
- Custom
- "Off"
optimistic: true
set_action:
lambda: |-
if (strcmp(x.c_str(), "45°") == 0) {
tuya_tuya_id->set_enum_datapoint_value(101, 0);
} else if (strcmp(x.c_str(), "60°") == 0) {
tuya_tuya_id->set_enum_datapoint_value(101, 1);
} else if (strcmp(x.c_str(), "85°") == 0) {
tuya_tuya_id->set_enum_datapoint_value(101, 2);
} else if (strcmp(x.c_str(), "100°") == 0) {
tuya_tuya_id->set_enum_datapoint_value(101, 3);
} else if (strcmp(x.c_str(), "100° and off") == 0) {
tuya_tuya_id->set_enum_datapoint_value(101, 4);
} else if (strcmp(x.c_str(), "Custom") == 0) {
tuya_tuya_id->set_enum_datapoint_value(101, 5);
} else {
tuya_tuya_id->set_enum_datapoint_value(101, 6);
}
number:
- platform: "tuya"
name: "Kettle Custom Temperature"
number_datapoint: 102
icon: mdi:oil-temperature
min_value: 35
max_value: 100
step: 1
sensor:
- platform: template
name: Kettle Temperature
id: kettle_temp
unit_of_measurement: "°C"
accuracy_decimals: 0
- platform: tuya
id: tuya_105
sensor_datapoint: 105
on_value:
then:
- if:
condition:
lambda: |-
return static_cast(id(tuya_106).state) == 1;
then:
- sensor.template.publish:
id: kettle_temp
state: !lambda |-
return 0;
else:
- sensor.template.publish:
id: kettle_temp
state: !lambda |-
return id(tuya_105).state;
- platform: tuya
id: kettle_remaining
name: Kettle Remaining Time
icon: mdi:clock-time-five-outline
sensor_datapoint: 107
unit_of_measurement: "min"
accuracy_decimals: 0
- platform: tuya
id: tuya_101
sensor_datapoint: 101
on_value:
then:
- select.set_index:
id: kettle_control
index: !lambda |-
return id(tuya_101).state;
- platform: tuya
id: tuya_106
sensor_datapoint: 106
on_value:
then:
- text_sensor.template.publish:
id: text_state
state: !lambda |-
switch(static_cast(id(tuya_106).state)) {
case 1: return "Lifted";
case 2: return "Standby";
case 3: return "Heating";
case 4: return "Cooling";
case 5: return "Maintaining Temp";
default: return "";
}
- platform: tuya
id: tuya_104
sensor_datapoint: 104
on_value:
then:
- if:
condition:
lambda: |-
return id(kettle_temp).raw_state == 0;
else:
- text_sensor.template.publish:
id: text_error
state: !lambda |-
switch(static_cast(id(tuya_104).state)) {
case 0: return "OK";
case 1: return "Empty";
case 4: return "Overheated";
default: return "other error";
}
Також в кінець конфігурації можна додати клімат компонент. Він додає зручний інтерфейс керування температурою нагріву, накшталт круглого перемикача керування кондиціонером.

climate: platform: tuya name: "Kettle" target_temperature_datapoint: 102 current_temperature_datapoint: 105 switch_datapoint: 101 active_state: datapoint: 106 visual: min_temperature: 35 max_temperature: 100 temperature_step: 5
14 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів