Basic DMX data structure
This commit is contained in:
		
							
								
								
									
										55
									
								
								aquadmx.py
									
									
									
									
									
								
							
							
						
						
									
										55
									
								
								aquadmx.py
									
									
									
									
									
								
							@@ -1,4 +1,5 @@
 | 
				
			|||||||
import configparser
 | 
					import configparser
 | 
				
			||||||
 | 
					from enum import Enum
 | 
				
			||||||
import time
 | 
					import time
 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -7,6 +8,7 @@ from stupidArtnet import StupidArtnetServer
 | 
				
			|||||||
from homeassistant_api import Processing, Client
 | 
					from homeassistant_api import Processing, Client
 | 
				
			||||||
from homeassistant_api.processing import process_json
 | 
					from homeassistant_api.processing import process_json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# DMX callback for changes to the universe.
 | 
				
			||||||
def dmx_callback(data):
 | 
					def dmx_callback(data):
 | 
				
			||||||
    light.turn_on(entity_id='light.christian_s_bedroom_left_desk_lamp',
 | 
					    light.turn_on(entity_id='light.christian_s_bedroom_left_desk_lamp',
 | 
				
			||||||
                  brightness=data[0],
 | 
					                  brightness=data[0],
 | 
				
			||||||
@@ -17,15 +19,50 @@ def dmx_callback(data):
 | 
				
			|||||||
                  transition=0,
 | 
					                  transition=0,
 | 
				
			||||||
                  rgb_color=[data[5], data[6], data[7]])
 | 
					                  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):
 | 
					def configOptionalList(config, key):
 | 
				
			||||||
    if 'dimmer' in config:
 | 
					    if key in config:
 | 
				
			||||||
        return configList('dimmer')
 | 
					        return configList(config, key)
 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        return []
 | 
					        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
 | 
					# Configs
 | 
				
			||||||
config = configparser.ConfigParser()
 | 
					config = configparser.ConfigParser()
 | 
				
			||||||
config.sections()
 | 
					config.sections()
 | 
				
			||||||
@@ -39,8 +76,14 @@ client = Client(URL, TOKEN)
 | 
				
			|||||||
light = client.get_domain('light')
 | 
					light = client.get_domain('light')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Lights
 | 
					# Lights
 | 
				
			||||||
configOptionalList(config['Lights'], 'dimmer')
 | 
					u1 = DMXUniverse()
 | 
				
			||||||
configOptionalList(config['Lights'], 'rgb')
 | 
					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
 | 
					# DMX
 | 
				
			||||||
universe = 1
 | 
					universe = 1
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user