Editing Holiday lights

Jump to navigation Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.

Latest revision Your text
Line 1: Line 1:
We put up some holiday lights in the Mission Street windows. (We call them Holiday Lights both as a gesture of ecumenical goodwill and to annoy the "War on Christmas" wingnuts.)


Naturally, you can control them on the web using the bare-bones interface at URL: http://lights.noisebridge.net/
We put up some holiday lights in the Mission Street windows. (We call them Holiday Lights both as an ecumenical gesture of goodwill as well as to annoy the "War on Christmas" wingnuts.)


This is served by a pure Python webserver running on a Fit-PC Ubuntu micro-PC. Lights are switched with a 8-channel serial-controlled relay board.
Naturally, you can control them on the web using the bare-bones interface at URL: http://lights.netisland.net:8080/
Each of the four windows has two strings of LEDs, white and colored. Facing Mission St, the  white LEDs on the leftmost window are on channel 0, the colored ones on channel 1. The next window over has white on channel 2 and so forth.


You can find the code in [http://github.com/jbm9/batshitlights github]
This is served by a pure Python webserver running on a Fit-PC Ubuntu micro-PC.  


Basic info:
Basic info:
<nowiki>
/home/lights/server/filelooop.py


  /home/lights/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/sequence, which defines the light
sequence, and then uses the RelayControl class to
communicate with the external relay bank.


This is the script that runs forever, and does the Actual
/home/lights/sequence
Work of switching the lights on and off.  It reads the
file /home/lights/sequence, which defines the light
sequence, and then uses the RelayControl class to
communicate with the external relay bank.


  /home/lights/sequence
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:


The text file read by filelooop.py that defines the light
1000
sequence currently active.  The first line of this file
10000000
defines how long (in milliseconds) we wait before
01000000
advancing to the next state.  The rest of the file is a
00100000
list of states to iterate through.  For example:
00010000
00001000
00000100
00000010
00000001


1000
We sleep for 1 second (1000 milliseconds) between states.
10000000
In the first state, the first light is on, and the rest
01000000
are off. In the second state, the second light is on, and
00100000
the rest are off. In the third state, the third light is
00010000
on, and the rest are off. etc.
00001000
  00000100
  00000010
  00000001


We sleep for 1 second (1000 milliseconds) between states.
(There's code in place in filelooop.py to also support
Each line of 8 digits controls the relays, one char per channel.  
state lines in the syntax of "<state> <delay>", to sleep
In the first state, the first light is on, and the rest
for an amount of time different than the "global delay",
are off.  In the second state, the second light is on, and
but I haven't actually tested this behavior yet.)
the rest are off.  In the third state, the third light is
on, and the rest are off.  etc.


/home/lights/*.seq
/home/lights/*.seq


A list of pre-programed sequences.
A list of pre-programed sequences.


/home/lights/server/webserver.py
/home/lights/server/webserver.py


A full webserver/framework implementation, currently
A full webserver/framework implementation, currently
configured to listen on port 8080.  When you request "/",
configured to listen on port 8080.  When you request "/",
it returns a list of hyperlinks to each of the *.seq files
it returns a list of hyperlinks to each of the *.seq files
in lights's home directory.  If you click on one of those
in lights's home directory.  If you click on one of those
links, it copies the contents from the *.seq file to
links, it copies the contents from the *.seq file to
/home/lights/sequence, so filelooop.py will start
/home/lights/sequence, so filelooop.py will start
processing it instead of whatever it was previously
processing it instead of whatever it was previously
processing.
processing.


/home/lights/set.html
/home/lights/set.html


When you use webserver.py to request a *.seq file, it
When you use webserver.py to request a *.seq file, it
<nowiki>"<h1>Thanks!</h1>"</nowiki>.  We should make it look pretty, and
returns the contents of /home/lights/set.html to the
probably also have a meta refresh to redirect the user
browser.  Right now, this file contains just
back to / (the directory listing) after a few seconds,
"<h1>Thanks!</h1>".  We should make it look pretty, and
or something.
probably also have a meta refresh to redirect the user
back to / (the directory listing) after a few seconds,
or something.


=Direct Line=
If we want to get fancy, we should also look into using
There's a really fun "direct line" into the control of the lights:
one of the python templating libraries, so we can have a
 
static index.html page independent of the code, and then
: http://lights.noisebridge.net/run_one?delay=1000&seq=0102040810204080
make that index.html file look pretty, too. We just need
: http://lights.noisebridge.net/run_one?delay=500&seq=B56F9BE6
to find out how to interpolate a list of files to display
: etc
in he the directory listing.
 
</nowiki>
Hint: hex works
 
A message...
 
: http://lights.noisebridge.net/run_one?delay=500&seq=22882288220802802088a2a82a8aa2a82a0a0200000080a0a82a8aa2a82a8aa2a82a0a0280a0a82a8aa2a82a0a028020882288a2a82a8aa2a82a8a228822080200000080a0a82a8a228822882288a2a82a0a02000000802088a2a82a0a02802088a2a82a8a2288220802802088a2a82a8a22882208020000008020882288a2a82a0a02802088a2a82a8a220802000000802088a2a82a8a228822080280208822080280a0a82a8aa2a82a8a2208028020882288228822080280a0a82a0a02000000802088a2a82a0a02802088a2a82a8a2208028020080200000080a0a82a8a2288228822080280200802802088a2a82a8a228822080280a0a82a8aa2a82a8aa2a82a0a0280a0a82a8a22080280a0a82a8aa2a82a8a22080200000080a0a82a0a0280a0a82a8aa2a82a8aa2a82a0a020000008020882288a2a82a0a02802088228822080280a0a82a8a2288a2a82a8a2288a2a82a8aa2a82a0a0200000080a0a82a8a228822882288a2a82a0a020000008020882288a2a82a0a02000000802088a2a82a0a02802088a2a82a8a2208028020080200000080a0a82a8aa2a82a8aa2a82a0a0280a0a82a8a22080200000080a0a82a0a028020882288228822080280200802000000802088a2a82a8aa2a82a0a02802088a2a82a0a0280a0a82a8a2288a2a82a8aa2a82a0a0200000080a0a82a0a0280a0a82a8aa2a82a8aa2a82a0a0200000080a0a82a8a228822080280200802802088228822080280a0a82a0a02802088a2a82a8a2208028020882288a2a82a0a0280a0a82a8a2288a2a82a8a22080280a0a82a0a0280208822080280a0a82a8aa2a82a8aa2a82a0a0280a0a82a8a22080200000080a0a82a8a228822882288a2a82a0a020000008020882288a2a82a0a0200000080208822882288220802802088a2a82a0a0280208822882288a2a82a0a028020080200000080a0a82a8a22080200000080a0a82a8a2288a2a82a8a22080280208822882288220802802088a2a82a0a0280a0a82a8a22080280a0a82a8a2288a2a82a8a2208028020080200000080a0a82a0a0280a0a82a8aa2a82a8aa2a82a0a0200000080208822882208028020882288a2a82a0a02802088a2a82a8a22080280208822882288a2a82a0a0280208822080280208822882288a2a82a0a028020080200000080a0a82a8aa2a82a0a02802088a2a82a0a0280a0a82a8a2288a2a82a0a02802008020000008020882288a2a82a0a02802088a2a82a8a22080200000080a0a82a0a0280208822080280a0a82a8aa2a82a0a028020080200000080a0a82a8a228822882288a2a82a0a0200000080208822882288220802802088a2a82a0a0200000080208822882288220802802088a2a82a0a0200000080208822882288220802802088a2a82a0a0200000080208822882288220802802088a2a82a0a02000000802088a2a82a8a2288a2a82a8a220802000000000000000000000000802088
Please note that all contributions to Noisebridge are considered to be released under the Creative Commons Attribution-NonCommercial-ShareAlike (see Noisebridge:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

To protect the wiki against automated edit spam, we kindly ask you to solve the following CAPTCHA:

Cancel Editing help (opens in new window)