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"

Does anyone have a tip on how to configure the JSON code file to suit a simple heater which has a basic ‘on’, ‘off’, ‘up’ and ‘down’ remote? I’ve been trawling through the example codes but not found one like that yet.

So far I’ve come up with this as a basis but haven’t tested it yet.

Summary
{

    "manufacturer": "Rinai",

    "supportedModels": [

      "Avenger25"

    ],

    "supportedController": "Broadlink",

    "commandsEncoding": "Base64",

    "minTemperature": 18.0,

    "maxTemperature": 30.0,

    "precision": 1.0,

    "operationModes": [

      "heat"

    ],

    "fanModes": [

      "high"

    ],

    "commands": {

      "on": "JgBIAAABKZQSExI4EhMSExITEhMTEhI4ExITOBI4EhMSExI4EjgSExITEjgSExITEzcTEhIUETkSOBEUETkRORITEjgSOBMSEwANBQ==",

      "off": "JgBIAAABKZQSExM3ExITEhITExMRFBI4EhMSOBI4EhMSExI4EjgTEhM3ExISORI4EhMSExITEjgSExI4EhMSExM3EzcSORITEQANBQ==",

      "up": "JgBIAAABJ5UTEhM3EhMTEhMTEhMSExI4EhMSOBI4EhMSExI4EzcTEhM3ExITExE5EhMSExEUEjgSExI4EjgTEhM3EzcTOBEUEgANBQ==",

      "down": "JgBIAAABKZQTEhM3ExITEhMSEhQRFBE5EhMRORI4EhMSExI4EzcTEhMSEzcTOBITEhMSExITEjgSOBITEhMTNxM3EzcTOBITEgANBQ=="

    }

  }
1 Like

Hello everyone,

I’m using SmartIR with a Broadlink RM4C Mini to control a Mitsubishi Heavy air conditioner (device code: 1680).

The integration is working correctly for the main functions:
HVAC modes: off, cool, heat, dry
Fan modes: low, med, high, auto
Temperature control: 18–30°C
IR commands are being sent successfully via Broadlink

However, I have an issue regarding airflow direction (swing / louver control):

Although the IR configuration (1680.json) appears to include airflow/swing-related commands, I cannot see or control swing/airflow direction from the Home Assistant UI. In the climate.ac entity state, I do not see any swing_mode or airflow direction attribute exposed. Only fan modes are available.

States:
hvac_modes: off, cool, heat, dry
min_temp: 18
max_temp: 30
target_temp_step: 1
fan_modes: low, med, high, auto
current_temperature: null
temperature: 18
fan_mode: low
last_on_operation: cool
device_code: 1680
manufacturer: Mitsubishi Heavy
supported_models: SRK25ZJ-S1, SRK13CRV-S1
supported_controller: Broadlink
commands_encoding: Base64
friendly_name: AC
supported_features: 393

But there is no option in UI or entity attributes for: swing mode for ex.

Replying to myself because no answer was given.

My example above didn't work and I've had to resort to not using SmartIR for this gas heater.

Hi everyone,

I built a static web browser to browse the SmartIR community IR codes catalog without having to dig through GitHub manually.

What it does:

  • Search by brand and model (435+ catalog entries)
  • View Broadlink Base64 codes as stored in SmartIR
  • Convert to Pronto Hex in the browser (IR only)
  • Suggest related models when there is no exact match (with “try with care” warnings)
  • English and Spanish UI

Demo: HA IR Codes Browser — SmartIR catalog for Home Assistant
Spanish: HA IR Codes Browser — SmartIR catalog for Home Assistant
Source (MIT): GitHub - ldelvalleh/SMARTIR-HAIR-CONVERSOR: Static browser for SmartIR community IR codes (Home Assistant) · GitHub

Each model’s JSON is loaded live from the smartHomeHub/SmartIR repo on GitHub. No backend or database.

Note: not affiliated with the SmartIR project. Data comes from the community catalog; the tool is called “HA IR Codes Browser”.

If you find it useful or see something to improve, feedback is welcome.

2 Likes

Is this project dead, or are there still help to find?

I have a Delonghi Pinguino PAC EX93, a nice little unit with an IR remote.
The IR blaster is a Broadlink RM4 pro.
I have learned the basic commands to the system, and with those the RM4 can control the AC, but of course, it has no idea on what is going on, completely stateless.
So I started looking in to what could be done, and I found the SmartIR, and it even has codes for Delonghi.

Unfortunately none of them works for this AC.
I have it configured like this:

climate:
  - platform: smartir
    name: Aircon Stuen
    unique_id: 8ae52024-ba6f-42ef-8bc3-5223c22e8a8b
    device_code: 2242
    controller_data: remote.livingroom_sender
    temperature_sensor: sensor.tado_smart_radiator_thermostat_va3357755136_current_temperature
    humidity_sensor: sensor.tado_smart_radiator_thermostat_va3357755136_current_humidity

But I get no reactions from the AC when trying to use the device in HA.
I have tried all the device id's for delonghi.

Any ideas?

youll need to make your own

Maybe check OtterIR: Home Assistant integration for Zigbee2MQTT IR blasters with learning, libraries, imports, and button entities

Ok, darned, well I will have to stay with the very poor implementation of the on/off button etc where HA doesn’t know anything about the state :slight_smile:
I already have the IR codes learnt, I was just hoping something brilliant had come around.

where it doesnt know the state on / off just put a door contact sensor on the louvers is the easest thing to do … louvers open and work sensor state will be on

1 Like

Unfortunately that proyect is archived already, check HAIR

@fugley / @fribse - Or put a tilt sensor on the louver (using sensor typically used for garage door open/closed sensing).

Should also work to use an IMU, to detect change in X/Y/Z axis.

1 Like

Or take a look at my post HERE. Works flawlessly for years now.