|
@@ -1,160 +0,0 @@
|
|
|
-
|
|
|
-import os
|
|
|
-import sys
|
|
|
-import fcntl #socket control
|
|
|
-import socket
|
|
|
-import time
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-from optparse import OptionParser
|
|
|
-parser = OptionParser()
|
|
|
-parser.add_option("-r", "--recive", dest="recive",
|
|
|
- help="set recive ip like --recive 10.")
|
|
|
-parser.add_option("-s", "--sendto", dest="sendto",
|
|
|
- help="set sender ip like --sendto 2.255.255.255")
|
|
|
-parser.add_option("-t", "--test", dest="testuniv",
|
|
|
- help="set test univers like --test [0-16]")
|
|
|
-parser.add_option("", "--inmap", dest="inmap",
|
|
|
- help="set test univers like --test [0-16]")
|
|
|
-#parser.add_option("-q", "--quiet",
|
|
|
-# action="store_false", dest="verbose", default=True,
|
|
|
-# help="don't print status messages to stdout")
|
|
|
-
|
|
|
-(options, args) = parser.parse_args()
|
|
|
-print("option",options)
|
|
|
-print(options.sendto)
|
|
|
-
|
|
|
-
|
|
|
-from collections import OrderedDict
|
|
|
-
|
|
|
-def unpack_art_dmx(data):
|
|
|
- dmx = []
|
|
|
- for i in range(len(data[18:]) ):
|
|
|
- x=data[18+i]
|
|
|
- #print("x",x)
|
|
|
- #print( "data",b'!B', data[18+i])
|
|
|
- #x=struct.unpack( b'!B',data[18+i])
|
|
|
- #print( "data",b'!B', data[18+i],x)
|
|
|
- #x=x[0]
|
|
|
- dmx += [x]
|
|
|
- return dmx
|
|
|
-
|
|
|
-import struct
|
|
|
-class Socket():
|
|
|
- def __init__(self,bind='',port=6454):
|
|
|
- self.__port =port
|
|
|
- self.__bind =bind
|
|
|
- self.__poll = 0
|
|
|
- self.__data = []
|
|
|
- self.__addr = "NONE"
|
|
|
- self.head = [-1]*18 # /255 # /512 # * 512
|
|
|
- self.open()
|
|
|
- self._head_error = 0
|
|
|
- def open(self):
|
|
|
- try:
|
|
|
- print("connecting to ArtNet bind:",self.__bind,"Port",self.__port)
|
|
|
- self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
|
-
|
|
|
- self.sock.bind((self.__bind, self.__port))
|
|
|
- fcntl.fcntl(self.sock, fcntl.F_SETFL, os.O_NONBLOCK)
|
|
|
- #self.sock.setblocking(0)
|
|
|
-
|
|
|
- except socket.error as e:
|
|
|
- print("Socket ",self.__bind,self.__port, "ERR: {0} ".format(e.args))
|
|
|
- #raw_input()
|
|
|
- #sys.exit()
|
|
|
- def __del__(self):
|
|
|
- print( self,"head_error",self._head_error)
|
|
|
- def poll(self):
|
|
|
- if not self.__poll:
|
|
|
- try:
|
|
|
- self.__data, self.__addr = self.sock.recvfrom(self.__port)
|
|
|
-
|
|
|
-
|
|
|
- data, addr = (self.__data,self.__addr)
|
|
|
- self.host = addr[0]
|
|
|
- head = data[:18]
|
|
|
- rawdmx = data[18:]
|
|
|
- #print([head],addr)
|
|
|
- self.univ = -1
|
|
|
- #print( struct.unpack("B",head) )
|
|
|
- #print(type(head),[head],len(head))
|
|
|
- if len(head) != 18:
|
|
|
- self._head_error += 1
|
|
|
- return 0
|
|
|
- self.head = struct.unpack("!8sHBBBBHBB" , head )
|
|
|
- #try:
|
|
|
- # self.head = struct.unpack("!8sHBBBBHBB" , head )
|
|
|
- #except Exception as e:
|
|
|
- # pass#print( "======E09823" , e)
|
|
|
- univ = self.head[6]/255 # /512 # * 512
|
|
|
- self.univ = int(univ)
|
|
|
- #print(univ)
|
|
|
-
|
|
|
- if self.host.startswith("127."): #allways recive localhost on port
|
|
|
- self.__poll = 1
|
|
|
- return 1
|
|
|
- elif not options.recive:
|
|
|
- self.__poll = 1
|
|
|
- return 1
|
|
|
- elif self.host.startswith(options.recive):
|
|
|
- self.__poll = 1
|
|
|
- return 1
|
|
|
- else:
|
|
|
- self.__poll = 0
|
|
|
-
|
|
|
- except socket.timeout as e:
|
|
|
- err = e.args[0]
|
|
|
- if err == 'timed out':
|
|
|
- sleep(1)
|
|
|
- print('recv timed out, retry later')
|
|
|
- else:
|
|
|
- print(e)
|
|
|
- except socket.error as e:
|
|
|
- pass
|
|
|
-
|
|
|
- def recive(self):
|
|
|
- if self.__poll:
|
|
|
- self.__poll = 0
|
|
|
-
|
|
|
- data, addr = (self.__data,self.__addr)
|
|
|
- #print( self.univ,self.head)
|
|
|
-
|
|
|
- self.dmx = unpack_art_dmx(data)
|
|
|
-
|
|
|
- return { "host":self.host,"dmx":self.dmx,"univ":self.univ,"head":self.head,"data":data,"addr":addr}
|
|
|
-
|
|
|
-
|
|
|
-if __name__ == "__main__":
|
|
|
- x = Socket()
|
|
|
- print(x)
|
|
|
- sstamp = time.time()
|
|
|
- xstamp = 0
|
|
|
- xxstamp = 0
|
|
|
- while 1:
|
|
|
- if x.poll():
|
|
|
- estamp = time.time()
|
|
|
- xstamp = estamp-sstamp
|
|
|
- xstamp = int(xstamp*10000)
|
|
|
- r=x.recive()
|
|
|
- #print( r["host"])
|
|
|
- #print(r.keys(),r["addr"],r["univ"],r["head"])
|
|
|
- flag=0
|
|
|
- #if "2.0.0.14" == r["host"] and r["univ"] == 7:flag=1
|
|
|
- #if "2.0.0.1" == r["host"] and r["univ"] == 0:flag=1
|
|
|
- if r["host"].startswith("2.0.0.") and r["univ"] == 0:flag=1
|
|
|
- #if r["host"].startswith("10.0.25.") :flag=1# and r["univ"] != 0:flag=1 #:flag=1
|
|
|
-
|
|
|
- if flag:
|
|
|
- string = ""
|
|
|
- string += "{: 6}".format(xstamp)
|
|
|
- string += "{: 6}".format(int(xstamp-xxstamp))
|
|
|
- string += "{}".format(r["host"].rjust(12) )
|
|
|
- string += "{: 6}".format(r["univ"])
|
|
|
- string += "{:}".format(str(r["dmx"][200:221]))
|
|
|
- #print("{: 6} {: 10} {} {} {}".format(xstamp,int(xstamp-xxstamp),r["host"].ljust(" ",10),r["univ"], r["dmx"][200:221] ) )
|
|
|
- print(string)
|
|
|
- xxstamp=xstamp
|
|
|
- time.sleep(0.001)
|
|
|
-
|