oszi_grid.py 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. # -*- coding: UTF-8 -*-
  2. import os
  3. import fcntl
  4. import time
  5. import socket
  6. import struct
  7. import random
  8. from optparse import OptionParser
  9. parser = OptionParser()
  10. parser.add_option("-r", "--recive", dest="recive",
  11. help="set recive ip like --recive 10.")
  12. parser.add_option("-s", "--sendto", dest="sendto",
  13. help="set sender ip like --sendto 2.255.255.255")
  14. parser.add_option("-t", "--test", dest="testuniv",
  15. help="set test univers like --test [0-16]")
  16. parser.add_option("", "--inmap", dest="inmap",
  17. help="set test univers like --test [0-16]")
  18. #parser.add_option("-q", "--quiet",
  19. # action="store_false", dest="verbose", default=True,
  20. # help="don't print status messages to stdout")
  21. (options, args) = parser.parse_args()
  22. print("option",options)
  23. print(options.sendto)
  24. x=0
  25. y=0
  26. running = True
  27. import pygame
  28. import pygame.gfxdraw
  29. pygame.init()
  30. #screen = pygame.display.set_mode((780, 610))
  31. screen = pygame.display.set_mode((560, 610))
  32. pygame.display.set_caption("pygame: DMX OSZI 22.12")
  33. pygame.mouse.set_visible(1)
  34. pygame.key.set_repeat(1, 30)
  35. clock = pygame.time.Clock()
  36. pygame.init()
  37. import copy
  38. import _thread as thread
  39. import sys
  40. font = pygame.font.SysFont("FreeSans", 12) #,color=(255,0,0))
  41. class Trans():
  42. def __init__(self,y=150):
  43. self.y = 150
  44. self.s = 0.25
  45. def get_y(self,y):
  46. return int((y*self.s)+(self.y*self.s))*-1
  47. T = Trans()
  48. class OSZI():
  49. def __init__(self):
  50. self._x=0
  51. self.sdata={}
  52. self.lz = time.time()
  53. self.c=0
  54. def draw(self,screen,data,univ=0,label="ABCDEFGHIJK"):
  55. x=int(self._x)
  56. if time.time() > self.lz:
  57. self.lz = time.time()+6
  58. self._x=0
  59. x=0
  60. rec = pygame.Rect(x+1,T.get_y(10),30,245) # clear balken
  61. pygame.draw.rect(screen,(10,10,0),rec)
  62. T.y=-260
  63. c=0
  64. i = 0
  65. for d in data:
  66. y=d
  67. pygame.gfxdraw.pixel(screen,x,T.get_y(255),(255,0,0))
  68. pygame.gfxdraw.pixel(screen,x,T.get_y(0),(10,10,25))
  69. rec = pygame.Rect(x+4,T.get_y(0),20,-80) # clear balken
  70. pygame.draw.rect(screen,(c,210,110),rec)
  71. rec = pygame.Rect(x+2,T.get_y(0),30,-80) # clear balken
  72. pygame.draw.rect(screen,(c,10,110),rec)
  73. text = font.render( str(y), True, (0,0,0))
  74. pygame.draw.circle(screen,(255,155,0),(x,T.get_y(y)),2)
  75. try:
  76. rec = pygame.Rect(0,T.get_y(-20) ,50,12)
  77. pygame.draw.rect(screen,(20,20,20),rec)
  78. text = font.render( "DMX:{}".format(int(label[i])+1), True, (255,255,255))
  79. screen.blit(text, ( 0,T.get_y(-20) ) )
  80. except:pass
  81. c+=50
  82. if c >255:
  83. c=255
  84. T.y-=275
  85. i+=1
  86. #_x+=3.5*2
  87. self._x+=1.5*2
  88. NR = 0
  89. NR2 =0
  90. def read_event():
  91. global NR,NR2
  92. running = True
  93. for event in pygame.event.get():
  94. if event.type == pygame.QUIT:
  95. running = False
  96. if event.type == pygame.KEYDOWN:
  97. print(event.type)
  98. if event.key == pygame.K_ESCAPE:
  99. pygame.event.post(pygame.event.Event(pygame.QUIT))
  100. try:
  101. print(event.dict ) #event.button)
  102. if event.type == 5:
  103. if "button" in event.dict and event.dict["button"] == 3: #event.button)
  104. NR += 1
  105. if NR > 12:
  106. NR = 0
  107. if "button" in event.dict and event.dict["button"] == 1: #event.button)
  108. NR -= 1
  109. if NR < 0:
  110. NR = 12
  111. if "button" in event.dict and event.dict["button"] == 4: #event.button)
  112. NR2 += 1
  113. if NR2 > 512-1:
  114. NR2 = 0
  115. if "button" in event.dict and event.dict["button"] == 5: #event.button)
  116. NR2 -= 1
  117. if NR2 < 0:
  118. NR2 = 512-1
  119. except Exception as e:
  120. print(e)
  121. return running
  122. NR = 0
  123. NR2= 0
  124. class GRID():
  125. def __init__(self):
  126. self.grid_timer = time.time()
  127. def draw(self,xsdata,univ=0,x=0,y=250):
  128. rx = x
  129. ry = y
  130. grid_timer = self.grid_timer
  131. if grid_timer > time.time():
  132. return
  133. x2 = 310
  134. y2 = 10
  135. rec = pygame.Rect(x2,y2,200,450) # clear balken
  136. pygame.draw.rect(screen,(20,40,20),rec)
  137. for d in xsdata:
  138. xx=sdata[d]
  139. _univ = xx["head"][6] //256 #/ 255
  140. text = font.render( "HOST: {}".format(xx["host"]), True, (255,255,255))
  141. screen.blit(text, ( x2+10, y2+10 ) )
  142. text = font.render( ": {}".format(_univ), True, (255,255,255))
  143. screen.blit(text, ( x2+130, y2+10 ) )
  144. #x2 += 40
  145. y2 += 14
  146. rec = pygame.Rect(rx,ry,600,600) # clear balken
  147. pygame.draw.rect(screen,(20,20,20),rec)
  148. text = font.render( "univ:{}".format(univ), True, (255,255,255))
  149. screen.blit(text, ( rx+20, ry+10 ) )
  150. ry+=22
  151. grid_timer=time.time()+.0215
  152. for d in xsdata:
  153. xx=sdata[d]
  154. _univ = xx["head"][6] //256 #/ 255
  155. if xx["host"].startswith('2.0.0.'):
  156. if univ == _univ: # == 0:
  157. #rx=308
  158. #ry=10
  159. rec = pygame.Rect(rx,ry,600,600) # clear balken
  160. pygame.draw.rect(screen,(20,20,20),rec)
  161. line = []
  162. for i,dmx in enumerate(xx["dmx"]):
  163. text = font.render( str(dmx).rjust(3," "), True, (255,255,255))
  164. screen.blit(text, ( rx+10, ry+10 ) )
  165. rx+=29
  166. if (i+1) % 20 == 0:
  167. rx=x
  168. ry+=12
  169. _ips = {}
  170. def print_ips(sdata):
  171. if int(time.time()*10) % 20 == 0:
  172. for k in sdata:
  173. if k in _ips:
  174. _ips[k] += 1
  175. else:
  176. _ips[k] = 0
  177. print(k.ljust(15," "),_ips[k])
  178. print()
  179. grid_a = GRID()
  180. oszi_a = OSZI()
  181. import artnet_read
  182. e = artnet_read.ArtNetRead()
  183. thread.start_new_thread(e.loop,())
  184. while running:
  185. clock.tick(15)
  186. #clock.tick(225)
  187. #print(dir(e),e)
  188. #exit()
  189. sdata = e.get()
  190. xsdata = copy.deepcopy(sdata)
  191. print_ips(sdata)
  192. _filter = [NR2,NR2+1,NR2+2] #,NR2+4]
  193. try:
  194. data = artnet_read.get_value(sdata,univ=NR,dmx=_filter)
  195. except:
  196. data = [0,0,0,0]
  197. running = read_event()
  198. oszi_a.draw(screen,data,label=_filter)
  199. grid_a.draw(xsdata,univ=NR,y=230)
  200. pygame.display.flip()