

С обновлением Home Assistant OS 2026.4.0 появились несколько интересных новинок. Например, нативная интеграция для телевизоров LG — LG Infrared. У меня для управления ИК-техникой (телевизоры, кондиционеры и т.д.) обычно используются RM Mini и RM PRO-4 от Broadlink, но новая интеграция их не поддерживает. LG Infrared требует сущность типа Infrared entity. ESPHome предоставляет её через компонент ir_rf_proxy (ранее назывался infrared).
Для своих устройств управляемых через RM Mini приходилось вручную считывать сигналы с пультов, записывать их в конфиг, и только потом уже была возможность пользоваться ими. Это несколько муторно и долго, но в общем один раз прописал и пользуйся. Если говорить только о телевизорах LG, то в принципе удобная интеграция тем, что не нужно считывать коды управления, они там уже есть. А команды в пультах одинаковые - как вы знаете, одним пультом можно управлять разными телевизорами этого бренда. Вот мне и интересно было попробовать.
Комплектующие и подготовка
Нам понадобится:
ИК светодиод и транзистор я выпаял из пульта от напольного вентилятора Elenberg, который уже давно отжил своё. Резисторы обычно есть в любом запасе радиолюбителя.
Распиновка транзистора S9014 (корпус TO-92)
В моей сборке использовалась партия с цоколёвкой C-B-E (если смотреть на плоскую грань выводами вниз):
Важно: У некоторых производителей встречается обратная распиновка (E-B-C). Перед пайкой обязательно проверьте цоколёвку мультиметром в режиме hFE или по даташиту конкретной партии. Ошибка с базой/коллектором может вывести из строя пин ESP32 или мгновенно перегреть транзистор.
Схема подключения
1. Управление (База)
Резистор 1 кОм. Один конец паяем к средней ноге транзистора (База), второй — к пину GPIO4 на ESP32.
2. Земля (Эмиттер)
Правую ногу (Эмиттер) соединяем с GND на ESP32.
3. Светодиод (Коллектор + Питание)
Короткая ножка (Катод, –) припаивается к левой ноге транзистора (Коллектор).
Длинная ножка (Анод, +) соединяется через резистор 100 Ом с пином 3.3V (или 5V, если плата поддерживает).
Техническая справка: S9014 рассчитан на ток коллектора до 100 мА. При резисторе 100 Ом и питании 5 В ток через ИК-диод составит около 35–40 мА, что безопасно для транзистора и обеспечивает уверенный сигнал на расстояние 3–5 метров.
Прошивка для ESPHome
Конфигурация минимальная. Главное — правильно связать remote_transmitter и ir_rf_proxy:
esphome:
name: esp32-ir-lg
friendly_name: ESP32-ir-lg
esp32:
board: esp32dev
framework:
type: esp-idf
# Enable logging
logger:
level: DEBUG
# Enable Home Assistant API
api:
encryption:
key: "ВАШ КЛЮЧ"
ota:
- platform: esphome
password: "ВАШ ПАРОЛЬ"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Esp32-Ir-Lg Fallback Hotspot"
password: "ВАШ ПАРОЛЬ"
captive_portal:
# 1. Базовый ИК-передатчик (аппаратный)
remote_transmitter:
id: ir_tx
pin: GPIO4
carrier_duty_percent: 50%
# 2. Прокси-компонент — создаёт Infrared entity для HA
infrared:
- platform: ir_rf_proxy
name: "ESP32 IR Emitter"
id: ir_proxy_tx
remote_transmitter_id: ir_tx
# 3. Тестовая кнопка (опционально)
button:
- platform: template
name: "Test Power"
on_press:
- logger.log: "Test button pressed"
Настройка в Home Assistant
В Настройки → Устройства и службы нажмите Добавить интеграцию, найдите LG Infrared и добавьте её.
HA автоматически обнаружит ESP32-передатчик и создаст 29 сущностей-кнопок (button.lg_tv_power_on, button.lg_tv_menu и т.д.).
Стандартный список кнопок в дашборде выглядит громоздко. Я оформил их в компактный пульт через custom:button-card.

Вот код карточки (в конце
- type: media-control
entity: media_player.tv_lg_55la620v
замените на свой) и custom:button-card если у вас не установлен, то установите через HACS
type: vertical-stack
cards:
- type: grid
square: false
columns: 3
cards:
- type: custom:button-card
entity: button.lg_tv_power_on
name: Вкл
icon: mdi:power
tap_action:
action: toggle
styles:
card:
- background-color: "#e74c3c"
- color: "#ffffff"
- border-radius: 10px
- height: 50px
- font-weight: bold
icon:
- color: "#ffffff"
name:
- color: "#ffffff"
- type: custom:button-card
entity: button.lg_tv_power_off
name: Выкл
icon: mdi:power-off
tap_action:
action: toggle
styles:
card:
- background-color: "#34495e"
- color: "#ffffff"
- border-radius: 10px
- height: 50px
icon:
- color: "#ffffff"
name:
- color: "#ffffff"
- type: custom:button-card
entity: button.lg_tv_exit
name: Exit
icon: mdi:exit-to-app
tap_action:
action: toggle
styles:
card:
- background-color: "#f1c40f"
- color: "#2c3e50"
- border-radius: 10px
- height: 50px
- font-weight: bold
icon:
- color: "#2c3e50"
name:
- color: "#2c3e50"
- type: grid
square: false
columns: 3
cards:
- type: custom:button-card
entity: button.lg_tv_menu
name: Меню
icon: mdi:menu
tap_action:
action: toggle
styles:
card:
- background-color: "#2c3e50"
- color: "#ecf0f1"
- border-radius: 10px
- height: 50px
- type: custom:button-card
entity: button.lg_tv_home
name: Home
icon: mdi:home
tap_action:
action: toggle
styles:
card:
- background-color: "#2c3e50"
- color: "#ecf0f1"
- border-radius: 10px
- height: 50px
- type: custom:button-card
entity: button.lg_tv_back
name: Назад
icon: mdi:arrow-left-bold-circle
tap_action:
action: toggle
styles:
card:
- background-color: "#2c3e50"
- color: "#ecf0f1"
- border-radius: 10px
- height: 50px
- type: custom:button-card
entity: button.lg_tv_left
name: ◀
icon: mdi:arrow-left-bold-box
tap_action:
action: toggle
styles:
card:
- background-color: "#34495e"
- color: "#ecf0f1"
- border-radius: 10px
- height: 50px
- type: custom:button-card
entity: button.lg_tv_up
name: ▲
icon: mdi:arrow-up-bold-box
tap_action:
action: toggle
styles:
card:
- background-color: "#34495e"
- color: "#ecf0f1"
- border-radius: 10px
- height: 50px
- type: custom:button-card
entity: button.lg_tv_right
name: ▶
icon: mdi:arrow-right-bold-box
tap_action:
action: toggle
styles:
card:
- background-color: "#34495e"
- color: "#ecf0f1"
- border-radius: 10px
- height: 50px
- type: custom:button-card
entity: button.lg_tv_down
name: ▼
icon: mdi:arrow-down-bold-box
tap_action:
action: toggle
styles:
card:
- background-color: "#34495e"
- color: "#ecf0f1"
- border-radius: 10px
- height: 50px
- type: custom:button-card
entity: button.lg_tv_ok
name: OK
icon: mdi:circle-outline
tap_action:
action: toggle
styles:
card:
- background-color: "#27ae60"
- color: "#ffffff"
- border-radius: 50%
- height: 50px
- font-weight: bold
icon:
- color: "#ffffff"
name:
- color: "#ffffff"
- type: custom:button-card
entity: button.lg_tv_guide
name: Guide
icon: mdi:television-guide
tap_action:
action: toggle
styles:
card:
- background-color: "#2c3e50"
- color: "#ecf0f1"
- border-radius: 10px
- height: 50px
- type: grid
square: false
columns: 5
cards:
- type: custom:button-card
entity: button.lg_tv_number_1
name: "1"
icon: ""
tap_action:
action: toggle
styles:
card:
- background-color: "#1c2833"
- color: "#ecf0f1"
- border-radius: 10px
- height: 45px
- font-size: 16px
- type: custom:button-card
entity: button.lg_tv_number_2
name: "2"
icon: ""
tap_action:
action: toggle
styles:
card:
- background-color: "#1c2833"
- color: "#ecf0f1"
- border-radius: 10px
- height: 45px
- font-size: 16px
- type: custom:button-card
entity: button.lg_tv_number_3
name: "3"
icon: ""
tap_action:
action: toggle
styles:
card:
- background-color: "#1c2833"
- color: "#ecf0f1"
- border-radius: 10px
- height: 45px
- font-size: 16px
- type: custom:button-card
entity: button.lg_tv_number_4
name: "4"
icon: ""
tap_action:
action: toggle
styles:
card:
- background-color: "#1c2833"
- color: "#ecf0f1"
- border-radius: 10px
- height: 45px
- font-size: 16px
- type: custom:button-card
entity: button.lg_tv_number_5
name: "5"
icon: ""
tap_action:
action: toggle
styles:
card:
- background-color: "#1c2833"
- color: "#ecf0f1"
- border-radius: 10px
- height: 45px
- font-size: 16px
- type: custom:button-card
entity: button.lg_tv_number_6
name: "6"
icon: ""
tap_action:
action: toggle
styles:
card:
- background-color: "#1c2833"
- color: "#ecf0f1"
- border-radius: 10px
- height: 45px
- font-size: 16px
- type: custom:button-card
entity: button.lg_tv_number_7
name: "7"
icon: ""
tap_action:
action: toggle
styles:
card:
- background-color: "#1c2833"
- color: "#ecf0f1"
- border-radius: 10px
- height: 45px
- font-size: 16px
- type: custom:button-card
entity: button.lg_tv_number_8
name: "8"
icon: ""
tap_action:
action: toggle
styles:
card:
- background-color: "#1c2833"
- color: "#ecf0f1"
- border-radius: 10px
- height: 45px
- font-size: 16px
- type: custom:button-card
entity: button.lg_tv_number_9
name: "9"
icon: ""
tap_action:
action: toggle
styles:
card:
- background-color: "#1c2833"
- color: "#ecf0f1"
- border-radius: 10px
- height: 45px
- font-size: 16px
- type: custom:button-card
entity: button.lg_tv_number_0
name: "0"
icon: ""
tap_action:
action: toggle
styles:
card:
- background-color: "#1c2833"
- color: "#ecf0f1"
- border-radius: 10px
- height: 45px
- font-size: 16px
- grid-column: span 2
- grid-column-start: 2
- type: grid
square: false
columns: 4
cards:
- type: custom:button-card
entity: button.lg_tv_hdmi_1
name: HDMI 1
icon: mdi:hdmi-port
tap_action:
action: toggle
styles:
card:
- background-color: "#2c3e50"
- color: "#ecf0f1"
- border-radius: 8px
- height: 40px
- font-size: 10px
- type: custom:button-card
entity: button.lg_tv_hdmi_2
name: HDMI 2
icon: mdi:hdmi-port
tap_action:
action: toggle
styles:
card:
- background-color: "#2c3e50"
- color: "#ecf0f1"
- border-radius: 8px
- height: 40px
- font-size: 10px
- type: custom:button-card
entity: button.lg_tv_hdmi_3
name: HDMI 3
icon: mdi:hdmi-port
tap_action:
action: toggle
styles:
card:
- background-color: "#2c3e50"
- color: "#ecf0f1"
- border-radius: 8px
- height: 40px
- font-size: 10px
- type: custom:button-card
entity: button.lg_tv_hdmi_4
name: HDMI 4
icon: mdi:hdmi-port
tap_action:
action: toggle
styles:
card:
- background-color: "#2c3e50"
- color: "#ecf0f1"
- border-radius: 8px
- height: 40px
- font-size: 10px
- type: media-control
entity: media_player.tv_lg_55la620v_za
Код рабочий, но очень длинный. Чтобы сократить код, используйте button_card_templates в configuration.yaml.
Чего не хватает и что делать дальшеЕсли телевизор "безмозглый" или media-player не подключен, недостающие команды придётся добавить по старинке: считать ИК-сигналы обычным пультом через remote_receiver в ESPHome и создать свои template button.
С одной стороны здорово что такая интеграция появилась - не нужно прыгать с считываением кодов с пультов, с другой жаль что часть кнопок отсутсвует и они доступны только через media-control. Надеюсь, в будущих обновлениях HA добавят поддержку сторонних ИК-шлюзов или вынесут громкость/плеер в отдельный набор ИК-кнопок. А пока — рабочее и бюджетное решение для умного дома. Не всегда есть желание пайкой заниматься :)