Appendix 1: Overview of the software system architecture
The physical portion of the installation was controlled by code in the Arduino, which periodically sent out status messages to the serial port. Since serial communication is nonblocking on the Arduino, the two, combined, can function as a standalone installation if we do not need the messages to be decoded through a website.
In order for the decoding to happen, the glue code on the laptop relayed these status messages to the web backend using a simple text-based protocol. To avoid excessive network traffic, the set of status messages was pre-filtered.
At the web backend the status messages were interpreted to determine the current state of the window blinds, and the sequence of such states was decoded, if possible, into its original unencoded form. Both of these were saved to a JSON-encoded text file which served as a shared message store between the front- and backend.