# Display big field reading using Tk GUI
# Update reading continuously

import sys
import requests		# Call to html server - library has to be downloaded
import time	        # Timestamps
import tkinter
from tkinter import *

# Set IP address for device here
# ipaddr = "192.168.1.135"
ipaddr = "192.168.55.239"

# Choose field units
Units = "Gauss"
UnitMult = 1.0
UnitFmt = "{:+11.2f}"
#Units = "Tesla"
#UnitMult = .0001
#UnitFmt = "{:+11.6f}"

session = requests.Session()

def getIOValue(path):
    return session.get("http://"+ipaddr+"/io"+path+"/value.json", timeout=1.0).json()

def getHostname():
    return str(getIOValue("/net/hostname"))

def getFieldString():
    val = getIOValue("/t1/probe/field")
    val = val * UnitMult
    return str(UnitFmt.format(val))

def isOverrange():
    return getIOValue("/t1/adc/overrange_interlock") > 0.0

# Get T1 ID
t1_Name = getHostname()

# Create Window
B_window = Tk()
B_window_Title = "PTC " + Units + "meter   " + t1_Name + "   " + ipaddr
B_window.wm_title(B_window_Title)
B_window.minsize(640,120)

# Get first field reading
vala = getFieldString()
#B_val=Label(B_window,text=vala,height=1,width=14,justify="right",bd=8,font="Ariel 50 bold",bg="black",fg='green',relief="ridge",padx=32,pady=16)

# Loop to get repeat readings
def draw():
    global B_val
    B_val=Label(B_window,text=vala+" "+Units,height=1,width=16,justify="right",bd=8,font='Courier 50 bold',bg="black",fg='green',relief="ridge",padx=32,pady=16)
    B_val.grid(row=0, column=0)
    
def updater():
    # Update field value, reject any failed reads
    try:
        vala = getFieldString()
        if isOverrange():
            B_val.configure(text="      Overrange",fg='#770000')
        else:
            B_val.configure(text=vala+" "+Units,fg='green')
        B_window.after(100, updater)
    except:
        B_val.configure(text="Comms err",fg='#770000')
        B_window.after(1000, updater)

draw()
updater()

B_window.mainloop()
