#! /usr/bin/python
# -*- coding: utf-8 -*-
"""
This file is part of librelight.
librelight is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
librelight is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with librelight. If not, see .
(c) 2012 micha.rathfelder@gmail.com
"""
import time
import struct
import sys
import tkinter as Tkinter
import _thread as thread
import nodescan_v6_2 as nodscaner
title = "TK-ArtNet-Nodscaner"
sys.stdout.write("\x1b]2;"+title+"\x07")
node_list = []
def load(event):
sel = int( li_nodes.curselection()[0] )
print("li_nodes.get")
try:
sel = int(li_nodes.get(sel).split()[0])
print(sel)
except:
return 0
sel -= 1
node_list[sel]
clear_entry_ip()
e_ip.configure(state='normal')
e_ip.insert("end",node_list[sel]["IP"].replace("[","").replace("]",""))
#e_ip.configure(state='readonly')
e_ip_new.insert("end",node_list[sel]["IP"].replace("[","").replace("]",""))
e_mac.delete("0","end")
e_mac.insert("end",node_list[sel]["MAC"].replace("[","").replace("]",""))
e_mac2.delete("0","end")
e_mac2.insert("end",node_list[sel]["MAC"].split(":")[-1])
#print(dir(event))
#print(node_list)
#for i in node_list:
# print(i)
def clear_entry_ip():
e_ip.configure(state='normal')
e_ip.delete("0","end")
e_ip.configure(state='readonly')
e_ip_new.delete("0","end")
def clear_node():
global node_list
li_nodes.delete("0","end")
node_list = []
li_nodes.delete("0","end")
def poll(delay=1):
global old_tick
#clear_entry_ip()
clear_node()
time.sleep(delay)
nodscaner.poll()
time.sleep(0.5)
old_tick = 0
def clear(event= None):
global rx
rx.clear()
poll()
def poll_loop(sleep):
if sleep < 1:
sleep = 1
time.sleep(sleep)
while 1:
poll()
time.sleep(sleep)
old_tick = 0
rx = nodscaner.ArtNetNodes()
def _scan():
global rx,node_list,old_tick,Scrollbar
rx.loop()
print("get node from cache " )
li_nodes.insert("end",str("----"))
while 1:
nodes = rx.get()
new_tick = rx.tick()
#print("tick",new_tick)
if new_tick == old_tick:
pass
continue
old_tick = new_tick
print("node",nodes)
if nodes:
li_node_scroll = li_nodes.yview()
clear_node()
#li_nodes.delete(0,"end")
print("yea",len(nodes))
node_nr = 1
for node in nodes:
#print(node)
#try:
li_nodes.insert("end",str(node_nr).rjust(3," ") +" "+ node["lname"])
ip = str(node_nr).rjust(3," ") +" "+ node["IP"]
bg = ""
if node["PortTypes"][0] == "@":
ip += " DMX-in"
bg ="yellow"
else:
ip += " DMX-out"
bg ="lightgreen"
if bg:
color = li_nodes.itemconfig("end", bg=bg)
li_nodes.insert("end",str(node_nr).rjust(3," ") +" short Name:"+ node["sname"])
li_nodes.insert("end",ip)
if bg:
color = li_nodes.itemconfig("end", bg=bg)
inout = " UNIVERS OUT="+ str(ord(node["SwOut"][0])+1)+" IN="+ str(ord(node["SwIn"][0])+1)
li_nodes.insert("end",str(node_nr).rjust(3," ") + inout)
li_nodes.insert("end",str(node_nr).rjust(3," ") +" "+ node["MAC"])
timeline = ""
timeline += " LASTCHANGE:%0.1f"% (time.time()-float(node["UPDATESTAMP"]) )
REFRESHSTAMP = time.time()-float(node["REFRESHSTAMP"])
timeline +=" LASTPING:%0.1f"% REFRESHSTAMP
li_nodes.insert("end",str(node_nr).rjust(3," ") +timeline )
if node["BOOT"]:
BOOT = time.time()-float(node["BOOT"])
else:
BOOT = 0
timeline =" BOOT:%0.1f"% BOOT
li_nodes.insert("end",str(node_nr).rjust(3," ") +timeline +" sec" )
bg = ""
if REFRESHSTAMP > 5 :
bg="red"
else:
bg="lightgreen"
if bg:
li_nodes.itemconfig("end", bg=bg)
#li_nodes.insert("end",str(node_nr).rjust(3," ")
#li_nodes.insert("end","")
li_nodes.insert("end","*"*60)
#li_nodes.itemconfig("end", bg="brown")
node_nr += 1
node_list += [node]
#Scrollbar.set('0', '0.1')
print(li_node_scroll)
#print(dir(li_nodes))
#li_node_scroll = int(li_node_scroll[0])
#li_nodes.yview_moveto(li_node_scroll)
time.sleep(0.2)
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]
x = x.strip()
#x = x.replace(",",".")
x = x.replace(" ","")
x = x.split(",")
print( "get_new_ip_str",x)
return x
def send_none(event=None):
pass
def send_mac(event=None):
new_mac = "CMD MAC6 " + struct.pack("",load )
li_nodes.config(yscrollcommand=scrollbar.set)
scrollbar.config(command=li_nodes.yview)
eframe = Tkinter.Frame(cframe)
eframe.pack(side="left",expand=0,fill="y")
eframe1 = Tkinter.Frame(cframe)
eframe1.pack(side="left",expand=0,fill="y")
# ----------------------------------------------
line_frame = Tkinter.Frame(eframe)
line_frame.pack(side="top",expand=0,fill="x")
Tkinter.Label(line_frame,text="OLD IP:",font=font3,width=6).pack(side="left",expand=0,fill="y")
e_ip = Tkinter.Entry(line_frame,font=font20)
e_ip.pack(side="left")
#b_scan = Tkinter.Button(line_frame,width=14,font=font3)
#b_scan.pack(side="left",expand=1)
# ----------------------------------------------
line_frame = Tkinter.Frame(eframe)
line_frame.pack(side="top",expand=0,fill="x")
e_ip_label = Tkinter.Label(line_frame,text=" IP:",font=font3,width=6)
e_ip_label.pack(side="left",expand=0,fill="y")
e_ip_new = Tkinter.Entry(line_frame,font=font20)
e_ip_new.bind("", set_ip )
e_ip_new.bind("", set_ip)
#e_ip_new.bind("", update_name)
e_ip_new.bind("", set_ip)
e_ip_new.pack(side="left")
#-------------------------------------------- line
line_frame = Tkinter.Frame(eframe)
line_frame.pack(side="top",expand=0,fill="x")
variable = Tkinter.StringVar(root)
variable.set("255.0.0.0") # default value
Tkinter.Label(line_frame,text="IPMASK",font=font3,width=6).pack(side="left",expand=0,fill="y")
e_mask_new = Tkinter.OptionMenu(line_frame, variable,"255.255.255.0","255.0.0.0")
e_mask_new.configure(font=("Helvetica", 20))
e_mask_new.configure(width=17)
#heigh=1,font=("Helvetica", 20)
e_mask_new.pack(side="left")
#e_mask_new.insert("end","255.0.0.0")
#e_mask_new.insert("end","255.255.255.0")
b_scan = Tkinter.Button(line_frame,text="SEND TO NODE",command=set_ip,width=14,font=font1)
b_scan.pack(side="left",expand=0)
#-------------------------------------------- line
line_frame = Tkinter.Frame(eframe)
line_frame.pack(side="top",expand=0,fill="x")
Tkinter.Label(line_frame,text="MAC:",font=font3,width=6).pack(side="left",expand=0,fill="y")
e_mac = Tkinter.Entry(line_frame,width=16,font=font20)
e_mac.pack(side="left")
e_mac2 = Tkinter.Entry(line_frame,width=3,font=font20)
e_mac2.pack(side="left")
e_mac2.bind("", send_mac )
e_mac2.bind("", send_mac)
Tkinter.Button(line_frame,text="SEND TO NODE",command=send_mac,width=14,font=font1).pack(side="left",expand=0)
#-------------------------------------------- line
#b_scan = Tkinter.Button(eframe1,width=14,font=font3)
#b_scan.pack(side="top",expand=0)
line_frame = Tkinter.Frame(eframe)
line_frame.pack(side="top",expand=0,fill="x")
Tkinter.Label(line_frame,text="DMX:",font=font3,width=6).pack(side="left",expand=0,fill="y")
b_set_node_pin = Tkinter.Button(line_frame,text="HW-PIN",command=set_node_pin,width=6,font=font3)
b_set_node_pin.pack(side="left",expand=0)
b_set_node_in = Tkinter.Button(line_frame,text="IN",command=set_node_in,width=6,font=font3)
b_set_node_in.pack(side="left",expand=0)
b_set_node_out = Tkinter.Button(line_frame,text="OUT",command=set_node_out,width=6,font=font3)
b_set_node_out.pack(side="left",expand=0)
#-------------------------------------------- line
line_frame = Tkinter.Frame(eframe)
line_frame.pack(side="top",expand=0,fill="x")
Tkinter.Label(line_frame,text="CMD",font=font3,width=6).pack(side="left",expand=0,fill="y")
e_cmd = Tkinter.Entry(line_frame,font=font3,width=16)
e_cmd.bind("", send_cmd )
e_cmd.pack(side="left")
#-------------------------------------------- line
line_frame = Tkinter.Frame(eframe)
line_frame.pack(side="top",expand=0,fill="x")
Tkinter.Label(line_frame,text="L-Name",font=font3,width=6).pack(side="left",expand=0,fill="y")
e_lname = Tkinter.Entry(line_frame,font=font3,width=10)
e_lname.pack(side="left")
#-------------------------------------------- line
line_frame = Tkinter.Frame(eframe)
line_frame.pack(side="top",expand=0,fill="x")
Tkinter.Label(line_frame,text="S-Name",font=font3,width=6).pack(side="left",expand=0,fill="y")
e_sname = Tkinter.Entry(line_frame,font=font3,width=10)
e_sname.pack(side="left")
#-------------------------------------------- line
line_frame = Tkinter.Frame(eframe)
line_frame.pack(side="top",expand=0,fill="x")
Tkinter.Label(line_frame,text="ArtNet",font=font3,width=6).pack(side="left",expand=0,fill="y")
Tkinter.Label(line_frame,text="SUB:",font=font3,width=4).pack(side="left",expand=0,fill="y")
e_artnet_uni1 = Tkinter.Entry(line_frame,font=font3,width=4)
e_artnet_uni1.pack(side="left")
Tkinter.Label(line_frame,text="NET:",font=font3,width=4).pack(side="left",expand=0,fill="y")
e_artnet_uni1 = Tkinter.Entry(line_frame,font=font3,width=4)
e_artnet_uni1.pack(side="left")
Tkinter.Label(line_frame,text="UNI:",font=font3,width=4).pack(side="left",expand=0,fill="y")
e_artnet_uni1 = Tkinter.Entry(line_frame,font=font3,width=4)
e_artnet_uni1.pack(side="left")
Tkinter.Button(line_frame,text="SEND TO NODE",command=send_none,width=14,font=font1).pack(side="left",expand=0)
#-------------------------------------------- line
b_scan = Tkinter.Text(eframe,width=20,font=font2)
b_scan.pack(side="top",expand=1,fill="x")
#-------------------------------------------- line
line_frame = Tkinter.Frame(eframe1)
line_frame.pack(side="top",expand=0,fill="x")
Tkinter.Label(line_frame,text="CMD",font=font3,width=6).pack(side="left",expand=0,fill="y")
e_cmd2 = Tkinter.Entry(line_frame,font=font3,width=16)
e_cmd2.insert("end","DMX ERASE ")
e_cmd2.bind("", send_cmd2 )
e_cmd2.pack(side="left")
#-------------------------------------------- line
line_frame = Tkinter.Frame(eframe1)
line_frame.pack(side="top",expand=0,fill="x")
Tkinter.Label(line_frame,text="CMD",font=font3,width=6).pack(side="left",expand=0,fill="y")
e_cmd3 = Tkinter.Entry(line_frame,font=font3,width=16)
e_cmd3.insert("end","DMX OUT STORE ")
e_cmd3.bind("", send_cmd3 )
e_cmd3.pack(side="left")
#-------------------------------------------- line
line_frame = Tkinter.Frame(eframe1)
line_frame.pack(side="top",expand=0,fill="x")
Tkinter.Label(line_frame,text="CMD",font=font3,width=6).pack(side="left",expand=0,fill="y")
e_cmd4 = Tkinter.Entry(line_frame,font=font3,width=16)
e_cmd4.insert("end","DMX OUT SET 2")
e_cmd4.bind("", send_cmd4 )
e_cmd4.pack(side="left")
#-------------------------------------------- line
line_frame = Tkinter.Frame(eframe1)
line_frame.pack(side="top",expand=0,fill="x")
Tkinter.Label(line_frame,text="CMD",font=font3,width=6).pack(side="left",expand=0,fill="y")
e_cmd5 = Tkinter.Entry(line_frame,font=font3,width=16)
e_cmd5.insert("end","REBOOT ")
e_cmd5.bind("", send_cmd5 )
e_cmd5.pack(side="left")
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, () )
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()