Skip to content

Instantly share code, notes, and snippets.

@svyatogor
Last active June 2, 2025 22:47
Show Gist options
  • Save svyatogor/7839d00303998a9fa37eb48494dd680f to your computer and use it in GitHub Desktop.
Save svyatogor/7839d00303998a9fa37eb48494dd680f to your computer and use it in GitHub Desktop.
Convert SmartIR Broadlink commands to Tuya
@pasthev
Copy link

pasthev commented Mar 3, 2025

Hi @glenricky,

https://irtuya.streamlit.app/ might help in your case.
@svyatogor sorry, I don't mean to hack this thread - just thought that an online tool can be useful for non-programmers.

Pascal

@LotharWoman
Copy link

LotharWoman commented Apr 26, 2025

Hello folks,
Unfortunately I have no idea about the matter. However, I would like to operate air conditioning in the "Followme" mode with an external temperature sensor. The remote control sends the determined value of the room temperature to the air conditioning every 2-3min. Unfortunately, it can only be placed unfavorably and the batteries empty very quickly.
I have already managed to intercept some codes required with "Learn Command" in home assistant. Unfortunately, they are only graded in 1 ° C steps and the air conditioning is not very finely regulated.
I hope for your help. Is someone able to decode the transmitted temperature value from attached codes and to create new complete codes in 0.2 ° C steps? You would help me and others a lot.

Thanks for your help.

    "FollowMe 19°C": "dRHoEDICOgZSAtQBUgIaBlICGgZSAhoGUgLUAVICGgYzAvQBUgL0AVEC/AVRAvUBUQLVAVEC9QFRAhsGMgL0AVICGgYyAjoGMwIaBlIC9AFRAhoGMwL0AVEC9AFSAvsFMgI6BjMCEwJSAtQBUgIaBjIC9AFSAhoGMwI5BjMC9AEyAhMCMgL0ATMCOgYyAjoGMwI5BjMCGwZRAhsGMgI6BjICEwIzAhoGUgL0ATIC9AEyAhQCMgL0ATIC9AFSAvQBMwI5BjMCQxQ1ERcRMgI4BjMC8wEyAjkGMgI4BjICOQYyAhMCEwJYBhMCEwISAjMCEgI5BjICEwITAhMCMgITAhMCWAYTAhICEwJYBhMCWAYTAlgGEwITAhMCWAYTAjIC9AEyAhMCWAYSAlgGEwISAhMCMgITAjkGEwIyAhMCWAYTAlcGEwITAhMCMgL0ATICEwJZBhMCWAYTAlcG9AFYBhMCdwbzAXcG9AEyAhMCWAb0AVEC9AEyAvQBUQL0ATIC9AEyAhICMgL0AXcG9AEwdQ==",
    "FollowMe 20°C": "ixHoEDECWQYTAhMCMgI4BhMCWQYUAlcGEwITAjMCOAYyAhQCEgITAhQCWAYSAhMCMwITAhMCEwITAlsGEAITAjUCOAYxAjoGEgJYBhQCEgIyAjoGMgISAhUCWAYSAhMCFAISAjICEwIUAhICMgI6BhICMwISAjoGMQITAhQCWAYWAlgGEgISAhICWQYTAhMCMwI4BhMCWQYSAloGEgJYBhMCEwITAlkGEwIUAjECOQYUAjECEwIUAhICMgIUAhICEwJZBhMCQBRUEfYQNAJXBhICFQISAlgGFAJXBhMCWAYUAhICEwJYBhUCMQIVAhICEgJaBhICEgIVAhICNALxATMCOwYvAvUBUwIYBjICOQYzAjsGMAL0AXAC+wUyAhQCUQIZBjMC9AFRAtUBcALWAVEC1AFSAhkGMgIUAlEC/QVPAvQBUQIaBjICOQY1AvIBUQIbBjEC9AFTAhgGMgI6BjICOQY0AjgGMQL2ATECOAY0AvMBMQI6BjICEgI0AvMBMgIUAjIC8wE0AjcGMwIwdQ==",
    "FollowMe 21°C": "eBECETMCOQYVAjICFAI5BjQCOAYTAlsGEgITAjQCOAY1AhECEwIVAhICWAYVAhICFQIxAhMCFAITAloGEgITAjQCOQYVAlcGEwJaBhMCFAITAlsGEwISAjICOgYUAjICEwI7BjICFQISAhMCEwJaBhMCFAIyAjsGEgIzAhQCOAYzAhQCFQISAhICWQYTAjUCEQI5BjQCOQYVAlcGEwJaBhMCFAITAlkGFAITAjQCOAYTAjMCEwIUAhUCEgITAjMCEgJcBhICRRQ2ERYRNQI4BjICFAITAlsG8gFcBjACOgYSAjQCEgI6BjMCFQIRAhMCFQJYBhMCEwIzAhUCEQITAhQCWAYUAjICFgI4BhMCWQYTAloGEgITAjQCOQYUAjICFAI5BjMCFQISAlgGFAITAvYBMAIzAjoGEwIVAjECOQY0AvMBNAI4BjUC8wEyAhQCMgIcBlEC8wFTAhoGUQL9BVICGAZSAhsGUgL0AVIC/AUyAhYCMAI5BjQC8wFSAtUBUQL3ATAC9AE0AjgGMgIwdQ==",
    "FollowMe 22°C": "dBEIETICWwYSAhMCFAJZBhUCWQYSAjoGMwITAhUCWAYTAhYCEgITAjICOgYTAjUCEgITAhMCFAIyAjwGEgIyAhMCOwYxAjsGEwJZBhMCFAIyAjwGEgIyAhQCOgYyAjoGEwI1AhECFAITAhUCMQI8BhECMwIUAjkGNAISAhMCFAITAlkGFAITAjICOwYSAjQC8wFbBjICPAYSAlgGEwJZBhUCEgITAloGEgIVAjICPAYQAjMCEwIUAhMCEwI1AhECEwJaBhMCRBQ3ERsRMgI8BhICMgIUAjsGNQI4BhYCWAYWAhICMgI7BhQCMwITAhUC9AF5BvUBMgIWAhICNAITAhYCVwYWAhICEwJbBhMCOwYzAjsGFAI0AhICPAYyAhMCFQJbBhICPAYSAhcCMgLzATICFAIzAhsGNAITAjMCHQZRAvUBUgLXAVECHAZRAtUBUgIeBlAC9AFUAvsFMgI8BjQCOgY0AjoGUwLUAVQCGgZUAtMBUgIcBjYC8gFSAvQBUwLVAVIC1gFRAhwGMwIwdQ==",
    "FollowMe 23°C": "iRHoEDUCOAZRAtcBTwIbBlMCGQZRAvsFcQLVAVICGgZSAtcBUQLTAXMC+gVUAvIBUQLWAVIC0wFxAvsFUgL1AVECHAZQAvsFcQL6BVMC9AFRAv0FUQLzAVMCGQZVAvkFcQL8BVAC9gFRAtQBUwIaBjQC8wFVAhkGNQLyAVIC9QFRAtUBVALzAVIC/AU1AjgGNgI4BjUCOQYyAhsGNAI7BjIC9QFxAvwFMwIVAlEC1wFPAtUBcwLUAVMC1AFUAvMBMgIcBjMCRhQ6ERgRNAI8BjEC9AEzAjoGMwI7BjMCOgYzAvQBNQI5BjQC8wEzAvQBMwI7BjICFQIyAvQBMwL1ATICOwYzAhMCNQIZBjUCOQY0AjkGNQLzATICOwY1AhICEwJaBhMCWgYUAjsGMgIUAhMCFQITAloGEwIWAjECPAYSAjMCEwIUAhUCEgITAjMCFAJaBhMCPAYTAlsGEwJbBhMCWQYVAjkGFQIxAhYCWAb2ATICEgIVAhMCNQISAhMCFAIyAvYBMgITAloGEwIwdQ==",
    "FollowMe 24°C": "lhHpEDACOQY0AhMCUQL6BVQCGAYzAjkGMwL2AU8CGgY0AhICUgLVAVECGgY1AvMBUAL2AVEC0wFUAhgGMwL0AVECHAYyAjgGMwI5BjUC8gEyAjoGMgI4BjQC8wEyAhUCMQLzATUCEAIzAvUBMgI7BjEC8wE1AhICMQIbBlECHQYwAjoGMQL2AVECGQY0AjgGMwI5BjICOwYzAjcGMgIaBlIC9gEwAjkGNQLyATICFQIxAvMBNALzATICFAIyAvYBMQI5BjQCQBQ2ETURFQJYBhICEwIUAlgGFgJXBhICOgYyAhMCEwJYBhQCEwIUAjICEwI5BhMCNQIRAhMCEwI0AhICWAb2ATACEwJaBhICWwYRAjkGFQIxAhMCWQYTAjsGEgIyAhQCEgITAjQCEgITAhQCMQL0AVgGFAIyAhUCEgITAlkGEwJYBhUCVwYTAhQCEwJYBhYCVQYTAlkGEwJZBvYBVwYSAnkG8wEyAvUBdwb1ATICEwIzAvMBMgL0AVIC9gEwAvQBVALyAVgGFQIwdQ==",
    "FollowMe 25°C": "lBHoEDMCOQZUAtMBUQIbBlECHQZSAhgGUQLVAVMCGQZSAtYBUAL0AVQC+AVxAtYBUQLUAVIC9AFRAv0FbwLUAVQCGAZSAhoGUwL6BXIC1AFRAhsGUgL8BXAC1gFRAtQBUwIZBlEC1gFxAtQBUwIZBlEC1AFSAtUBcwL5BTMCOgYyAhMCVALTAVECGwZRAhkGNAIZBlICGQYyAjoGMwI6BjIC9QFQAh0GMAITAlMC0wFSAtUBUgL0AVEC1AFUAvIBVAL5BTICQxRVEfYQVAIYBjMCFAIxAhkGUgIbBjICPAYvAhQCNAIZBjICFgIwAvQBNAI4BjIC9QExAhMCMgL0ATICOgYzAvUBMgI4BjQCOQY0AjkGNQLyATMCOwYyAlkGFAITAhQCFQIyAjkGFgISAjICFAITAlkGFQISAhMCFAIzAjsGEgJbBhMCNAISAhMCFAJZBhQCOgYTAlsGEgJaBhMCWQYUAloGFAITAhUCWAYWAhACFAIzAhMCFgISAhMCFAIyAhMCFAITAlsGEgIwdQ==",
    "FollowMe 26°C": "khHnEDICOgZRAtUBUgIaBlICGgZSAhoGUQLVAVICGgZRAtUBcQLUAVICGgZSAtQBUgLVAXEC1AFSAhoGUgLUAVICGwZRAhoGUgL7BXAC1QFSAhoGUQIaBlIC1QFRAhoGUgLVAVEC9AFSAtQBUgIaBlIC1AFSAvQBUgL7BXEC1AFSAhsGUQLVAVECGgZSAhoGUgIaBlIC+wVxAvsFUQIbBlEC1QFxAvsFUQL0AVIC1QFSAtQBcQLVAVEC1QFSAvMBUgIaBjMCIxR0EdgQUQIbBjICEwJSAhoGMgIbBlECGgYzAhMCUgL6BTMCEwJSAtUBUQIaBjMC9AFRAvQBUgLVAVICGwYzAvQBMwI6BjMCOgYyAjsGMgL0ATMCOgYzAjoGMwL0ATICOwYyAvQBMwIUAjMC8wEzAjoGMwL0ATMCFAIyAhsGUgL0ATMCOwYzAvQBMgI7BjMCOgYzAhsGMwI6BjMCOgYzAjsGMgL0ATMCOgYzAvQBMwITAjMCEwIUAhMCEwIzAhQCEwITAloGFAIwdQ==",
    "FollowMe 27°C": "hRHlEDICOQZRAtUBUQIZBlICGQZRAhkGUgLUAVECGgZRAvQBUQLVAVECGQYyAvQBUQL0AVEC1AFSAhkGMgL0AXAC+gUyAjgGMwI4BjIC9AFwAvsFMgI4BjICEwJRAvoFUgIZBjICEwJRAtUBUQIZBjIC9AFwAtUBUQIZBjIC9AEyAhMCMgLzATICOQYxAjkGMgI5BjICGQZRAhkGMgI4BjICEwIzAhkGUgL0ATIC9AEzAhMCMwL0ATICEwIzAvQBMgI5BjICQhQ1ERYRMwI5BjIC9AEzAjkGMwI5BjICOgYTAjMCEwI5BjMCEwITAhMCEwJZBhMCEwIzAhMCEwITAhMCWQYTAjMCEwI5BhMCWQYTAlkGEwITAhMCWQYTAlgGEwIUAhMCWQYTAlgGFAIyAvQBMgITAlgGEwIUAhMCMgITAjoGEwIzAhMCEwITAjICEwI6BhMCWQYTAncG9AF4BvQBeAb0AVgGEwIyAvQBeAb0ATMC8wEzAhMCMgL0ATMC9AFRAvQBMgL0AXgG8wEwdQ=="

@cord-otten
Copy link

cord-otten commented May 8, 2025

I seem to have an issue when trying to convert 1344 or 1161 (both relate to the "YB1FA" remote):

Traceback (most recent call last):
  File "C:\temp\script.py", line 175, in <module>
     output_file.write(process_commands(sys.argv[1]))

  File "C:\temp\script.py", line 167, in process_commands
    data['commands'] = process_commands_recursively(data.get('commands', {}))

  File "C:\temp\script.py", line 161, in process_commands_recursively
    processed_commands[key] = process_commands_recursively(value)

  File "C:\temp\script.py", line 161, in process_commands_recursively
    processed_commands[key] = process_commands_recursively(value)

  File "C:\temp\script.py", line 161, in process_commands_recursively
    processed_commands[key] = process_commands_recursively(value)

  File "C:\temp\script.py", line 159, in process_commands_recursively
    processed_commands[key] = encode_ir(value)

  File "C:\temp\script.py", line 16, in encode_ir
    signal = filter(get_raw_from_broadlink(base64.b64decode(command).hex()))

  File "C:\temp\script.py", line 137, in get_raw_from_broadlink
    length = int(string[6:8] + string[4:6], 16)  # Length of payload in little endian
ValueError: invalid literal for int() with base 16: ''

As far as I can see, they are for Broadlink, as opposed to the issue from @nazmibojan

Already thanks for any support and a huge thank you for the work!

@Jody1818
Copy link

@cord-otten
any luck with that issue? trying the same file for same remote and getting errors as well

@cord-otten
Copy link

Not yet. I tried some online converters without luck. I suspect the codes are not "standard" broadlink format.

@Jody1818
Copy link

I used the code and it does not add "ir_code_to_send":
should I do it menually? am I doing something wrong?
is it not a must?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment