Personal tools
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.

Difference between revisions of "OLA Python API"

From wiki.openlighting.org

Jump to: navigation, search
(Building the Python Bindings)
Line 36: Line 36:
 
== Interesting Classes ==
 
== Interesting Classes ==
  
; LlaClient
+
; ClientWrapper
: the main connection class
+
: A helper class that connects to the server and creates a new OlaClient
; dmxBuffer
+
; OlaClient
: represents a list of DMX channel values
+
: The main API
; LlaClientObserver
+
 
: base class to handle events
+
 
; LlaPlugin
+
The best documentation is the set of example programs in the python/examples directory.
: represents a Plugin
 
; LlaDevice
 
: represents a Device
 
  
 
== Sending DMX ==
 
== Sending DMX ==
Line 51: Line 48:
  
 
<pre>
 
<pre>
from lla import *
+
import array
import sys
+
from ola.ClientWrapper import ClientWrapper
  
con = LlaClient()
+
def DmxSent(state):
if con.start():
+
   wrapper.Stop()
   sys.exit()
 
  
universe = 0
+
universe = 1
 
+
data = array.array('B')
# create a dmxBuffer for the channel values
+
data.append(10)
DMX_LEN = 512
+
data.append(50)
dmx = dmxBuffer(DMX_LEN)
+
data.append(255)
for i in range(0, DMX_LEN):
+
wrapper = ClientWrapper()
  dmx[i] = i
+
client = wrapper.Client()
 
+
client.SendDmx(universe, data, DmxSent)
con.send_dmx(universe, dmx, DMX_LEN)
+
wrapper.Run()
 
</pre>
 
</pre>
  
 
== Receiving DMX ==
 
== Receiving DMX ==
  
Receiving is slightly harder, we need to setup an Observer object to handle the events:
+
Here is some code to receive DMX on universe 1.
 
 
''' THIS ISN'T WORKING YET ''' [simonn]
 
  
 
<pre>
 
<pre>
from lla import *
+
from ola.ClientWrapper import ClientWrapper
import sys
 
 
 
class Observer(LlaClientObserver):
 
  """ Handle the events """
 
  def new_dmx(self, uni, length, data):
 
    """ Called with new dmx buffer """
 
    return 0
 
 
 
 
 
# create a new LlaClient
 
con = LlaClient()
 
 
 
# create an observer object and register
 
ob = Observer()
 
con.set_observer(ob)
 
 
 
if con.start():
 
  sys.exit()
 
  
con.register_uni(1, LlaClient.REGISTER)
+
def NewData(data):
 +
  print data
  
while True:
+
universe = 1
  con.fd_action(1)
 
  
 +
wrapper = ClientWrapper()
 +
client = wrapper.Client()
 +
client.RegisterUniverse(universe, client.REGISTER, NewData)
 +
wrapper.Run()
 
</pre>
 
</pre>

Revision as of 11:56, 9 January 2011

Building the Python Bindings

You need the python version of protocol buffers installed.

See Building LLA 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 DMX:

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()

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()