Інтегруємо чайник в Home Assitstant
Дайте відповідь на опитування Розумний Будинок 2024 🏠
Привіт усім у цій публікації поділюсь досвідом інтеграції 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
Немає коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів