Подключение кондиционера haier к home assistant

Локальное управление кондиционером Haier Lightera через ESPHome: без китайских серверов, нестабильных облачных связок и лишней зависимости от Алисы.

Я купил кондиционеры Haier Lightera и, конечно, захотел подключить их к умному дому. Быстрый поиск показал: задача решаемая, но придётся немного поработать с железом. Ниже собрал рабочий вариант подключения, подводные камни и ссылки, которые пригодились в процессе.

Haier предлагает фирменные модули для управления через интернет, но они работают через китайские серверы. Для меня это было не лучшим вариантом: у меня уже есть кондиционеры с комплектным блоком управления, и качество облачной интеграции там оставляет желать лучшего. Я пробовал интеграцию Haier Evo, затем связку Haier → Алиса → Home Assistant, но в обоих случаях кондиционеры периодически отваливались. Поэтому хотелось именно локального решения.

Распиновка USB



Несмотря на разъём USB-A, выведенный в специальное место в корпусе для подключения модуля управления, в кондиционере используется не USB-протокол, а UART с уровнем 5 В вместо 3,3 В.






BoardUSBWire colorESP8266
5VVCCred5V
GNDGNDblackGND
TXDATA+greenRX
RXDATA-whiteTX


Выбор платы


Для подключения я выбрал проект haier-esphome. Главная сложность была в размере: хотелось поставить плату в штатное место, которое производитель предусмотрел для адаптера, а места там очень мало.

После нескольких попыток я остановился на LilyGO T-Dongle S3 без дисплея. Документация к плате лежит в репозитории LilyGO.

Донгл может использовать разъем USB как чистый UART, только с уровнем 5в вместо 3,3в (как и в кондиционере), для этого используются пины GPIO19 и GPIO20. Поэтому он просто вставляется в штатное место и более ничего с железом делать не надо.

Настройка прошивки



Но конечно же, прежде чем вставлять LilyGO, надо его прошить.

Если ESPHome ещё не установлен, начните с официальной инструкции. Затем скачайте последнюю версию haier-esphome и распакуйте архив.

У Haier есть два протокола: старый smartAir2 и hOn. В моих кондиционерах используется smartAir2, поэтому конфигурация ниже написана под него. На транспортном уровне протоколы совместимы, и при запуске с подключенным кондиционером прошивка подскажет, если выбран не тот вариант.

Ниже пример конфигурации с максимально включённой отладкой. Для постоянной работы её лучше отключить, но на первом запуске подробные логи сильно помогают понять, что происходит.


substitutions:
device_name: haierac1
device_id: haier_climate1
uart_id: ac_port
send_wifi: "false"

esphome:
name: ${device_name}
name_add_mac_suffix: true
platformio_options:
build_flags:
- -DARDUINO_USB_CDC_ON_BOOT=1

esp32:
variant: esp32s3
framework:
type: esp-idf
flash_size: 16MB

ota:
- platform: esphome
password: "passw0rd"

wifi:
ssid: "MySuperPuperSID"
password: "passw0rd"
fast_connect: true # будет быстрее запускаться

mqtt:
broker: 192.168.100.53
username: haierac1
password: passw0rd
discovery: true
client_id: ${device_name}

# Передача статуса в MQTT
birth_message:
topic: ${prefix}/text_sensor/status/state
payload: online

will_message:
topic: ${prefix}/text_sensor/status/state
payload: offline

shutdown_message :
topic: ${prefix}/text_sensor/status/state
payload: shutdown


uart:
- id: ${uart_id}
baud_rate: 9600
tx_pin: GPIO19
rx_pin: GPIO20
debug:

# Необязательно, возможно пригодится для отладки
sensor:
- platform: wifi_signal # Reports the WiFi signal strength/RSSI in dB
name: "WiFi Signal dB"
id: wifi_signal_db
update_interval: 10s
entity_category: "diagnostic"

# После отладки надо будет выключить
web_server:
port: 80

# После отладки переключить в менее подробный режим для повышения производительности
logger:
level: DEBUG

api:
reboot_timeout: 0s

packages:
local_haier: !include configs/external_components/local_haier.yaml
haier_base: !include .haier-smartair2-base.yaml



Подключаем донгл к компьютеру. Если на донгле уже стояла какая-то прошивка, то для его перепрошивки во время подключения надо нажать и держать несколько секунд кнопку на передней панели донгла. Далее запускаем в командой строке в только что распакованной директории
esphome run haierac1.yaml --device /dev/tty.usbmodem144301
где /dev/tty.usbmodem144301 - устройство, которое определилось при подключении донгла. В дальнейшем можно обновлять по воздуху (если оставите эту возможность в конфиге), заменив имя устройства на ip адрес
esphome run haierac1.yaml --device 192.168.100.100


Есть и другие варианты подключения Haier к Home Assistant. Возможно, вам пригодятся эти материалы:
Подключение кондиционеров Haier к Home Assistant
Управление кондиционером Haier на базе ESP8266