This repository has been archived by the owner on Dec 11, 2023. It is now read-only.
/
README
94 lines (75 loc) · 3.57 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
batshitlights: A project to create Batshit xmas lights for Noisebridge
The contents of this directory are expected to be checked out to user lights's
home directory, in /home/lights/batshitlights. A quick rundown of the
important files:
/home/lights/batshitlights/server/filelooop.py
This is the script that runs forever, and does the Actual
Work of switching the lights on and off. It reads the file
/home/lights/batshitlights/sequences/active, which defines
the light sequence, and then uses the RelayControl class to
communicate with the external relay bank.
/home/lights/batshitlights/sequences/active
The file read by filelooop.py that defines the light
sequence currently active. The first line of this file
defines how long (in milliseconds) we should sleep before
advancing to the next state. The rest of the file is a
list of states to iterate through. For example:
1000
10000000
01000000
00100000
00010000
00001000
00000100
00000010
00000001
We sleep for 1 second (1000 milliseconds) between states.
In the first state, the first light is on, and the rest
are off. In the second state, the second light is on, and
the rest are off. In the third state, the third light is
on, and the rest are off. etc.
(There's code in place in filelooop.py to also support
state lines in the syntax of "<state> <delay>", to sleep
for an amount of time different than the "global delay",
but I haven't actually tested this behavior yet.)
/home/lights/batshitlights/sequences/*.seq
A list of pre-programed sequences.
/home/lights/batshitlights/server/webserver.py
A full webserver/framework implementation, currently
configured to listen on port 8080. When you request "/",
it returns a list of hyperlinks to each of the *.seq files
in lights's home directory. If you click on one of those
links, it copies the contents from the *.seq file to
/home/lights/batshitlights/sequences/active, so filelooop.py
will start processing it instead of whatever it was previously
processing.
/home/lights/batshitlights/set.html
When you use webserver.py to request a *.seq file, it
returns the contents of /home/lights/batshitlights/set.html
to the browser. Right now, this file contains just
"<h1>Thanks!</h1>". We should make it look pretty, and
probably also have a meta refresh to redirect the user
back to / (the directory listing) after a few seconds,
or something.
If we want to get fancy, we should also look into using
one of the python templating libraries, so we can have a
static index.html page independent of the code, and then
make that index.html file look pretty, too. We just need
to find out how to interpolate a list of files to display
in he the directory listing.
/home/lights/batshitlights/service/fileloop/
/home/lights/batshitlights/service/webserver/
Each of these directories should be symlinked from
/etc/service, so daemontools can find them. They're
responsible for starting (and restarting when necessary)
the fileloop.py and webserver.py processes. Those
directories are also configured to have daemontools log
via multilog to /var/log/fileloop, and /var/log/webserver.
/home/lights/batshitlights/rc.local
The contents of this file should be copied to /etc/rc.local,
to be executed on boot. Because Ubuntu is apparently using
some new fangled init system (really, guys?), the
daemontools-run package is broken, so we need to kick off
daemontools by hand. This is also responsible for running
iptables to redirect port 80 to 8080, and for chmoding access
to /dev/ttyS0.