Basic DMX data structure

This commit is contained in:
Christian Colglazier 2023-08-05 16:25:27 -04:00
parent 71499e4e96
commit b3da4aaaf3

View File

@ -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