Open-source project
tjhorner/upsy-desky avatar
tjhorner/upsy-desky

Upsy Desky: putting a motorized standing desk on a home automation bus

Make your standing desk smarter

839 stars57 forksShellNOASSERTION

At a glance

What is it?
An open hardware device that reads and sets the height of a motorized standing desk so automations can move it. The repository ships the PCB, the enclosure and the ESPHome firmware.
Who is it for?
Upsy Desky suits a maker who already owns a motorized desk with an RJ45 keypad port and wants the height exposed to Home Assistant or ESPHome automations, and it suits someone willing to solder a board that others can also build from the KiCad files. It does not suit a buyer who wants a finished, certified appliance or a company that needs a commercial design licence, since the PCB and enclosure are published under CC BY-NC-SA 4.0.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository last received commits 67 days ago.
What is it written in?
Mainly Shell, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 25, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A controller that talks to the desk instead of the keypad

A motorized standing desk normally answers to a small keypad wired to the control box under the desk. Upsy Desky sits in that chain and does something different: it lets the desk join a home automation system. The device can read the current height of the desk and set it, which is the whole feature list, and that single capability is enough to write automations around. The README sketches several: raise the desk to standing height after you have been sitting too long, lift it to maximum when you leave home so the cat cannot knock things over, keep a separate preset per person in the household, or send the height data to InfluxDB so you can analyse how long you sit versus stand. The desk becomes a device with state rather than a button press.

Why it is a device and not a firmware hack on the desk

This project is the successor to an earlier WiFi Standing Desk Controller, and the changelog in the README is a hardware revision list rather than a feature list. The D1 Mini microcontroller was replaced with an ESP32-WROOM module, which the author credits with hardware UART for a more reliable connection to the desk. The enclosure was redesigned with a more snug fit and a screw-mounted PCB, so the board can be removed and put back without tools tricks. A USB-C port was added for flashing. The earlier version had two failure modes the author wanted gone, namely the desk sometimes lowering on startup and sometimes not powering at all without a hacky workaround. So the design treats the connection to the desk as the reliability problem, not the software.

Firmware you configure at runtime instead of recompiling

The most useful change from the original device is described in one line: runtime firmware configuration, with no more manual flashing or compiling ESPHome to change things. Stock ESPHome builds work, but you no longer need a toolchain and a USB cable every time you want to adjust a setting. The firmware directory holds ESPHome configuration files for the stock firmware, and the repository also ships test-firmware and reversing-firmware directories alongside a tools directory, which shows the firmware work goes beyond a single stock configuration. This is the part that decides whether the device is a weekend project or a weekend project that recurs, since a desk controller that needs recompiling for every height change would be abandoned quickly.

Three directories, three licences, one device you can rebuild

The repository is laid out so that somebody can make the device from scratch rather than only buy one. At the root there is a pcb directory with KiCad schematic and PCB design files, an enclosure directory with Fusion 360 design files and STLs, and the firmware directory with the ESPHome configuration. The README also notes that the author would like to see changes people make to the design and firmware, so modification is a stated goal rather than a tolerated side effect. A separate homepage documents the device for buyers, with a getting started page and a compatibility reference, and the device itself is offered as a Tindie product for anyone who would rather not assemble one.

RJ45 is the compatibility guess, and only some boxes are verified

Compatibility is where the README is most careful. The statement is that any standing desk which uses RJ45 to connect to the keypad is likely compatible, while a linked list of control boxes is verified to be compatible. Those are different levels of confidence and a buyer should treat them that way. RJ45 is the connector the keypad uses to talk to the control box, and the desk protocol is not documented here, so the odds that a given control box reacts to the same commands are not guaranteed by the connector alone. The verified list is the part to check first. If your desk is not on it, the project can still work, but you are relying on the author having generalized from the boxes already tried.

MIT for the firmware, CC BY-NC-SA 4.0 for the hardware

The licensing is split by artifact, and the split matters for what you can do with each. The ESPHome configs are MIT, so the firmware can be used, changed and redistributed with only attribution. The enclosure and PCB design files are CC BY-NC-SA 4.0, which permits reuse and modification with attribution, requires share alike distribution of derivatives, and carries the non-commercial element. The README states that the appropriate licence files sit in the root of the repository, and the root listing confirms two of them, LICENSE-MIT and LICENSE-CC, next to a top level LICENSE file. For anyone planning to sell a product built from these files, that non-commercial clause is the line to read carefully before anything else.

Editorial conclusion

Upsy Desky suits a maker who already owns a motorized desk with an RJ45 keypad port and wants the height exposed to Home Assistant or ESPHome automations, and it suits someone willing to solder a board that others can also build from the KiCad files. It does not suit a buyer who wants a finished, certified appliance or a company that needs a commercial design licence, since the PCB and enclosure are published under CC BY-NC-SA 4.0. Before buying, check that your desk's control box appears in the verified compatibility list rather than relying on the RJ45 guess.

Frequently asked questions

What standing desks are compatible with Upsy Desky?

Any standing desk that uses RJ45 to connect to the keypad is likely compatible, and a linked list of control boxes is verified to be compatible. Check the verified list first.

What can Upsy Desky do with my desk?

It connects a motorized standing desk to a home automation system. It can read the desk's current height and set it, which is what makes height based automations possible.

Can I build a Upsy Desky myself instead of buying one?

Yes. The repository contains KiCad schematic and PCB design files under pcb, Fusion 360 design files and STLs under enclosure, and ESPHome configuration files under firmware.

Do I have to recompile ESPHome to change the Upsy Desky settings?

No. The stock firmware supports runtime configuration, so there is no need to manually flash or compile ESPHome to change settings.

What licence applies to the Upsy Desky firmware and PCB design?

The ESPHome configuration files are licensed under MIT, while the enclosure and PCB design files are licensed under CC BY-NC-SA 4.0. The licence files are in the root of the repository.

Official sources

  1. Issues
  2. Project website
  3. README
  4. Releases
  5. tjhorner/upsy-desky on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/tjhorner-upsy-desky.svg)](https://hysenlabs.com/projects/tjhorner-upsy-desky)

Was this useful?