\section{Requirements} The following requirements are defined as global project goals and have been refined during the work on the project multiple times. \begin{itemize} \item The systems should be able to perform updates on the release of new software without administrative interaction. If a new version of the firmware is published, it should be prepared automatically for installation to the target devices. All these devices should then download and install the new software version and start using it subsequently, if no errors have occurred during the process. \item To ensure minimal maintenance effort, the update process should be insusceptible to errors as most as possible. Even if the installation of an update fails in the middle of reprogramming the controller, the system should continue to work fully functional immediately and after a reboot. \item Downloading the updated firmware should be done over the WiFi interface using the same network connection as used during normal operation. Fetching the firmware should be done side-by-side with other traffic produced during operation. \item Reducing network load and aiming for the maximum possible device uptime is critical. Therefore, the update process should only be done if a new version is available. In contrast, the release of a new update should be rolled out to all devices as fast as possible. While checking for available updates and downloading such an update, the device should continue to work as usual. \item For easy maintenance and monitoring, each device should provide detailed information about the currently installed firmware version and other details relevant for the update process. \item Devices are categorized by types. Each device type runs the same software and therefore provides the same functionality. % What about the following sentence? "As ... something". Reads like something is missing, maybe a commata and then the next sentence? As the device type is hardly coupled to the hardware. It is provided through a global constant at compile time and it must never be changed during operation. Updates must ensure that the correct firmware according to the device type is used while reprogramming. \end{itemize}