#!/usr/bin/python import serial import os 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 = "testing" 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, #// Reset switch CLOSED, #// Emergency source trip switch CLOSED, #// Cage door contact CLOSED, #// Fume hood flow switch OPEN, #// Vacuum condition - gnd CLOSED, #// Tritium monitor OPEN, #// UNUSED CLOSED, #// Power failure CLOSED, #// Coolant flow - gnd OPEN, #// Vacuum condition - mid OPEN, #// UNUSED CLOSED, #// Coolant flow - high OPEN, #// Smoke detector - high OPEN, #// UNUSED OPEN, #// UNUSED OPEN #// UNUSED ] in_txt = [ "Reset Button", "Emergency Switch", "Cage Door Open", "Fume Hood Flow", "Vacuum Gauge 2", "Tritium Monitor", "error: port map", "Bldg Power Fail", "Coolant Flow 2", "Vacuum Gauge 1", "error: port map", "Coolant Flow 1", "Smoke at Source", "error: port map", "error: port map", "error: port map", ""] 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") for key, value in format_value.items(): # print(f"{key} value={value}") point.field(key, 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 int(list[i]) != input_normal[i]: file.write(f"#{i}--{in_txt[i]}\n") try: # os.system(cmd) print(point) print(point2) write_api.write(bucket=bucket, org=org, record=point) write_api.write(bucket=bucket, org=org, record=point2) except: print("problem pushing data")