-
Notifications
You must be signed in to change notification settings - Fork 2
/
asb-test.py
158 lines (133 loc) · 4.78 KB
/
asb-test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
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 ('----------------')