Browse Source

add: test-script

micha 2 years ago
parent
commit
c81b0c5df1
4 changed files with 613 additions and 86 deletions
  1. 477 0
      tool/mini-scan.py
  2. 16 75
      tool/nodescan_v6_2.py
  3. 67 0
      tool/set_ip.py
  4. 53 11
      tool/tk-nodescan_v7.3.py

+ 477 - 0
tool/mini-scan.py

@@ -0,0 +1,477 @@
+
+import socket
+import sys
+import struct
+import time
+
+sys.stdout.write("\x1b]2;Nodescan\x07")
+
+print(socket.AF_INET)
+
+try:
+    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+    sock.bind(('', 6454))
+    sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
+except socket.error as e:
+    print("Socket 6454 ", "ERR: {0} ".format(e.args))
+    sys.exit()
+    
+
+def ArtNet_poll(ip,port=6454):
+    print("POLL",[ip,port],end="")
+    sock.sendto(b'Art-Net\x00\x00 \x00\x0e\x06\x00',(ip,port)) # ArtPol / ping
+    print(" OK ;",end="")
+    print()
+
+
+def ArtNet_decode_pollreplay(data):
+    debug = 1
+    node = {}
+    if len(data) >= 10: #min opcode
+    
+        opcode = data[8:9+1]
+        #print([opcode])
+        #if opcode != struct.pack("<H",0x5000): #OpPollReplay
+        if opcode == struct.pack("<H",0x2100): #OpPollReplay
+            if len(data) >= 207: #Mal
+                print("decode",data[:13])           
+                if debug:print("-----------------------------------------")
+                if debug:print([opcode] ,"OpPollReplay")
+                _ip = []
+                print(data[10])
+                _ip.append( data[10] )
+                _ip.append( data[11] )
+                _ip.append( data[12] )
+                _ip.append( data[13] )
+                node["IP"] = str(_ip)
+                
+                if debug:print([_ip])
+                _port = struct.unpack("<H",data[14:15+1] )
+                #Versinfo = struct.unpack("<H",data[16:17+1] )
+                Versinfo = data[16:17+1] 
+                node["port"] = _port
+                if debug:print("_port :", [_port ])
+                
+                node["version"] = Versinfo
+                if debug:print("Version:",[Versinfo])
+                
+                NetSwitch = data[18] 
+                node["NetSwitch"] = NetSwitch
+                if debug:print("NetSwitch:",[NetSwitch])
+                SubSwitch = data[19] 
+                node["SubSwitch"] = SubSwitch
+                if debug:print("SubSwitch:",[SubSwitch])
+                
+                #oem = struct.unpack("<H",data[19:20+1] )
+                oem = data[20:21+1]
+                node["oem"] = oem
+                if debug:print("oem",[oem])
+                
+                ubea = data[22]
+                node["ubea"] = ubea
+                if debug:print("ubea ver.",[ubea])
+                stat = data[23]
+                node["status"] = stat
+                if debug:print("Status1 ",[stat])
+                esta = data[24:25+1]
+                node["esta"] = esta
+                if debug:print("esta Manuf",[esta])
+                
+                
+                sname = data[26:26+17]
+                #if debug:print(len(sname) #17+1)
+                sname = sname.strip(b"\x00")
+                node["sname"] = sname
+                
+                lname = data[44:44+43]
+                #if debug:print(len(lname) #43+1)
+                lname = lname.strip(b"\x00")
+                node["lname"] = lname
+                
+                NodeReport = data[108:108+20]
+                NodeReport = NodeReport.strip(b"\x00")
+                #if debug:print("Node",node_nr,addr)
+                if debug:print([sname,lname,NodeReport])
+                
+                NumPort =  data[173] 
+                node["NumPort"] = NumPort
+                if debug:print("NumPort",[NumPort])
+                
+                PortTypes = data[174:174+4]
+                node["PortTypes"] = PortTypes
+                if debug:print("PortTypes",[PortTypes])
+                
+                GoodInput = data[178:178+4]
+                node["GoodInput"] = GoodInput
+                if debug:print("GoodInput",[GoodInput])
+                GoodOutput = data[182:182+4]
+                node["GoodOutput"] = GoodOutput
+                if debug:print("GoodOutput",[GoodOutput])
+                
+                SwIn = data[186:186+4]
+                node["SwIn"] = SwIn
+                if debug:print("SwIn",[SwIn])
+                
+                SwOut = data[190:190+4]
+                node["SwOut"] = SwOut
+                if debug:print("SwOut",[SwOut])
+                
+                msg = data[108:108+40]
+                node["MSG"] = msg.replace(b"\x00",b"")
+                if debug:print("MSG",[msg])
+                
+                
+                MAC = data[201:201+6]
+                _MAC = []
+                for x in MAC:
+                    #x = hex(ord(x))[2:]
+                    x = hex(x)#[2:]
+                    x = x.rjust(2,"0")
+                    _MAC.append(x)
+                #hex(ord("\xf9"))[2:]
+                if debug:print("MAC",[":".join(_MAC)])
+                node["MAC"] = ":".join(_MAC)
+                
+                #node_nr += 1
+                #if debug:print([addr,data])
+                #print()
+            else:
+                print(opcode, len(data))
+    return node
+
+
+def loop():
+    print("-- NODE SCAN START ---")
+    print()
+    while 1:
+        data, addr = sock.recvfrom(500)
+        new_node = ArtNet_decode_pollreplay( data )            
+        print("rvc loop",addr)
+        if new_node:
+            print("rcv",new_node)
+            #self.add(new_node)
+        time.sleep(0.001)
+    print("-- NODE SCAN STOP ---")
+    print()
+
+
+#loop()
+import _thread as thread
+thread.start_new_thread(loop, () )
+
+time.sleep(2)
+
+print()
+print()
+ArtNet_poll("2.0.0.255")
+time.sleep(0.5)
+print()
+print()
+ArtNet_poll("2.0.0.255")
+time.sleep(0.5)
+print()
+print()
+ArtNet_poll("2.0.0.255")
+time.sleep(0.5)
+print()
+print()
+ArtNet_poll("2.0.0.255")
+time.sleep(0.5)
+print()
+print()
+ArtNet_poll("2.0.0.255")
+time.sleep(0.5)
+print()
+print()
+ArtNet_poll("2.0.0.255")
+time.sleep(0.5)
+print()
+print()
+ArtNet_poll("2.0.0.255")
+time.sleep(0.5)
+print()
+print()
+ArtNet_poll("2.0.0.255")
+time.sleep(0.5)
+print()
+print()
+ArtNet_poll("2.0.0.255")
+time.sleep(0.5)
+print()
+print()
+ArtNet_poll("10.0.0.255")
+time.sleep(0.5)
+print()
+print()
+ArtNet_poll("2.255.255.255")
+time.sleep(0.5)
+print()
+print()
+ArtNet_poll("192.168.2.255")
+time.sleep(0.5)
+print()
+print()
+ArtNet_poll("192.168.1.255")
+time.sleep(0.5)
+print()
+print()
+ArtNet_poll("192.168.0.255")
+time.sleep(0.5)
+print()
+print()
+
+
+while 1:
+    time.sleep(1)
+ArtNet_poll("10.0.0.255")
+time.sleep(0.5)
+ArtNet_poll("2.255.255.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.2.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.1.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.0.255")
+time.sleep(0.5)
+
+
+while 1:
+    time.sleep(1)
+ArtNet_poll("10.0.0.255")
+time.sleep(0.5)
+ArtNet_poll("2.255.255.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.2.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.1.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.0.255")
+time.sleep(0.5)
+
+
+while 1:
+    time.sleep(1)
+ArtNet_poll("10.0.0.255")
+time.sleep(0.5)
+ArtNet_poll("2.255.255.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.2.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.1.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.0.255")
+time.sleep(0.5)
+
+
+while 1:
+    time.sleep(1)
+ArtNet_poll("10.0.0.255")
+time.sleep(0.5)
+ArtNet_poll("2.255.255.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.2.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.1.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.0.255")
+time.sleep(0.5)
+
+
+while 1:
+    time.sleep(1)
+ArtNet_poll("10.0.0.255")
+time.sleep(0.5)
+ArtNet_poll("2.255.255.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.2.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.1.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.0.255")
+time.sleep(0.5)
+
+
+while 1:
+    time.sleep(1)
+ArtNet_poll("10.0.0.255")
+time.sleep(0.5)
+ArtNet_poll("2.255.255.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.2.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.1.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.0.255")
+time.sleep(0.5)
+
+
+while 1:
+    time.sleep(1)
+ArtNet_poll("10.0.0.255")
+time.sleep(0.5)
+ArtNet_poll("2.255.255.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.2.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.1.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.0.255")
+time.sleep(0.5)
+
+
+while 1:
+    time.sleep(1)
+ArtNet_poll("10.0.0.255")
+time.sleep(0.5)
+ArtNet_poll("2.255.255.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.2.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.1.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.0.255")
+time.sleep(0.5)
+
+
+while 1:
+    time.sleep(1)
+ArtNet_poll("10.0.0.255")
+time.sleep(0.5)
+ArtNet_poll("2.255.255.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.2.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.1.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.0.255")
+time.sleep(0.5)
+
+
+while 1:
+    time.sleep(1)
+ArtNet_poll("10.0.0.255")
+time.sleep(0.5)
+ArtNet_poll("2.255.255.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.2.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.1.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.0.255")
+time.sleep(0.5)
+
+
+while 1:
+    time.sleep(1)
+ArtNet_poll("10.0.0.255")
+time.sleep(0.5)
+ArtNet_poll("2.255.255.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.2.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.1.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.0.255")
+time.sleep(0.5)
+
+
+while 1:
+    time.sleep(1)
+ArtNet_poll("10.0.0.255")
+time.sleep(0.5)
+ArtNet_poll("2.255.255.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.2.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.1.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.0.255")
+time.sleep(0.5)
+
+
+while 1:
+    time.sleep(1)
+ArtNet_poll("10.0.0.255")
+time.sleep(0.5)
+ArtNet_poll("2.255.255.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.2.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.1.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.0.255")
+time.sleep(0.5)
+
+
+while 1:
+    time.sleep(1)
+ArtNet_poll("10.0.0.255")
+time.sleep(0.5)
+ArtNet_poll("2.255.255.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.2.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.1.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.0.255")
+time.sleep(0.5)
+
+
+while 1:
+    time.sleep(1)
+ArtNet_poll("10.0.0.255")
+time.sleep(0.5)
+ArtNet_poll("2.255.255.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.2.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.1.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.0.255")
+time.sleep(0.5)
+
+
+while 1:
+    time.sleep(1)
+ArtNet_poll("10.0.0.255")
+time.sleep(0.5)
+ArtNet_poll("2.255.255.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.2.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.1.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.0.255")
+time.sleep(0.5)
+
+
+while 1:
+    time.sleep(1)
+ArtNet_poll("10.0.0.255")
+time.sleep(0.5)
+ArtNet_poll("2.255.255.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.2.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.1.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.0.255")
+time.sleep(0.5)
+
+
+while 1:
+    time.sleep(1)
+ArtNet_poll("10.0.0.255")
+time.sleep(0.5)
+ArtNet_poll("2.255.255.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.2.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.1.255")
+time.sleep(0.5)
+ArtNet_poll("192.168.0.255")
+time.sleep(0.5)
+
+
+while 1:
+    time.sleep(1)

+ 16 - 75
tool/nodescan_v6_2.py

@@ -198,6 +198,7 @@ class ArtNetNodes():
         #for i in add_node:
         #    print(i,[add_node[i]])
         #print()
+        print("add",add_node)
         try:
             self.__lock.acquire()
             update_node = 0
@@ -245,10 +246,10 @@ class ArtNetNodes():
                         print("NODE NOT CHANGE".ljust(16," "),info)
                         node["REFRESHSTAMP"] = time.time()
                         update_node = 1
-                            
+            print("x-node:",update_node,add_node)                
             if not update_node: # ADD NEW NODE
-                
                 node = add_node
+                print("add_node",node)
                 node["BOOT"] = BOOT
                 info = node["MAC"],node["IP"].ljust(16," "),[node["SwIn"],node["SwOut"],node["PortTypes"]]
                 
@@ -276,15 +277,17 @@ class ArtNetNodes():
         if self.__nodes:
             out = copy.deepcopy(self.__nodes)                
         self.__lock.release()
-        return out    
+        return out
+
     def recive(self):
         print("-- NODE SCAN START ---")
         print()
         while 1:
             data, addr = sock.recvfrom(500)
             new_node = ArtNet_decode_pollreplay( data )            
+            print("rvc loop",addr)
             if new_node:
-                #print(new_node)
+                print("rcv",new_node)
                 self.add(new_node)
             time.sleep(0.001)
         print("-- NODE SCAN STOP ---")
@@ -292,14 +295,14 @@ class ArtNetNodes():
         
     def loop(self):
         thread.start_new_thread(self.recive, () )
-        time.sleep(1)
+        time.sleep(5)
         poll()
         
 Reciver = ArtNetNodes
     
 
 def ArtNet_decode_pollreplay(data):
-    debug = 0
+    debug = 1
     node = {}
     if len(data) >= 10: #min opcode
     
@@ -308,14 +311,15 @@ def ArtNet_decode_pollreplay(data):
         #if opcode != struct.pack("<H",0x5000): #OpPollReplay
         if opcode == struct.pack("<H",0x2100): #OpPollReplay
             if len(data) >= 207: #Mal
-            
+                print("decode",data[:13])           
                 if debug:print("-----------------------------------------")
                 if debug:print([opcode] ,"OpPollReplay")
                 _ip = []
-                _ip.append( ord(data[10]) )
-                _ip.append( ord(data[11]) )
-                _ip.append( ord(data[12]) )
-                _ip.append( ord(data[13]) )
+                print(data[10])
+                _ip.append( data[10] )
+                _ip.append( data[11] )
+                _ip.append( data[12] )
+                _ip.append( data[13] )
                 node["IP"] = str(_ip)
                 
                 if debug:print([_ip])
@@ -347,69 +351,6 @@ def ArtNet_decode_pollreplay(data):
                 node["status"] = stat
                 if debug:print("Status1 ",[stat])
                 esta = data[24:25+1]
-                node["esta"] = esta
-                if debug:print("esta Manuf",[esta])
-                
-                
-                sname = data[26:26+17]
-                #if debug:print(len(sname) #17+1)
-                sname = sname.strip("\x00")
-                node["sname"] = sname
-                
-                lname = data[44:44+43]
-                #if debug:print(len(lname) #43+1)
-                lname = lname.strip("\x00")
-                node["lname"] = lname
-                
-                NodeReport = data[108:108+20]
-                NodeReport = NodeReport.strip("\x00")
-                #if debug:print("Node",node_nr,addr)
-                if debug:print([sname,lname,NodeReport])
-                
-                NumPort = ord( data[173]) 
-                node["NumPort"] = NumPort
-                if debug:print("NumPort",[NumPort])
-                
-                PortTypes = data[174:174+4]
-                node["PortTypes"] = PortTypes
-                if debug:print("PortTypes",[PortTypes])
-                
-                GoodInput = data[178:178+4]
-                node["GoodInput"] = GoodInput
-                if debug:print("GoodInput",[GoodInput])
-                GoodOutput = data[182:182+4]
-                node["GoodOutput"] = GoodOutput
-                if debug:print("GoodOutput",[GoodOutput])
-                
-                SwIn = data[186:186+4]
-                node["SwIn"] = SwIn
-                if debug:print("SwIn",[SwIn])
-                
-                SwOut = data[190:190+4]
-                node["SwOut"] = SwOut
-                if debug:print("SwOut",[SwOut])
-                
-                msg = data[108:108+40]
-                node["MSG"] = msg.replace("\x00","")
-                if debug:print("MSG",[msg])
-                
-                
-                MAC = data[201:201+6]
-                _MAC = []
-                for x in MAC:
-                    x = hex(ord(x))[2:]
-                    x = x.rjust(2,"0")
-                    _MAC.append(x)
-                #hex(ord("\xf9"))[2:]
-                if debug:print("MAC",[":".join(_MAC)])
-                node["MAC"] = ":".join(_MAC)
-                
-                #node_nr += 1
-                #if debug:print([addr,data])
-                #print()
-            else:
-                print(opcode, len(data))
-    return node
 
 def set_ip4(cur_ip=(2,0,0,91),new_ip=(2,0,0,201),new_netmask=(255,0,0,0)):
     
@@ -465,7 +406,7 @@ def set_ip4(cur_ip=(2,0,0,91),new_ip=(2,0,0,201),new_netmask=(255,0,0,0)):
     
     
     print("------------------------------")
-    data = 'CMD IP '+ "".join(data)
+    data = b'CMD IP '+ b"".join(data)
     
     print("SENDING TO ",(ip,port))
     print([data]) #,    cur_ip=(2,0,0,91))

+ 67 - 0
tool/set_ip.py

@@ -0,0 +1,67 @@
+import nodescan_v6_2 as n
+import socket
+
+import time
+import socket, struct
+import sys
+import _thread as thread
+import copy
+import random
+
+sys.stdout.write("\x1b]2;Nodescan\x07")
+if 0:
+    print(socket.AF_INET)
+
+    try:
+        sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+        sock.bind(('', 6454))
+        sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
+    except socket.error as e:
+        print("Socket 6454 ", "ERR: {0} ".format(e.args))
+        sys.exit()
+        
+        
+        
+    try:
+        sock2 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+        sock2.bind(('', 6455))
+        sock2.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
+    except socket.error as e:
+        print("Socket2 6454 ", "ERR: {0} ".format(e.args))
+        sys.exit()
+
+
+    print(socket.AF_INET)
+    sock_cmd = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+ 
+
+
+print(dir(n))
+
+def loop():
+    print("-- NODE SCAN START ---")
+    print()
+    while 1:
+        data, addr = sock.recvfrom(500)
+        new_node = ArtNet_decode_pollreplay( data )            
+        print("rvc loop",addr)
+        if new_node:
+            print("rcv",new_node)
+            #self.add(new_node)
+        time.sleep(0.001)
+    print("-- NODE SCAN STOP ---")
+    print()
+#192.168.0.91
+
+import time
+import _thread as thread
+
+#thread.start_new_thread(loop, () )
+
+time.sleep(2)
+
+n.set_ip4(cur_ip=(192,168,0,91),new_ip=(2,0,0,201),new_netmask=(255,0,0,0) )
+
+
+
+

+ 53 - 11
tool/tk-nodescan_v7.3.py

@@ -21,11 +21,12 @@ along with librelight.  If not, see <http://www.gnu.org/licenses/>.
 """
 
 import time
-import tkinter as Tkinter
+import struct
 import sys
+import tkinter as Tkinter
 import _thread as thread
+
 import nodescan_v6_2 as nodscaner 
-import struct
 
 title = "TK-ArtNet-Nodscaner"
 sys.stdout.write("\x1b]2;"+title+"\x07")
@@ -181,12 +182,11 @@ def _scan():
             
         time.sleep(0.2)
     
-def scan():
-    thread.start_new_thread(_scan, () )
 
 def get_new_ip(event=None):
     b = e_ip_new.get().replace("[","").replace("]","")
     return b
+
 def get_new_ip_str(event=None):
     x = get_new_ip()
     #x = x[1:-1]
@@ -251,8 +251,13 @@ def _send_cmd(event=None,cmd=""):
     print("ERRRRR",cmd)
     cmd=" ".join(cmd )
     a = e_ip.get().replace("[","").replace("]","")
-    cur_ip = []    
-    for i in a.split(","):
+    cur_ip = []
+    sep = "xx"
+    if "," in a:
+        sep = ","
+    if "." in a:
+        sep = "."
+    for i in a.split(sep):
         cur_ip +=[int(i)]
     print("SEND:",cur_ip,cmd)
     nodscaner.send_node_cmd(cur_ip,cmd)
@@ -494,21 +499,58 @@ e_cmd5.bind("<Return>", send_cmd5 )
 e_cmd5.pack(side="left")
 
 
-#poll_loop(1)
-#thread.start_new_thread(poll_loop,(1,))
-scan()
+thread.start_new_thread(_scan, () )
 nodscaner.bind_cmd_node()
+
 def read_cmd_buf():
     b_scan.insert("end", "buf read\n" )
     while 1:
         if nodscaner.node_cmd_buf_list:
             msg = str(nodscaner.node_cmd_buf_list)
+            print("read_cmd_buf msg",msg)
             nodscaner.node_cmd_buf_list = []
             b_scan.insert("end",str(time.time())+"\n")
             b_scan.insert("end", msg +"\n")
             
             b_scan.see("end")
         time.sleep(0.1)
-thread.start_new_thread(nodscaner.node_cmd_recive, () )
-thread.start_new_thread(read_cmd_buf, () )
+
+#thread.start_new_thread(nodscaner.node_cmd_recive, () )
+#thread.start_new_thread(read_cmd_buf, () )
+
+def X():
+    thread.start_new_thread(nodscaner.node_cmd_recive, () )
+    thread.start_new_thread(read_cmd_buf, () )
+    #thread.start_new_thread(node_cmd_recive, () )
+    #send_node_cmd(ip=(2,0,0,91),cmd="DMX OUT STORE")
+    send_node_cmd(ip=(2,255,255,255),cmd="CMD GT ")
+   
+
+    rx = ArtNetNodes()
+    rx.loop()
+    z = 0
+    while 1:
+        
+        nodes = rx.get()
+        #print(len(nodes))
+        
+        if z % 10 == 0:
+            print()
+            pass
+            
+        
+            print("node count",len(nodes))
+            #for i in nodes:
+            #print(i)
+        z += 1
+        time.sleep(0.2)
+        
+    print()
+    print("time out")
+    raw_input("ENDE")
+
+thread.start_new_thread(X,()) #node_cmd_recive, () )
 root.mainloop()
+
+
+