An API for the RebelliousDevices project, by Graham Booth and Jonas Hummel