- control router publishes mqtt messages
- files router files saved via sheep
- upload router for python & zip upload
- fully centralised configuration
- common config and argument parsing
- structured subscriptions
- structured publications
- unsubscribing?
- handles events from gpio (start button), impl. further testing
- handles events from mqtt
- sets up hopper for usercode (log + start)
- copies initial image to tmp
- hardware reset, probably via external scripting?
- usercode setup and management
- sending start info to usercode via hopper
- internal usercode state tracking
- dump initial image into hopper
- handle incoming connections as subscriptions to mqtt topics
- handle removal of websocket connections
- hopper for usercode logs and camera
- usercode log and camera message buffering
- send buffered logs to new websocket clients
- send buffered images to new clients