TK-Nodescanner.py 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646
  1. #! /usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. """
  4. Valid-License-Identifier: GPL-2.0-only
  5. SPDX-URL: https://spdx.org/licenses/GPL-1.0.html
  6. (c) 2012 micha@librelight.de
  7. """
  8. import time
  9. import struct
  10. import sys
  11. import tkinter as Tkinter
  12. import _thread as thread
  13. import nodescan
  14. title = "TK-ArtNet-Nodscaner"
  15. sys.stdout.write("\x1b]2;"+title+"\x07")
  16. node_list = []
  17. def load(event):
  18. print()
  19. print("load()")
  20. sel = int( li_nodes.curselection()[0] )
  21. print("li_nodes.get")
  22. try:
  23. sel = int(li_nodes.get(sel).split()[0])
  24. print(sel)
  25. except:
  26. return 0
  27. sel -= 1
  28. node_list[sel]
  29. clear_entry_ip()
  30. e_ip.configure(state='normal')
  31. e_ip.insert("end",node_list[sel]["IP"].replace("[","").replace("]",""))
  32. #e_ip.configure(state='readonly')
  33. e_ip_new.insert("end",node_list[sel]["IP"].replace("[","").replace("]",""))
  34. e_mac.delete("0","end")
  35. e_mac.insert("end",node_list[sel]["MAC"].replace("[","").replace("]",""))
  36. e_mac2.delete("0","end")
  37. e_mac2.insert("end",node_list[sel]["MAC"].split(":")[-1])
  38. print("load",node_list[sel])
  39. e_lname.delete("0","end")
  40. e_lname.insert("end",node_list[sel]["lname"])
  41. e_sname.delete("0","end")
  42. e_sname.insert("end",node_list[sel]["sname"])
  43. e_artnet_uni1.delete("0","end")
  44. univ = "0"
  45. print("tttttttttttttttttttttttttttttttttttttttt")
  46. try:
  47. if node_list[sel]["PortTypes"][0] == "@":
  48. univ = ord(node_list[sel]["SwIn"][0])
  49. else:
  50. univ = ord(node_list[sel]["SwOut"][0])
  51. except Exception as e:
  52. print("load Exception",e)
  53. MSG["text"] = e
  54. MSG["bg"] = "red"
  55. e_artnet_uni1.insert("end",univ)
  56. def clear_entry_ip():
  57. e_ip.configure(state='normal')
  58. e_ip.delete("0","end")
  59. e_ip.configure(state='readonly')
  60. e_ip_new.delete("0","end")
  61. def clear_node():
  62. global node_list
  63. li_nodes.delete("0","end")
  64. node_list = []
  65. li_nodes.delete("0","end")
  66. def poll(delay=1):
  67. print("poll()")
  68. global old_tick
  69. clear()
  70. clear_entry_ip()
  71. clear_node()
  72. time.sleep(delay)
  73. try:
  74. nodescan.poll()
  75. except Exception as e:
  76. print("e",e)
  77. MSG["text"] = e
  78. MSG["bg"] = "red"
  79. time.sleep(0.5)
  80. old_tick = 0
  81. def clear(event= None):
  82. print("clear()")
  83. global rx
  84. rx.clear()
  85. clear_node()
  86. #poll()
  87. MSG["text"] = ""
  88. MSG["bg"] = "grey"
  89. time.sleep(0.1)
  90. def poll_loop(sleep):
  91. if sleep < 1:
  92. sleep = 1
  93. time.sleep(sleep)
  94. while 1:
  95. poll()
  96. time.sleep(sleep)
  97. old_tick = 0
  98. rx = nodescan.ArtNetNodes()
  99. def _scan():
  100. global rx,node_list,old_tick,Scrollbar
  101. print("get node from cache " )
  102. li_nodes.insert("end",str("----"))
  103. rx.loop()
  104. while 1:
  105. try:
  106. __scan()
  107. except Exception as e:
  108. print("_scan Exception as",e)
  109. MSG["text"] = e
  110. MSG["bg"] = "red"
  111. time.sleep(0.1)
  112. def __scan():
  113. global rx,node_list,old_tick,Scrollbar
  114. while 1:
  115. nodes = rx.get()
  116. new_tick = rx.tick()
  117. if new_tick == old_tick:
  118. continue
  119. old_tick = new_tick
  120. #print("node",nodes)
  121. if nodes:
  122. li_node_scroll = li_nodes.yview()
  123. #clear_node()
  124. #li_nodes.delete(0,"end")
  125. #print("yea",len(nodes))
  126. node_nr = 1
  127. nodesB = {}
  128. for node in nodes:
  129. k = node["MAC"]
  130. nodesB[k] = node
  131. print("k",nodesB.keys())
  132. #for node in nodes:
  133. #for k,node in nodesB.items():
  134. k_sort = list(nodesB.keys())
  135. k_sort.sort()
  136. print("k sort",k_sort)
  137. for k in k_sort:
  138. node = nodesB[k]
  139. li_nodes.insert("end",str(node_nr).rjust(3," ") +" "+ node["lname"])
  140. bg = "lightgrey"
  141. color = li_nodes.itemconfig("end", bg=bg)
  142. ip = str(node_nr).rjust(3," ") +" "+ node["IP"]
  143. bg = ""
  144. if node["PortTypes"][0] == "@":
  145. ip += " DMX-in"
  146. bg ="yellow"
  147. else:
  148. ip += " DMX-out"
  149. bg ="lightgreen"
  150. if bg:
  151. color = li_nodes.itemconfig("end", bg=bg)
  152. li_nodes.insert("end",str(node_nr).rjust(3," ") +" short Name:"+ node["sname"])
  153. li_nodes.insert("end",ip)
  154. if bg:
  155. color = li_nodes.itemconfig("end", bg=bg)
  156. inout = " UNIVERS OUT="+ str(ord(node["SwOut"][0]))+" IN="+ str(ord(node["SwIn"][0]))
  157. li_nodes.insert("end",str(node_nr).rjust(3," ") + inout)
  158. li_nodes.insert("end",str(node_nr).rjust(3," ") +" MAC:"+ node["MAC"])
  159. timeline = ""
  160. timeline += " LASTCHANGE:%0.1f"% (time.time()-float(node["UPDATESTAMP"]) )
  161. REFRESHSTAMP = time.time()-float(node["REFRESHSTAMP"])
  162. timeline +=" LASTPING:%0.1f"% REFRESHSTAMP
  163. li_nodes.insert("end",str(node_nr).rjust(3," ") +timeline )
  164. if node["BOOT"]:
  165. BOOT = time.time()-float(node["BOOT"])
  166. else:
  167. BOOT = 0
  168. timeline =" BOOT:%0.1f"% BOOT
  169. li_nodes.insert("end",str(node_nr).rjust(3," ") +timeline +" sec" )
  170. bg = ""
  171. #if REFRESHSTAMP > 5 :
  172. # bg="red"
  173. #else:
  174. # bg="lightgreen"
  175. if bg:
  176. li_nodes.itemconfig("end", bg=bg)
  177. #li_nodes.insert("end",str(node_nr).rjust(3," ")
  178. #li_nodes.insert("end","")
  179. li_nodes.insert("end","*"*60)
  180. #li_nodes.itemconfig("end", bg="brown")
  181. node_nr += 1
  182. node_list += [node]
  183. #Scrollbar.set('0', '0.1')
  184. print(li_node_scroll)
  185. #print(dir(li_nodes))
  186. #li_node_scroll = int(li_node_scroll[0])
  187. #li_nodes.yview_moveto(li_node_scroll)
  188. time.sleep(0.2)
  189. def get_new_ip(event=None):
  190. b = e_ip_new.get().replace("[","").replace("]","")
  191. return b
  192. def get_new_ip_str(event=None):
  193. x = get_new_ip()
  194. #x = x[1:-1]
  195. x = x.strip()
  196. #x = x.replace(",",".")
  197. x = x.replace(" ","")
  198. x = x.split(",")
  199. print( "get_new_ip_str",x)
  200. return x
  201. def send_artaddr(event=None):
  202. ln = e_lname.get()
  203. sn = e_sname.get()
  204. ip = e_ip_new.get()
  205. ip = ip.replace(" ","")
  206. ip = ip.replace(",",".")
  207. univ = e_artnet_uni1.get()
  208. print("SEND ArtAddress:",[ln,sn,ip,univ])
  209. if ln and sn and ip and univ:
  210. nodescan.ArtAddress(ip=ip ,ShortName=sn, LongName=ln,Port="",Universes=univ)
  211. time.sleep(1)
  212. poll()
  213. def send_none(event=None):
  214. pass
  215. def send_mac(event=None):
  216. #new_mac = "CMD MAC6 " + hex(e_mac2.get()) #)
  217. #new_mac = "CMD MAC6 " + struct.pack("<B",(int(e_mac2.get(),16))).decode()
  218. new_mac = b"CMD MAC6 " + struct.pack("<B",(int(e_mac2.get(),16)))
  219. a = e_ip.get().replace("[","").replace("]","")
  220. cur_ip = []
  221. for i in a.split(","):
  222. cur_ip +=[int(i)]
  223. print("SEND MAC:",cur_ip,new_mac)
  224. nodescan.send_node_cmd(cur_ip,cmd=new_mac)
  225. #poll(1.5)
  226. def send_dmx_store(event=None):
  227. cmd = "CMD DMX STORE "
  228. a = e_ip.get().replace("[","").replace("]","")
  229. cur_ip = []
  230. for i in a.split(","):
  231. cur_ip +=[int(i)]
  232. print("SEND:",cur_ip,cmd)
  233. nodescan.send_node_cmd(cur_ip,cmd)
  234. poll(1.5)
  235. def send_cmd(event=None):
  236. cmd = e_cmd.get() #"CMD DMX STORE "
  237. _send_cmd(cmd=cmd)
  238. def send_cmd2(event=None):
  239. cmd = e_cmd2.get() #"CMD DMX STORE "
  240. _send_cmd(cmd=cmd)
  241. def send_cmd3(event=None):
  242. cmd = e_cmd3.get() #"CMD DMX STORE "
  243. _send_cmd(cmd=cmd)
  244. def send_cmd4(event=None):
  245. cmd = e_cmd4.get() #"CMD DMX STORE "
  246. _send_cmd(cmd=cmd)
  247. def send_cmd5(event=None):
  248. cmd = e_cmd5.get() #"CMD DMX STORE "
  249. _send_cmd(cmd=cmd)
  250. def _send_cmd(event=None,cmd=""):
  251. #cmd = e_cmd.get() #"CMD DMX STORE "
  252. cmd = cmd.split(" ")
  253. value = cmd[-1]
  254. try:
  255. value = struct.pack("<B",int(value))
  256. except:pass
  257. cmd = cmd[:-1] #.append(value)
  258. cmd.append(value)
  259. print("_send_cmd:",cmd)
  260. cmd=" ".join(map(str,cmd) )
  261. a = e_ip.get().replace("[","").replace("]","")
  262. cur_ip = []
  263. sep = "xx"
  264. if "," in a:
  265. sep = ","
  266. if "." in a:
  267. sep = "."
  268. for i in a.split(sep):
  269. cur_ip +=[int(i)]
  270. print("SEND:",cur_ip,cmd)
  271. nodescan.send_node_cmd(cur_ip,cmd)
  272. #poll(1.5)
  273. def set_ip(event=None):
  274. print("SET NEW IP")
  275. cur_ip=(2,0,0,94)
  276. new_ip=(2,0,0,201)
  277. new_netmask=(255,0,0,0)
  278. a = e_ip.get().replace("[","").replace("]","")
  279. b = e_ip_new.get().replace("[","").replace("]","")
  280. c = variable.get() #e_mask_new.get()
  281. new_netmask = [] #c.split(".") #list(c)
  282. for i in c.split("."):
  283. new_netmask +=[int(i)]
  284. cur_ip = []
  285. for i in a.split(","):
  286. cur_ip +=[int(i)]
  287. new_ip = []
  288. for i in b.split(","):
  289. new_ip +=[int(i)]
  290. if new_ip == cur_ip:
  291. print("neu und als IP sind gleich" )
  292. return 0
  293. #cur_ip=(2,0,0,94)
  294. #new_ip=(2,0,0,201)
  295. print("new",[cur_ip, new_ip, new_netmask])
  296. print()
  297. nodescan.set_ip4(cur_ip,new_ip, new_netmask)
  298. poll(1.5)
  299. def set_node_pin(evnet=None):
  300. cmd = "CMD DMX=PIN"
  301. ip = get_new_ip_str()
  302. print("ip",[ip])
  303. nodescan.send_node_cmd(ip,cmd=cmd)
  304. poll(1.5)
  305. def set_node_in(evnet=None):
  306. cmd="CMD DMX=IN"
  307. ip = get_new_ip_str()
  308. nodescan.send_node_cmd(ip,cmd=cmd)
  309. poll(1.5)
  310. def set_node_out(evnet=None):
  311. cmd="CMD DMX=OUT"
  312. ip = get_new_ip_str()
  313. nodescan.send_node_cmd(ip,cmd=cmd)
  314. poll(1.5)
  315. root = Tkinter.Tk()
  316. #root.geometry("900x700+100+100")
  317. root.geometry("900x400+100+100")
  318. root.title( title)
  319. fframe = Tkinter.Frame(root)
  320. fframe.pack(side="top",expand=0,fill="x")
  321. cframe = Tkinter.Frame(root)
  322. cframe.pack(side="top",expand=1,fill="both")
  323. font1 = ("Helvetica", 8)
  324. font2 = ("Helvetica", 10)
  325. font3 = ("Helvetica", 16)
  326. font20 = font=("Helvetica", 20)
  327. b_scan = Tkinter.Button(fframe,text="ArtNetPoll",width=10,command=poll,font=font2)
  328. b_scan.pack(side="left",expand=0,fill="y")
  329. b_scan = Tkinter.Button(fframe,text="clear",width=10,command=clear,font=font2)
  330. b_scan.pack(side="left",expand=0,fill="y")
  331. scrollbar = Tkinter.Scrollbar(cframe)
  332. scrollbar.pack(side=Tkinter.RIGHT, fill="y")
  333. #pool = Tkinter.Listbox(root,selectmode="extended",exportselection=0)
  334. li_nodes = Tkinter.Listbox(cframe,exportselection=0,width=35,font=font1)
  335. li_nodes.pack(side="left",expand=0,fill="y")
  336. li_nodes.bind("<ButtonRelease-1>",load )
  337. li_nodes.config(yscrollcommand=scrollbar.set)
  338. scrollbar.config(command=li_nodes.yview)
  339. eframe = Tkinter.Frame(cframe)
  340. eframe.pack(side="left",expand=0,fill="y")
  341. eframe1 = Tkinter.Frame(cframe)
  342. eframe1.pack(side="left",expand=0,fill="y")
  343. # ----------------------------------------------
  344. line_frame = Tkinter.Frame(eframe)
  345. line_frame.pack(side="top",expand=0,fill="x")
  346. x=Tkinter.Label(line_frame,text="msg:",font=font3,width=6).pack(side="left",expand=0,fill="y")
  347. MSG = Tkinter.Label(line_frame,text="xxx",font=font1,width=30,anchor="w")
  348. MSG.pack(side="left",expand=0,fill="y")
  349. #msg["bg"] = "lightgrey"
  350. #msg.pack(side="left")
  351. # ----------------------------------------------
  352. line_frame = Tkinter.Frame(eframe)
  353. line_frame.pack(side="top",expand=0,fill="x")
  354. Tkinter.Label(line_frame,text="OLD IP:",font=font3,width=6).pack(side="left",expand=0,fill="y")
  355. e_ip = Tkinter.Entry(line_frame,font=font20,width=13,state="disabled")
  356. e_ip["bg"] = "lightgrey"
  357. e_ip.pack(side="left")
  358. #b_scan = Tkinter.Button(line_frame,width=14,font=font3)
  359. #b_scan.pack(side="left",expand=1)
  360. # ----------------------------------------------
  361. line_frame = Tkinter.Frame(eframe)
  362. line_frame.pack(side="top",expand=0,fill="x")
  363. e_ip_label = Tkinter.Label(line_frame,text=" IP:",font=font3,width=6)
  364. e_ip_label.pack(side="left",expand=0,fill="y")
  365. e_ip_new = Tkinter.Entry(line_frame,font=font20,width=13)
  366. e_ip_new.bind("<Return>", set_ip )
  367. e_ip_new.bind("<KP_Enter>", set_ip)
  368. #e_ip_new.bind("<Tab>", update_name)
  369. e_ip_new.bind("<ISO_Left_Tab>", set_ip)
  370. e_ip_new.pack(side="left")
  371. #-------------------------------------------- line
  372. line_frame = Tkinter.Frame(eframe)
  373. line_frame.pack(side="top",expand=0,fill="x")
  374. variable = Tkinter.StringVar(root)
  375. variable.set("255.0.0.0") # default value
  376. Tkinter.Label(line_frame,text="MASK",font=font3,width=6).pack(side="left",expand=0,fill="y")
  377. e_mask_new = Tkinter.OptionMenu(line_frame, variable,"255.255.255.0","255.0.0.0") #,width=10)
  378. e_mask_new.configure(font=("Helvetica", 22))
  379. e_mask_new.configure(width=10)
  380. e_mask_new["bg"] = "#fff"
  381. #heigh=1,font=("Helvetica", 20)
  382. e_mask_new.pack(side="left")
  383. #e_mask_new.insert("end","255.0.0.0")
  384. #e_mask_new.insert("end","255.255.255.0")
  385. b_scan = Tkinter.Button(line_frame,text="SEND TO NODE",command=set_ip,width=14,font=font1)
  386. b_scan.pack(side="left",expand=0)
  387. #-------------------------------------------- line
  388. line_frame = Tkinter.Frame(eframe)
  389. line_frame.pack(side="top",expand=0,fill="x")
  390. Tkinter.Label(line_frame,text="MAC:",font=font3,width=6).pack(side="left",expand=0,fill="y")
  391. e_mac = Tkinter.Entry(line_frame,width=13,font=font20)
  392. e_mac.pack(side="left")
  393. e_mac["bg"] = "lightgrey"
  394. e_mac2 = Tkinter.Entry(line_frame,width=3,font=font20)
  395. e_mac2.pack(side="left")
  396. e_mac2.bind("<Return>", send_mac )
  397. e_mac2.bind("<KP_Enter>", send_mac)
  398. Tkinter.Button(line_frame,text="SEND TO NODE",command=send_mac,width=14,font=font1).pack(side="left",expand=0)
  399. #-------------------------------------------- line
  400. #b_scan = Tkinter.Button(eframe1,width=14,font=font3)
  401. #b_scan.pack(side="top",expand=0)
  402. line_frame = Tkinter.Frame(eframe)
  403. line_frame.pack(side="top",expand=0,fill="x")
  404. Tkinter.Label(line_frame,text="DMX:",font=font3,width=6).pack(side="left",expand=0,fill="y")
  405. b_set_node_pin = Tkinter.Button(line_frame,text="HW-PIN",command=set_node_pin,width=6,font=font3)
  406. b_set_node_pin.pack(side="left",expand=0)
  407. b_set_node_in = Tkinter.Button(line_frame,text="IN",command=set_node_in,width=6,font=font3)
  408. b_set_node_in.pack(side="left",expand=0)
  409. b_set_node_out = Tkinter.Button(line_frame,text="OUT",command=set_node_out,width=6,font=font3)
  410. b_set_node_out.pack(side="left",expand=0)
  411. #-------------------------------------------- line
  412. line_frame = Tkinter.Frame(eframe)
  413. line_frame.pack(side="top",expand=0,fill="x")
  414. Tkinter.Label(line_frame,text="CMD",font=font3,width=6).pack(side="left",expand=0,fill="y")
  415. e_cmd = Tkinter.Entry(line_frame,font=font3,width=16)
  416. e_cmd.bind("<Return>", send_cmd )
  417. e_cmd.pack(side="left")
  418. #-------------------------------------------- line
  419. line_frame = Tkinter.Frame(eframe)
  420. line_frame.pack(side="top",expand=0,fill="x")
  421. Tkinter.Label(line_frame,text="LName",font=font3,width=6).pack(side="left",expand=0,fill="y")
  422. e_lname = Tkinter.Entry(line_frame,font=font3,width=26)
  423. e_lname.pack(side="left")
  424. #-------------------------------------------- line
  425. line_frame = Tkinter.Frame(eframe)
  426. line_frame.pack(side="top",expand=0,fill="x")
  427. Tkinter.Label(line_frame,text="SName",font=font3,width=6).pack(side="left",expand=0,fill="y")
  428. e_sname = Tkinter.Entry(line_frame,font=font3,width=16)
  429. e_sname.pack(side="left")
  430. #-------------------------------------------- line
  431. line_frame = Tkinter.Frame(eframe)
  432. line_frame.pack(side="top",expand=0,fill="x")
  433. Tkinter.Label(line_frame,text="ArtNet",font=font3,width=6).pack(side="left",expand=0,fill="y")
  434. Tkinter.Label(line_frame,text="SUB:",font=font3,width=4).pack(side="left",expand=0,fill="y")
  435. e_artnet_uni1 = Tkinter.Entry(line_frame,font=font3,width=4,state="disabled")
  436. e_artnet_uni1.pack(side="left")
  437. Tkinter.Label(line_frame,text="NET:",font=font3,width=4).pack(side="left",expand=0,fill="y")
  438. e_artnet_uni1 = Tkinter.Entry(line_frame,font=font3,width=4,state="disabled")
  439. e_artnet_uni1.pack(side="left")
  440. Tkinter.Label(line_frame,text="UNI:",font=font3,width=4).pack(side="left",expand=0,fill="y")
  441. e_artnet_uni1 = Tkinter.Entry(line_frame,font=font3,width=4)
  442. e_artnet_uni1.pack(side="left")
  443. Tkinter.Button(line_frame,text="send ArtAddr",command=send_artaddr,width=14,font=font1).pack(side="left",expand=0)
  444. #-------------------------------------------- line
  445. b_scan = Tkinter.Text(eframe,width=20,font=font2)
  446. b_scan.pack(side="top",expand=1,fill="x")
  447. #-------------------------------------------- line
  448. line_frame = Tkinter.Frame(eframe1)
  449. line_frame.pack(side="top",expand=0,fill="x")
  450. Tkinter.Label(line_frame,text="CMD",font=font3,width=6).pack(side="left",expand=0,fill="y")
  451. e_cmd2 = Tkinter.Entry(line_frame,font=font3,width=16)
  452. e_cmd2.insert("end","DMX ERASE ")
  453. e_cmd2.bind("<Return>", send_cmd2 )
  454. e_cmd2.pack(side="left")
  455. #-------------------------------------------- line
  456. line_frame = Tkinter.Frame(eframe1)
  457. line_frame.pack(side="top",expand=0,fill="x")
  458. Tkinter.Label(line_frame,text="CMD",font=font3,width=6).pack(side="left",expand=0,fill="y")
  459. e_cmd3 = Tkinter.Entry(line_frame,font=font3,width=16)
  460. e_cmd3.insert("end","DMX OUT STORE ")
  461. e_cmd3.bind("<Return>", send_cmd3 )
  462. e_cmd3.pack(side="left")
  463. #-------------------------------------------- line
  464. line_frame = Tkinter.Frame(eframe1)
  465. line_frame.pack(side="top",expand=0,fill="x")
  466. Tkinter.Label(line_frame,text="CMD",font=font3,width=6).pack(side="left",expand=0,fill="y")
  467. e_cmd4 = Tkinter.Entry(line_frame,font=font3,width=16)
  468. e_cmd4.insert("end","DMX OUT SET 2")
  469. e_cmd4.bind("<Return>", send_cmd4 )
  470. e_cmd4.pack(side="left")
  471. #-------------------------------------------- line
  472. line_frame = Tkinter.Frame(eframe1)
  473. line_frame.pack(side="top",expand=0,fill="x")
  474. Tkinter.Label(line_frame,text="CMD",font=font3,width=6).pack(side="left",expand=0,fill="y")
  475. e_cmd5 = Tkinter.Entry(line_frame,font=font3,width=16)
  476. e_cmd5.insert("end","REBOOT ")
  477. e_cmd5.bind("<Return>", send_cmd5 )
  478. e_cmd5.pack(side="left")
  479. thread.start_new_thread(_scan, () )
  480. nodescan.bind_cmd_node()
  481. def read_cmd_buf():
  482. b_scan.insert("end", "buf read\n" )
  483. while 1:
  484. if nodescan.node_cmd_buf_list:
  485. msg = str(nodescan.node_cmd_buf_list)
  486. print("read_cmd_buf msg",msg)
  487. nodescan.node_cmd_buf_list = []
  488. stamp = str(time.time())+"\n"
  489. stamp = time.strftime("%Y-%m-%d %X\n")
  490. b_scan.insert("end",stamp)
  491. b_scan.insert("end", msg +"\n")
  492. b_scan.see("end")
  493. time.sleep(0.1)
  494. #thread.start_new_thread(nodescan.node_cmd_recive, () )
  495. #thread.start_new_thread(read_cmd_buf, () )
  496. def _update():
  497. while 1:
  498. time.sleep(1)
  499. root.update_idletasks()
  500. def X():
  501. thread.start_new_thread(nodescan.node_cmd_recive, () )
  502. thread.start_new_thread(read_cmd_buf, () )
  503. thread.start_new_thread(_update, () )
  504. #thread.start_new_thread(node_cmd_recive, () )
  505. #send_node_cmd(ip=(2,0,0,91),cmd="DMX OUT STORE")
  506. ##nodescan.send_node_cmd(ip=(2,255,255,255),cmd="CMD GT ")
  507. #nodescan.send_node_cmd(ip,cmd=cmd)
  508. #rx.loop()
  509. z = 0
  510. time.sleep(1)
  511. poll()
  512. while 1:
  513. nodes = rx.get()
  514. #print(len(nodes))
  515. if z % 10 == 0:
  516. pass
  517. print("----")
  518. #MSG["text"] = ""
  519. #MSG["bg"] = "grey"
  520. #pass#print("node count",len(nodes),rx.tick())
  521. #for node in nodes:
  522. # print(node["MAC"],node["lname"])
  523. z += 1
  524. time.sleep(0.2)
  525. print()
  526. print("time out")
  527. raw_input("ENDE")
  528. thread.start_new_thread(X,()) #node_cmd_recive, () )
  529. root.mainloop()