181 lines
9.4 KiB
Python
Executable File
181 lines
9.4 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import sys
|
|
import os
|
|
from datetime import datetime
|
|
from mysql.connector import MySQLConnection, Error
|
|
from dbconfig import read_db_config
|
|
|
|
def insertData(dati):
|
|
print("DATI:")
|
|
print(dati)
|
|
if dati != "null" and dati is not None:
|
|
print(dati[0][1])
|
|
print(dati[0][0])
|
|
matlab_func = ""
|
|
conn_via_radio = 0
|
|
operation_mode = 0
|
|
queryMatFunc = "select m.matcall, t.conn_via_radio, t.operation_mode from matfuncs as m " \
|
|
"inner join tools as t on t.matfunc = m.id " \
|
|
"inner join units as u on u.id = t.unit_id " \
|
|
"inner join statustools as s on t.statustool_id = s.id " \
|
|
"where t.name = '"+dati[0][1]+"' and u.name = '"+dati[0][0]+"'"
|
|
try:
|
|
db_config = read_db_config()
|
|
conn = MySQLConnection(**db_config)
|
|
|
|
cursor = conn.cursor()
|
|
cursor.execute(queryMatFunc)
|
|
|
|
result = cursor.fetchall()
|
|
matlab_func = result[0][0]
|
|
conn_via_radio = result[0][1]
|
|
operation_mode = result[0][2]
|
|
except Error as e:
|
|
print('Error:', e)
|
|
|
|
if conn_via_radio == 1:
|
|
if operation_mode == 1:#listening mode(no rssi 'al momento')
|
|
query = "INSERT INTO RAWDATACOR(UnitName, ToolNameID, NodeNum, EventDate, EventTime, BatLevel, Temperature, BatLevelModule, TemperatureModule, Val0, RssiModule) " \
|
|
"VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
|
|
try:
|
|
cursor = conn.cursor()
|
|
cursor.executemany(query, dati)
|
|
|
|
conn.commit()
|
|
print(str(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))+"-> Inserito in RAWDATACOR "+dati[0][0]+" "+dati[0][1])
|
|
|
|
except Error as e:
|
|
print('Error:', e)
|
|
|
|
finally:
|
|
if matlab_func != "":
|
|
print(str(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))+"-> Avvio "+matlab_func)
|
|
os.system("cd /usr/local/matlab_func/; ./run_"+matlab_func+".sh /usr/local/MATLAB/MATLAB_Runtime/v93/ "+dati[0][0]+" "+dati[0][1]+" >> /home/asega/log/loadgdmodblora.log 2>&1")
|
|
else:#standard no val0 con rssi
|
|
try:
|
|
for drow in dati:
|
|
unit_name = drow[0]
|
|
tool_name = drow[1]
|
|
date = drow[3]
|
|
time = drow[4]
|
|
batM = drow[7]
|
|
tempM = drow[8]
|
|
rssiM = drow[10].replace("dB", "")
|
|
|
|
query = "UPDATE RAWDATACOR SET BatLevelModule=%s, TemperatureModule=%s, RssiModule=%s where UnitName=%s and ToolNameID=%s and EventDate=%s and EventTime=%s"
|
|
|
|
cursor = conn.cursor()
|
|
cursor.execute(query, [batM, tempM, rssiM, unit_name, tool_name, date, time])
|
|
conn.commit()
|
|
print(str(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))+"-> Aggiornato in RAWDATACOR "+dati[0][0]+" "+dati[0][1])
|
|
except Error as e:
|
|
print('Error:', e)
|
|
finally:
|
|
if matlab_func != "":
|
|
print(str(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))+"-> Avvio "+matlab_func)
|
|
os.system("cd /usr/local/matlab_func/; ./run_"+matlab_func+".sh /usr/local/MATLAB/MATLAB_Runtime/v93/ "+dati[0][0]+" "+dati[0][1]+" >> /home/asega/log/loadgdmodblora.log 2>&1")
|
|
cursor.close()
|
|
conn.close()
|
|
print("-------")
|
|
|
|
def getDataFromFile(pathFile):
|
|
print(pathFile)
|
|
path = pathFile.split("/")
|
|
unitname = path[len(path) - 2]
|
|
toolname = path[len(path) - 1].split("_")[0]
|
|
if(toolname.startswith("GD") and unitname):
|
|
dati = []
|
|
print(str(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))+"-> apro "+pathFile)
|
|
with open(pathFile, 'r') as file:
|
|
data = file.readlines()
|
|
data = [row.rstrip() for row in data]
|
|
if("/modb/" in data[5] or "/dsas/" in data[5]): #gd e modb (lora)
|
|
#print("modb")
|
|
pathFile = pathFile.replace("GD", "DT")
|
|
print(pathFile)
|
|
pathFileName = pathFile.split("_")[0]
|
|
pathFileDate = int(pathFile.split("_")[1].split(".")[0])
|
|
pathFileExt = pathFile.split("_")[1].split(".")[1]
|
|
for xsec in range(1, 60):
|
|
if os.path.isfile(pathFile):
|
|
#print(str(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))+"-> file DT trovato")
|
|
#print(str(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))+"-> apro "+pathFile)
|
|
with open(pathFile, 'r') as fileDT:
|
|
dataDT = fileDT.readlines()
|
|
dataDT = [rowDT.rstrip() for rowDT in dataDT]
|
|
dataDT = dataDT[7:]
|
|
nodenum = 2
|
|
toolname = toolname.replace("GD", "DT")
|
|
data = data[7:]
|
|
for index, row in enumerate(data):
|
|
#print(str(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))+"-> index " + str(index))
|
|
#print(str(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))+"-> row " + row)
|
|
try:
|
|
lineDT = dataDT[index].split(";")
|
|
if(lineDT[1] == '' or lineDT[1] == '-.-'):
|
|
tempindex = index
|
|
for ind in range(len(data)):
|
|
tempindex-=1
|
|
if(tempindex >= 0):
|
|
lineDT[1] = dataDT[tempindex].split(";")[1]
|
|
else:
|
|
lineDT[1] = 12.0
|
|
if(lineDT[1] != '' and lineDT[1] != '-.-'):
|
|
break
|
|
print(lineDT[1])
|
|
if(lineDT[2] == '' or lineDT[2] == '-.-'):
|
|
tempindex = index
|
|
for ind in range(len(data)):
|
|
tempindex-=1
|
|
if(tempindex >= 0):
|
|
lineDT[2] = dataDT[tempindex].split(";")[2]
|
|
else:
|
|
lineDT[2] = 20.0
|
|
if(lineDT[2] != '' and lineDT[2] != '-.-'):
|
|
break
|
|
batUnit = float(lineDT[1])
|
|
tempUnit = float(lineDT[2])
|
|
line = row.split(";")
|
|
if(line[2] == '' and line[3] == ''):#se bat e temp sono vuoti
|
|
continue
|
|
dt = lineDT[0].split(" ")
|
|
if("/" in dt[0]):
|
|
try:
|
|
date = str(datetime.strptime(dt[0], "%d/%m/%Y").strftime("%Y-%m-%d"))
|
|
#print("The string is a date with format " + "%d/%m/%Y")
|
|
except ValueError:
|
|
print()
|
|
#print("The string IS NOT a date with format " + "%d/%m/%Y")#debug
|
|
try:
|
|
date = str(datetime.strptime(dt[0], "%Y/%m/%d").strftime("%Y-%m-%d"))
|
|
#print("The string is a date with format " + "%Y/%m/%d")
|
|
except ValueError:
|
|
print()
|
|
#print("The string IS NOT a date with format " + "%Y/%m/%d")#debug
|
|
else:
|
|
date = dt[0]
|
|
time = dt[1]
|
|
batlevel = float(line[2])
|
|
temp = float(line[3])
|
|
if len(line) == 6:
|
|
if line[4] == "|":
|
|
val0 = line[5]
|
|
dati.append((unitname, toolname, nodenum, date, time, batUnit, tempUnit, batlevel, temp, val0, None))
|
|
elif len(line) == 5:
|
|
rssi = line[4]
|
|
dati.append((unitname, toolname, nodenum, date, time, batUnit, tempUnit, batlevel, temp, None, rssi))
|
|
except IndexError:
|
|
print("exception: different lenght break")
|
|
break
|
|
#print("The string IS NOT a date with format " + "%d/%m/%Y")#debug
|
|
return dati
|
|
pathFileDate -= 1
|
|
pathFile = pathFileName + "_" + str(pathFileDate)+ "." + pathFileExt
|
|
print(str(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))+"-> CHECK "+pathFile)
|
|
|
|
def main():
|
|
insertData(getDataFromFile(sys.argv[1]))
|
|
|
|
if __name__ == '__main__':
|
|
main()
|