Enabling Rfxcom protocols using Rfxcmd on Linux

I use the Rfxcom RFXtrx433 to receive signals from my weather station sensors on my Raspberry Pi in order to save them in a local database. This works great, but support for Linux from Rfxcom is limited. On Windows, it offers a user interface called Rfxmngr which allows you to configure the transceiver. Linux has no such option. This was an issue for me when I wanted to add a new TFA temperature sensor. As it turns out, all my existing Oregon Scientific sensors had worked out of the box because the protocol for those sensors is enabled by default, as per the documentation. TFA requires enabling the Hideki protocol. The documentation is clear on how to enable it using the Windows manager. Not so much on how to enable and disable protocols on Linux.

Luckily, a Github project exists called Rfxcmd, which allows you to interact with the Rfxcom using a few Python scripts. It requires a little bit of setting up. I assume here that you already have the package downloaded onto your machine. One thing that was not immediately obvious to me, was how to enable desired protocols. Naturally, once you have it figured out, it is easy.

The root folder contains a file called protocol.xml. In it, the available protocols are described. For example, this is the Oregon Scientific protocol:

<protocol>
<id>18</id>
<name>Oregon Scientific</name>
<state>0</state>
</protocol>

The state of each protocol is set to '0' as default. As you may have guessed, if you want to enable the protocol, you need to change the state of the protocol to '1'. In my case, as stated above, this meant changing the Hidek protocol.

<protocol>
<id>13</id>
<name>Hideki / UPM</name>
<state>1</state>
</protocol>

Subsequently, I tried to restart the script, but one other change is required, to the config.xml file. All the way at the bottom of the configuration file, you will see the following lines:

<!-- Protocol configuration --> <!-- Protocol configuration --> 
<protocol_startup>no</protocol_startup>
<protocol_file>protocol.xml</protocol_file>

Protocol startup is set to 'no'. Changing the value to 'yes' and then restarting the script will cause it to enable and disable protocols are per the configuration in the protocol.xml file.