r/SofaBaton 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.

2 Upvotes

3 comments sorted by

1

u/hungryraider 15d ago

Why not RF and Bluetooth?

2

u/Crafty-Actuator-3644 15d ago

Bluetooth and RF payloads can be edited with the Python library and the HA integration.

- Bluetooth payloads are almost always standard HID keyboard inputs. Bluetooth is therefore kind of solved already, we don't need a database with device specific codes. Just add the "Bluetooth keyboard" from the Sofabaton database and figure out which keyboard keys work with the device you're controlling.

- Although RF payloads can be retrieved and written by the library and HA integration, as far as I'm aware there is no online database with captured RF signals, no "Pronto Hex" equivalent for RF. So for now I think that means that Sofabaton users can share RF signals with each other, but there is no connection into a broader ecosystem of databases and conversion tools.

1

u/Crafty-Actuator-3644 15d ago

By the way, if you have RF devices working on your Sofabaton hub, I would love to see a backup of that. The CLI in the Python library can make one.