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

Hi, I have esphome ir blaster, i want to add it to smartir, but how i can learn the remote control ir codes, i know how to capture the remote codes using esphome log of the ir blaster, i understand that I need to create a json file and put the codes I capture, but the ir codes what format they should be ? esphome can give me raw codes and some other format, thanks.

Hi, I did the installation via HACS, but the log shows these errors:

This error originated from a custom integration.

Logger: homeassistant
Source: custom_components/smartir/media_player.py:214
integration: smartir (documentation, issues)
First occurred: 10:45:22 PM (39 occurrences)
Last logged: 10:51:38 PM

Error doing job: Task exception was never retrieved (None)
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 1060, in _async_update_entity_states
    await asyncio.gather(*tasks)
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 959, in async_update_ha_state
    self._async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1126, in _async_write_ha_state
    state, attr, capabilities, shadowed_attr = self.__async_calculate_state()
                                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1063, in __async_calculate_state
    if state_attributes := self.state_attributes:
                           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/media_player/__init__.py", line 1116, in state_attributes
    if (value := getattr(self, attr)) is not None:
                 ^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/smartir/media_player.py", line 214, in source
    if self._on_by_remote:
       ^^^^^^^^^^^^^^^^^^
AttributeError: 'SmartIRMediaPlayer' object has no attribute '_on_by_remote'. Did you mean: '_on_remove'?

Can anyone help?

OK, thank for the confirmation. I was able to find and hopefully solve the issue. I wil release beta containing fix hopefully today. As I am not using media_player class I would welcome you to test the fix and report back. Thnak you.

Hi, sure thing. This is a bug, fix will be release today in beta. :wink: It is difficult for me to test media_player class, as I do not use it… so sorry for the issue. :wink: This happened during conversion of the integration from push to poll. Most of the bit changes are done, so I hope code base would stabilize a bit.

1 Like

I’ve installed the latest beta version and the errors seem to have disappeared.
Thanks for the good work!

Hello again, I’m testing the media player and I’ve found a few more errors:

File "/config/custom_components/smartir/media_player.py", line 267, in async_turn_off
    await self._send_command(self._commands["off"])
          ^^^^^^^^^^^^^^^^^^
AttributeError: 'SmartIRMediaPlayer' object has no attribute '_send_command'. Did you mean: 'send_command'?
Logger: custom_components.smartir.media_player
Source: custom_components/smartir/media_player.py:313
integration: smartir (documentation, issues)
First occurred: 3:16:34 PM (18 occurrences)
Last logged: 3:17:28 PM

Missing device IR code for 'volumeUp' command.

Thanks

Hello, it seems, that you are not testing latest beta… Please install it using HACS.

Hi, I’m testing version 1.17.15b4 installed via HACS.
I’m getting these errors:

This error originated from a custom integration.

Logger: custom_components.smartir.media_player
Source: custom_components/smartir/media_player.py:328
integration: smartir (documentation, issues)
First occurred: 7:28:25 PM (3 occurrences)
Last logged: 7:28:35 PM

name 'path' is not defined
Traceback (most recent call last):
  File "/config/custom_components/smartir/media_player.py", line 328, in send_command
    for idx in range(len(path)):
                         ^^^^
NameError: name 'path' is not defined
Logger: homeassistant.components.websocket_api.http.connection
Source: components/websocket_api/commands.py:241
integration: Home Assistant WebSocket API (documentation, issues)
First occurred: 7:28:37 PM (1 occurrences)
Last logged: 7:28:37 PM

[140141317637888] Unexpected exception
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/websocket_api/commands.py", line 241, in handle_call_service
    response = await hass.services.async_call(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 2741, in async_call
    response_data = await coro
                    ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 2784, in _execute_service
    return await target(service_call)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 977, in entity_service_call
    single_response = await _handle_entity_call(
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 1049, in _handle_entity_call
    result = await task
             ^^^^^^^^^^
  File "/config/custom_components/smartir/media_player.py", line 260, in async_turn_off
    await self._send_command(STATE_OFF, [])
          ^^^^^^^^^^^^^^^^^^
AttributeError: 'SmartIRMediaPlayer' object has no attribute '_send_command'. Did you mean: 'send_command'?

Thanks

Hello, thank you for catching this, it is obvious error in the code. I just fixed this and another bug in the same function, I will release new beta ASAP.

Both fan and climate classes are now tested, so once you will test media_player I can prepare new release. Thank you.

1.17.15b5 is out

BTW: could you please log any further issue to the github? It will help me and other to track it faster, thank you for your help.

Hi. I’ve just tested the new version 1.17.15b5 with some media player commands and it’s working perfectly.

If I detect other problems I’ll register them on github.

Congratulations on your great work!

Hi maybe its a known issue but since last update from HA 2024.5.5 to 2024.6.1 im getting the following errors ( im using smartir with mqtt commands)

Detected blocking call to open inside the event loop by custom integration 'smartir' at custom_components/smartir/media_player.py, 
line 75: with open(device_json_path) as j: (offender: /config/custom_components/smartir/media_player.py, 
line 75: with open(device_json_path) as j:), please report it to the author of the 'smartir' custom integration Traceback (most recent call last): File "<frozen runpy>", 
line 198, in _run_module_as_main File "<frozen runpy>", 
line 88, in _run_code File "/usr/src/homeassistant/homeassistant/__main__.py",
line 223, in <module> sys.exit(main()) File "/usr/src/homeassistant/homeassistant/__main__.py", line 209, in main exit_code = runner.run(runtime_conf) File "/usr/src/homeassistant/homeassistant/runner.py", 
line 190, in run return loop.run_until_complete(setup_and_run_hass(runtime_config)) File "/usr/local/lib/python3.12/asyncio/base_events.py", line 672, in run_until_complete self.run_forever() File "/usr/local/lib/python3.12/asyncio/base_events.py", 
line 639, in run_forever self._run_once() File "/usr/local/lib/python3.12/asyncio/base_events.py", 
line 1988, in _run_once handle._run() File "/usr/local/lib/python3.12/asyncio/events.py", 
line 88, in _run self._context.run(self._callback, *self._args) File "/usr/src/homeassistant/homeassistant/helpers/entity_component.py", 
line 319, in async_setup_platform await self._platforms[key].async_setup(platform_config, discovery_info) File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", 
line 303, in async_setup await self._async_setup_platform(async_create_setup_awaitable) File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", 
line 363, in _async_setup_platform awaitable = create_eager_task(awaitable, loop=hass.loop) File "/usr/src/homeassistant/homeassistant/util/async_.py", 
line 37, in create_eager_task return Task(coro, loop=loop, name=name, eager_start=True) File "/config/custom_components/smartir/media_player.py", 
line 75, in async_setup_platform with open(device_json_path) as j

Same problem with climate:

Detected blocking call to open inside the event loop by custom integration 'smartir' at custom_components/smartir/climate.py, line 85: with open(device_json_path) as j: (offender: /config/custom_components/smartir/climate.py, line 85: with open(device_json_path) as j:), please report it to the author of the 'smartir' custom integration Traceback (most recent call last): File "<frozen runpy>", line 198, in _run_module_as_main File "<frozen runpy>", line 88, in _run_code File "/usr/src/homeassistant/homeassistant/__main__.py", line 223, in <module> sys.exit(main()) File "/usr/src/homeassistant/homeassistant/__main__.py", line 209, in main exit_code = runner.run(runtime_conf) File "/usr/src/homeassistant/homeassistant/runner.py", line 190, in run return loop.run_until_complete(setup_and_run_hass(runtime_config)) File "/usr/local/lib/python3.12/asyncio/base_events.py", line 672, in run_until_complete self.run_forever() File "/usr/local/lib/python3.12/asyncio/base_events.py", line 639, in run_forever self._run_once() File "/usr/local/lib/python3.12/asyncio/base_events.py", line 1988, in _run_once handle._run() File "/usr/local/lib/python3.12/asyncio/events.py", line 88, in _run self._context.run(self._callback, *self._args) File "/usr/src/homeassistant/homeassistant/helpers/entity_component.py", line 319, in async_setup_platform await self._platforms[key].async_setup(platform_config, discovery_info) File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 303, in async_setup await self._async_setup_platform(async_create_setup_awaitable) File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 363, in _async_setup_platform awaitable = create_eager_task(awaitable, loop=hass.loop) File "/usr/src/homeassistant/homeassistant/util/async_.py", line 37, in create_eager_task return Task(coro, loop=loop, name=name, eager_start=True) File "/config/custom_components/smartir/climate.py", line 85, in async_setup_platform with open(device_json_path) as j:

I think that maybe its a known issue because some other HACS components has been updated recently to fix this “blocking call” problem

Is anyone else facing this issue?

Hi, thank you very much for testing, I will release it today as 1.17.15

You have to now start separating original integration:

and the forked one:

in the fork all of those warnings are fixed now, tested and will be released shortly today in the latest release 1.17.15 - thanks to many new contributors. :wink:

1 Like

Thank you very much for your work to keep the project alive! Just installed your fork right now

Hello, glad i found this thread and thank you for this integration !!

I am trying for the last 2 days to make it work for my AC which is not in the codes list.
I’m using a Broadlink RM4 mini. I set up the broadklink integration, the SmartIR integration and learned all the buttons from my remote using HA remote.learn service.
As a result I have a file generated by HA in the config/.storage directory.

The file looks like this:

{
  "version": 1,
  "minor_version": 1,
  "key": "broadlink_remote_e816567d7ca4_codes",
  "data": {
    "AC": {
      "coolfanauto 18": "JgBAAAABE4IQMQ8RDhMOEg8yDhMOEQ4TDxEOEw4SDhMOMw4RDhIPEg4SDxIOMw4yDxEQMQ8SDjMOEg4TDhEOEw4ADQU=",
      "coolfanauto 19": "JgBAAAABFIIQMQ4SDxIPEQ8xDhMOEg4TDhIOEw4SDhMOMg4SDhMOEg4TDzEPEg0SDxIOMw4SDzIPEg4SDxEOMw4ADQU=",
      "coolfanauto 20": "JgBAAAABE4IQMQ4TDhIOEw4zDhIPEA8SDhIPEg4SDxIPMg8RDhIOEg4TDzIOEg4zDhMNMw8RDjMPERARDjIPERAADQU=",
      "coolfanauto 21": "JgBAAAABFIIPMg4SDhIPEQ4zDhIPEg4SDhMOEg4SDhIPMg4TDhIOEw4SDzEOMw8RDxIOMw4SDjIOEw4SDjMOMw4ADQU=",
      "coolfanauto 22": "JgBAAAABEoMQMQ4SDxIPEQ8yDxIOEQ8SDhIPEg4SDhMOMw4RDhMOEg4TDjMOMw4yDhIPMg4SDzIPEQ4zDhIPEg4ADQU=",
      "coolfanauto 23": "JgBAAAABE4MPMg4SDxIPEQ0zDhMPEQ4TDhIOEw8RDhIOMw4SDxIOEg4zDhIPEQ4SEBEOMw8REDEOEg4zDhIOMw8ADQU=",
      "coolfanauto 24": "JgBAAAABEoMQMQ4SEBEPEQ8yDhMOEg0TDhIOEw8RDhMOMw8RDhIOEg4zDhIPEg4zDhEPMhARDjMOEhAwDzIQEQ4ADQU=",
      "coolfanauto 25": "JgBAAAABE4MQMQ4TDRIOEw8yDhIOEw4SDhIOEg8SDhIOMw4SDxIOEQ8yDxIXKg4SDhMOMg4SDjMPEg8yDjIOMg8ADQU=",
      "coolfanauto 26": "JgBAAAABE4IQMg0SDxIOEhAxDxIPEQ8SDRIPEg4SDhMOMw4SDhMNEg4zDhMOMw4yDxEOMw4SDzIPMg8RDhIQEQ4ADQU=",
      "coolfanauto 27": "JgBAAAABE4IRMA8SDhIPEg4yDhIQEQ4SEBEPEQ8SDhINMw4TDhIOEw4zDjIOEg4TDhIOMw4SDzEPMg8SDhIQMQ8ADQU=",
      "coolfanauto 28": "JgBAAAABE4IQMQ4SDxIPEQ8yDxIOEQ8SDhIPEg8RDxIOMw0SDhMOEg4zDjMOEw4yDhIOMw8SDjIPMg4SDjMOEg8ADQU=",
      "coolfanauto 29": "JgBAAAABEoMRMA8SDhIOEw8yDhIPEg0SDxIPEQ8SDhIOMw4SDhIOEg8yDzIPMg4SDhIOMw4TDjMOMg4SDzIOMw4ADQU=",
      "coolfanauto 30": "JgBAAAABE4MPMg4TDRMOEg8yDhIPEg4SDhMOEQ4TDhIOMw4SDxIOEg4yDzIPMg8yDxEOMw4SEDEPMg4yDhMOEg4ADQU=",
      "coolfanmin 18": "JgBAAAABE4MPMg4RDhMOEg8yDhMPEQ4TDhIOEQ8SDhIPMg8SDhIPEg0TDxEPMg4zDhIOEw4SDhIOMw4SDjMOMw4ADQU=",
      "coolfanmin 19": "JgBAAAABFIERMA8SDhIQEQ4zDhIOEg4SDhMOEg4TDhIOMw4TDRIPEg8RDzIPEQ8SDhIOEg4SDxIOMw4zDhIOEg4ADQU=",
      "coolfanmin 20": "JgBAAAABE4MPMg4RDxIPEQ4zDhMOEg4TDhINEw4SDhMOMw8RDhMOEg4SDzEQEQ4zDhIPEg4SDxEOMw4zDhIOMw4ADQU=",
      "coolfanmin 21": "JgBAAAABE4MPMg8RDhMOEQ4zDxIOEg4SDxIOEg8RDhIPMhARDhIPEg4SDzEOMw8SDhIOEw4SDhIOMw4zDjMOEg8ADQU=",
      "coolfanmin 22": "JgBAAAABE4QPMg4SDRMPEQ4zDxEPEg4SDxINEhARDhIPMhARDhIOEw4RDjMOMw8yDhMOEQ4TDxEOMw8yDjIPMg4ADQU=",
      "coolfanmin 23": "JgBAAAABE4IQMg0SDxIPEQ4zDhMOEg4TDRIOEw4SDhMOMw4SDhIPEQ8yDhMPEQ4SDxIOEQ8SDhIPEg4SDxIOEhAADQU=",
      "coolfanmin 24": "JgBAAAABE4MPMg4SDRQOEQ4zDhIPEg4SDxINEg8SDhIPMg8SDhIPEg4yDhIQEQ4zDhIOEw0SDhMOEg4TDhIPMg4ADQU=",
      "coolfanmin 25": "JgBAAAABEoMQMQ8RDhMOEg4yDxIOEg4TDhIOEw4SDhMNMw8RDhMOEg4zDhMNMw8RDhMOEg4TDhIOEg4SDjMPEQ8ADQU=",
      "coolfanmin 26": "JgBAAAABEoMQMQ4TDxEPEg4zDhIPEg0SDhMOEg8RDxIOMw4RDxIOEg8yDxIOMw4yDxEOEw4SDhMOEg4TDjIOMw4ADQU=",
      "coolfanmin 27": "JgBAAAABFIIQMQ4SDhMPEQ4yDhMOEg4TDhIOEg8SDhIOMg8SDhIQEQ8yDjIOEhARDhIQEQ4SDxIOEQ8yDhMOEg4ADQU=",
      "coolfanmin 28": "JgBAAAABFIIQMQ8SDhIPEg4yDxEQEQ4SDhMOEg4TDRIPMg8SDhIOEw4zDTMOEg8yDhMOEg4SDhIOEw4zDhIOMxYADQU=",
      "coolfanmin 29": "JgBAAAABE4MPMg4TDhIOEg4zDhIOEg8SDhIPEg4RDxIOMw4SDxIOEg8xDzIOMw8SDhINFA0SDxIOEg4zDjMOEg4ADQU=",
      "coolfanmin 30": "JgBAAAABEoMQMQ4TDxEOEw4zDhEOEw8RDhMOEg4TDhIOMg8SDxEOEw4zDjIOMg8yDxIOEg8SDRIPEg8yDjMOMw0ADQU=",
      "coolfanmed 18": "JgBAAAABEoMPMg4SDhMOEQ4zDhMOEg4TDhIOEw4RDhIPMhARDhIPEg4SDxEOMw4zDhIOEw4yDhIPMg4zDhIPMQ8ADQU=",
      "coolfanmed 19": "JgBAAAABE4IQMQ4TDhIOEhAxDxIOEQ8SDhIQEQ4SDxIOMw4RDxIOEg8SDzIOEg4TDhEOEw4zDhIPMg4yDjMOEw4ADQU=",
      "coolfanmed 20": "JgBAAAABFIIPMRARDhIPEQ8yDhIPEg4SEBEOEg8RDhIPMg8SDhIOEw4SDjIOEw4zDxEOEw4yDhIOMw4zDjMOMg4ADQU=",
      "coolfanmed 21": "JgBAAAABE4IQMQ4SDhMOEg4yDhIQEQ4SDxIOEg8SDRIQMQ8SDhIQEQ4SDzEPMg8SDxEOEw4yDhIOEw4SDxIOEg4ADQU=",
      "coolfanmed 22": "JgBAAAABFIIPMg4SDxIOEQ8yDxIOEg8SDhIOEw4RDhMOMw8RDhMOEg4TDzEOMw8yDhIOEg8xDxIOEhARDhIPMg8ADQU=",
      "coolfanmed 23": "JgBAAAABFIIPMg4RDxIOEg8yDxIOEhARDhEPEg4SDhMOMw4SDhMNEg4zDhMOEg4TDhIOEw4xEBEOEg8SDjMOEQ8ADQU=",
      "coolfanmed 24": "JgBAAAABE4MPMg4SDhMOEQ4zDhMPEQ4TDhIOEw8QDhMOMw8RDhIPEg4yDhIQEQ4zDhIPEg4yDhIPEg4SEDEPMg8ADQU=",
      "coolfanmed 25": "JgBAAAABFIEQMQ4TDhIPEg4zDhIOEw0SDhMOEg4TDhIPMg4TDRIOEw4yDxIOMw8QDxIOEg8yDxIOEg8xDxIOEg8ADQU=",
      "coolfanmed 26": "JgBAAAABE4IQMQ4SDhMPEQ4zDhMOEQ4TDhIOEw4SDhMPMQ8RDhIPEg4zDhIPMhAwDxIOEg8yDxIOEg8xDxIOMw4ADQU=",
      "coolfanmed 27": "JgBAAAABE4QPMQ8RDxEQEQ4zDhIPEg4SDxEOEg8SDhIPMg8SDhIOEg4zDjMOEg4TDhIOEg8yDhIPEg4zDjIOEg4ADQU=",
      "coolfanmed 28": "JgBAAAABFIIQMA8SDhIPEg8yDhIPEQ4SDxIOEhARDhIOMw4SDhIPEg4zDjMOEg4yDhMOEg4zDhIOEg4zDjMOMw4ADQU=",
      "coolfanmed 29": "JgBAAAABFIEQMQ4SDhMPEQ4zDhMOEg4SDhIOEw4SDhMOMw4SDRMOEg4zDjMOMw0SDxIOEg8yDxIOMw0SDxIOEhAADQU=",
      "coolfanmed 30": "JgBAAAABFIIQMQ4SDhMOEg4zDhIPEQ4SDxIOEg8SDhIPMRARDhIPEg4zDjMNMw4zDhIPEg4zDRIPMg4TDxEPMg0ADQU=",
      "coolfanhigh 18": "JgBAAAABFIIQMQ4TDhIOEg8yDhIOEw4SDhMOEg4SDhIPMg8RDxIOEg8SDhEPMg8yDhMPMg4RDhMOMw4zDjMOMQ8ADQU=",
      "coolfanhigh 19": "JgBAAAABEoMQMQ4SDxIPEQ4zDhMOEg4SDhIOEw4SDhMOMhARDhEPEg4SEDEPEg4SDxIOMg8RDxIOEg4TDxEOEw4ADQU=",
      "coolfanhigh 20": "JgBAAAABE4IQMg0SDxIPEQ8yDhMPEQ4TDRIOEw8RDhMOMw4SDhMNEg4TDzIPEQ4zDhEPMg8SDxEPEg4SEBEOMg8ADQU=",
      "coolfanhigh 21": "JgBAAAABFIIQMQ8SDhIPEQ4zDhIQEQ4SDxIOEhAQDhIPMg8SDhIOEw4SDjIPMg8SDhIOMw4SDhIOEw4SDzIOEg8ADQU=",
      "coolfanhigh 22": "JgBAAAABE4IQMQ4SDxIPEQ4zDhMPEQ4SDhIOEw8RDhMOMw4SDhMNEg4TDzIPMg4yDhIOMw8SDhIOEg8RDjMOMw4ADQU=",
      "coolfanhigh 23": "JgBAAAABE4MPMg4RDhMPEQ4zDhMPEQ4TDhEOEw8RDhMOMg8SDhIOEg4zDhIQEQ4SDxIOMg4SEBEOEg4zDxIOEg0ADQU=",
      "coolfanhigh 24": "JgBAAAABE4IRMQ4SDhIPEg4zDhIQEQ4SDhIOEhARDhIOMw8SDhINEw4zDhIPEg4zDhINMw4TDhIOEw4yDxINMw8ADQU=",
      "coolfanhigh 25": "JgBAAAABE4IQMQ4SDhMOEg4zDhMOEQ4TDhIOEw8RDhMOMw4RDhMOEg4zDhIPMg8RDhIPMg8SDhIPEg4yDjMOEhAADQU=",
      "coolfanhigh 26": "JgBAAAABEoMQMg4RDhMPEQ8yDxIOEg4SDhIOEw4SDhMOMw4SDhMOEQ4zDhMOMw4yDhIPMg4SDxIOEg8xDzIPMg8ADQU=",
      "coolfanhigh 27": "JgBAAAABE4IRMA8SDhIPEg4zDhIPEg0SDhMOEg8SDhIOMw4SDhIOEw4zDjIPEg4RDxIOMw4SEBEOMw4RDxIOEhAADQU=",
      "coolfanhigh 28": "JgBAAAABE4IQMQ4TDhIPEg4zDRIPEg4SDhMOEg8SDhIOMg4SDxIOEg8yDzEQEQ8yDhIPMg8SDhEOMw4TDxEOMw4ADQU=",
      "coolfanhigh 29": "JgBAAAABE4IQMQ4SDxIPEQ8yDhMOEQ8SDhIOEw8RDhMOMg4SDhMOEg4zDjIPMg4TDhIOMw4TDRIOMw4SEDEPEg4ADQU=",
      "coolfanhigh 30": "JgBAAAABFIIPMg4TDhIPEQ8yDhIOEw4SDxIOEg4SDhIPMg8RDxIOEg8xDzIPMg8yDxIOMg4SDhMPMg4SDTMOMw8ADQU=",
      "heatfanauto 16": "JgBAAAABFIIRMA8SDhIQEQ4yDhIOEw4SDhMOEg4TDhIOMg8yDhMPEQ4SDxIOEg4yDxIOMw4SDzIPEg4RDjMOEw4ADQU=",
      "heatfanauto 17": "JgBAAAABFIEQMg0SDxIOEg8yDxIPEQ4TDhEOEw8RDhMOMw8yDhEOFA4RDhMPMRARDhIPMQ8SDjMOEhARDjMNMw4ADQU=",
      "heatfanauto 18": "JgBAAAABFIIPMg4TDRMOEg4zDhIOEw4SDhMOEQ4TDhIOMw8yDhIOEw0SDxIOMw4zDhINMw4TDjMOEg4zDhIOEg8ADQU=",
      "heatfanauto 19": "JgBAAAABFIEQMg4RDxIPEQ8yDxIOEg8SDhIPEQ4SDxIOMw8yDhEOEw4SDjMOEw4SDhMOMg4SDjMOEg8yDxINMw8ADQU=",
      "heatfanauto 20": "JgBAAAABFIIQMQ4SDhIPEg4yDhIPEg8RDxIOEg8SDhINMw4zDhMOEg4TDjIOEg4zDhMOMw4SDjIOEg8yDzIPEg0ADQU=",
      "heatfanauto 21": "JgBAAAABEoMPMg4TDhIOEg4zDhIPEg4SDhMOEg4SDhIPMg4zDhIPEg4RDzIPMg8SDhIPMQ4TDjMPEQ4zDjIOMw8ADQU=",
      "heatfanauto 22": "JgA8ABExDRMOEg8SDjMOEg4TDhIOEg4SDhMOEg4zDzINEg8SDhIPMg8yDzEPEg8yDhIPMg8xDhMOEg4TDgANBQ==",
      "heatfanauto 23": "JgBAAAABE4IRMA8SDhIPEg4zDhIOEg4SDhMOEg8SDhIOMw4yDhMOEg8yDhMOEg4SDhIOMw4SDzIPMQ8SDhIPMg8ADQU=",
      "heatfanauto 24": "JgBAAAABE4IQMQ4TDhIPEg4zDhIPEQ4SDhMOEg4TDhIPMg4yDhMOEg4zDhMOEg8xDhIPMg8SDjMPMQ4SEDEPEg4ADQU=",
      "heatfanauto 25": "JgBAAAABFIMPMg4SDhMOEQ4zDhIPEg4SDxIOEg8RDhIPMg8yDxIOEg4yDhMOMw8RDhMOMg4SDzIOMw4TDjIPMg8ADQU=",
      "heatfanauto 26": "JgBAAAABE4IQMQ4SDhMPEQ4yDhMOEg4TDhIOEw4SDhMOMg4yDxIOEg8xDxIOMw4zDhIQMA8SDjMOMw4zDRIOEw8ADQU=",
      "heatfanauto 27": "JgBAAAABEoQQMQ8SDhEPEg4zDhIOEw4SDhIOEg4TDhIOMw8yDhIOEg8yDzIPEQ8SDRIPMhARDjMOMg8yDhIPMg4ADQU=",
      "heatfanauto 28": "JgBAAAABFIIPMg4TDhIOEg4zDhIOEw4SDhMOEg4SDhIOMw4zDhIPEg4yDjMOEg8yDxIOMg4SDzIPMg0zDjMOEw4ADQU=",
      "heatfanauto 29": "JgBAAAABE4MPMg4TDRMNEw4zDhIPEg4SDhIOEw4RDxIOMw8yDhIOEw4yDzIOMw4RDhMOMw4SDjMOMg4zDjMOMw4ADQU=",
      "heatfanauto 30": "JgBAAAABFIIQMQ4SDhMPEQ4yDhMOEg4TDhIOEg8SDhIPMg4yDxIPEQ8yDjIQMQ8yDxIOMg4SDzIQEQ4SEBEOEQ8ADQU=",
      "heatfanmin 16": "JgBAAAABE4IQMQ4TDhIPEg8yDhIPEg0SDhMPEQ8RDxIPMg4yDxEPEg8RDxIOEg8yDhIOEg4TDxEOMw4zDhIPMg4ADQU=",
      "heatfanmin 17": "JgBAAAABFIIPMg4SDxIOEQ8yDhMOEg4TDhIOEw4RDhMOMw8xDxIOEg8RDxEPMhARDhIPEg4SDhIPMg4zDjMOEg4ADQU=",
      "heatfanmin 18": "JgBAAAABFIEQMg0TDhIPEg8xDxIOEg8SDRIQEQ8RDxIPMg4zDhEOEw4SDhMOMw8xDhIOEw4SDhMOMw4xDzIPMhAADQU=",
      "heatfanmin 19": "JgBAAAABFIEQMQ4SDhMOEg8yDhMOEQ4TDhIOEw8RDhMOMw4yDhIOEg8SDzIOEhAQDhIQEQ4SDxIPEQ8SDhIPEQ4ADQU=",
      "heatfanmin 20": "JgBAAAABE4IQMQ4SDhMOEg8yDhMOEQ4TDhIOEw8RDhMOMw4yDhIOEw4SDzIOEg8xDxIOEhARDhIPEg4SDxEOMw4ADQU=",
      "heatfanmin 21": "JgBAAAABFIIRMA8SDhIQEQ4yDhIOEw4SDhMOEg4TDhEPMg4zDhMPEQ4TDTMOMw4SDhIPEg8RDxEOEg8SDjMOEg8ADQU=",
      "heatfanmin 22": "JgBAAAABFIIQMQ8SDhIPEQ8yDhIPEg4SDxIOEg8RDhIPMg4zDhMNEg4TDjMOMw4yDhIOEw4SDhMPEQ4TDjIOMw4ADQU=",
      "heatfanmin 23": "JgBAAAABFIIPMg4SDhMOEQ8yDhIPEg4SDxIOEg8RDhIPMg8yDhMNEg4zDxIOEg8SDhIOEg4SDhMPEQ4zDxEPEg4ADQU=",
      "heatfanmin 24": "JgBAAAABFYEQMQ8SDhIQEA8yDhIPEg4SDxIOEg8RDhIPMg4zDhMOEg4yDhMOEg8yDhMOEg4SDhIOEw4yDxIOMw4ADQU=",
      "heatfanmin 25": "JgBAAAABFIIRMA8SDhIQEA8yDhIOEw4SDhMOEg4SDhIPMg4zDhMOEg4yDhIPMg8SDhIPFQsRDxIOEg8yDzIOEg4ADQU=",
      "heatfanmin 26": "JgBAAAABFIEQMQ4SDhMOEg8yDhMOEQ4TDhIOEw8RDhMOMw4xDxIOEg8yDxIOMg4zDxEQEQ4SDxIOEg8xDzIQMQ4ADQU=",
      "heatfanmin 27": "JgBAAAABFIEQMg0SDxIOEhAxDxIOEg8RDhIOEw8RDhMOMw4yDhIOEw4zDzIOEg0TDhIOEw4SDhIPMg8SDRIPEg4ADQU=",
      "heatfanmin 28": "JgBAAAABFIIPMg4TDRMOEg8yDhIOEw4SDhIPEQ8SDhIPMg4zDhEPEg4zDjMPEQ8xDxIOEg4TDhIPMg4TDhEOMw4ADQU=",
      "heatfanmin 29": "JgBAAAABFIIPMg4TDhIOEg8yDhIOEg8SDhIPEg4RDxIOMw8yDhIOEw4yDzIOMg8SDhIPEQ4SDxIPMg4SDjMOEg8ADQU=",
      "heatfanmin 30": "JgBAAAABEoMQMQ4TDhIOEw8yDhIPEA8SDxEQEQ8RDxIOMw4yDxEPEg4zDjMOMg4zDhIOEw4SDhMOMg4SDzIOMw0ADQU=",
      "heatfanmed 16": "JgBAAAABE4MPMg4SDxIOEQ8yDxIOEg8SDhIPEg4RDxIOMw8yDhINFA4RDhMPEQ4zDhMOEg4yDhMOMw4yDzIPMQ8ADQU=",
      "heatfanmed 17": "JgBAAAABEoQPMg4TDRIOEg8yEBEOEg8SDhIOEg8RDxIOMw8yDhINFA4RDhMOMw8RDhMOEg0zDxIOEg4SEBEPEQ8ADQU=",
      "heatfanmed 18": "JgBAAAABFIEQMQ4TDhIPEg4zDhIOEw0SDhMOEg4TDhIOMw4yDhIPEg4SDxIOMw4yDhIPEg4zDhIPEg4RDhMOMw8ADQU=",
      "heatfanmed 19": "JgBAAAABE4MPMg4TDhIOERAxDxIPEQ8SDhIPEg4RDxIOMw4zDhIPEg4RDjMOEw4SDhMOEg4yDxIOEg4TDzIOEg0ADQU=",
      "heatfanmed 20": "JgBAAAABEoMQMg0SDxIPEQ8yEBEOEg8RDhIPEg8RDxIOMw4yDhIOEw4SDjMOEw4yDhIPEg4zDhIOEw4SDTMOMw4ADQU=",
      "heatfanmed 21": "JgBAAAABFIIPMg4TDhIPEQ8yDhIOEg8SDhIPEg4RDxIPMg4zDhIPEg4RDzIPMg8SDhIPEg4yDhIPEg4zDhIOEw4ADQU=",
      "heatfanmed 22": "JgBAAAABEoMQMQ8SDhIPEg8yDxEOEg4SDhIPEg4SDxIOMw4yDhIPEg8RDzIPMQ8yDxIOEg4zDxIOEQ4zDhMOMw4ADQU=",
      "heatfanmed 23": "JgBAAAABEoMQMQ4TDxEPEg4yDhIOEw4SDhMOEg4TDhINMw8yDxIOEg4zDhIOEg4TDhIOEw8yDhEPEg4zDjMOEg4ADQU=",
      "heatfanmed 24": "JgBAAAABFIERMA8SDhIQEQ8yDhIOEg4SDhMPEQ8SDhIPMg4yDxIOEg4zDhIPEg4yDhIPEg8yDhIPEg0zDjMOMw4ADQU=",
      "heatfanmed 25": "JgBAAAABEoMRMA8SDhIPEg4zDhIOEg4SDhMOEg4TDhIOMw4yDhMOEg8yDhMNMw4SDhMPEQ8yDhMNMg8SDhIPEg4ADQU=",
      "heatfanmed 26": "JgBAAAABFIIQMQ4SDhMPEQ4yDhMOEg4TDhIOEw4RDhMOMw4zDhIOEw4yDhIOMw4zDhMOEQ4zDhIPMg8SDhEPMg8ADQU=",
      "heatfanmed 27": "JgBAAAABFIIQMQ4SDhMPEQ8yDhIPEQ4SEBEOEhARDhIPMRAxDxIOEg8yDzEPEg4SDxIOEg4zDRMPMg4SDjMPEg4ADQU=",
      "heatfanmed 28": "JgBAAAABEoMQMQ8SDhIOEw0zDxEOEw4SDhMOEg4SDhIOMw8yDhIPEg4yDzIPEQ8yDxIOEQ8yDhMOMw4SDTMOMw4ADQU=",
      "heatfanmed 29": "JgBAAAABEoMQMBARDhIPEg4zDhIPEQ4SDxIOEg8SDhIOMg8yDhMOEg8yDjIPMg4SDxIOEg8xDxIOMw4zDxEOEw4ADQU=",
      "heatfanmed 30": "JgBAAAABFYIPMg4RDhIPEg4zDxEQEQ4SDxEOEg8SDhIQMRAwDhMOEg4zDjMOMg4zDhMPEQ8yDxINMw4yDxIOMw4ADQU=",
      "heatfanhigh 16": "JgBAAAABEoQPMg4SDxEOEhAxDhMPEQ4TDhEPEg8RDhMOMw4zDhEOEw4SDhMOEg4zDhIPMQ8SDhIPEg4SDxIOMg4ADQU=",
      "heatfanhigh 17": "JgBAAAABE4IQMQ8RDxIOEhAxDxIOEg8SDhEPEg4SDxIOMw4zDhEOEw4SDhMOMw8RDhIPMg8RDhMOEg4TDzEOEg4ADQU=",
      "heatfanhigh 18": "JgBAAAABFIIQMQ4SDhMOEg0zDhMPEQ8SDhIOEg8SDRIPMhAxDxIOEg8RDhIPMg8yDhMOMw4RDhMOEg8SDjMOMg4ADQU=",
      "heatfanhigh 19": "JgBAAAABE4IQMQ8SDhIOEw4xDxIOEg8SDxEPEg4SDxINMw4zDhIPEg4SDjIOEw8RDxIPMg8RDhIOEg4zDxIOEg4ADQU=",
      "heatfanhigh 20": "JgBAAAABFIIQMQ4SDhMOEg4zDhMOEQ8SDhIOEw4SDhMOMg8xDxIOEg8SDjMOEg8xDxIOMw8RDhMOEg4yDhMOMw4ADQU=",
      "heatfanhigh 21": "JgBAAAABFIIQMQ8RDhMOEg8yDhMOEg0TDxEOEw4SDhMOMw4yDhIOEw4SDjMOMg4TDhIPMg4TDhIOEw4yDjMPEQ4ADQU=",
      "heatfanhigh 22": "JgBAAAABFIIRMA8SDhIPEg0zDhIQEQ8RDxIOEg4SDhIOMw4zDhMOEg4SDjMOMw4zDhIOMg4TDhIOEw4zDTMOMg8ADQU=",
      "heatfanhigh 23": "JgBAAAABE4IRMBARDhIPEg8yDhIPEg0SEBEOEhARDhIPMg8xDxIOEg8yDxIOEg8RDxEQMRARDhIPMg8RDxEPEg4ADQU=",
      "heatfanhigh 24": "JgBAAAABEoMQMQ4SDxIOEg8xDhMPEQ4TDhIOEw4SDhMNMw8yDhIOEw8yDhEOEw8xDxIPMg4SDhIOMw4SDxIOMw4ADQU=",
      "heatfanhigh 25": "JgBAAAABFIIQMBARDhIPEg4yDhIPEg4SEBEOEg8SDhINMw4zDhMOEg4zDRMOMw4SDhMPMQ8RDhIPMg8SDjMPEQ8ADQU=",
      "heatfanhigh 26": "JgBAAAABE4IQMQ4SDxIPEQ8yDxIOEQ8SDhIPEg8RDhMOMw4yDhIOEw8yDhIOMg4zDhMOMw4SDhIPMQ8SDjMOMw4ADQU=",
      "heatfanhigh 27": "JgBAAAABE4IRMA8SDxEQEQ4zDhIPEg4RDxIOEg8SDhIPMhAwEBEOEg8yDjMPEQ4SDhMPMg8RDhMOMg4zDhIOEw4ADQU=",
      "heatfanhigh 28": "JgBAAAABE4IQMQ4TDhIPEg4zDhIOEw4RDhMOEg8SDhIOMw8xDhIPEg8yDjMPEQ8xDxIPMg4SDxIOMg4zDhIOMw8ADQU=",
      "heatfanhigh 29": "JgBAAAABE4IQMQ4SDhMPEQ4zDhMOEg0TDhIOEw8RDhMOMw8xDhIOEw8xDzIQMA8SDhIPMg8SDhIPMQ8yDzIOEw8ADQU=",
      "heatfanhigh 30": "JgBAAAABE4IQMQ4SDhMOEg4zDRMPEQ8SDhIOEw4SDhMOMg8yDhIOEw4yDzEPMg8yEBEOMg8REBEOMw4zDjIOMw8ADQU=",
      "auto": "JgBAAAABE4IRMA8SDxEPEg8yDhEPEg4SDxIOEhARDhIOMg4TDjMOMw4SDhIOMw8RDhMOMw4SDTMOEhARDjMOEhAADQU=",
      "autotemp1": "JgBAAAABE4MPMg4SDhIOEhAxDhMPEQ8SDhINEw4SDxIOMw4SDzINMw4TDhIOMw4yDhIPMg8SDjMOEg8RDjMOMw8ADQU=",
      "autotemp2": "JgBAAAABE4MPMg4SDxEOEg8yDxIOEhARDhIPEQ4SDxIOMw4SDjMOMg4TDjMOEg4TDhIOMw4SDjMOEg4zDhIOEg8ADQU=",
      "autotemp-1": "JgBAAAABE4IQMQ4TDhIOEw8yDhEOEw4SDhMOEg4SDxIOMg4SDzIPMhARDhIPEQ4zDhIOMw4TDjIOEg4TDhIPMg4ADQU=",
      "autotemp-2": "JgBAAAABEoQPMg8RDxINEg8yEBEOEg8SDhIPEQ8REBEOMw4SDjMOMg8SDhIOEw4SDxIOMg4SDjMOEw4SDhMOEQ8ADQU=",
      "dehumidificationfanauto": "JgBAAAABE4IPMg4TDxEOEw0zDhIPEg8RDxEPEg4SDxEOMw4SEBEOMw4yDhIOEw8RDhMOMw4SDjIOEw4zDjMOEg4ADQU=",
      "dehumidificationfanlow": "JgBAAAABE4IQMQ8RDxIOEhAwDxIOEhARDhIPEg4SDxIOMg8RDhMOMw4yDhIOEw4SDhMOEg4TDhIOEg4SDhMOMw4ADQU=",
      "dehumidificationfanmed": "JgBAAAABE4IQMg4RDhMOEg8yDxIOEg4TDRIOEw4SDxIOMw8RDxIOMg8yDxEOEw4SDhMNEg8yDxEPEg4SDzIPMQ8ADQU=",
      "dehumidificationfanhigh": "JgBAAAABE4IRMQ0TDhIOEw4zDhIOEw4SDhIOEg4TDhIOMw8REBAOMw4zDxEPEg4SDxEOMw4SDxIOEg4zDhIOMw4ADQU=",
      "on": "JgBAAAABFIIQMA8SDxEPEg4zDxEPEg0SDxIOEg4TDhIOEw8RDhMNEg8SDxEOMw8yDhMOMg8RDhIQEQ4zDjMOMg4ADQU=",
      "off": "JgBAAAABE4IRMBARDhIPEg4zDhIPEQ4SDzIOMw4TDhIOEw4RDhMOEg4TDhIPEg4SDhMNMw8RDjMPEQ8SDhIPMQ8ADQU="
    }
  }
}

I have placed this file in the smartdir/custom_codes/climate, restarted HA .
and it doesnt work. I tried renaming, making a file like those code files that already exist, nothing works.

Can someone please explain what am i supposed to do with the code file generated by HA after learning the remote ?

thank you very much !

1 Like

I just switched over to using the fork, restarted etc. Got this error on restart:

image

But all the docs show config via YAML still.

Do I simply remove smartir: and add SmartIR again via the Integrations UI? I didn’t see this documented.

Especially given that clicking the link to setup the Integration bring about this:

image

(I’m on HA 2024.6.2)

smartir: in the configuration file is no longer needed, as you said that is a requirement in the “original” integration only.
This newest fork doesnt need that thats why is not documented

Thanks. I removed smartir: and rebooted, all seems good so far but I’ll check functionality once I get home. Cheers. It was mainly the link to configure via the UI that threw me.

@litinoveweedle any idea please ? i’m using the new fork but the instructions are not for the less tech savvy :grin:. Thank you !

Save it as a .JSON file.
Place it in the custom_codes class climate subdirectory.

/
|-- custom_components/
| |-- smartir/
| |-- init.py
| |-- climate.py
|-- controller.py
| |-- fan.py
| |-- media_player.py
| |-- codes/
| |-- climate/
| |-- 1000.json
| |-- …
| |-- fan/
| |-- 1000.json
| |-- …
| |-- media_player/
| |-- 1000.json
| |-- …
| |-- custom_codes/
| |-- climate/
| |-- Your_file.json
| |-- fan/
| |-- 1000.json
| |-- …
| |-- media_player/
| |-- 1000.json
| |-- …