Інтегруємо чайник в 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 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарівЯ підключив такий чайник до HomeAssistant локально через LocalTuya. Не хватало в ньому табло з показником поточної температури, так от для цього зробив на ESP32-C3 з маленьким екранчиком вивід сенсора з НА.

Вау, дуже круто! І те що через LocalTuya і ця маленька ESP з екранчиком
Дружина забракувала, що екран малий та тьмяний, прийшлось переробити на продвинутіший, з підсвіткою, та зміною кольору від температури.
Merci pour cette astuce qui permet d’utiliser espHome. J’avais essayé en changeant la puce mais une fois mise sur la carte de la bouilloire elle ne bootait pas, il devait manquer des signaux.
Дякую за ваш інтерес до статті. Надайте більше деталей. У вас чайник PC-WKS 1167G? Яку плату ESP ви використовували? Як саме не плата не завантажувалась?
Oui, j’ai une bouilloire PC-WKS 1167G
j’ai flashé un esp-12f avec tasmota (blakadder.com/...kettle-in-home-assistant)
posé sur la carte fr.aliexpress.com/...tem/1005006302055371.html pour le flasher: tout va bien.
soudé à la place du chip wbr3, l’esp12-f n’a pas booté.
remis sur le support de flashage, l’esp12-f attrape une adresse IP et fonctionne bien.
j’ai ensuite mis un seed studio xiao esp32-c3, mais je n’avais pas les pins tx/rx (en tous cas, ce n’était pas marqué) alors j’ai utilisé D0/D1 et GPIO3/GPIO2 et tout va bien.
Il ne me reste plus qu’à trouver la bonne phrase pour commander à la voix une tasse d’eau à 60°C pour ma petite femme !!!
«Ok Nabu» a quelque fois l’oreille un peu dure !!!
Там з пінів мікроконтролеру не вистачає живлення, тому брали з плати
Добрий день, а цією прошивкою можна буде зробити зі звичайного чайника розумний? За допомогою esp, датчика температури і реле.
Дякую за інтерес до цієї теми. Гадаю цілком можливо. Не впевнений що конкретно ця прошивка, але ESPHome має впоратись з цією задачею
Доброго дня!!! А до яких пінів на esp який провід паяти? Бо в конфігу 20, 21 а на фото ніби щось інше, та і не ясно куди жовтий куди синій. Дякую за роботу, чекаю на відповідь
ESP паяти до RX/TX, навхрест
На платі чайника є позначення rx/tx?
Немає. Якщо припадаєте не так нічого не згорить бо це uart, просто не працюватиме. GPIO 20 (RX), GPIO 21 (TX). Автор використовує плату esp32-c3-devkitm-1
Доброго дня. Вам вдалось модифікувати чайник?