OLA Python API
From OpenDMX.net
Contents |
[edit] 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.
[edit] 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.
[edit] 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()
[edit] 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()
[edit] 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()
