Difference between revisions of "Door control system"

From London Hackspace Wiki
Jump to: navigation, search
(update this a bit)
Line 45: Line 45:
The software runs on [[wilkes]] and [[perlman]], and its code is on [http://github.com/londonhackspace/doorbot Github].  Both are currently Raspberry Pis.
The software runs on [[Equipment/Wilkes]] and [[perlman]], and its code is on [http://github.com/londonhackspace/doorbot Github].  Both are currently Raspberry Pis.
All the logs go over the network to /var/log/network/ on [[boole]].
All the logs go over the network to /var/log/network/ on [[boole]].

Revision as of 13:17, 30 March 2014


The major difference between a thing that might go wrong and a thing that cannot possibly go wrong is that when a thing that cannot possibly go wrong goes wrong it usually turns out to be impossible to get at or repair.
- Douglas Adams, 'Mostly Harmless'


Front doorbot

Equipment/Wilkes, is on the red lobby interior door into the main space (NOT the roller shutter or the glass door inside the lobby). We have a Tikitag RFID reader, embedded in the panel by the door, which we use to read member cards and then trigger the Asec something-or-other electric strike plate that opens the lock. Control of the strike plate is done by a USB relay, since the Arduino died. The doorbell currently is connected to an AC psu so the bell rings, but button pushes are not detected by the rpi.

<graphviz border='frame' format='png' >

digraph rfboard{
  node [style=rounded];
  x86 [label="RPi",shape=box];
  rfid [label="RFID reader",shape=box];
  psu [label="12V AC PSU",shape=box];
  psu2 [label="Powered USB Hub",shape=box];
  relay [label="KMTronic Relay",shape=box];
  release [label="Release",shape=box];
  subgraph cluster_0 {
               relay -> release;

label = "Door control"; }

  psu -> relay;
  psu2 -> x86;
  x86 -> relay;
  rfid -> x86;



Back Doorbot

Perlman is in a wooden box on the inside of the back door. We use a Tikitag RFID reader, in a black project box mounted on the wall outside the space by the backdoor. We use a KMtronic usb relay board to trigger the Cisa 11610 lock to open the door when authenticated.

The backdoor has no speaker(s) or buzzers, doorbell, or indicator led's.


The software runs on Equipment/Wilkes and perlman, and its code is on Github. Both are currently Raspberry Pis.

All the logs go over the network to /var/log/network/ on boole.

The access list is JSON file. The machines have cron set up to download the card database every minute from Turing (the machine that runs the website).

The door opener broadcasts on the network whenever the door is opened by a member using their card , or if the front doorbell is pushed. The back door broadcasts on 50000, and the front uses 50002, so we can tell the difference between them in the various listeners. This is a stop-gap until we add the door ID to the messages.

Doorbot listener scripts

There are listeners on Babbage that connect to robonaut to announce on IRC, and flash the lights using Lighted. By default, this will include your full real name. If you wish to change this behaviour, you can set up a nickname in the cards section of the member area.

hamming also runs listeners for the scrolling led board and the audio announcements.

The announcement listener uses the GLaDOS voice. You can generate and use your own file as a greeting.

The code that runs the bandwidth meter on tesla also listens for doorbell and member entry messages.

Adding a card

Access is based on the RFID UID - it is not the number written on the back of your Oyster card. There are three ways to add a card:

  1. Run the "Add card to Doorbot" script on Tesla and follow the instructions (basically, swipe your card and then enter your hackspace website login details).
  2. If you have a card reader get the code at Github and run addcard.sh. If you have another reader that can give you the UID, log in to the website and add it at the secret page. Note that doorbot is case sensitive; enter the (hex encoded) ID using upper case letters only.
  3. If you have an Android phone that supports NFC List of NFC-enabled mobile devices you can use this App (More details). Do remember to activate NFC connections on Config>wireless and network connections. Also, remember the app works with LHS membership Usernames and Passwords, not TFL's. and not the logins to this wiki... - Broken by new website changes, will differ fixing it until we get an API (and i get a new laptop) -- Jasper

Glados Voice

Glados audio files are stored on Babbage at /home/glados/wavefiles/members. Set your wave file (in wav or mp3 format) on the members site. Generate your own from text using Tom's script at http://niceface.dyndns.org/glados/ (down temporarily)

Old guide

There is a guide on Youtube that I've made to show the process as its hard to describe in text: http://www.youtube.com/watch?v=OE8S9knXcW0

The Glados voices were generated by oni following the method found by Tom Wyatt. To create a glados voice one must do the following:

  • Go to ATandT's Text to Speech page. Type in your name and download the file
  • Load up the program Melodyne
  • Select the entire Waveform
  • Using the melodic algorithm, double click on one section of the waveform. I believe this moves the form to its nearest notes.
  • Using the zig Zag looking tool, flatten the pitch.
  • Up the pitch by dragging upwards by 160 or so.
  • Save

Tom and I have looked for a vocoder or similar in Audacity that will do this for you. I'll make a video of this and stick it on YouTube at some point. Believe it or not, it is faster than the website as this is exactly what that website in the links is doing.

I'll see about implementing the processing algorithm in ChucK so it can be a command-line operation the next time I'm prototyping some FFT analysis stuff with it. -- Anthony

Managing Doorbots

Logging & maintenance

If you make changes or discover a problem with doorbot, please add it to the logbook.

  • Issues are tracked on Github
  • The main script is rundoorbot, which announces to irccat on Babbage if the python script dies.
  • The python script (doorbot.py) announces on successful initialisation.

Note that killing the python script will be announced and emailed by Monit. To start or stop doorbot, use:

/etc/init.d/doorbot start
/etc/init.d/doorbot stop

On babbage, the listeners are at /usr/local/bin/Doorbot/listeners

sudo service doorbot-listeners restart