-
Notifications
You must be signed in to change notification settings - Fork 1
Protocol
DanDayne edited this page Nov 24, 2019
·
6 revisions
The initiation protocol is represented by a Python dictionary and its compulsory structure varies according to the device it initiates.
Each node must have these keys defined:
-
'experiment_details'
-> data which concern all the devices on node are passed here-
'sleep_time'
-> time period between perirodical measurememts
-
-
devices
-> list of devices as defined below
{
int: { # identified by a unique ID
'experiment_details': {
'sleep_time': int # how often periodical measurements are executed (seconds)
},
'devices': [
# a list of devices defined below
]
}
...
}
Multiple nodes are allowed, but they have to be identified by a unique ID. Each device has to have an arbitrary set of attributes defined. These attributes vary according to the device's type (PBR/GAS/GMS) and class (Java/Phenometrics).
All devices must include:
-
'device_type'
-> one of ['PBR', 'GAS', 'GMS'] -
'device_class'
-> the class of devices which should be used, Java or Phenometrics
PBR's must also include:
-
'setup'
-
'lower_outlier_tol'
-> the lower percentual tolerance for outliers -
'upper_outlier_tol'
-> the upper percentual tolerance for outliers -
'max_outliers'
-> the number of outliers in row considered as correct data -
'min_OD'
-> the lowest allowed OD value -
'max_OD''
-> the highest allowed OD value -
'pump_id'
-> ID of the pump for PBR -
'ft_channel'
-> the ft channel for PBR -
OD_channel'
-> the OD channel used stabilisation check
-
Additionally, all Java dependant devices must include:
-
host_address
-> address of the physical device
And all Phenometrics devices must include:
-
'device_id'
-> unique identifier of the device -
'encryption_key'
-> communication key -
'host_port'
-> communication key -
host_address
-> address of the physical device
{
'device_type' : str,
'device_class' : str,
'device_id': str, #
'encryption_key': str,
'host_port': int,
'host_address': str
'setup' : {
'initial_commands' : [commands which should be executed with initialisation (optional)
{ 'time': str, 'cmd_id': int, 'args': list } # id of command and list of its arguments
# the time is obtained like this - datetime.datetime.utcnow().strftime("%Y-%m-%d, %H:%M:%S")
...
],
'lower_outlier_tol' : int,
'upper_outlier_tol' : int,
'max_outliers' : int,
'min_OD' : float,
'max_OD' : float,
'pump_id' : int,
'ft_channel': int,
'OD_channel': int,
}
}