This repository contains the source code, firmware, and hardware-related software for Standtroller, an autonomous standing desk controller that enables retrofitting existing standing desks with occupancy-aware automation, personal informatics, and remote configuration capabilities.
If you use this software in your research, please cite:
Luke Haliburton, Teodora Mitrevska, Johannes Kleine, and Sven Mayer. 2026. Standtroller: The Autonomous Standing Desk Controller. In Proceedings of Mensch und Computer 2026 (MuC '26).
Standtroller extends existing electric standing desks with:
- Autonomous desk transitions based on user presence
- Privacy-preserving occupancy detection using mmWave sensing
- Remote desk control via a desktop dashboard
- Personal informatics for standing and sitting behavior
- Customizable desk movement rules
- Near real-time communication between desk, dashboard, and server
The system consists of four major components:
- Control Unit running on a Raspberry Pi Zero W
- Desktop Dashboard built with Electron
- REST API for data access and configuration
- Socket Server for real-time communication
.
├── electron/ Desktop dashboard application
├── frontend/ Web-based dashboard for distribution
├── pi_zero/ Raspberry Pi firmware
├── rest-api/ REST API backend
├── socket-server/ WebSocket communication server
└── README.md
The control unit was developed using:
-
Raspberry Pi Zero W
-
HLK-LD2410 mmWave presence sensor
-
Custom PCB with:
- 4N28 optocouplers
- 1.2 kΩ resistors
- RJ45 connectors
-
Compatible electric standing desk using an 8P8C keypad connection
The PCB design was created using Autodesk Eagle.
- Node.js
- npm
- PostgreSQL
- Electron
- Node.js
- Raspberry Pi OS
- Python
- Socket.IO client
Install PostgreSQL and create a database for Standtroller.
Configure the database connection in the REST API and socket server configuration files.
cd rest-api
npm install
npm startcd socket-server
npm install
npm startcd electron
# For windows
$ npm run build:win
# For macOS
$ npm run build:mac
# For Linux
$ npm run build:linuxDeploy the contents of pi_zero/ to a Raspberry Pi Zero W.
Configure:
- Wi-Fi credentials
- User identifier
- Server address
After configuration, start the firmware:
python main.pyThe dashboard communicates with both the REST API and the Socket Server.
The control unit communicates exclusively through the Socket Server and publishes:
- Desk height
- Presence information
- Device status
The server stores all information in PostgreSQL and evaluates desk movement rules periodically.
The server evaluates desk movement decisions approximately every 20 seconds.
Desk movements are triggered based on:
- User presence
- Sitting duration
- Standing duration
- Daily standing goals
- User-defined movement schedules
- User preferences
Desk transitions are generally only performed while the user is absent.
This repository contains the research prototype used in the publication. It was developed for research purposes and is provided as-is.
The implementation was evaluated in a real-world deployment study with office workers to investigate autonomous standing desk behavior and user perceptions of desk automation.