Lab_interaccio/2024/smartcitizen-kit-21-dev/tools/asb-test.py

158 lines
4.8 KiB
Python
Raw Normal View History

2025-02-25 21:29:42 +01:00
import sck
import yaml
import json
import os
import sys
import traceback
from pathlib import Path
do_test = False
def blockPrint():
sys.stdout = open(os.devnull, 'w')
def oneLine(msg):
enablePrint()
sys.stdout.write(msg)
sys.stdout.flush()
if not verbose: blockPrint()
def enablePrint():
sys.stdout = sys.__stdout__
# Smart Citizen Kit
kit = sck.sck()
kit.begin(get_sensors=True)
try:
sensors_enabled = kit.sensor_enabled
do_test = True
except:
print('There are no enabled sensors')
verbose = False
blockPrint()
if '-v' in sys.argv:
verbose = True
enablePrint()
if '-h' in sys.argv:
print ('Help coming - TODO')
# Data files
if do_test:
# Sensor ID given manually by running this script
# for example: python3 test.py 001292129
if '--kit_id' not in sys.argv:
do_test = False
print('An ID must be provided')
else :
kit_id = sys.argv[sys.argv.index('--kit_id')+1]
print('Kit ID: ' + str(kit_id))
update_cal = True
if '--dry_run' in sys.argv: update_cal = False
if 'DATA_PATH' in os.environ: folder_data = os.environ['DATA_PATH']
else: print ('DATA_PATH variable not defined in environment'); exit()
# folder_data = Path('../smartcitizen-data/')
file_hardware = os.path.join(folder_data,f'hardware/{kit_id}.json')
file_calibrations = os.path.join(folder_data, 'calibrations/calibrations.json')
try:
with open(file_hardware, 'r') as file:
data_hardware = json.load(file)
except:
print('Hardware file not found. Expected location: ' + str(file_hardware))
do_test = False
try:
with open(file_calibrations, 'r') as file:
data_calibrations = json.load(file)
except:
print('Calibrations file not found. Expected location: ' +
str(file_calibrations))
do_test = False
if do_test:
# Sensors basics
this_sensor = 'ADS1x15 ADC'
these_sensors = []
this_kit = {}
for sensor in sensors_enabled:
if this_sensor in sensor:
these_sensors.append(sensor)
# Getting metrics
these_sensors_metrics = kit.readSensors(
sensors=these_sensors, iter_num=2, delay=0.1, unit='V', method='avg')
# Kit update
this_kit[kit_id] = these_sensors_metrics
# Text formatting (Ch0)
new_keys = []
for item in this_kit[kit_id]:
item_formatted = item[-8:]
new_keys.append(item_formatted)
this_kit_formatted = {}
this_kit_formatted[kit_id] = dict(
zip(new_keys, list(this_kit[kit_id].values())))
# From V to mV, rounded
for item in this_kit_formatted[kit_id]:
this_kit_formatted[kit_id][item] = round(
this_kit_formatted[kit_id][item] * 1000, 2)
# Getting ID's from hardware.json
hardware_ids = data_hardware['1']['ids']
# Getting values from calibrations.yaml and update it
calibrations_values = {}
data_index = 0
for i in hardware_ids.keys():
try:
wen = f"0x{i.strip('AS_')[:i.index('_')]} Ch{i.strip('AS_')[i.index('_')+1]}"
aen = f"0x{i.strip('AS_')[:i.index('_')]} Ch{i.strip('AS_')[i.index('_')+2]}"
calibrations_values[hardware_ids[i]] = data_calibrations[hardware_ids[i]]
except KeyError:
print('Sensor #' + str(hardware_ids[i]) + ' does not exist in ' +
str(file_calibrations))
except:
print ('Unknow error occurred')
exit()
else:
calibrations_values[hardware_ids[i]]['we_electronic_zero_mv'] = str(this_kit_formatted[kit_id][wen])
calibrations_values[hardware_ids[i]]['ae_electronic_zero_mv'] = str(this_kit_formatted[kit_id][aen])
# Update the calibrations file
print ('Collected calibration values')
if update_cal:
for item in calibrations_values:
print (item)
for value in calibrations_values[item]:
print (f'\t{value}: {calibrations_values[item][value]}')
print ('----------------')
while True:
what_to_do = input('Like what you see? [y/n]: ')
if what_to_do == 'y' or what_to_do == 'n':
break
else:
print ('Please input [y/n]')
if what_to_do == 'y':
data_calibrations.update(calibrations_values)
with open(file_calibrations, 'w') as file:
json.dump(data_calibrations, file, indent=2)
print('Calibrations file updated (' + str(file_calibrations) + ')')
else:
print ('Nothing updated. Thank you for nothing sir')
else:
for item in calibrations_values:
print (item)
for value in calibrations_values[item]:
print (f'\t{value}: {calibrations_values[item][value]}')
print ('----------------')