John's Vademecum

Try to learn something about everything, and everything about something -Thomas Huxley “Darwin's bulldog” (1824-1895)

User Tools

Site Tools


public:musings:watches:watchcheck

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
public:musings:watches:watchcheck [30/12/25 09:55 GMT] – created - external edit 127.0.0.1public:musings:watches:watchcheck [23/01/26 14:13 GMT] (current) john
Line 12: Line 12:
 directory. the data from each measurement is stored in a **json** file in the same directory. directory. the data from each measurement is stored in a **json** file in the same directory.
  
-++++ watchcheck.py |+** update 23/01/26 **  I've modified the code to run under Python 3 - using the tool ''2to3'' and a minor manual tweak. 
 + 
 + 
 +++++ watchcheck.py in Python 3 | 
 <file python watchcheck.py> <file python watchcheck.py>
 +     
 +# a text-terminal version of the WatchCheck app
 +## to track error, daily error rate of timepieces.
 +# auto update?
 +#
 +import time
 +import datetime
 +import json
 +     
 +     
 +     
 +     
 +def write_file(text):
 +    filename = "logfile.txt"
 +    f = open(filename, 'a+')
 +    timenow = time.strftime("%d/%m/%Y %H:%M:%S", time.gmtime(time.time()))
 +    log = " ".join((timenow, text, "\r\n"))
 +    f.write(log)
 +    f.close()
 +     
 +     
 +     
 +def get_delta():
 +     
 +    print(time.strftime("Current Time = %H:%M"))
 +     
 +    h = time.strftime("%H")
 +    w = input("Watch time %s:" % (h))
 +    print(w)
 +     
 +    date = time.strftime("%Y/%m/%d")
 +    s = date + " " + h +":"+ w +":00"
 +     
 +    input("Press enter when seconds = 0 ")
 + 
 +    watchtime = time.mktime(datetime.datetime.strptime(s, "%Y/%m/%d %H:%M:%S").timetuple())
 +    record_time = time.strftime("%Y/%m/%d %H:%M:%S")
 +    timenow = time.time()
 +    delta = watchtime - timenow
 +     
 +    return record_time,delta
 +     
 +     
 +def watch_stat():
 +     
 +    try:
 +        saved_error = open('error_list.json')
 +        error_list = json.load(saved_error)
 +    except:
 +        error_list = []
 +     
 +    if len(error_list) > 1:
 +        first_record = error_list[0]
 +        latest_record = error_list[-1]
 +        previous_record = error_list[-2]
 +     
 +        first_time = first_record[0]
 +     
 +        first_delta = first_record[1]
 +     
 +        latest_time = latest_record[0] 
 +        latest_delta = latest_record[1]
 +     
 +        previous_time = previous_record[0]
 +        previous_delta = previous_record[1]
 +     
 +        FMT = '%Y/%m/%d %H:%M:%S'
 +     
 +        t_latest = datetime.datetime.strptime(latest_time, FMT)
 +        t_previous = datetime.datetime.strptime(previous_time, FMT)
 +        t_first = datetime.datetime.strptime(first_time, FMT)
 +     
 +        tdelta = t_latest - t_previous
 +        full_delta = t_latest - t_first
 +     
 +        elapsed_time = tdelta.total_seconds()
 +     
 +        full_time = full_delta.total_seconds()
 +     
 +        print("First record time ", first_time)
 +        print("First record delta ", first_delta)
 +        print("")
 +     
 +        print("Previous record time ", previous_time)
 +        print("Previous record delta ", previous_delta)
 +        print("")
 +     
 +        print("Latest record time " , latest_time)
 +        print("Latest record delta ", latest_delta)
 +        print("")
 +     
 +        print("Overall elapsed time ", full_delta)
 +        print("Latest elapsed time ", tdelta)
 +        print("")
 +     
 +        # Current Error rate
 +        time_error = latest_delta - previous_delta
 +        error_rate = time_error / elapsed_time
 +        daily_rate = error_rate * (60*60*24)
 +        ppm_daily = error_rate * 1000000
 +     
 +        # Overall Error rate
 +        total_error = latest_delta - first_delta
 +        average_error_rate = total_error / full_time
 +     
 +        average_rate = average_error_rate * (60*60*24)
 +        ppm_overall = average_error_rate * 1000000
 +     
 +     
 +        print("Latest delta change ", time_error)
 +     
 +        print("Latest elapsed time %d seconds " % (elapsed_time))
 +     
 +        print("")
 +        print("Daily PPM : %0.3f" % ppm_daily)
 +        print("Daily rate error: %0.1f s/d " % (daily_rate))
 +     
 +        print("")
 +        print("Total Time %d seconds" % (full_time))
 +        print("Total error ", total_error)
 +        print("Total PPM : %0.3f" % ppm_overall)
 +        print("Total rate error: %0.1f s/d" % (average_rate))
 +        print("")
 +        print("========================================================")
 +        print(" Delta : %+0.1f s | Rate : %+0.1f s/d | Average : %+0.1f s/d" % (latest_delta, daily_rate, average_rate))
 +        print("========================================================")
 +        print("")
 +        text = "\t%+0.1f\t\t%+0.1f\t\t%+0.1f" % (latest_delta, daily_rate, average_rate)
 +        write_file(text)
 +    else:
 +        print("No rate yet")
 +     
 +     
 +def new_record():
 +     
 +    try:
 +        saved_error = open('error_list.json')
 +        error_list = json.load(saved_error)
 +    except:
 +        error_list = []
 +     
 +    s,delta = get_delta()
 +     
 +    print("")
 +    print("%s \n\nDelta %0.1f seconds" % (s, delta))
 +    last_data=[s,delta]
 +    error_list.append(last_data)
 +    #print error_list
 +     
 +    with open('error_list.json', 'w') as outfile:
 +        json.dump(error_list, outfile)
 +     
 +    return
 +     
 +def delete_last():
 +    try:
 +        saved_error = open('error_list.json')
 +        error_list = json.load(saved_error)
 +    except:
 +        error_list = []
 +    error_list.pop()
 +     
 +    with open('error_list.json', 'w') as outfile:
 +        json.dump(error_list, outfile)
 +     
 +    return
 +     
 +     
 +def menu():
 +    print("Wire2waves WatchCheck.....")
 +    print("=========================\n")
 +    print("N : New Record\nD : Delete Last\nS : Stats\nQ : Quit\n")
 +    choice = input("Command > : ").upper()
 +    if choice == "N":
 +        print("New")
 +        new_record()
 +        watch_stat()
 +        menu()
 +    elif choice == "S":
 +        print("Stat")
 +        watch_stat()
 +        menu()
 +    elif choice == "D":
 +        delete_last()
 +        watch_stat()
 +        menu()
 +    elif choice == "Q":
 +        return
 +    else:
 +        print("?")
 +        menu()
 +     
 +     
 +menu()
 +
 +
 +</file>
 +
 +++++
 +
 +
 +
 +++++ original watchcheck.py in python 2 |
 +
 +<file python watchcheck.py>
 +
 #! /usr/bin/env python #! /usr/bin/env python
  
Line 217: Line 427:
  
 <code> <code>
 +
 Wire2waves WatchCheck..... Wire2waves WatchCheck.....
 ========================= =========================
Line 294: Line 505:
 display the data display the data
  
-++++ watchstat.py |+++++ original watchstat.py in python 2|
  
 <file python watchstat.py> <file python watchstat.py>
 +
 #! /usr/bin/env python #! /usr/bin/env python
  
Line 404: Line 616:
  
 ++++ ++++
 +
 +++++ watchstat.py in python 3 |
 +
 +<file python watchstat.py>
 +
 +## a text-terminal version of the WatchCheck app
 +## to track error, daily error rate of timepieces.
 +
 +#
 +import time
 +import datetime
 +import json
 +
 +
 +
 +def watch_stat():
 +
 +    try:
 +        saved_error = open('error_list.json')
 +        error_list = json.load(saved_error)
 +    except:
 +        error_list = []
 +
 +
 +
 +
 +    if len(error_list) > 1:
 +        first_record = error_list[0]
 +        latest_record = error_list[-1]
 +        previous_record = error_list[-2]
 +
 +        first_time = first_record[0]
 +
 +        first_delta = first_record[1]
 +
 +        latest_time = latest_record[0] 
 +        latest_delta = latest_record[1]
 +
 +        previous_time = previous_record[0]
 +        previous_delta = previous_record[1]
 +
 +        FMT = '%Y/%m/%d %H:%M:%S'
 +    
 +        t_latest = datetime.datetime.strptime(latest_time, FMT)
 +        t_previous = datetime.datetime.strptime(previous_time, FMT)
 +        t_first = datetime.datetime.strptime(first_time, FMT)
 +
 +        tdelta = t_latest - t_previous
 +        full_delta = t_latest - t_first
 +
 +        elapsed_time = tdelta.total_seconds()
 +
 +        full_time = full_delta.total_seconds()
 +
 +        print("First record time ", first_time)
 +        print("First record delta ", first_delta)
 +        print("")
 +
 +        print("Previous record time ", previous_time)
 +        print("Previous record delta ", previous_delta)
 +        print("")
 +
 +        print("Latest record time " , latest_time)
 +        print("Latest record delta ", latest_delta)
 +        print("")
 +    
 +        print("Overall elapsed time ", full_delta)
 +        print("Latest elapsed time ", tdelta)
 +        print("")
 +
 +        # Current Error rate
 +        time_error = latest_delta - previous_delta
 +        error_rate = time_error / elapsed_time
 +        daily_rate = error_rate * (60*60*24)
 +        ppm_daily = error_rate * 1000000
 +
 +        # Overall Error rate
 +        total_error = latest_delta - first_delta
 +        average_error_rate = total_error / full_time
 +
 +        average_rate = average_error_rate * (60*60*24)
 +        ppm_overall = average_error_rate * 1000000
 +
 +
 +        print("Latest delta change ", time_error)
 +
 +        print("Latest elapsed time %d seconds " % (elapsed_time))
 +
 +        print("")
 +        print("Daily PPM : %0.3f" % ppm_daily)
 +        print("Daily rate error: %0.1f s/d " % (daily_rate))
 +
 +        print("")
 +        print("Total Time %d seconds" % (full_time))
 +        print("Total error ", total_error)
 +        print("Total PPM : %0.3f" % ppm_overall)
 +        print("Total rate error: %0.1f s/d" % (average_rate))
 +        print("")
 +        print("========================================================")
 +        print(" Delta : %0.1f s | Rate : %0.1f s/d | Average : %0.1f s/d" % (latest_delta, daily_rate, average_rate))
 +        print("========================================================")
 +        print("")
 +    else:
 +        print("No rate yet")
 +
 +
 +watch_stat()
 +
 +</file>
 +
 +++++
 +
  
 Running watchstat.py on the newly updated ''error_list.json''  Running watchstat.py on the newly updated ''error_list.json'' 
public/musings/watches/watchcheck.1767088507.txt.gz · Last modified: by 127.0.0.1