changeset 1419:d3ad831e198e

lots of device support and theater config Ignore-this: d27fc710b1f1dfa231f9805378eb8175
author drewp@bigasterisk.com
date Sat, 11 Jun 2016 01:53:30 +0000
parents 5a4e90b2bcc3
children 090e8f50bc17
files light9/collector/device.py requirements.txt show/dance2016/deviceClass.n3 show/dance2016/theaterLightConfig.n3
diffstat 4 files changed, 173 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/light9/collector/device.py	Fri Jun 10 19:50:31 2016 +0000
+++ b/light9/collector/device.py	Sat Jun 11 01:53:30 2016 +0000
@@ -4,6 +4,8 @@
 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 @@
     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 @@
         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 @@
             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)
--- a/requirements.txt	Fri Jun 10 19:50:31 2016 +0000
+++ b/requirements.txt	Sat Jun 11 01:53:30 2016 +0000
@@ -31,4 +31,5 @@
 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
--- a/show/dance2016/deviceClass.n3	Fri Jun 10 19:50:31 2016 +0000
+++ b/show/dance2016/deviceClass.n3	Sat Jun 11 01:53:30 2016 +0000
@@ -1,11 +1,16 @@
 @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 ],
--- a/show/dance2016/theaterLightConfig.n3	Fri Jun 10 19:50:31 2016 +0000
+++ b/show/dance2016/theaterLightConfig.n3	Sat Jun 11 01:53:30 2016 +0000
@@ -1,18 +1,72 @@
 @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 ] .