Uplift Desk Automation
Message Syntax
Transmit
A transmitted message has the following syntax.
0xF1, 0xF1, <cmd>, 0x00, <crc>, 0x7E
0xF1, 0xF1
indicates the message startcmd
is one of:0x01
- Up0x02
- Down0x03
- Save preset 10x04
- Save preset 20x05
- Recall preset 10x06
- Recall preset 20x07
- Sync0x25
- Save preset 30x26
- Save preset 40x27
- Recall preset 30x28
- Recall preset 40x2B
- Stop
crc
is the sum of the bytes at index 2 and 3.0x7E
indicates the end of message.
Receive
A received message has the following syntax.
0xF2, 0xF2, <cmd>, <len>, <data...>, 0x0F, <crc>, 0x7E
0xF2, 0xF2
indicates the message startcmd
is one of:0x01
- Height value0x25
- Preset 1 height0x26
- Preset 2 height0x27
- Preset 3 height0x28
- Preset 4 height
len
indicates how many messages will be sent next, excluding the CRC and EOT.data
will contain the incoming data values, explained for height readings below.0x0F
- Unknowncrc
will be the sum of bytes at index 2 up to the CRC.0x7E
indicates the end of message.
Example: Received Height Reading
When a new height value comes in, the message will look something like this:
0xF2, 0xF2, 0x01, 0x03, 0x01, 0x1B, 0x0F, 0x2F, 0x7E
In this case, the desk was at 28.3". Here is how we can calculate that.
- First off, the command is
0x01
, so we know we're about to receive height data. - The next byte tells us to listen for 3 data bytes.
- The relevant data comes in as
0x01, 0x1B
. This will be converted to a height value later. (Unclear what0x2F
does here) - Then, we add all of the previous bytes (other than the header) to verify the CRC is correct.
0x01 + 0x03 + 0x01 + 0x1B + 0x0F = 0x2F
- The actual height is a two-byte word, so the first number needs to be bitshifted. In this example, we received
0x01, 0x1B
, so the height calculation looks like:0x01 << 8 | 0x1B = 283
. - Divide the received value by 10 to convert to inches. The result is
283 / 10.0 = 28.3in
.
Sync Response
Height | data[4] |
data[5] |
---|---|---|
25.3 | 20 | 8 |
25.3 | 20 | 11 |
25.3 | 20 | 54 |
28.3 | 25 | 62 |
28.3 | 25 | 67 |
28.3 | 25 | 82 |
38.? | 42 | 207 |
39.9 | 45 | 153 |
39.9 | 45 | 156 |
40.0 | 45 | 168 |
42.4 | 50 | 7 |
42.8 | 50 | 188 |
42.9 | 50 | 231 |
43.0 | 51 | 8 |
43.1 | 51 | 27 |
43.2 | 51 | 104 |
50.8 | 64 | 161 |
References
Hardware
- "2ANKDJCP35NBLT Bluetooth Box by ZHEJIANG JIECANG LINEAR MOTION TECHNOLOGY CO., LTD". (2018, January 25). FCC ID. Retrieved January 19, 2021.
- Jiecang Bluetooth Dongle Product Listing. Retrieved January 19, 2021.
Images from /u/deadman96385
- https://imgur.com/a/MUbXwnM
- https://i.imgur.com/DyMf3Ee.jpg
- https://i.imgur.com/KtsWpVQ.jpg
- https://i.imgur.com/BS62C1E.jpg
- https://i.imgur.com/woWoQMe.jpg
- https://i.imgur.com/Lta5Nab.jpg
Software
- Justintout. (2020, April 16). GitHub - "justintout/uplift-reconnect: A Flutter app to control Uplift desks with Uplift Connect BLE modules installed". GitHub. Retrieved January 19, 2021.
- Deadman96385. (2020, March 6). "uplift_desk_controller_app/BluetoothHandler.java at a58bcadfb77ac993751758465f1cf20f71d6d8fd ยท deadman96385/uplift_desk_controller_app". GitHub. Retrieved January 23, 2021.
- Phord. (2021, August 12). "phord/Jarvis: Hacking the Jarvis standup desk from fully.com for home automation using an ESP8266 arduino interface". GitHub. Retrieved December 5, 2021.
- Ramot, Y. (2015, February 4). "UpLift Desk wifi link". Hackaday.io.
- Horacek, L. (2019, April 14). "Standing desk remote control". Hackaday.io.
- Hunleth, F. (2019, January 18). "Nerves At Home: Controlling a Desk". Embedded Elixir. Retrieved January 2021.