Hackerspace Nijmegen joins in a worldwide collaboration between hackerspaces to publish their Space State, i.e. whether they are open or not, in a standardized format.
The URL where we publish the Hackerspace Nijmegen Spacestate is https://hackerspacenijmegen.nl/state/state.json.
The Spacestate Switch was never documented, so this is an attempt to reverse engineer it. The physical device above was donated by SA007 (I think), and the controller was developed by Themba. I don't know whether there are still any copies of the source code.
The controller is powered by an Arduino Nano, which measures whether the huge switch is turned off or on, and communicates it to the LED controllers and via USB serial to the barcomputer (barometer) by sending "OPEN\n" or "CLOSED\n".
Originally the Arduino Nano was powered by its USB connection, but it's connected via a very long USB cable and the range extenders are iffy, so it receives only ~3.8V over USB. Therefore, the Arduino is now powered from the LED board (~10V) through its Vin port, where a linear regulator transforms it to 5V (or it should, but it actually seems to produce 6V for some reason).
The state of the switch is measured by pulling the bottom to ground (green wire in the image to the right), and then measuring the voltage at the top using the D5 pin with an internal pull-up (yellow wire). This will be ground when the space is OPEN (the two sides connect), and internal pull-up when the space is CLOSED.
The LED board is powered by a 14V adapter (should be 12V but we didn't have any lying around), +12V (brown) to the 'P' pin of the LED board, and GND (blue) to the 'G' pin. They are connected to the 'in' array of pins, and then the 'out' array of the first LED board connects to the 'in' array of the second LED board.
Then, the Arduino's D2/D4/D5 pins are connected to the first LED board (then through the shift register and onwards to the second LED board) and control the LEDs in such a way that they switch colors using some nice animation when the state changes.
The bar computer (barometer) runs a `screen` session running `scripts/serial2irc.py` which is online as an IRC bot, and listens to the serial port. When it receives "OPEN\n" or "CLOSED\n", it prints the relevant message as a NOTICE to the IRC channel. Also, it calls the shell script which publishes to the website.
The shell script produces the JSON from its arguments and uploads it to the website. The last JSON uploaded is available at `scripts/state.json`.