#!/usr/bin/python import serial import os from datetime import datetime import influxdb_client from influxdb_client import InfluxDBClient, Point, WritePrecision from influxdb_client.client.write_api import SYNCHRONOUS with open('/home/pi02/influx_token.txt', 'r') as f: first_line = f.readline() #token = os.environ.get("INFLUXDB_TOKEN") token = first_line org = "FSUFoxLab" ip = "https://fsunuc.physics.fsu.edu/influx/" write_client = influxdb_client.InfluxDBClient(url=ip, token=token, org=org) bucket = "interlock" write_api = write_client.write_api(write_options=SYNCHRONOUS) print(token) ser = serial.Serial('/dev/ttyACM0', 9600, timeout=1) ser.reset_input_buffer() outFile = "/home/pi02/data.txt" # cmd='curl -s -XPOST "http://fsunuc.physics.fsu.edu:8086/write?db=interlock" --data-binary @/home/pi02/data.txt' OPEN = 0 CLOSED = 1 input_normal= [ OPEN, #// 1 Reset switch CLOSED, #// 2 Emergency source trip switch CLOSED, #// 3 Cage door contact CLOSED, #// 4 Fume hood flow switch OPEN, #// 5 Vacuum condition - gnd CLOSED, #// 6 Tritium monitor OPEN, #// 7 UNUSED CLOSED, #// 8 Power failure CLOSED, #// 9 Coolant flow - gnd OPEN, #//10 Vacuum condition - mid OPEN, #//11 UNUSED CLOSED, #//12 Coolant flow - high OPEN, #//13 Smoke detector - high OPEN, #//14 UNUSED OPEN, #//15 UNUSED OPEN #//16 UNUSED ] in_txt = [ "Reset Button", #1 "Emergency Switch", #2 "Cage Door Open", #3 "Fume Hood Flow", #4 "Vacuum Gauge 2", #5 "Tritium Monitor", #6 "error: port map", #7 "Bldg Power Fail", #8 "Coolant Flow 2", #9 "Vacuum Gauge 1", #10 "error: port map", #11 "Coolant Flow 1", #12 "Smoke at Source", #13 "error: port map", #14 "error: port map", #15 "error: port map" #16 ] in_short_txt = [ "ResetButton", #1 "EmergencySwitch", #2 "CageDoorOpen", #3 "FumeHoodFlow", #4 "VacuumGauge2", #5 "TritiumMonitor", #6 "NotUsed", #7 "BldgPowerFail", #8 "CoolantFlow2", #9 "VacuumGauge1", #10 "NotUsed", #11 "CoolantFlow1", #12 "SmokeAtSource", #13 "NotUsed", #14 "NotUsed", #15 "NotUsed" #16 ] while True: if ser.in_waiting > 0: line = ser.readline().decode('utf-8').rstrip() list = [] components = line.split(';') format_value = {} for component in components: parts = component.strip().split(': ') if len(parts) == 2: key, valueUnit = parts part2 = valueUnit.split(' ') if len(part2) == 2: value, unit = part2 if value == "ovf" : value = 99999 format_value[key] = value else: format_value[key] = valueUnit else: list.append(component) # print(line) point = Point("Measurement") point2 = Point("Status") point3 = Point("Input") for key, value in format_value.items(): # print(f"{key} value={value}") point.field(key, float(value)) with open(outFile, "w") as file: for key, value in format_value.items(): file.write(f"{key} value={value}\n") if key == "State" : if value == "0" or value == "1": file.write(f"preaccl value=1\n") file.write(f"valve1 value=1\n") file.write(f"valve2 value=1\n") file.write(f"hv value=1\n") file.write(f"boiler value=1\n") file.write(f"ion value=1\n") point2.field("preaccl", 1).field("valve1", 1).field("valve2", 1).field("hv", 1).field("boiler", 1).field("ion",1) if value == "2": file.write(f"preaccl value=0\n") file.write(f"valve1 value=1\n") file.write(f"valve2 value=1\n") file.write(f"hv value=0\n") file.write(f"boiler value=1\n") file.write(f"ion value=1\n") point2.field("preaccl", 0).field("valve1", 1).field("valve2", 1).field("hv", 0).field("boiler", 1).field("ion",1) if value == "3": file.write(f"preaccl value=0\n") file.write(f"valve1 value=0\n") file.write(f"valve2 value=0\n") file.write(f"hv value=0\n") file.write(f"boiler value=1\n") file.write(f"ion value=0\n") point2.field("preaccl", 0).field("valve1", 0).field("valve2", 0).field("hv", 0).field("boiler", 1).field("ion",0) if value == "4": file.write(f"preaccl value=0\n") file.write(f"valve1 value=0\n") file.write(f"valve2 value=0\n") file.write(f"hv value=0\n") file.write(f"boiler value=0\n") file.write(f"ion value=0\n") point2.field("preaccl", 0).field("valve1", 0).field("valve2", 0).field("hv", 0).field("boiler", 0).field("ion",0) for i in range(16): if in_short_txt[i] == "NotUsed" : continue point3.field(in_short_txt[i], int(list[i])) if int(list[i]) != input_normal[i]: file.write(f"#{i}--{in_txt[i]}\n") try: # os.system(cmd) now = datetime.now() # current date and time date_time = now.strftime("%m/%d/%Y, %H:%M:%S") print("==================== date-time:", date_time ) print(point) print(point2) print(point3) write_api.write(bucket=bucket, org=org, record=point) write_api.write(bucket=bucket, org=org, record=point2) write_api.write(bucket=bucket, org=org, record=point3) except: print("problem pushing data")