186 lines
6.0 KiB
Python
Executable File
186 lines
6.0 KiB
Python
Executable File
#!/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 Control Room Emergency Switch
|
|
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
|
|
"Emergency Switch", #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
|
|
"EmergencySwitch", #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")
|