Changeset - d3ad831e198e
[Not reviewed]
default
0 4 0
drewp@bigasterisk.com - 9 years ago 2016-06-11 01:53:30
drewp@bigasterisk.com
lots of device support and theater config
Ignore-this: d27fc710b1f1dfa231f9805378eb8175
4 files changed with 173 insertions and 18 deletions:
0 comments (0 inline, 0 general)
light9/collector/device.py
Show inline comments
 
@@ -4,6 +4,8 @@ import math
 
from light9.namespaces import L9, RDF, DEV
 
from rdflib import Literal
 
from webcolors import hex_to_rgb, rgb_to_hex
 
from colormath.color_objects import sRGBColor, CMYColor
 
import colormath.color_conversions
 

	
 
log = logging.getLogger('device')
 

	
 
@@ -33,7 +35,7 @@ def clamp255(x):
 
    return min(255, max(0, x))
 
    
 
def _8bit(f):
 
    if not isinstance(f, float):
 
    if not isinstance(f, (int, float)):
 
        raise TypeError(repr(f))
 
    return clamp255(int(f * 255))
 

	
 
@@ -61,10 +63,28 @@ def toOutputAttrs(deviceType, deviceAttr
 
        if out is None:
 
            return default
 
        return float(out.toPython())
 

	
 
    def rgbAttr(attr):
 
        color = deviceAttrSettings.get(attr, '#000000')
 
        r, g, b = hex_to_rgb(color)
 
        return r, g, b
 

	
 
    def cmyAttr(attr):
 
        rgb = sRGBColor.new_from_rgb_hex(deviceAttrSettings.get(attr, '#000000'))
 
        out = colormath.color_conversions.convert_color(rgb, CMYColor)
 
        return (
 
            _8bit(out.cmy_c),
 
            _8bit(out.cmy_m),
 
            _8bit(out.cmy_y))
 

	
 
    def fine16Attr(attr):
 
        x = floatAttr(attr)
 
        hi = _8bit(x)
 
        lo = _8bit((x * 255) % 1.0)
 
        return hi, lo
 
        
 
    if deviceType == L9['ChauvetColorStrip']:
 
        color = deviceAttrSettings.get(L9['color'], '#000000')
 
        r, g, b = hex_to_rgb(color)
 
        r, g, b = rgbAttr(L9['color'])
 
        return {
 
            L9['mode']: 215,
 
            L9['red']: r,
 
@@ -95,5 +115,78 @@ def toOutputAttrs(deviceType, deviceAttr
 
            L9['goboShake']: 0,
 
            L9['goboChoose']: 0,
 
        }
 
    elif deviceType == L9['ChauvetHex12']:
 
        out = {}
 
        out[L9['red']], out[L9['green']], out[L9['blue']] = r, g, b = rgbAttr(L9['color'])
 
        out[L9['amber']] = 0
 
        out[L9['white']] = min(r, g, b)
 
        out[L9['uv']] = _8bit(floatAttr(L9['uv']))
 
        return out
 
    elif deviceType == L9['MacAura']:
 
        out = {
 
            L9['shutter']: 22,
 
            L9['dimmer']: 255,
 
            L9['zoom']: _8bit(floatAttr(L9['zoom'])),
 
            L9['fixtureControl']: 0,
 
            L9['colorWheel']: 0,
 
            L9['colorTemperature']: 128,
 
            L9['fx1Select']: 0,
 
            L9['fx1Adjust']: 0,
 
            L9['fx2Select']: 0,
 
            L9['fx2Adjust']: 0,
 
            L9['fxSync']: 0,
 
            L9['auraShutter']: 22,
 
            L9['auraDimmer']: 0,
 
            L9['auraColorWheel']: 0,
 
            L9['auraRed']: 0,
 
            L9['auraGreen']: 0,
 
            L9['auraBlue']: 0,
 
        }
 
        out[L9['pan']], out[L9['panFine']] = fine16Attr(L9['rx'])
 
        out[L9['tilt']], out[L9['tiltFine']] = fine16Attr(L9['ry'])
 
        out[L9['red']], out[L9['green']], out[L9['blue']] = rgbAttr(L9['color'])
 
        out[L9['white']] = 0
 

	
 
        return out
 
    elif deviceType == L9['MacQuantum']:
 
        out = {
 
            L9['dimmerFadeLo']: 0,
 
            L9['shutter']: 30, # strobe is in here too: slow @ 50 -> fast @ 200
 
            L9['fixtureControl']: 0,
 
            L9['fx1Select']:  0,
 
            L9['fx1Adjust']:  0,
 
            L9['fx2Select']:  0,
 
            L9['fx2Adjust']:  0,
 
            L9['fxSync']:  0,            
 
            }
 

	
 
        # note these values are set to 'fade', so they update slowly. Haven't found where to turn that off.
 
        out[L9['cyan']], out[L9['magenta']], out[L9['yellow']] = cmyAttr(L9['color'])
 
        
 
        out[L9['focusHi']], out[L9['focusLo']] = fine16Attr(L9['focus'])
 
        out[L9['panHi']], out[L9['panLo']] = fine16Attr(L9['rx'])
 
        out[L9['tiltHi']], out[L9['tiltLo']] = fine16Attr(L9['ry'])
 
        out[L9['zoomHi']], out[L9['zoomLo']] = fine16Attr(L9['zoom'])
 
        out[L9['dimmerFadeHi']] = 0 if deviceAttrSettings.get(L9['color'], '#000000') == '#000000' else 255
 

	
 
        out[L9['goboChoice']] = {
 
            L9['open']: 0,
 
            L9['spider']: 6,
 
            L9['windmill']: 11,
 
            L9['limbo']: 16,
 
            L9['brush']: 21,
 
            L9['whirlpool']: 26,
 
            L9['stars']: 31,
 
            }[deviceAttrSettings.get(L9['gobo'], L9['open'])]
 
        
 
        out.update( {
 
            L9['colorWheel']: 0,
 
            L9['goboSpeedHi']: 0,
 
            L9['goboSpeedLo']:  0,
 
            L9['goboStaticRotate']: 0,
 
            L9['prismRotation']: _8bit(floatAttr(L9['prism'])),
 
            L9['iris']: _8bit(floatAttr(L9['iris']) * (200/255)),
 
            })
 
        return out
 
    else:
 
        raise NotImplementedError('device %r' % deviceType)
requirements.txt
Show inline comments
 
@@ -31,4 +31,5 @@ txzmq==0.7.4
 
pyusb==1.0.0
 
coverage==4.1
 
klein==15.3.1
 
git+http://github.com/drewp/scales.git@448d59fb491b7631877528e7695a93553bfaaa93#egg=scales
 
\ No newline at end of file
 
git+http://github.com/drewp/scales.git@448d59fb491b7631877528e7695a93553bfaaa93#egg=scales
 
colormath==2.1.1
show/dance2016/deviceClass.n3
Show inline comments
 
@prefix : <http://light9.bigasterisk.com/> .
 
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
 

	
 
:color a :DeviceAttr; :dataType :color .
 
:rx a :DeviceAttr; :dataType :angle .
 
:ry a :DeviceAttr; :dataType :angle .
 
:uv a :DeviceAttr; :dataType :scalar .
 
:brightness a :DeviceAttr; :dataType :scalar .
 
:color a :DeviceAttr;             :dataType :color .
 
:rx a :DeviceAttr;                :dataType :angle .
 
:ry a :DeviceAttr;                :dataType :angle .
 
:uv a :DeviceAttr;                :dataType :scalar .
 
:brightness a :DeviceAttr;        :dataType :scalar .
 
:zoom a :DeviceAttr;              :dataType :scalar ; rdfs:comment "maybe a 'wide to narrow' type" .
 
:focus a :DeviceAttr;             :dataType :scalar .
 
:iris a :DeviceAttr;              :dataType :scalar .
 
:quantumGoboChoice a :DeviceAttr; :dataType :choice;
 
  :choice :open, :spider, :windmill, :limbo, :brush, :whirlpool, :stars .
 

	
 
:SimpleDimmer a :DeviceClass;
 
  :deviceAttr :brightness;
 
@@ -51,6 +56,7 @@
 
:MacAura a :DeviceClass;
 
  :docs <http://www.martin.com/Martin.Download.aspx?file=/files/files/productdocuments/11_MANUALS/999/UM_MACAura_EN_B.pdf>;
 
  rdfs:comment "note- manual counts dmx from 1; :dmxOffset is from 0";
 
  :deviceAttr :color, :rx, :ry, :zoom;
 
  :attr
 
    [ :dmxOffset 0 ; :outputAttr :shutter ], # use 22
 
    [ :dmxOffset 1 ; :outputAttr :dimmer ],
 
@@ -80,6 +86,7 @@
 

	
 
:MacQuantum a :DeviceClass; 
 
  :docs <http://www.martin.com/Martin.Download.aspx?file=/files/files/productdocuments/11_MANUALS/999/35000279b%20UM_MACQuantumProfile_EN_B.pdf>;
 
  :deviceAttr :color, :rx, :ry, :zoom, :focus, :iris, :quantumGoboChoice;
 
  :attr
 
    [ :dmxOffset 0; :outputAttr :shutter ; rdfs:comment "use 30" ],
 
    [ :dmxOffset 1; :outputAttr :dimmerFadeHi ],
show/dance2016/theaterLightConfig.n3
Show inline comments
 
@prefix : <http://light9.bigasterisk.com/> .
 
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
 
@prefix dev: <http://light9.bigasterisk.com/device/> .
 
@prefix udmx: <http://light9.bigasterisk.com/output/udmx/> .
 
@prefix dmx0: <http://light9.bigasterisk.com/output/dmx0/> .
 
@prefix udmxB: <http://light9.bigasterisk.com/output/udmx/> .
 
@prefix dmxA: <http://light9.bigasterisk.com/output/dmx0/> .
 

	
 
#dev:colorStrip a :ChauvetColorStrip; :dmxUniverse dmxA:; :dmxBase 87 .
 
#dev:moving1 a :Mini15; rdfs:label "moving1"; :dmxUniverse udmxB:; :dmxBase 5 .
 

	
 
dev:houseSide a :SimpleDimmer; rdfs:label "house-side"; :dmxUniverse dmxA:; :dmxBase 68 .
 
dev:house1 a :SimpleDimmer; rdfs:label "house1"; :dmxUniverse dmxA:; :dmxBase 69 .
 
dev:house4 a :SimpleDimmer; rdfs:label "house4"; :dmxUniverse dmxA:; :dmxBase 70 .
 
dev:house3 a :SimpleDimmer; rdfs:label "house3"; :dmxUniverse dmxA:; :dmxBase 71 .
 
dev:house2 a :SimpleDimmer; rdfs:label "house2"; :dmxUniverse dmxA:; :dmxBase 72 .
 

	
 
dev:colorStrip a :ChauvetColorStrip; :dmxUniverse dmx0:; :dmxBase 87 .
 
dev:f1 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 4 .
 
dev:f2 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 8 .
 
dev:f3 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 10 .
 

	
 
dev:cycR a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 42 .
 
dev:cycL a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 44 .
 

	
 
dev:q1 a :MacQuantum; :dmxUniverse udmxB:; :dmxBase 325 .
 
dev:q2 a :MacQuantum; :dmxUniverse udmxB:; :dmxBase 352 .
 
dev:q3 a :MacQuantum; :dmxUniverse udmxB:; :dmxBase 379 .
 

	
 
dev:aura1 a :MacAura; :dmxUniverse udmxB:; :dmxBase 406 .
 
dev:aura2 a :MacAura; :dmxUniverse udmxB:; :dmxBase 420 .
 
dev:aura3 a :MacAura; :dmxUniverse udmxB:; :dmxBase 434 .
 
dev:aura4 a :MacAura; :dmxUniverse udmxB:; :dmxBase 448 .
 
dev:aura5 a :MacAura; :dmxUniverse udmxB:; :dmxBase 462 .
 
dev:auraStage a :MacAura; :dmxUniverse udmxB:; :dmxBase 476; rdfs:comment "rx=.5 ry<.45" .
 

	
 
dev:moving1 a :Mini15; rdfs:label "moving1"; :dmxUniverse udmx:; :dmxBase 5 .
 

	
 
dev:cyc a :SimpleDimmer; rdfs:label "cyc"; :dmxUniverse udmx:; :dmxBase 40 .
 
dev:hexBacklight1 a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 241 .
 
dev:hexBacklight2 a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 247 .
 
dev:hexBacklight3 a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 253 .
 
dev:hexBacklight4 a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 259 .
 
dev:hexBacklight5 a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 265 .
 
dev:hexDown2 a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 157 .
 
dev:hexDown3 a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 193 .
 
dev:hexDown4 a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 169 .
 
dev:hexDown5Edge a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 175 .
 
dev:hexLip1 a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 121 .
 
dev:hexLip2 a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 127 .
 
dev:hexLip3 a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 133 . 
 
dev:hexLip4 a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 139 .
 
dev:hexLip5 a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 145 . 
 
dev:hexLow3 a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 223 .
 
dev:hexLow5 a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 229 .
 
dev:hexLowBacklight1 a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 211 .
 
dev:hexLowBacklight6 a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 235 .
 
dev:hexSlant a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 319 .
 
dev:hexUpCenter a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 313 .
 
dev:hexPostL1 a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 289 .
 
dev:hexPostL2 a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 295 .
 
dev:hexPostL3 a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 301 .
 
dev:hexPostR1 a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 271 .
 
dev:hexPostR2 a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 277 .
 
dev:hexPostR3 a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 283 .
 
dev:hexVeryLow1 a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 151 .
 
dev:hexVeryLow2 a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 187 .
 
dev:hexVeryLow22 a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 217 .
 
dev:hexVeryLow3 a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 163 .
 
dev:hexVeryLow4 a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 199 .
 
dev:hexVeryLow5 a :ChauvetHex12; :dmxUniverse udmxB:; :dmxBase 205 .
 

	
 
# [ :name "cyc-right"; :output dmx:c42 ] .
 
# [ :name "cyc-mid"; :output dmx:c43 ] .
 
# [ :name "cyc-left"; :output dmx:c44 ] .
 

	
 

	
 

	
 
# [ :name "oran1"; :output dmx:c21 ] .
 
# [ :name "oran2"; :output dmx:c25 ] .
 
# [ :name "oran3"; :output dmx:c29 ] .
0 comments (0 inline, 0 general)