The Open Lighting Project has moved!
We've launched our new site at www.openlighting.org. This wiki will remain and be updated with more technical information.
We've launched our new site at www.openlighting.org. This wiki will remain and be updated with more technical information.
Difference between revisions of "OLA Python API"
From wiki.openlighting.org
(→Receiving DMX) |
|||
(9 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
== Building the Python Bindings == | == Building the Python Bindings == | ||
− | + | You should install readline if you haven't already: | |
− | + | <pre> | |
+ | sudo easy_install readline | ||
+ | </pre> | ||
+ | |||
+ | You need the python version of protocol buffers installed. | ||
+ | |||
+ | See [[Building OLA]] but run | ||
− | + | <pre> | |
− | + | $ ./configure --enable-python-libs | |
− | + | </pre> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | Check where the modules are going to be installed: | |
− | |||
<pre> | <pre> | ||
− | + | $ grep ^pythondir config.log | |
− | + | pythondir='/Library/Python/2.5/site-packages' | |
+ | </pre> | ||
+ | |||
+ | Run the usual: make, make check, make install. | ||
+ | |||
+ | Check that the modules have been installed correctly in the $pythondir above. | ||
− | + | Check that $pythondir appears in sys.path: | |
− | |||
− | |||
− | + | <pre> | |
+ | $ python -c "import sys; print sys.path" | ||
+ | </pre> | ||
− | + | If it doesn't add it to $PYTHONPATH: | |
− | |||
− | |||
− | |||
− | |||
− | + | <pre> | |
+ | $ export PYTHONPATH=$PYTHONPATH:/path/to/your/install/dir | ||
</pre> | </pre> | ||
− | == | + | You probably want to put this line in your shell .rc file. |
+ | |||
+ | == Interesting Classes == | ||
+ | |||
+ | ; ClientWrapper | ||
+ | : A helper class that connects to the server and creates a new OlaClient | ||
+ | ; OlaClient | ||
+ | : The main API | ||
+ | |||
+ | |||
+ | The best documentation is the set of example programs in the python/examples directory. | ||
+ | |||
+ | == Sending DMX == | ||
+ | A simple example to send one frame of DMX data: | ||
+ | |||
+ | <pre> | ||
+ | import array | ||
+ | from ola.ClientWrapper import ClientWrapper | ||
+ | |||
+ | def DmxSent(state): | ||
+ | wrapper.Stop() | ||
− | + | universe = 1 | |
+ | data = array.array('B') | ||
+ | data.append(10) | ||
+ | data.append(50) | ||
+ | data.append(255) | ||
+ | wrapper = ClientWrapper() | ||
+ | client = wrapper.Client() | ||
+ | client.SendDmx(universe, data, DmxSent) | ||
+ | wrapper.Run() | ||
+ | </pre> | ||
− | + | == Sending Multiple Frames == | |
<pre> | <pre> | ||
− | from | + | import array |
− | + | from ola.ClientWrapper import ClientWrapper | |
+ | |||
+ | wrapper = None | ||
+ | loop_count = 0 | ||
+ | TICK_INTERVAL = 100 # in ms | ||
+ | |||
+ | def DmxSent(state): | ||
+ | if not state.Succeeded(): | ||
+ | wrapper.Stop() | ||
+ | |||
+ | def SendDMXFrame(): | ||
+ | # schdule a function call in 100ms | ||
+ | # we do this first in case the frame computation takes a long time. | ||
+ | wrapper.AddEvent(TICK_INTERVAL, SendDMXFrame) | ||
− | + | # compute frame here | |
− | + | data = array.array('B') | |
− | + | global loop_count | |
− | + | data.append(loop_count % 255) | |
− | + | loop_count += 1 | |
+ | # send | ||
+ | wrapper.Client().SendDmx(1, data, DmxSent) | ||
+ | |||
− | + | wrapper = ClientWrapper() | |
− | + | wrapper.AddEvent(TICK_INTERVAL, SendDMXFrame) | |
+ | wrapper.Run() | ||
+ | </pre> | ||
+ | |||
+ | == Receiving DMX == | ||
− | + | Here is some code to receive DMX on universe 1. | |
− | |||
− | |||
− | + | <pre> | |
− | + | from ola.ClientWrapper import ClientWrapper | |
− | + | def NewData(data): | |
+ | print data | ||
− | + | universe = 1 | |
− | |||
+ | wrapper = ClientWrapper() | ||
+ | client = wrapper.Client() | ||
+ | client.RegisterUniverse(universe, client.REGISTER, NewData) | ||
+ | wrapper.Run() | ||
</pre> | </pre> |
Latest revision as of 16:48, 7 June 2011
Contents
Building the Python Bindings
You should install readline if you haven't already:
sudo easy_install readline
You need the python version of protocol buffers installed.
See Building OLA but run
$ ./configure --enable-python-libs
Check where the modules are going to be installed:
$ grep ^pythondir config.log pythondir='/Library/Python/2.5/site-packages'
Run the usual: make, make check, make install.
Check that the modules have been installed correctly in the $pythondir above.
Check that $pythondir appears in sys.path:
$ python -c "import sys; print sys.path"
If it doesn't add it to $PYTHONPATH:
$ export PYTHONPATH=$PYTHONPATH:/path/to/your/install/dir
You probably want to put this line in your shell .rc file.
Interesting Classes
- ClientWrapper
- A helper class that connects to the server and creates a new OlaClient
- OlaClient
- The main API
The best documentation is the set of example programs in the python/examples directory.
Sending DMX
A simple example to send one frame of DMX data:
import array from ola.ClientWrapper import ClientWrapper def DmxSent(state): wrapper.Stop() universe = 1 data = array.array('B') data.append(10) data.append(50) data.append(255) wrapper = ClientWrapper() client = wrapper.Client() client.SendDmx(universe, data, DmxSent) wrapper.Run()
Sending Multiple Frames
import array from ola.ClientWrapper import ClientWrapper wrapper = None loop_count = 0 TICK_INTERVAL = 100 # in ms def DmxSent(state): if not state.Succeeded(): wrapper.Stop() def SendDMXFrame(): # schdule a function call in 100ms # we do this first in case the frame computation takes a long time. wrapper.AddEvent(TICK_INTERVAL, SendDMXFrame) # compute frame here data = array.array('B') global loop_count data.append(loop_count % 255) loop_count += 1 # send wrapper.Client().SendDmx(1, data, DmxSent) wrapper = ClientWrapper() wrapper.AddEvent(TICK_INTERVAL, SendDMXFrame) wrapper.Run()
Receiving DMX
Here is some code to receive DMX on universe 1.
from ola.ClientWrapper import ClientWrapper def NewData(data): print data universe = 1 wrapper = ClientWrapper() client = wrapper.Client() client.RegisterUniverse(universe, client.REGISTER, NewData) wrapper.Run()