We've launched our new site at www.openlighting.org. This wiki will remain and be updated with more technical information.
OLA Python API: Difference between revisions
From wiki.openlighting.org
No edit summary |
No edit summary |
||
| (13 intermediate revisions by 4 users not shown) | |||
| Line 1: | Line 1: | ||
== 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> | |||
$ 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> | |||
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> | |||
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> | |||
Latest revision as of 00:48, 8 June 2011
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()