Skip to content

Instantly share code, notes, and snippets.

@antonxy
Created July 21, 2018 09:39
Show Gist options
  • Select an option

  • Save antonxy/7d7d932f71aedf86ed48edc2177ced02 to your computer and use it in GitHub Desktop.

Select an option

Save antonxy/7d7d932f71aedf86ed48edc2177ced02 to your computer and use it in GitHub Desktop.
Artnet to Eurolite USB-DMX512-PRO
import sys
from socket import (socket, AF_INET, SOCK_DGRAM, SOL_SOCKET, SO_REUSEADDR,
SO_BROADCAST)
from struct import pack, unpack
import time
import serial
from threading import Thread
UDP_IP = ""
UDP_PORT = 6454
class ArtnetPacket:
ARTNET_HEADER = b'Art-Net\x00'
def __init__(self):
self.op_code = None
self.ver = None
self.sequence = None
self.physical = None
self.universe = None
self.length = None
self.data = None
def __str__(self):
return ("ArtNet package:\n - op_code: {0}\n - version: {1}\n - "
"sequence: {2}\n - physical: {3}\n - universe: {4}\n - "
"length: {5}\n - data : {6}").format(
self.op_code, self.ver, self.sequence, self.physical,
self.universe, self.length, self.data)
def unpack_raw_artnet_packet(raw_data):
if len(raw_data) < 20:
return
if unpack('!8s', raw_data[:8])[0] != ArtnetPacket.ARTNET_HEADER:
print("Received a non Art-Net packet")
return None
packet = ArtnetPacket()
(packet.op_code, packet.ver, packet.sequence, packet.physical,
packet.universe, packet.length) = unpack('!HHBBHH', raw_data[8:18])
packet.data = unpack(
'{0}s'.format(int(packet.length)),
raw_data[18:18+int(packet.length)])[0]
return packet
datag = '\x00' * 512
stopflag = True
def serialthread():
global datag, stopflag
ser = serial.Serial('/dev/ttyACM0', 115200, timeout=1)
while stopflag:
ser.write('\x7E\x06\x01\x02\x00' + datag + '\xE7')
print "-" + str(ord(datag[53]))
def listen_and_redirect_artnet_packets():
global datag, stopflag
print(("Listening in {0}:{1}").format(
UDP_IP, UDP_PORT))
sock = socket(AF_INET, SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))
t = Thread(target=serialthread)
t.start()
while True:
try:
data, addr = sock.recvfrom(1024)
packet = unpack_raw_artnet_packet(data)
if packet is None:
continue
if packet.universe == 0:
if len(packet.data) != 512:
print "oh no"
continue
print ord(packet.data[53])
datag = packet.data
except KeyboardInterrupt:
sock.close()
stopflag = False
return
listen_and_redirect_artnet_packets()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment