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
| Command | Hex parameter | meaning |
|---|---|---|
| ON | x00 | On (to last level) |
| xBF | increase brightness | |
| OFF | x00 | Turn off (sometimes followed by x40) |
| xA0 | decrease brightness | |
| xC0 | All off, sent with subunit D4 | |
| MOOD | x82 | set lights to mood (mood #2?) |
| x02 | Set current level to mood memory (mood #2 ?) |
Observed behaviour
| Command | Hex parameter | meaning |
|---|---|---|
| ON | x00 - x3F | On (to last level) |
| x40 - x5F x60 - x7F x80 - x9F | set specific level (out of 32 levels) | |
| xA0 - xBF | increase brightness | |
| xC0 - xDF xE0 - xEF | set all to specific level (out of 32 levels) | |
| OFF | x00 - x7F | Turn off |
| x80 - X9F | set specific level (out of 32 levels) if already on | |
| xA0 - xBF | decrease brightness | |
| xC0 - xEF | all 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.