SmartIR - Control your Climate, TV and Fan devices via IR/RF controllers

If you get SmartIR to learn all the codes from your physical remote you should be able to use SmartIR to control everything on your A/C, not just on/off. You will be able to control fan speed, temp etc.

When you configure that contact sensor as your binary sensor to tell SmartIR that the unit is on/off, SmartIR will update HA accordingly. No need for automations. That’s why the power sensor entity exists in SmartIR (your original question)

yes.

Thank you sir! Ordering 4 right now :slight_smile:

Am I right that there are no deadband features like this?

Basically my target temp would be say 20 degree’s but I wouldn’t want my climate controller to kick in until around 18 or 22.

climate: #--------------------------------------------------------------------------------------------------------------------------------------------------
  # Air Con
  - platform: smartir
    name: Living Room Air Conditioner
    unique_id: living_room_air_conditioner
    device_code: 1021
    controller_data: remote.broadlink_rm2_pro_plus_3_remote
    temperature_sensor: sensor.air_con_temp_current
    humidity_sensor: sensor.humidity_158d0001c1a551
    power_sensor: binary_sensor.door_window_sensor_158d0001c0fe60

Edit: I found the answer to this. No. SmartIR doesn’t implement control logic. But actually in my case I realised that because I have an invertor the unit is supposed to be on even when close to target. I think… So deadband approach isn’t so relevant.

Like to know that too. Have my lg airco with linknlink eremote is this supported?

Has anyone used a broadlink to control mitsubishi msz ga71va?
If so can ou pease share your .jason file?
I’lll be looking to add ceiling fans to mine aswell
Thank you

I somehow cant get it to work, also not with Broadlink Manager, because it expects nonexistent Buttons, i have no Idea what to do, i tried Broadlink Manager and it also expects Temperature value buttons.

Those simply don’t exist on my Remote.

My Remote has Six Buttons: Power, Speed, Mode, Timer, Temp + and Temp -

All Commands are within HA, but i have no idea how to make the AC Smart~ish

I'm running into an issue getting my Wemos D1 Mini with Lolin IR shield configured using SmartIR. Currently I'm getting the following error:

[homeassistant.helpers.service] Referenced entities esphome.livingroom_send_raw_command are missing or not currently available

Note that in my Esphome configuration, the on/off button configuration is working sending raw codes, so I'm pretty confident that most of the configuration is fine and I just need to get SmartIR correct.

Earlier I tried setting controller_data: livingroom_send_raw_command but was getting this error:

error
custom_components.smartir.climate] not a valid value for dictionary value @ data['entity_id']
Traceback (most recent call last):
  File "/config/custom_components/smartir/climate.py", line 380, in send_command
    await self._controller.send(
        self._commands[operation_mode][fan_mode][swing_mode][target_temperature])
  File "/config/custom_components/smartir/controller.py", line 111, in send
    await self.hass.services.async_call(
        'remote', 'send_command', service_data)
  File "/usr/src/homeassistant/homeassistant/core.py", line 2782, in async_call
    processed_data: dict[str, Any] = handler.schema(service_data)
                                     ~~~~~~~~~~~~~~^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.14/site-packages/voluptuous/validators.py", line 259, in __call__
    return self._exec((Schema(val) for val in self.validators), v)
           ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.14/site-packages/voluptuous/validators.py", line 386, in _exec
    raise e if self.msg is None else AllInvalid(self.msg, path=path)
  File "/usr/local/lib/python3.14/site-packages/voluptuous/validators.py", line 382, in _exec
    v = func(v)
  File "/usr/local/lib/python3.14/site-packages/voluptuous/schema_builder.py", line 205, in __call__
    return self._compiled([], data)
           ~~~~~~~~~~~~~~^^^^^^^^^^
  File "/usr/local/lib/python3.14/site-packages/voluptuous/schema_builder.py", line 779, in validate_callable
    return schema(data)
  File "/usr/local/lib/python3.14/site-packages/voluptuous/schema_builder.py", line 205, in __call__
    return self._compiled([], data)

Running HA in Docker v2026.4.3 with SmartIR setup through HACS

HA configuration.yaml:

configuration.yaml
# Loads default set of integrations. Do not remove.
default_config:

# Load frontend themes from the themes folder
frontend:
  themes: !include_dir_merge_named themes

automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml

smartir:

climate:
  - platform: smartir
    name: Lounge AC
    unique_id: lounge_ac
    device_code: 1691
    controller_data: esphome.livingroom_send_raw_command

The Esphome configuration:

livingroom.yaml
esphome:
  name: livingroom

esp8266:
  board: d1_mini

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: !secret encryption_key

  services:
    - service: send_raw_command
      variables:
        command: int[]
      then:
        - remote_transmitter.transmit_raw:
            code: !lambda 'return command;'

ota:
  - platform: esphome


wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  min_auth_mode: WPA2

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Livingroom Fallback Hotspot"
    password: "*******"

captive_portal:

remote_receiver:
  id: rcvr
  pin: D4 # GPIO2
  dump: all

remote_transmitter:
  id: trans
  pin: D3 # GPIO0
  carrier_duty_percent: 50%

button:
  - platform: template
    name: "on"
    on_press:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 009A 0000 007B 003D 000F 000F 000F 002E 000F 000F 000F 000F 000F 002E 000F 000F 000F 002E 000F 000F 000F 000F 000F 002E 000F 002E 000F 002E 000F 000F 000F 002E 000F 000F 000F 002E 000F 002E 000F 002E 000F 000F 000F 000F 000F 000F 000F 000F 000F 002E 000F 002E 000F 000F 000F 002E 000F 000F 000F 002E 000F 002E 000F 000F 000F 000F 000F 000F 000F 002F 000E 0010 000E 002F 000E 0010 000E 0010 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 0010 000E 0010 000E 002F 000E 002F 000E 002F 000E 002F 000E 0010 000E 0010 000E 002F 000E 002F 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 002F 000E 0010 000E 002F 000E 0010 000E 002F 000E 002F 000E 002F 000E 002F 000E 0010 000E 002F 000E 0010 000E 002F 000E 0010 000E 0010 000E 0010 000E 0010 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 002F 000E 0180"

  - platform: template
    name: "off"
    on_press:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 009A 0000 007B 003D 000F 000F 000F 002E 000F 000F 000F 000F 000F 002E 000F 000F 000F 002E 000F 000F 000F 000F 000F 002E 000F 002E 000F 002E 000F 000F 000F 002E 000F 000F 000F 002E 000F 002E 000F 002E 000F 000F 000F 000F 000F 000F 000F 000F 000F 002E 000F 002E 000F 000F 000F 002E 000F 000F 000F 002E 000F 002E 000F 000F 000F 000F 000F 000F 000F 002E 000F 000F 000F 002E 000F 0010 000E 0010 000E 002F 000E 002F 000E 002E 000F 002F 000E 002F 000E 0010 000E 002E 000F 002F 000E 002F 000E 002F 000E 002F 000E 0010 000E 0010 000E 002F 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 002F 000E 0010 000E 002F 000E 0010 000E 002F 000E 002F 000E 002F 000E 002F 000E 0010 000E 002F 000E 0010 000E 002F 000E 0010 000E 0010 000E 0010 000E 0010 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 002F 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 0010 000E 002F 000E 0180"