diff --git a/aquadmx.py b/aquadmx.py index 81f1e5f..3de7f59 100644 --- a/aquadmx.py +++ b/aquadmx.py @@ -1,4 +1,5 @@ import configparser +from enum import Enum import time import os @@ -7,6 +8,7 @@ from stupidArtnet import StupidArtnetServer from homeassistant_api import Processing, Client from homeassistant_api.processing import process_json +# DMX callback for changes to the universe. def dmx_callback(data): light.turn_on(entity_id='light.christian_s_bedroom_left_desk_lamp', brightness=data[0], @@ -17,15 +19,50 @@ def dmx_callback(data): transition=0, rgb_color=[data[5], data[6], data[7]]) -def configList(key): - return [i.strip(' ') for i in config['Lights'][key].split(',')] +# +def configList(config, key): + return [i.strip(' ') for i in config[key].split('\n')] +# Returns a list of config items. def configOptionalList(config, key): - if 'dimmer' in config: - return configList('dimmer') + if key in config: + return configList(config, key) else: return [] +class LightType(Enum): + DIMMER = 1 + RGB = 2 + +class DMXDevice(object): + startChannel = 0 + def __init__(self, deviceID, lightType): + self.deviceID = deviceID + self.lightType = lightType + if lightType is LightType.DIMMER: + self.numChannels = 1 + elif lightType is LightType.RGB: + self.numChannels = 4 + def getNumChannels(self): + return self.numChannels + def setStartChannel(self, start): + self.startChannel = start + def getNumChannels(self): + return self.numChannels + + +class DMXUniverse(object): + maxChannels = 512 + def __init__(self): + self.channels = 1 + self.devices = [] + def addDevice(self, device): + device.setStartChannel(self.channels) + self.devices.append(device) + self.channels += device.getNumChannels() + def getChannels(self): + return self.channels + # Configs config = configparser.ConfigParser() config.sections() @@ -39,8 +76,14 @@ client = Client(URL, TOKEN) light = client.get_domain('light') # Lights -configOptionalList(config['Lights'], 'dimmer') -configOptionalList(config['Lights'], 'rgb') +u1 = DMXUniverse() +dimmers =configOptionalList(config['Lights'], 'dimmer') +for l in dimmers: + u1.addDevice(DMXDevice(l, LightType.DIMMER)) +rgbs = configOptionalList(config['Lights'], 'rgb') +for l in rgbs: + u1.addDevice(DMXDevice(l, LightType.RGB)) +print(u1.getChannels()) # DMX universe = 1