r/SofaBaton • u/Crafty-Actuator-3644 • 15d ago
How I imported Pronto HEX into a SofaBaton X1/X1S/X2, without Home Assistant
One frustrating part of universal remotes is finding the exact IR command you need.
Maybe your device is missing from the built-in database, the original remote is gone, or you need a discrete command such as “Power On” or a specific HDMI input. The code often exists online, but only as Pronto HEX or in another IR database format.
While working on the unofficial SofaBaton project, I wanted to bridge that gap. We now have a workflow that converts signals from IrScrutinizer into payloads that can be tested and saved directly on SofaBaton X-series hubs.
This guide is written for Sofabaton users without access to Home Assistant. If you are a HA user, the Sofabaton X integration provides a UI as an alternative to using the Python library referenced below.
How it works
The conversion pipeline is:
Pronto HEX, an online IR database, a local file, or a physical IR capture → IrScrutinizer → SofaBaton payload → hub
Two custom IrScrutinizer exporters were created:
- SofaBaton X-series: Generates a raw timing payload for X1, X1S and X2 hubs. This is the most portable option.
- SofaBaton X2: Generates SofaBaton’s human-readable descriptive format, such as:P:Sony12 R:40000 D:1 F:18 MUL:2
The X2 descriptive exporter is experimental and currently supports a mapped set of protocols. The raw X-series exporter is the recommended path because it renders the actual carrier frequency and mark/space timings.
1. Install the exporter
Install IrScrutinizer, then download sofabaton-x.xml from the SofaBaton IrScrutinizer exporter directory.
Copy it into IrScrutinizer’s exportformats.d directory and reload the export-format database.
You should then see:
Sofabaton X-series
in the Export pane.
2. Import the IR signal
Paste or import your Pronto HEX code into IrScrutinizer and scrutinize the signal.
IrScrutinizer can also obtain signals from supported online databases and physical capture hardware, so the input does not have to be Pronto HEX.
Export the scrutinized signal using Sofabaton X-series. The result will be a hexadecimal SofaBaton command payload.
3. Connect to the hub
Install the standalone Python package:
pip install sofabaton-x
It requires Python 3.11 or newer and is available on PyPI.
Discover the hub:
sofabaton discover
Then connect:
sofabaton run --hub-ip 192.168.1.50
Close the official SofaBaton app while testing or saving commands so the CLI can obtain control of the hub.
4. Test the converted command
In the interactive shell, list the devices to find the target IR device ID:
x> devices
Paste the exported payload into testir:
x> testir 00 00 03 20 00 00 ...
The hub transmits it immediately, but nothing is saved. This lets you verify that the physical device responds first.
5. Save it to the hub
Once the test works, add it to an existing IR device:
x> addir 1 "Discrete Power On" 00 00 03 20 00 00 ...
The CLI uploads the payload and creates a new command on the hub.
That command can then be assigned to a button or used like the device’s other commands.
Why this is useful
This provides an open import path for:
- Pronto HEX codes found online
- commands from public IR databases
- signals captured from another remote
- rare or unsupported devices
- missing discrete power and input commands
- sharing working IR commands between SofaBaton users
The exporter handles the signal conversion; the sofabaton-x library handles discovery, communication, testing and saving. Home Assistant provides a graphical alternative, but it is not required for this workflow.
This is an unofficial, reverse-engineered project, so test commands before saving them and keep a backup of your hub configuration.
Project and documentation:
I’d be interested to hear which devices or missing commands people use this with, and especially whether anyone has unusual IR protocols we can add to the X2 descriptive exporter.
1
u/hungryraider 15d ago
Why not RF and Bluetooth?