RFLink: Protocol Reference

3-1-2022

The use of this protocol is free for both server and client sides of the implementation as long as you notify us.

General description of commands and data fields

Data is send serial (via USB) as "text" at a speed of 57600 baud (N,8,1)
It is sufficient for a server to open a port and listen to the RFLink data.
Each incoming text line contains information about data that has been received via RF signals.
In order to talk back to RFLink to issue RF commands or to make changes to settings, a text line has to be send that is terminated with CR/LF.


RFLink Startup communication example:

20;00;Nodo RadioFrequencyLink - RFLink Gateway V1.1 - R46;
20;01;MySensors=OFF;NO NRF24L01;
20;02;setGPIO=ON;
20;03;Cresta;ID=8301;WINDIR=0005;WINSP=0000;WINGS=0000;WINTMP=00c3;WINCHL=00c3;BAT=LOW;
20;04;Cresta;ID=3001;TEMP=00b4;HUM=50;BAT=OK;
20;05;Cresta;ID=2801;TEMP=00af;HUM=53;BAT=OK;
20;06;NewKaku;ID=008440e6;SWITCH=a;CMD=OFF;
20;07;AB400D;ID=41;SWITCH=1;CMD=ON;
20;08;SilvercrestDB;ID=04d6bb97;SWITCH=1;CMD=ON;CHIME=01;
.....


Packet structure - RFlink describing data received from RF:

Data:
20;02;Name;ID=9999;LABEL=data;

Fields:
20                         => Node number 20 means from the RFLink Gateway to the master, 10 means from the master to the RFLink Gateway
                                  Node number 11 means from the master to the master (Echo command - creation of devices), see below for explanation
;                           => field separator
02                        => packet counter (goes from 00-FF)
NAME                => Device name (can be used to display in applications etc.)
LABEL=data      => contains the field type and data for that field, can be present multiple times per device

List of Data Fields: (LABEL=data)

ID=9999 => device ID (often a rolling code and/or device channel number) (Hexadecimal)
SWITCH=A16 => House/Unit code like A1, P2, B16 or a button number etc.
CMD=ON => Command (ON/OFF/ALLON/ALLOFF) Additional for Milight: DISCO+/DISCO-/MODE0 - MODE8
SET_LEVEL=15 => Direct dimming level setting value (decimal value: 0-15)
TEMP=9999 => Temperature celcius (hexadecimal), high bit contains negative sign, needs division by 10 (0xC0 = 192 decimal = 19.2 degrees)
                      => (example negative temperature value: 0x80DC, high bit indicates negative temperature 0xDC=220 decimal the client side needs to divide by 10 to get -22.0 degrees
HUM=99       => Humidity (decimal value: 0-100 to indicate relative humidity in %)
BARO=9999       => Barometric pressure (hexadecimal)
HSTATUS=99        => 0=Normal, 1=Comfortable, 2=Dry, 3=Wet
BFORECAST=99        => 0=No Info/Unknown, 1=Sunny, 2=Partly Cloudy, 3=Cloudy, 4=Rain
UV=9999        => UV intensity (hexadecimal)
LUX=9999        => Light intensity (hexadecimal)
BAT=OK => Battery status indicator (OK/LOW)
RAIN=1234 => Total rain in mm. (hexadecimal) 0x8d = 141 decimal = 14.1 mm (needs division by 10)
RAINRATE=1234 => Rain rate in mm. (hexadecimal) 0x8d = 141 decimal = 14.1 mm (needs division by 10)
WINSP=9999 => Wind speed in km. p/h (hexadecimal) needs division by 10
AWINSP=9999 => Average Wind speed in km. p/h (hexadecimal) needs division by 10
WINGS=9999 => Wind Gust in km. p/h (hexadecimal)
WINDIR=123 => Wind direction (integer value from 0-15) reflecting 0-360 degrees in 22.5 degree steps
WINCHL => wind chill (hexadecimal, see TEMP)
WINTMP=1234 => Wind meter temperature reading (hexadecimal, see TEMP)
CHIME=123 => Chime/Doorbell melody number
SMOKEALERT=ON => ON/OFF
PIR=ON => ON/OFF
CO2=1234 => CO2 air quality
SOUND=1234 => Noise level
KWATT=9999 => KWatt (hexadecimal)
WATT=9999 => Watt (hexadecimal)
CURRENT=1234 => Current phase 1
CURRENT2=1234 => Current phase 2 (CM113)
CURRENT3=1234 => Current phase 3 (CM113)
DIST=1234 => Distance
METER=1234 => Meter values (water/electricity etc.)
VOLT=1234 => Voltage
RGBW=9999 => Milight: provides 1 byte color and 1 byte brightness value


Sample data of received RF packets:

20;2D;UPM/Esic;ID=0001;TEMP=00cf;HUM=16;BAT=OK;
20;6A;UPM/Esic;ID=1002;WINSP=0041;WINDIR=5A;BAT=OK;
20;08;UPM/Esic;ID=1003;RAIN=0010;BAT=OK;
20;31;Mebus;ID=c201;TEMP=00cf;
20;32;Auriol;ID=008f;TEMP=00d3;BAT=OK;
20;A2;Auriol V2;ID=008f;TEMP=00a3;BAT=LOW;
20;33;Cresta;ID=3001;TEMP=00b0;HUM=50;
20;0C;Cresta;ID=8001;RAIN=001c;
20;47;Cresta;ID=8001;WINDIR=0002;WINSP=0060;WINGS=0088;WINCHL=b0;
20;47;Cresta;ID=8001;TEMP=00b0;UV=00d0;
20;36;Alecto V1;ID=ec02;TEMP=00d1;HUM=14;
20;07;Mebus;ID=ea01;TEMP=0017;
20;3D;Alecto V1;ID=2000;TEMP=0011;HUM=61;
20;26;Alecto V1;ID=0086;RAIN=02ac;
20;30;Alecto V1;ID=0020;WINSP=0068;
20;16;Alecto V1;ID=0020;WINSP=0020;
20;17;Alecto V1;ID=0020;WINDIR=0002;WINGS=0088;
20;36;Alecto V1;ID=0020;WINDIR=0002;WINGS=0040;
20;74;Oregon TempHygro;ID=0ACC;TEMP=00be;HUM=40;BAT=OK;
20;b3;Oregon TempHygro;ID=1a2d;TEMP=00dd;HUM=43;BAT=OK;
20;e5;Oregon BTHR;ID=5a6d;TEMP=00be;HUM=40;BARO=03d7;BAT=OK;
20;46;Oregon Rain;ID=2a1d;RAIN=0012;RAINTOT=0012;BAT=OK;
20;83;Oregon Rain2;ID=2a19;RAIN=002a;RAINTOT=0054;BAT=OK;
20;32;Oregon Wind;ID=1a89;WDIR=0045;WINSP=0068;AWINSP=0050;BAT=OK;
20;4a;Oregon Wind2;ID=3a0d;WDIR=0021;WINSP=0040;AWINSP=005a;BAT=OK;
20;ba;Oregon UVN128/138;ID=ea7c;UV=0030;BAT=OK;
20;F9;SelectPlus;ID=1bb4;SWITCH=01;CMD=ON;CHIME=01 20;FC;Plieger York;ID=dd01;SWITCH=01;CMD=ON;CHIME=02;
20;47;Byron SX;ID=a66a;SWITCH=01;CMD=ON;CHIME=09;
20;12;Pir;ID=aa66;SWITCH=01;CMD=ON; 20;63;SmokeAlert;ID=123456;SWITCH=01;CMD=ON;SMOKEALERT=ON;
20;06;Kaku;ID=41;SWITCH=1;CMD=ON;
20;0C;Kaku;ID=41;SWITCH=2;CMD=OFF;
20;0D;Kaku;ID=41;SWITCH=2;CMD=ON;
20;46;Kaku;ID=44;SWITCH=4;CMD=OFF;
20;E0;NewKaku;ID=cac142;SWITCH=1;CMD=ALLOFF;
20;3B;NewKaku;ID=cac142;SWITCH=3;CMD=OFF;
20;0B;NewKaku;ID=000005;SWITCH=2;CMD=ON;
20;0E;NewKaku;ID=000005;SWITCH=2;CMD=OFF;
20;12;NewKaku;ID=000002;SWITCH=2;CMD=OFF;
20;1E;NewKaku;ID=00000a;SWITCH=2;CMD=OFF;
20;1F;NewKaku;ID=00000a;SWITCH=2;CMD=ON;
20;01;NewKaku;ID=000007;SWITCH=2;CMD=OFF;
20;04;NewKaku;ID=000007;SWITCH=2;CMD=ON;
20;04;NewKaku;ID=000007;SWITCH=2;CMD=SET_LEVEL=14;
20;0C;HomeEasy;ID=7900b200;SWITCH=0b;CMD=ALLON;
20;AD;FA500;ID=0d00b900;SWITCH=0001;CMD=UNKOWN;
20;AE;FA500;ID=0a01;SWITCH=0a01;CMD=OFF;
20;03;Eurodomest;ID=03696b;SWITCH=00;CMD=OFF;
20;04;Eurodomest;ID=03696b;SWITCH=07;CMD=ALLOFF;
20;41;Conrad RSL2;ID=010002;SWITCH=03;CMD=ON;
20;47;Blyss;ID=ff98;SWITCH=A1;CMD=ON;
20;73;Kambrook;ID=010203;SWITCH=A1;CMD=OFF;
20;39;RTS;ID=1a602a;SWITCH=01;CMD=DOWN;
20;01;MiLightv1;ID=F746;SWITCH=00;RGBW=3c00;CMD=ON;

Note that for sensors that only report data values like temperature, windspeed etc., only the data value itself and the ID are needed for Home Automation programs.
Name labels are included for cosmetic purposes describing the detected protocol.


Instructing RFlink to send a command via RF:

For switches, the protocol name itself has to be stored in the Home Automation program and re-used on the transmission side.
When a remote control is used to control a device, RF data is received and translated and data like below will be send from the RFLink Gateway over USB:
20;3B;NewKaku;ID=cac142;SWITCH=3;CMD=OFF;
When the state of this switch needs to be changed the following command has to be send to RFLink:
10;NewKaku;0cac142;3;ON;
The name label (here "NewKaku") is used to tell the RFLink Gateway what protocol it has to use for the RF broadcast.

Packet structure - Instructing RFlink to send data via RF:

Data:
10;Protocol Name;device address,button number;action;
10;NewKaku;0cac142;3;ON;

Fields:
10                         => Node number 10 means from the master to the RFLink Gateway
;                             => field separator
NAME                  => Device/Protocol name, required to instruct RFLink what RF protocol to use
0cac142;               => contains the device ID
3;                          => contains the switch number (often a channel number)
ON;                      => contains the command (like ON/OFF/ALLON/ALLOFF/UP/DOWN/STOP/PAIR)


Sample data of transmitted RF packets:

10;Kaku;00004d;1;OFF; => Kaku/ARC protocol;address;action (ON/OFF)
10;AB400D;00004d;1;OFF; => Sartano protocol;address;action (ON/OFF)
10;Impuls;00004d;1;OFF; => Impuls protocol;address;action (ON/OFF)
10;NewKaku;00c142;1;ON; => Newkaku/AC protocol;address (24 bits);button number (hexadecimal 0x0-0x0f);action (ON/OFF/ALLON/ALLOFF/15 - 1 to 15 for direct dim level)
10;NewKaku;128ac4d;1;OFF; => Newkaku/AC protocol;address (28 bits);button number (hexadecimal 0x0-0x0f);action (ON/OFF/ALLON/ALLOFF/15 - 1 to 15 for direct dim level)
10;Eurodomest;123456;01;ON; => Eurodomest protocol;address;button number;action (ON/OFF/ALLON/ALLOFF)
10;Blyss;ff98;A1;OFF; => Blyss protocol;address;button;action (ON/OFF/ALLON/ALLOFF)
10;Conrad;ff0607;1;OFF; => Conrad RSL protocol, address, button number, action (ON/OFF/ALLON/ALLOFF)
10;Kambrook;050325;a1;ON; => Kambrook protocol, address, unit/button number, action (ON/OFF)
10;X10;000041;1;OFF; => X10 protocol;address;action (ON/OFF)
10;HomeConfort;01b523;D3;ON;=> HomeConfort protocol;address;action (ON/OFF)
10;FA500;001b523;D3;ON; => Flamingo protocol;address;action (ON/OFF)
10;Powerfix;000080;0;ON; => Powerfix/Quigg/Chacon protocol;address;action (ON/OFF)
10;Ikea Koppla;000080;0;ON; => Koppla protocol;address;action (ON/OFF)
10;HomeEasy;7900b100;3;ON; => Home Easy protocol;address;action (ON/OFF/ALLON/ALLOFF)
10;EV1527;000080;0;ON; => EV1527 protocol;address;device 0x00-0x0f,action (ON/OFF)
10;Chuango;000080;2;ON; => Chuango Protocol;address;action (ON/OFF/ALLON/ALLOFF)
10;Selectplus;001c33; => SelectPlus protocol;address
10;Byron;112233;01;OFF; => Dyron SX protocol;address;ringtone
10;DELTRONIC;001c33; => Deltronic protocol;address
10;BYRON;00009F;01;ON; => Byron protocol;address;chime number,command
10;FA20RF;67f570;1;ON; => Flamingo FA20RF / FA21 / KD101 protocol, address, button number, action (ON/OFF/ALLON/ALLOFF)
10;MERTIK;64;UP; => Mertik protocol, address, command
10;RTS;1a602a;0;ON; => RTS protocol, address, command (zero is unused for now)
10;RTS;1b602b;0123;PAIR; => Pairing for RTS rolling code: RTS protocol, address, rolling code number, PAIR command
10;RTS;1b602b;0123;0;PAIR; => Extended Pairing for RTS rolling code: RTS protocol, address, rolling code number, eeprom record number, PAIR command
10;MiLightv1;F746;00;3c00;ON; => Milight v1 protocol;address;button/unit number;color & brightness;command (ON/OFF/ALLON/ALLOFF/DISCO+/DISCO-/MODE0 - MODE8
10;MiLightv1;F746;01;34BC;PAIR; => Milight v1 protocol;address;button/unit number;color & brightness; PAIR command
10;MiLightv1;F746;01;34BC;UNPAIR; => Milight v1 protocol;address;button/unit number;color & brightness; UNPAIR command
10;MiLightv1;F746;01;34BC;BRIGHT; => Milight v1 protocol;address;button/unit number;color & brightness; Set brightness
10;MiLightv1;F746;01;34BC;COLOR; => Milight v1 protocol;address;button/unit number;color & brightness; Set color
10;UNITEC;7796;01;ON; => Unitec regular ON command
10;UNITEC;7796;01;PAIR; => Unitec pair command to pair RFLink as a remote to a power switch


Special Control Commands - Send:

10;REBOOT; => Reboot RFLink Gateway hardware
10;PING; => a "keep alive" function. Is replied with: 20;99;PONG;
10;VERSION; => Version and build indicator. Is replied with: 20;99;"RFLink Gateway software version";
10;RFDEBUG=ON; => ON/OFF to Enable/Disable showing of RF packets. Is replied with: 20;99;RFDEBUG="state";
10;RFUDEBUG=ON; => ON/OFF to Enable/Disable showing of undecoded RF packets. Is replied with: 20;99;RFUDEBUG="state";
10;QRFDEBUG=ON; => ON/OFF to Enable/Disable showing of undecoded RF packets. Is replied with: 20;99;QRFDEBUG="state";
QRFDEBUG is a faster version of RFUDEBUG but all pulse times are shown in hexadecimal and need to be multiplied by 30
10;TRISTATEINVERT; => Toggle Tristate ON/OFF inversion
10;RTSCLEAN; => Clean Rolling code table stored in internal EEPROM
10;RTSRECCLEAN=9 => Clean Rolling code record number (value from 0 - 15)
10;RTSSHOW; => Show Rolling code table stored in internal EEPROM (includes RTS settings)
10;RTSINVERT; => Toggle RTS ON/OFF inversion
10;RTSLONGTX; => Toggle RTS long transmit ON/OFF


Device creation using the Echo command (Node 11):

RFlink auto detects remote control signals and home automation software should create the device automatically.
However, sometimes the original remote control is not available anymore (broken/lost/etc.)
For this purpose Node 11 commands can be used from the home automation software.
The user can input a command as below:

11;20;0B;NewKaku;ID=000005;SWITCH=2;CMD=ON; => 11; is the required node info it can be followed by any custom data which will be echoed

RFlink will reply with
20;D3;OK; => Notifying that the command has been received
20;D4;NewKaku;ID=000005;SWITCH=2;CMD=ON; => sending the data "as if" a remote control button was pressed.

The home automation software can then process the received command as any other RFlink command.


More Information:

If you have any questions about the protocol or require assistance with implementing the protocol on home automation software
then just send a mail to frankzirrone@gmail.com

Support the project:

The RFLink Firmware development is a freeware project. This means you should not pay for the firmware.
We are not linked to any shops and do not have unlimited resources to buy sensors and devices.
You can support the project by sending in debug data for new sensors, send hardware or
make a donation so we can buy sensors you would like to see supported.