LightwaveRF RF Protocol

The LightwaveRF RF protocol operates over 433.92MHz using on-off keying (OOK).

Data

The data consists of 5 bytes / 10 nibbles. They are as follows:

  • Nibbles 1 and 2: a parameter for the commands. This might be the dim level or various other things
  • Nibble 3: ""subunit"" - some remotes support individually controlling up to 16 devices. A nibble can have 16 values. Coincidence? ;)
  • Nibble 4: ""command"" - the command, e.g. OFF, ON, SET_LEVEL.
  • Nibbles 5-10: ""ID" the identifier of the remote, used with the subunit in pairing

Payload encoding

Each nibble of data is encoded as one of 16 bytes, from the table below:

Nibble value Byte bits Byte hex
0x0 1111 0110 0xF6
0x1 1110 1110 0xEE
0x2 1110 1101 0xED
0x3 1110 1011 0xEB
0x4 1101 1110 0xDE
0x5 1101 1101 0xDD
0x6 1101 1011 0xDB
0x7 1011 1110 0xBE
0x8 1011 1101 0xBD
0x9 1011 1011 0xBB
0xA 1011 0111 0xB7
0xB 0111 1110 0x7E
0xC 0111 1101 0x7D
0xD 0111 1011 0x7B
0xE 0111 0111 0x77
0xF 0110 1111 0x6F

The payload is constructed from these nibbles in the following way:

payload = "1"
for each nibble
  payload += "1"
  payload += lookup[nibble]
payload += "1"

E.g. to send the ON command (0x1) with no parameter (0x00) from remote 0xFEFEFE subunit 0xF, we'd have the following nibbles:

Parameter Subunit Command ID
Nibbles 0x0 0x0 0xF 0x1 0xF 0xE 0xF 0xE 0xF 0xE
Encoded 1111 0110 1111 0110 0110 1111 1110 1110 0110 1111 0111 0111 0110 1111 0111 0111 0110 1111 0111 0111

Thus producing:

1  1  1111 0110  1  1111 0110  1  0110 1111  1  1110 1110  1  0110 1111  
   1  0111 0111  1  0110 1111  1  0111 0111  1  0110 1111  1  0111 0111  1

RF signal

The RF signal is generated from this in the following way:

for each bit, index in payload when bit is 1
  send high for 250μs
  if payload[index+1] is 0
    send low for 1250μs
  else
    send low for 250μs

In other words the sequence "10" is encoded as a 250μs high followed by a 1250μs low, whereas the sequence "1" is sent as a 250μs high followed by a 250μs low. Note: the encoding never allows for two zero bits to touch.

Commands

Observed from (siemens JSJSLW100LBK) remote

CommandHex parametermeaning
ONx00On (to last level)
xBFincrease brightness
OFFx00Turn off (sometimes followed by x40)
xA0decrease brightness
xC0All off, sent with subunit D4
MOODx82set lights to mood (mood #2?)
x02Set current level to mood memory (mood #2 ?)

Observed behaviour

CommandHex parametermeaning
ONx00 - x3FOn (to last level)
x40 - x5F
x60 - x7F
x80 - x9F
set specific level (out of 32 levels)
xA0 - xBFincrease brightness
xC0 - xDF
xE0 - xEF
set all to specific level (out of 32 levels)
OFFx00 - x7FTurn off
x80 - X9Fset specific level (out of 32 levels) if already on
xA0 - xBFdecrease brightness
xC0 - xEFall off
This article is issued from Old-wiki. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.