You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
1.8 KiB
85 lines
1.8 KiB
# Protospace lockout card updater |
|
|
|
Runs on the door controller and updates the auth server with member cards. |
|
|
|
## Setup |
|
|
|
### Cloning |
|
|
|
Clone to user `pi`'s home directory. If you'd like to place it elsewhere, adjust the supervisor config below. |
|
|
|
``` |
|
$ cd |
|
$ git clone https://gogs.tannercollin.com/tanner/pslockout |
|
``` |
|
|
|
### Python |
|
|
|
``` |
|
$ sudo apt install python3 python3-pip python3-virtualenv # for Debian |
|
$ cd ~pi/pslockout/doorcontrol |
|
$ virtualenv -p python3 env |
|
$ . env/bin/activate |
|
(env) $ pip install -r requirements.txt |
|
(env) $ deactivate |
|
``` |
|
|
|
### Supervisor |
|
|
|
Supervisor is used to keep the script always running. |
|
|
|
``` |
|
$ sudo apt install supervisor |
|
``` |
|
|
|
Create a file named /etc/supervisor/conf.d/pushcards.conf and add: |
|
|
|
``` |
|
[program:pushcards] |
|
user=pi |
|
directory=/home/pi/pslockout/doorcontrol |
|
command=/bin/bash -c 'source env/bin/activate && python pushcards.py' |
|
autostart=true |
|
autorestart=true |
|
stderr_logfile=/var/log/pushcards.log |
|
stderr_logfile_maxbytes=1MB |
|
stdout_logfile=/var/log/pushcards.log |
|
stdout_logfile_maxbytes=1MB |
|
``` |
|
|
|
### settings.json |
|
|
|
Copy the example and insert a lockout admin's auth token: |
|
|
|
``` |
|
$ cd ~pi/pslockout/doorcontrol |
|
$ cp settings.json.example settings.json |
|
$ vim settings.json |
|
``` |
|
|
|
You can find your auth token by requesting it with `curl`: |
|
|
|
``` |
|
$ curl -d username=tanner.collin -d password=supersecret http://tools-auth.protospace.ca/login/ |
|
|
|
{ |
|
"token": "9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b" |
|
} |
|
``` |
|
|
|
### Launch |
|
|
|
Reload supervisor to start pushcards: |
|
|
|
``` |
|
$ sudo supervisorctl reread |
|
$ sudo supervisorctl update |
|
``` |
|
|
|
## Theory of Operation |
|
|
|
Every ten seconds the script checks to see if the card database has changed. |
|
|
|
If it was modified, it reads the card numbers into a Python object. |
|
|
|
It then sends the object (modified or not) to the auth server which updates the cards for any users found in the system.
|
|
|