Source code for jii_multispeq_protocols.protocols.rides
"""
Photosynthesis (RIDES)
======================
Measures the same photosynthesis-related parameters in <15 seconds as 'Leaf Photosynthesis MutlispeQ v2.0' plus additional PS1 and P700 measurements.
+ Chlorophll Fluorescence: Phi2, PhiNPQ, PhiNO, NPQt, qL, LEF
+ Relative Chlorophyll
+ ATP synthase conductivity, proton motive force parameters through DIRK(ECS): ECSt mAU, vH+, gH+
+ Saturation pulse estimation of PSI parameters: PS1 active centers, PS1 open, PS1 oxidized and PS1 over reduced
+ Absorbance at: 450, 535, 605, 650, 730, 850, 880, and 940nm.
+ The rate of turnover of the cytochrome b6f complex through DIRKP(700)
+ Leaf Thickness (in mm), angle, and cardinal direction
+ Leaf Temperature and differential from ambient temperature
+ Environmental conditions: PAR and ambient temperature/pressure/humidity
Important
---------
Supports MultispeQ V1 and V2 with Firmware 2.34 and higher
"""
import warnings
import numpy as np
from scipy.optimize import curve_fit
import jii_multispeq.analysis as analysis
_protocol = [{'_protocol_set_': [{'averages': 1,
'energy_min_wake_time': 7000,
'energy_save_timeout': 300000,
'environmental': [['light_intensity'], ['temperature_humidity_pressure'], ['temperature_humidity_pressure2'], ['contactless_temp'], ['compass_and_angle']],
'label': 'no_leaf_baseline',
'par_led_start_on_open': 2},
{'autogain': [[2, 1, 3, 12, 50000], [3, 8, 1, 80, 50000]],
'averages': 1,
'detectors': [[3], [3], [3], [3], [3], [3], [3], [3], [3], [3], [3], [3], [3], [3], [3], [3], [3], [3], [3], [1], [1], [1]],
'environmental': [['light_intensity'], ['temperature_humidity_pressure'], ['temperature_humidity_pressure2'], ['contactless_temp'], ['thickness']],
'label': 'DIRK_ECS',
'nonpulsed_lights': [[2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2]],
'nonpulsed_lights_brightness': [['light_intensity'],
['light_intensity'],
[0],
['light_intensity'],
['light_intensity'],
[0],
['light_intensity'],
['light_intensity'],
[0],
['light_intensity'],
['light_intensity'],
[0],
['light_intensity'],
['light_intensity'],
[0],
['light_intensity'],
['light_intensity'],
[0],
['light_intensity'],
['light_intensity'],
[0],
['light_intensity']],
'par_led_start_on_close': 2,
'protocols_delay': 10,
'pulse_distance': [1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500],
'pulse_length': [['a_d2'],
['a_d2'],
['a_d2'],
['a_d2'],
['a_d2'],
['a_d2'],
['a_d2'],
['a_d2'],
['a_d2'],
['a_d2'],
['a_d2'],
['a_d2'],
['a_d2'],
['a_d2'],
['a_d2'],
['a_d2'],
['a_d2'],
['a_d2'],
['a_d2'],
['a_d2'],
['a_d2'],
['a_d2']],
'pulsed_lights': [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [3], [3], [3]],
'pulsed_lights_brightness': [['a_b2'],
['a_b2'],
['a_b2'],
['a_b2'],
['a_b2'],
['a_b2'],
['a_b2'],
['a_b2'],
['a_b2'],
['a_b2'],
['a_b2'],
['a_b2'],
['a_b2'],
['a_b2'],
['a_b2'],
['a_b2'],
['a_b2'],
['a_b2'],
['a_b2'],
['a_b2'],
['a_b2'],
['a_b2']],
'pulses': [100, 100, 20, 100, 100, 20, 100, 100, 20, 100, 100, 20, 100, 100, 20, 100, 100, 20, 100, 20, 20, 100]},
{'averages': 1,
'detectors': [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
'environmental': [['previous_light_intensity'], ['temperature_humidity_pressure'], ['temperature_humidity_pressure2'], ['contactless_temp'], ['compass_and_angle']],
'label': 'DIRK_P700',
'nonpulsed_lights': [[2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2]],
'nonpulsed_lights_brightness': [['light_intensity'],
['light_intensity'],
[0],
['light_intensity'],
['light_intensity'],
[0],
['light_intensity'],
['light_intensity'],
[0],
['light_intensity'],
['light_intensity'],
[0],
['light_intensity'],
['light_intensity'],
[0],
['light_intensity'],
['light_intensity'],
[0],
['light_intensity'],
['light_intensity'],
[0],
['light_intensity']],
'protocols_delay': 1,
'pulse_distance': [1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500],
'pulse_length': [['a_d3'],
['a_d3'],
['a_d3'],
['a_d3'],
['a_d3'],
['a_d3'],
['a_d3'],
['a_d3'],
['a_d3'],
['a_d3'],
['a_d3'],
['a_d3'],
['a_d3'],
['a_d3'],
['a_d3'],
['a_d3'],
['a_d3'],
['a_d3'],
['a_d3'],
['a_d3'],
['a_d3'],
['a_d3']],
'pulsed_lights': [[8], [8], [8], [8], [8], [8], [8], [8], [8], [8], [8], [8], [8], [8], [8], [8], [8], [8], [8], [8], [8], [8]],
'pulsed_lights_brightness': [['a_b3'],
['a_b3'],
['a_b3'],
['a_b3'],
['a_b3'],
['a_b3'],
['a_b3'],
['a_b3'],
['a_b3'],
['a_b3'],
['a_b3'],
['a_b3'],
['a_b3'],
['a_b3'],
['a_b3'],
['a_b3'],
['a_b3'],
['a_b3'],
['a_b3'],
['a_b3'],
['a_b3'],
['a_b3']],
'pulses': [100, 100, 20, 100, 100, 20, 100, 100, 20, 100, 100, 20, 100, 100, 20, 100, 100, 20, 100, 100, 20, 100]},
{'averages': 1,
'detectors': [[1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [0], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1]],
'environmental': [['previous_light_intensity'],
['temperature_humidity_pressure'],
['temperature_humidity_pressure2'],
['contactless_temp'],
['thickness'],
['compass_and_angle']],
'label': 'PAM',
'nonpulsed_lights': [[2], [2], [2], [2], [2], [2], [2], [9], [0], [2], [2], [2], [2], [2]],
'nonpulsed_lights_brightness': [['light_intensity'], [8000], [7000], [6000], [5000], [4000], [0], [2090], [0], [8000], [6000], [4000], [3000], ['light_intensity']],
'pulse_distance': [5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000],
'pulse_length': [[30, 'a_d3'],
[30, 'a_d3'],
[30, 'a_d3'],
[30, 'a_d3'],
[30, 'a_d3'],
[30, 'a_d3'],
[30, 'a_d3'],
[0],
[30, 'a_d3'],
[30, 'a_d3'],
[30, 'a_d3'],
[30, 'a_d3'],
[30, 'a_d3'],
[30, 'a_d3']],
'pulsed_lights': [[3, 8], [3, 8], [3, 8], [3, 8], [3, 8], [3, 8], [3, 8], [0], [3, 8], [3, 8], [3, 8], [3, 8], [3, 8], [3, 8]],
'pulsed_lights_brightness': [[400, 'auto_bright3'],
[400, 'auto_bright3'],
[400, 'auto_bright3'],
[400, 'auto_bright3'],
[400, 'auto_bright3'],
[400, 'auto_bright3'],
[400, 'auto_bright3'],
[0],
[400, 'auto_bright3'],
[400, 'auto_bright3'],
[400, 'auto_bright3'],
[400, 'auto_bright3'],
[400, 'auto_bright3'],
[400, 'auto_bright3']],
'pulses': [100, 30, 15, 15, 15, 15, 15, 600, 15, 30, 15, 15, 15, 15]},
{'averages': 1,
'environmental': [['light_intensity'], ['temperature_humidity_pressure'], ['temperature_humidity_pressure2'], ['contactless_temp'], ['thickness'], ['compass_and_angle']],
'label': 'SPAD',
'spad': [1]}]}]
[docs]
def _analyze ( _data ):
"""
Data evaluation of RIDES
by: David M. Kramer
created: 2017-05-09 @ 18:15:27
"""
# Define the output dictionary here
output = {}
DIRK_ECS = analysis.basic.GetProtocolByLabel("DIRK_ECS", _data)
P700_DIRK = analysis.basic.GetProtocolByLabel("DIRK_P700", _data)
PAM = analysis.basic.GetProtocolByLabel("PAM", _data)
output["leaf angle"] = P700_DIRK['angle']
if len(_data['set']) == 13:
_data['set'].insert(0, {})
# ECS DIRK trace definitions
beginning_of_ECS=100 # Note the 100 pulses
length_of_ECS_subtrace=220 # The length of each subtrace.
number_of_ECS_subtraces=6 # number of ECS subtraces. There are currently 6 of them.
length_of_ECS_baseline=100 # there are 100 points in the baseline before the DIRK
length_of_ECS_all_subtraces=beginning_of_ECS+(number_of_ECS_subtraces*length_of_ECS_subtrace)
ECS_averaged_trace=DIRK_ECS['data_raw'][beginning_of_ECS:320]
begining_of_subtrace_for_linear_fit=75
end_of_subtrace_for_linear_fit=145
P700_begining_of_subtrace_for_linear_fit=55
P700_end_of_subtrace_for_linear_fit=170
beginning_of_LEFD=1421 # Note the 100 pulses
length_of_LEFd_subtrace=220 # The length of each subtrace.
length_of_LEFd_baseline=100 # there are 100 points in the baseline before the DIRK
LEFd_trace=DIRK_ECS['data_raw'][beginning_of_LEFD:(beginning_of_LEFD+length_of_LEFd_subtrace)]
# P700 DIRK trace definitions
beginning_of_P700_DIRK=100 # Note the 100 pulses
length_of_P700_DIRK_subtrace=220 #The length of each subtrace.
number_of_P700_DIRK_subtraces=6 # number of ECS subtraces. There are currently 6 of them.
length_of_P700_DIRK_baseline=100 # there are 100 points in the baseline before the DIRK
length_of_P700_DIRK_all_subtraces=beginning_of_P700_DIRK+(number_of_P700_DIRK_subtraces*length_of_P700_DIRK_subtrace)
P700_DIRK_averaged_trace=DIRK_ECS['data_raw'][beginning_of_P700_DIRK:320]
output['test_data_raw_PAM'] = len(PAM['data_raw'])
loPAM = len(PAM['data_raw'])
temp1 = []
for i in range(0, loPAM, 2):
temp1.append(PAM['data_raw'][i])
for i in range(1, loPAM+1, 2):
temp1.append(PAM['data_raw'][i])
PAM['data_raw']=temp1; # replace the old values wiht temp1
Fs_begin=1 #the first point to use for Fs
Fs_end =4 #the end point to use for Fs
#The first FM value (Fm_1) is obtained with the highest intensity
Fm_1_begin =101 #the first point to use for the FIRST Fmp
Fm_1_end =130 #the end point to use for the FIRST Fmp
Fm_2_begin =131 #the first point to use for the FIRST Fmp
Fm_2_end =145 #the end point to use for the FIRST Fmp
Fm_3_begin =146 #the first point to use for the FIRST Fmp
Fm_3_end =160 #the end point to use for the FIRST Fmp
Fm_4_begin =161 #the first point to use for the FIRST Fmp
Fm_4_end =175 #the end point to use for the FIRST Fmp
Fm_5_begin =176 #the first point to use for the FIRST Fmp
Fm_5_end =190 #the end point to use for the FIRST Fmp
#START AND STOP FOR F0'
FoPrime_begin =206 #the first point to use for Fo
FoPrime_end =220 #the end point to use for Fo
#SET THE INVERSE INTENSITIES FOR THE AVENSON INTENSITY RAMP
inverse_intensity = [1/8000,1/7000,1/6000,1/5000]
output['pump']="none"
#PSI saturation pulse parameters:
#Calculation of the DIRK delta_A_ECS
PSI_ss_beg=1 #beginning of the trace for P700 steady-state
PSI_ss_end=18 #end of the trace for P700 steady-state
PSI_sat1_beg=25 #beginning of the trace for P700 first saturation pulse
PSI_sat1_end=170 #end of the trace for P700 first saturation pulse
PSI_dark_beg=195 #beginning of the trace for P700 steady-state
PSI_dark_end=200 #end of the trace for P700 steady-state
PSI_sat2_beg=220 #beginning of the trace for P700 second saturation pulse
PSI_sat2_end=270 #end of the trace for P700 second saturation pulse
# Start of analyses sections
#ECS trace analysis:
# Average the traces
for i in range(1, number_of_ECS_subtraces):
temp = DIRK_ECS['data_raw'][i*length_of_ECS_subtrace+beginning_of_ECS:
(i+1)*length_of_ECS_subtrace+beginning_of_ECS]
for j in range(length_of_ECS_subtrace):
ECS_averaged_trace[j] = ECS_averaged_trace[j] + temp[j]
# Create time axis
fake_time_axis = list(range(1, length_of_ECS_subtrace + 1))
# Find best fit line for baseline
m,b = np.polyfit(fake_time_axis[begining_of_subtrace_for_linear_fit:end_of_subtrace_for_linear_fit],
ECS_averaged_trace[begining_of_subtrace_for_linear_fit:end_of_subtrace_for_linear_fit], 1)
# Generate baseline offset
baseline_offset = [np.round(j * np.round(m, 3) + round(b))
for j in range(length_of_ECS_subtrace)]
# Calculate deltaI/I0 and convert to approximate delta_A
for j in range(length_of_ECS_subtrace):
rat = ECS_averaged_trace[j]/baseline_offset[j]
ECS_averaged_trace[j] = -1 * np.log(rat) # ((rat-1)/-2.3)
# Eliminate spike artifact
ECS_averaged_trace[120] = ECS_averaged_trace[119]
output['ECS_averaged_trace'] = ECS_averaged_trace[80:150]
begin_trace_index=100
end_trace_index=120
number_of_points_to_fit=end_trace_index-begin_trace_index
expData=ECS_averaged_trace[begin_trace_index:end_trace_index]
# Here I assume that the time difference between points was
time_per_point=1.5 #entger the delta time between points (only work with constant delta time)
# Create time data
t = np.array([i*time_per_point for i in range(len(expData))])
y = np.array(expData)
def exp_func(x, a, b, c):
return b + a * np.exp(-x / c)
try:
# Fit the data
popt, pcov = curve_fit(exp_func, t, y, p0=[1, 1, 1])
a, b, c = popt
# Generate fitted curve
outdata = exp_func(t, a, b, c)
output['fitinput'] = expData
output['outdata'] = outdata.tolist()
output["ECSt mAU"] = round(a, 5)
output["ECS_tau"] = round(0.001 * c, 4)
output["gH+"] = round(1000/c, 3)
vHplus = output["ECSt mAU"] * output["gH+"]
output["vH+"] = round(vHplus, 3)
except Exception as e:
pass # Or handle the error as needed
# Calculaiton of the DIRK delta_P850
# Get sum of all subtraces
for i in range(1, number_of_P700_DIRK_subtraces):
temp = P700_DIRK['data_raw'][i*length_of_P700_DIRK_subtrace+beginning_of_P700_DIRK:
(i+1)*length_of_P700_DIRK_subtrace+beginning_of_P700_DIRK]
for j in range(length_of_P700_DIRK_subtrace):
P700_DIRK_averaged_trace[j] = P700_DIRK_averaged_trace[j] + temp[j]
# Create time axis
fake_time_axis = list(range(1, length_of_P700_DIRK_subtrace + 1))
# Find best fit line for baseline
m,b = np.polyfit(fake_time_axis, P700_DIRK_averaged_trace, 1)
# Generate baseline offset using linear regression
baseline_offset = [j * np.round(m, 3) + np.round(b)
for j in range(length_of_P700_DIRK_subtrace)]
# Calculate deltaI/I0 and convert to approximate delta_A
for j in range(length_of_P700_DIRK_subtrace):
rat = P700_DIRK_averaged_trace[j]/baseline_offset[j]
P700_DIRK_averaged_trace[j] = -1 * np.log(rat) # ((rat-1)/-2.3)
# Replace artifactual data at position 120 with prior value
P700_DIRK_averaged_trace[120] = P700_DIRK_averaged_trace[119]
# Slice the averaged trace for output
output['P700_DIRK_averaged_trace'] = P700_DIRK_averaged_trace[P700_begining_of_subtrace_for_linear_fit:
P700_end_of_subtrace_for_linear_fit]
begin_trace_index=100
end_trace_index=120
number_of_points_to_fit=end_trace_index-begin_trace_index
P700expData=P700_DIRK_averaged_trace[begin_trace_index:end_trace_index]
P700_time_per_point=1.5 #entger the delta time between points (only work with constant delta time)
# Create time series data points
P700tdata = []
for i in range(len(expData)): # assuming expData is defined
P700tdata.append([i * time_per_point, P700expData[i]])
# Convert to numpy array for curve_fit
P700tdata = np.array(P700tdata)
# Define the exponential decay function
def exp_decay(x, a, b, c):
return b + a * np.exp(-x / c)
# Initial parameter guesses
a = 1
b = 1
c = 1
try:
# Perform non-linear least squares fitting
# Note: curve_fit is scipy's equivalent to NonLinearRegression
popt, pcov = curve_fit(exp_decay,
P700tdata[:, 0], # x data
P700tdata[:, 1], # y data
p0=[a, b, c]) # initial guesses
# Extract fitted parameters
a, b, c = popt
# Generate fitted data points
P700_outdata = []
for i in range(len(expData)):
P700_outdata.append(b + a * np.exp(-1 * i / c))
# Store results in output dictionary
output = {}
output['P700_fitinput'] = P700_outdata
output['P700_outdata'] = outdata # assuming outdata is defined
# Round and store parameters
output['P700_DIRK_ampl'] = round(a, 5)
output['tP700'] = round(0.001 * c, 4)
output['kP700'] = round(1000 / c, 4)
# Calculate and store initial velocity
v_initial_P700 = output['P700_DIRK_ampl'] * output['kP700']
output['v_initial_P700'] = round(v_initial_P700, 7)
except Exception as e:
print(f"An error occurred: {e}")
# Display the DIRKf results and calculate LEFd
output['LEFd_trace'] = LEFd_trace
# Display of PAM result and calculation of the fluorescence parameters
# ************************************************************************************************
# Calculate the PAM fluorescence paramters
output['data_raw_PAM'] = PAM['data_raw'][0:310]
data=PAM['data_raw'][0:310]
# Set our Apparent FmPrime, 3 FmPrime steps, and Fs to calculate both traditional fv/fm and new Multi-phase flash fv/fm
# ----------------------------
# get the values for representative Fs
baseline=0 # for the time being, do not use baseline
# GET THE VALUES FOR Fs
Fs = np.mean(data[Fs_begin:Fs_end]) - baseline # take only the first 4 values in the Fs range, excluding the very first
Fs_std = np.std(data[Fs_begin:Fs_end]) # create standard deviation for this value for error checking
output['Fs']=np.round(Fs,2)
# GET THE VALUES FOR THE 5 Fm' ILLUMINATION CONDITIONS
sat_vals = np.sort(data[Fm_1_begin:Fm_1_end]) # sort the saturating light values from low to high
AFmP = np.mean(sat_vals[2:20]) - baseline # take the 18 largest values and average them
AFmP_std = np.std(sat_vals) # create standard deviation for this value for error checking
# output.AFmP=AFmP;
sat_vals = np.sort(data[Fm_5_begin:Fm_5_end]) # sort the saturating light values from low to high
FmP_end = np.mean(sat_vals[2:23]) - baseline # take the 21 largest values and average them
FmP_end_std = np.std(sat_vals) # create standard deviation for this value for error checking
# output.FmP_end=FmP_end;
sat_vals = np.sort(data[Fm_2_begin:Fm_2_end]) # sort the saturating light values from low to high
FmP_step1 = np.mean(sat_vals[2:6]) - baseline # take the 4 largest values and average them
FmP_step1_std = np.std(sat_vals) # create standard deviation for this value for error checking
# output.FmP_step1=FmP_step1;
sat_vals = np.sort(data[Fm_3_begin:Fm_3_end]) # sort the saturating light values from low to high
FmP_step2 = np.mean(sat_vals[2:6]) - baseline # take the 4 largest values and average them
FmP_step2_std = np.std(sat_vals) # create standard deviation for this value for error checking
# output.FmP_step2=FmP_step2;
sat_vals = np.sort(data[Fm_4_begin:Fm_4_end]) # sort the saturating light values from low to high
FmP_step3 = np.mean(sat_vals[2:6]) - baseline # take the 4 largest values and average them
FmP_step3_std = np.std(sat_vals) # create standard deviation for this value for error checking
# output.FmP_ste32=FmP_step3;
# Calculations for F0'
# ----------------------------
FoPrime_values = np.sort(data[FoPrime_begin:FoPrime_end])
# FoPrime = np.mean(FoPrime_values[5,10)) - baseline;
FoPrime = np.min(FoPrime_values)
FoPrime_std = np.std(FoPrime_values) # create standard deviation for this value for error checking
output['FoPrime']=np.round(FoPrime,2)
# output.FoPrime_values=FoPrime_values;
# Calculations for corrected FmPrime using multi-phase flash
# ----------------------------
m,b = np.polyfit(inverse_intensity, [AFmP,FmP_step1,FmP_step2,FmP_step3], 1)
# Calculate Phi2 w/ and w/out multi-phase flash
# ----------------------------
fvfm_noMPF = (AFmP-Fs)/AFmP
fvfm_MPF = (b-Fs)/b
# Calculate NPQt, PhiNPQ, PhiNO, qL w/ and w/out multi-phase flash
# ----------------------------
#FIX: FmPrime does not exist at this point, but is called later
FmPrime = AFmP
npqt_MPF = (4.88 / ((b / FoPrime) -1) )-1
npqt_noMPF = (4.88 / ((AFmP / FoPrime) -1) )-1
qL_MPF = ((b - Fs)*FoPrime)/((b-FoPrime)*Fs)
qL_noMPF = ((AFmP - Fs)*FoPrime)/((AFmP-FoPrime)*Fs)
PhiNO_MPF = 1/(npqt_MPF + 1 + qL_MPF*4.88) # based on equation 52 in Kramer et al., 2004 PRES
PhiNO_noMPF = 1/(npqt_noMPF + 1 + qL_noMPF*4.88) # based on equation 52 in Kramer et al., 2004 PRES
PhiNPQ_MPF = 1-fvfm_MPF-PhiNO_MPF # based on equation 53 in Kramer et al., 2004 PRES
PhiNPQ_noMPF = 1-fvfm_noMPF-PhiNO_noMPF # based on equation 53 in Kramer et al., 2004 PRES
qP_MPF = (b - Fs)/(b - FoPrime)
qP_noMPF = (FmPrime - Fs)/(FmPrime - FoPrime) # FmPrime does not exist at this point!!!!
FvP_FmP_MPF = (b-FoPrime)/b
FvP_FmP_noMPF = (AFmP-FoPrime)/AFmP
# Create the variables to be printed (assume to use the MPF values unless there is a good reason not to)
# ----------------------------
fvfm = fvfm_MPF
npqt = npqt_MPF
PhiNO = PhiNO_MPF
PhiNPQ = PhiNPQ_MPF
qL = qL_MPF
FmPrime = b
qP = qP_MPF
FvP_FmP = FvP_FmP_MPF
#****************OUTPUT VALUES FROM MACRO *******************
# if any of the flag conditions are true, then create the 'flag' object. Otherwise, do not create the flag object.
# for now since flag system isn't fully implemented, also create as separate objects so they will be displayed
# ----------------------------
# If multi-phase flash steps are flat or positive slope, then just use the normal Phi2, NPQt, PhiNPQ, PhiNO... etc.
# If Phi2 or NPQt is less than zero, make zero and give user warning. If Phi2 is higher than .85, give user danger flag.
# ----------------------------
if m > 0:
fvfm = fvfm_noMPF
npqt = npqt_noMPF
PhiNO = PhiNO_noMPF
PhiNPQ = PhiNPQ_noMPF
qL = qL_noMPF
FmPrime = AFmP
qP = qP_noMPF
FvP_FmP = FvP_FmP_noMPF
if fvfm <= -.10:
warnings.warn("Phi2 is outside of expected range, please consider discarding the measurement")
if fvfm >=.85:
warnings.warn("Phi2 is outside of expected range, please consider discarding the measurement")
else:
output["Phi2"] = np.round(fvfm,3)
if PhiNPQ <= -.10:
warnings.warn("PhiNPQ is outside of expected range, please consider discarding the measurement")
if PhiNPQ >= 1.1:
warnings.warn("PhiNPQ is outside of expected range, please consider discarding the measurement")
else:
output['PhiNPQ']= np.round(PhiNPQ,3)
output['qL']= np.round(qL,3)
output['NPQt']= np.round(npqt,3)
output['PhiNO']= np.round(PhiNO,3)
output['FvP_over_FmP'] = np.round(FvP_FmP,3)
outputqP = np.round(qP,3)
if PhiNO <= -.10:
warnings.warn("PhiNO is outside of expected range, please consider discarding the measurement")
if PhiNO >= 1.1:
warnings.warn("PhiNO is outside of expected range, please consider discarding the measurement")
else:
output['PhiNO']= np.round(PhiNO,3)
output['qL']= np.round(qL,3)
output['NPQt']= np.round(npqt,3)
output['PhiNPQ']= np.round(PhiNPQ,3)
output['FvP_over_FmP'] = np.round(FvP_FmP,3)
outputqP = np.round(qP,3)
# Otherwise, use the multi-phase flash calculation for Phi2, NPQt, PhiNPQ, PhiNO... etc.
# If Phi2 or NPQt is less than zero, make zero and give user warning. If Phi2 is higher than .85, give user warnings.warn flag.
# ----------------------------
else:
if fvfm <= -.10:
warnings.warn("Phi2 is outside of expected range, please consider discarding the measurement")
if fvfm >=.85:
warnings.warn("Phi2 is outside of expected range, please consider discarding the measurement")
else:
output["Phi2"] = np.round(fvfm,3)
if PhiNPQ <= -.10:
warnings.warn("PhiNPQ is outside of expected range, please consider discarding the measurement")
if PhiNPQ >= 1.1:
warnings.warn("PhiNPQ is outside of expected range, please consider discarding the measurement")
else:
output['PhiNPQ']= np.round(PhiNPQ,3)
output['qL']= np.round(qL,3)
output['NPQt']= np.round(npqt,3)
output['PhiNO']= np.round(PhiNO,3)
output['FvP_over_FmP'] = np.round(FvP_FmP,3)
outputqP = np.round(qP,3)
if PhiNO <= -.10:
warnings.warn("PhiNO is outside of expected range, please consider discarding the measurement")
if PhiNO >= 1:
warnings.warn("PhiNO is outside of expected range, please consider discarding the measurement")
else:
output['PhiNO']= np.round(PhiNO,3)
output['qL']= np.round(qL,3)
output['NPQt']= np.round(npqt,3)
output['PhiNPQ']= np.round(PhiNPQ,3)
output['FvP_over_FmP'] = np.round(FvP_FmP,3)
outputqP = np.round(qP,3)
output['FmPrime']=np.round(FmPrime,2)
# var Phi2_bar ="0: ";
# for (var i=0; i< (10*output.Phi2); i++){
# Phi2_bar+="█";
# }
# for (var i=10*output.Phi2; i< 10; i++){
# Phi2_bar+="░";
# }
# Phi2_bar+=" :1.0 (";
# Phi2_bar+=output.Phi2;
# Phi2_bar+=")";
# output.YII=Phi2_bar;
# only display LEF if there is a light intensity measurement > 0
# ----------------------------
if 'light_intensity' in _data and _data['light_intensity'] > 0:
output['LEF'] = np.round( (fvfm * 0.45 * _data['light_intensity']) ,3)
# Calculate Standard Deviation for Warning or Danger flags (out of bounds measurement)
# ----------------------------
if Fs_std > 100:
warnings.warn("noisy Fs")
# if (AFmP_std > 300) {
# warnings.warn("noisy FmPrime", output);
# }
# if (FmP_step1_std > 120 | FmP_step2_std > 120 | FmP_step3_std > 120 | FmP_end_std > 300) {
# warnings.warn("noisy multi-phase flash steps");
# }
if FoPrime_std > 150:
warnings.warn("noisy FoPrime")
#ANALYZE THE PHI-PSI DATA
ctrace=PAM['data_raw']
PSI_trace_beg=310
PSI_trace_end=615
PSI_trace_length=PSI_trace_end-PSI_trace_beg
PSI_data=PAM['data_raw'][PSI_trace_beg:PSI_trace_end]
PSI_dark_raw=np.mean(PSI_data[PSI_dark_beg:PSI_dark_end])
PSI_data_absorbance=[]
for i in range(0, PSI_trace_length):
PSI_data_absorbance.append(np.log(PSI_dark_raw/PSI_data[i]))
PSI_dark=np.mean(PSI_data_absorbance[PSI_dark_beg:PSI_dark_end])
PSI_ss=np.mean(PSI_data_absorbance[PSI_ss_beg:PSI_ss_end])
PSI_sat1=np.mean(PSI_data_absorbance[PSI_sat1_beg:PSI_sat1_end])
PSI_sat2=np.mean(PSI_data_absorbance[PSI_sat2_beg:PSI_sat2_end])
PSI_ss=1000*np.mean(PSI_data_absorbance[PSI_ss_beg:PSI_ss_end])
PSI_sat1_vals = np.sort(PSI_data_absorbance[PSI_sat1_beg:PSI_sat1_end]) # sort the saturating light values from low to high
length_of_sat1=PSI_sat1_end-PSI_sat1_beg
top_20_percent= int(length_of_sat1*0.8)
PSI_sat1 = 1000*np.mean(PSI_sat1_vals[top_20_percent:length_of_sat1]) # take the top 20% largest values and average them
PSI_sat2_vals = np.sort(PSI_data_absorbance[PSI_sat2_beg:PSI_sat2_end]) # sort the saturating light values from low to high
length_of_sat2=PSI_sat2_end-PSI_sat2_beg
top_20_percent=int(length_of_sat2*0.8)
PSI_sat2 = 1000*np.mean(PSI_sat2_vals[top_20_percent:length_of_sat2]) # take the top 20% largest values and average them
PSI_ox=PSI_ss/PSI_sat2
PSI_act=PSI_sat2
PSI_open=(PSI_sat1-PSI_ss)/PSI_sat2
PSI_or=1-PSI_sat1/PSI_sat2
output['PSI_data_absorbance']=PSI_data_absorbance
output["PS1 Active Centers"]=np.round(PSI_act, 3)
output["PS1 Open Centers"]=np.round(PSI_open, 3)
output["PS1 Over Reduced Centers"]=np.round(PSI_or, 3)
output["PS1 Oxidized Centers"]=np.round(PSI_ox, 3)
#output.PSI_dark=PSI_dark;
#output.PSI_ss = PSI_ss; #MathROUND(PSI_ss, 3);
#output.PSI_sat1 =MathROUND(PSI_sat1, 3);
#output.PSI_sat2 =MathROUND(PSI_sat2, 3);
#output.data_raw_PSI =PSI_data;
#output.PSI_dark_beg=PSI_dark_beg;
#output.PSI_dark_end=PSI_dark_end;
# Humidity changes
humidity_kinetics=[
DIRK_ECS['humidity'],
P700_DIRK['humidity'],
PAM['humidity']
]
output['humidity_K']=humidity_kinetics
# output.humidity_K_T=humidity_kinetics.join(", ");
humidity2_kinetics=[
DIRK_ECS['humidity2'],
P700_DIRK['humidity2'],
PAM['humidity2']
]
output['humidity2_K']=humidity2_kinetics
# output.humidity2_K_T=humidity2_kinetics.join(", ");
# changes in leaf contactless_temp
air_temp_kinetics=[
DIRK_ECS['temperature'],
P700_DIRK['temperature'],
PAM['temperature']
]
contactless_temp_kinetics=[
DIRK_ECS['contactless_temp'],
P700_DIRK['contactless_temp'],
PAM['contactless_temp']
]
output['air_temp_kinetics']=air_temp_kinetics
output['leaf_thickness']=DIRK_ECS['thickness']
output['LEAF_temp']=contactless_temp_kinetics
# output.LEAF_temp_T=contactless_temp_kinetics.join(", ");
#var air_flow=new Array();
#for (var i=1; i<12 ; i++){
# air_flow.push(json.set[i].air_flow);
#}
#output.air_flow=air_flow;
light_intensity=DIRK_ECS['light_intensity']
output["Light Intensity (PAR)"]= light_intensity
ambient_temperature=_data['set'][3]['temperature']
output["Ambient Temperature"]=ambient_temperature
ambient_humidity=_data['set'][3]['humidity']
output["Ambient Humidity"]=ambient_humidity
ambient_pressure=_data['set'][3]['pressure']
output["Ambient Pressure"]=ambient_pressure
#var leaf_RH=json.set[1].humidity2;
#output.leaf_RH=MathROUND(leaf_RH, 2);
leaf_temperature = DIRK_ECS['contactless_temp']
output["Leaf Temperature"]=leaf_temperature
leaf_air_difference_temperature = leaf_temperature-ambient_temperature
output["Leaf Temperature Differential"]=np.round(leaf_air_difference_temperature,3)
output['LEF']=np.round(0.45*output['Phi2']*output["Light Intensity (PAR)"],2)
leaf_temperature_differential = ambient_temperature
output["Leaf Temperature Differenial"]=np.round(leaf_temperature- leaf_temperature_differential, 2)
newSpad = analysis.GetProtocolByLabel("SPAD", _data)
output['SPAD'] = newSpad['spad'][0]
return output
_example = {
"time": 1579894191905,
"device_name": "MultispeQ",
"device_version": "2",
"device_id": "00:00:04:32",
"device_battery": 93,
"device_firmware": 2.21,
"sample": [
[
{
"time": 1579894191905,
"protocol_id": "editor",
"set": [
{
"time": 1579894192135,
"label": "no_leaf_baseline",
"light_intensity": 15.603,
"r": 70,
"g": 35,
"b": 20,
"w": 119,
"temperature": 23.53,
"humidity": 35.832,
"pressure": 979.605,
"temperature2": 23.65,
"humidity2": 34.402,
"pressure2": 979.932,
"contactless_temp": 23.19,
"compass_direction": "??",
"compass": -1,
"angle": 2.334,
"pitch": 2.3,
"roll": 0.41,
"data_raw": [
]
},
{
"time": 1579894193791,
"label": "DIRK_ECS",
"autogain": [
[
2,
1,
3,
12,
-493,
49615
],
[
3,
8,
1,
80,
-216,
43519
]
],
"light_intensity": 14.403,
"r": 63.8,
"g": 32,
"b": 18.4,
"w": 109.2,
"temperature": 23.58,
"humidity": 35.781,
"pressure": 979.579,
"temperature2": 23.71,
"humidity2": 34.385,
"pressure2": 979.935,
"contactless_temp": 25.53,
"thickness": 0.3,
"data_raw": [
49509,
49487,
49491,
49495,
49503,
49495,
49495,
49487,
49502,
49490,
49495,
49485,
49484,
49501,
49491,
49489,
49487,
49491,
49494,
49487,
49487,
49485,
49491,
49484,
49491,
49491,
49493,
49486,
49493,
49479,
49481,
49483,
49487,
49485,
49498,
49483,
49481,
49485,
49487,
49496,
49492,
49495,
49489,
49477,
49487,
49494,
49481,
49482,
49481,
49491,
49485,
49491,
49469,
49477,
49487,
49491,
49486,
49481,
49485,
49487,
49487,
49483,
49477,
49484,
49486,
49493,
49486,
49471,
49485,
49479,
49476,
49481,
49477,
49478,
49484,
49471,
49482,
49482,
49483,
49485,
49467,
49487,
49482,
49487,
49485,
49487,
49478,
49476,
49478,
49483,
49487,
49471,
49471,
49479,
49477,
49475,
49482,
49483,
49479,
49471,
49483,
49471,
49482,
49479,
49487,
49477,
49483,
49479,
49485,
49497,
49471,
49471,
49479,
49492,
49487,
49481,
49471,
49475,
49479,
49479,
49481,
49471,
49484,
49483,
49471,
49479,
49480,
49479,
49471,
49483,
49487,
49479,
49475,
49485,
49487,
49475,
49471,
49486,
49487,
49481,
49471,
49478,
49485,
49486,
49486,
49479,
49471,
49481,
49485,
49483,
49476,
49484,
49477,
49485,
49477,
49478,
49483,
49479,
49479,
49476,
49477,
49478,
49477,
49477,
49485,
49477,
49479,
49471,
49476,
49477,
49483,
49470,
49481,
49471,
49471,
49493,
49481,
49487,
49487,
49469,
49482,
49483,
49486,
49479,
49471,
49469,
49481,
49477,
49486,
49468,
49481,
49484,
49480,
49478,
49479,
49478,
49482,
49477,
49479,
49478,
49482,
49487,
49495,
49490,
49493,
49480,
49491,
49483,
49481,
49488,
49497,
49495,
49498,
49489,
49501,
49509,
49499,
49504,
49503,
49502,
49498,
49487,
49482,
49487,
49487,
49487,
49483,
49497,
49487,
49494,
49478,
49471,
49487,
49485,
49479,
49479,
49480,
49477,
49471,
49477,
49477,
49480,
49477,
49475,
49471,
49477,
49479,
49471,
49471,
49482,
49471,
49481,
49471,
49477,
49482,
49476,
49471,
49471,
49484,
49486,
49465,
49483,
49479,
49477,
49479,
49476,
49471,
49482,
49479,
49471,
49477,
49483,
49471,
49466,
49471,
49479,
49471,
49471,
49471,
49471,
49469,
49471,
49471,
49469,
49463,
49479,
49479,
49471,
49477,
49464,
49469,
49471,
49471,
49471,
49481,
49467,
49467,
49471,
49469,
49465,
49467,
49477,
49471,
49471,
49471,
49479,
49479,
49478,
49471,
49471,
49471,
49479,
49480,
49465,
49466,
49471,
49466,
49486,
49468,
49471,
49471,
49477,
49483,
49479,
49459,
49471,
49482,
49467,
49471,
49467,
49481,
49479,
49469,
49465,
49471,
49467,
49471,
49467,
49467,
49471,
49467,
49463,
49466,
49471,
49471,
49468,
49467,
49461,
49478,
49481,
49465,
49465,
49477,
49471,
49471,
49469,
49467,
49481,
49471,
49471,
49471,
49461,
49471,
49471,
49471,
49471,
49475,
49479,
49479,
49471,
49463,
49478,
49468,
49470,
49463,
49471,
49470,
49477,
49470,
49479,
49471,
49467,
49467,
49481,
49471,
49465,
49478,
49481,
49467,
49467,
49471,
49478,
49471,
49471,
49471,
49475,
49471,
49471,
49463,
49479,
49479,
49471,
49471,
49479,
49471,
49474,
49471,
49470,
49475,
49479,
49465,
49465,
49471,
49478,
49471,
49481,
49471,
49469,
49480,
49469,
49471,
49474,
49483,
49482,
49483,
49474,
49488,
49475,
49475,
49482,
49486,
49484,
49495,
49481,
49487,
49481,
49490,
49487,
49487,
49489,
49485,
49487,
49471,
49487,
49483,
49483,
49477,
49471,
49476,
49477,
49471,
49471,
49483,
49477,
49468,
49477,
49477,
49464,
49465,
49469,
49471,
49462,
49464,
49471,
49463,
49460,
49467,
49475,
49470,
49467,
49463,
49471,
49462,
49463,
49463,
49463,
49471,
49463,
49463,
49471,
49471,
49467,
49465,
49465,
49461,
49463,
49471,
49463,
49468,
49465,
49469,
49463,
49467,
49465,
49465,
49463,
49459,
49471,
49455,
49457,
49460,
49471,
49468,
49469,
49469,
49465,
49464,
49467,
49455,
49470,
49463,
49463,
49464,
49459,
49465,
49471,
49476,
49467,
49467,
49471,
49469,
49467,
49461,
49461,
49471,
49460,
49461,
49455,
49479,
49459,
49461,
49463,
49455,
49461,
49455,
49467,
49461,
49468,
49471,
49471,
49459,
49462,
49466,
49466,
49469,
49467,
49455,
49464,
49469,
49451,
49460,
49458,
49463,
49462,
49461,
49449,
49455,
49466,
49471,
49455,
49461,
49468,
49460,
49451,
49465,
49467,
49453,
49462,
49471,
49460,
49463,
49467,
49471,
49463,
49455,
49449,
49470,
49471,
49470,
49470,
49464,
49460,
49463,
49463,
49455,
49461,
49462,
49457,
49467,
49463,
49463,
49455,
49466,
49466,
49463,
49463,
49459,
49459,
49464,
49455,
49463,
49471,
49463,
49453,
49460,
49471,
49458,
49460,
49455,
49464,
49463,
49451,
49471,
49465,
49459,
49463,
49467,
49471,
49455,
49465,
49471,
49465,
49462,
49459,
49467,
49461,
49451,
49464,
49460,
49445,
49452,
49455,
49464,
49454,
49455,
49462,
49460,
49461,
49455,
49463,
49457,
49457,
49470,
49475,
49475,
49467,
49473,
49475,
49474,
49474,
49482,
49475,
49481,
49485,
49491,
49489,
49481,
49481,
49497,
49491,
49471,
49487,
49478,
49470,
49484,
49489,
49471,
49479,
49471,
49466,
49465,
49463,
49463,
49471,
49469,
49471,
49463,
49468,
49471,
49470,
49466,
49466,
49467,
49469,
49467,
49466,
49455,
49462,
49462,
49459,
49471,
49461,
49459,
49463,
49463,
49467,
49462,
49460,
49463,
49467,
49471,
49463,
49455,
49455,
49462,
49464,
49455,
49478,
49455,
49455,
49463,
49459,
49463,
49459,
49465,
49466,
49463,
49466,
49455,
49459,
49462,
49455,
49463,
49455,
49470,
49471,
49460,
49471,
49471,
49467,
49471,
49467,
49454,
49469,
49463,
49459,
49465,
49467,
49463,
49455,
49467,
49463,
49455,
49462,
49471,
49463,
49466,
49461,
49471,
49455,
49459,
49471,
49465,
49455,
49467,
49471,
49459,
49449,
49462,
49449,
49462,
49455,
49469,
49451,
49455,
49454,
49463,
49455,
49461,
49465,
49454,
49459,
49467,
49458,
49459,
49458,
49449,
49455,
49460,
49459,
49455,
49471,
49461,
49455,
49462,
49463,
49461,
49462,
49453,
49467,
49461,
49455,
49462,
49455,
49458,
49467,
49466,
49455,
49460,
49463,
49455,
49461,
49454,
49461,
49463,
49467,
49463,
49471,
49463,
49463,
49462,
49455,
49448,
49469,
49459,
49465,
49465,
49454,
49455,
49455,
49454,
49455,
49455,
49453,
49463,
49463,
49447,
49469,
49455,
49455,
49452,
49455,
49459,
49465,
49460,
49455,
49465,
49461,
49455,
49463,
49461,
49455,
49457,
49463,
49455,
49454,
49466,
49450,
49459,
49455,
49451,
49451,
49459,
49450,
49459,
49454,
49451,
49459,
49454,
49459,
49456,
49459,
49459,
49463,
49458,
49459,
49471,
49473,
49459,
49472,
49466,
49483,
49483,
49467,
49475,
49473,
49470,
49475,
49475,
49459,
49471,
49468,
49482,
49465,
49471,
49462,
49470,
49458,
49466,
49470,
49463,
49471,
49461,
49444,
49465,
49471,
49461,
49471,
49465,
49455,
49462,
49449,
49463,
49463,
49451,
49459,
49461,
49455,
49453,
49455,
49460,
49450,
49450,
49463,
49455,
49463,
49461,
49462,
49447,
49450,
49461,
49454,
49453,
49453,
49447,
49451,
49455,
49455,
49461,
49461,
49445,
49460,
49454,
49455,
49461,
49461,
49452,
49462,
49447,
49457,
49452,
49445,
49443,
49452,
49445,
49451,
49451,
49447,
49454,
49462,
49457,
49454,
49451,
49447,
49455,
49454,
49447,
49453,
49453,
49447,
49451,
49443,
49460,
49455,
49454,
49462,
49452,
49451,
49455,
49451,
49459,
49460,
49459,
49458,
49459,
49449,
49455,
49459,
49458,
49452,
49450,
49459,
49447,
49449,
49459,
49454,
49455,
49455,
49447,
49454,
49453,
49451,
49455,
49449,
49455,
49466,
49447,
49449,
49447,
49455,
49455,
49449,
49454,
49454,
49451,
49455,
49443,
49455,
49462,
49453,
49447,
49453,
49445,
49454,
49459,
49451,
49455,
49447,
49453,
49449,
49444,
49447,
49447,
49454,
49459,
49448,
49462,
49448,
49446,
49455,
49450,
49453,
49463,
49447,
49453,
49454,
49449,
49450,
49445,
49454,
49462,
49447,
49455,
49455,
49443,
49447,
49447,
49445,
49455,
49447,
49450,
49455,
49455,
49449,
49455,
49447,
49447,
49451,
49447,
49453,
49455,
49443,
49453,
49448,
49447,
49455,
49445,
49454,
49447,
49447,
49454,
49447,
49458,
49450,
49446,
49460,
49450,
49454,
49460,
49445,
49454,
49456,
49457,
49459,
49463,
49470,
49470,
49459,
49471,
49465,
49472,
49475,
49473,
49483,
49471,
49459,
49475,
49474,
49466,
49469,
49471,
49463,
49460,
49469,
49466,
49462,
49467,
49455,
49465,
49465,
49455,
49463,
49449,
49452,
49453,
49453,
49462,
49450,
49439,
49453,
49455,
49455,
49455,
49445,
49455,
49449,
49455,
49448,
49465,
49457,
49446,
49443,
49445,
49454,
49451,
49459,
49461,
49447,
49441,
49455,
49449,
49455,
49459,
49449,
49446,
49442,
49449,
49449,
49450,
49453,
49441,
49453,
49450,
49455,
49445,
49459,
49451,
49447,
49459,
49451,
49449,
49451,
49453,
49438,
49455,
49446,
49443,
49445,
49443,
49447,
49455,
49459,
49457,
49435,
49439,
49441,
49441,
49449,
49450,
49443,
49453,
49453,
49444,
49447,
49449,
49439,
49453,
49459,
49449,
49438,
49452,
49443,
49449,
49455,
49455,
49445,
49454,
49441,
49446,
49452,
49445,
49453,
49455,
49447,
49445,
49443,
49444,
49443,
49449,
49439,
49439,
49441,
49450,
49443,
49446,
49445,
49446,
49450,
49450,
49451,
49443,
49443,
49451,
49451,
49451,
49449,
49441,
49453,
49446,
49447,
49446,
49443,
49449,
49443,
49461,
49446,
49452,
49447,
49443,
49449,
49439,
49442,
49437,
49454,
49439,
49439,
49447,
49442,
49447,
49437,
49439,
49447,
49454,
49444,
49439,
49454,
49443,
49455,
49439,
49439,
49447,
49444,
49434,
49451,
49441,
49442,
49451,
49450,
49444,
49447,
49439,
49447,
49443,
49451,
49447,
49445,
49443,
49439,
49439,
49433,
49444,
49445,
49441,
49445,
49439,
49455,
49447,
49447,
49454,
49448,
49447,
49451,
49444,
49443,
49451,
49437,
49447,
49443,
49447,
49449,
49451,
49445,
49459,
49453,
49455,
49457,
49454,
49459,
49450,
49469,
49455,
49451,
49463,
49455,
49471,
49469,
49459,
49469,
49471,
49467,
49465,
49455,
49467,
49455,
49466,
49453,
49469,
49461,
49463,
49450,
49450,
49463,
49459,
49443,
49459,
49449,
49453,
49443,
49455,
49449,
49446,
49445,
49451,
49451,
49451,
49451,
49444,
49446,
49447,
49443,
49455,
49450,
49451,
49447,
49443,
49447,
49445,
49453,
49450,
49451,
49445,
49445,
49455,
49441,
49450,
49440,
49444,
49442,
49444,
49452,
49441,
49438,
49439,
49455,
49449,
49439,
49445,
49445,
49442,
49439,
49449,
49441,
49447,
49439,
49451,
49447,
49449,
49451,
49445,
49443,
49446,
49454,
49440,
49455,
49437,
49450,
49441,
49445,
49447,
49447,
49453,
49446,
49447,
49443,
49451,
49441,
49445,
49439,
49447,
49449,
49435,
49447,
49439,
49444,
49431,
49446,
49439,
49445,
49430,
49455,
914,
914,
914,
913,
910,
916,
914,
911,
915,
910,
914,
912,
912,
915,
912,
914,
914,
916,
913,
910,
906,
906,
909,
902,
905,
901,
898,
902,
897,
900,
896,
899,
894,
900,
892,
896,
893,
892,
895,
894,
893,
899,
895,
902,
897,
904,
897,
905,
900,
905,
900,
906,
905,
903,
906,
902,
908,
906,
903,
909,
904,
909,
906,
908,
909,
906,
909,
904,
909,
908,
906,
904,
910,
905,
910,
904,
910,
904,
910,
905,
910,
905,
909,
906,
910,
904,
910,
906,
910,
910,
906,
910,
906,
911,
905,
910,
906,
909,
905,
909,
908,
908,
910,
905,
909,
907,
910,
905,
909,
906,
906,
910,
908,
909,
910,
905,
910,
909,
909,
906,
910,
910,
908,
910,
908,
910,
910,
906,
910,
905,
910,
908,
910,
910,
908,
910,
908,
910,
908,
910
]
},
{
"time": 1579894201305,
"label": "DIRK_P700",
"light_intensity": 14.4,
"r": 63.8,
"g": 32,
"b": 18.4,
"w": 109.2,
"temperature": 23.64,
"humidity": 35.808,
"pressure": 979.576,
"temperature2": 23.75,
"humidity2": 34.302,
"pressure2": 979.895,
"contactless_temp": 24.71,
"compass_direction": "??",
"compass": -1,
"angle": 2.511,
"pitch": 2.51,
"roll": 0.18,
"data_raw": [
43613,
43625,
43593,
43595,
43611,
43599,
43608,
43589,
43589,
43580,
43588,
43582,
43613,
43564,
43597,
43580,
43602,
43601,
43573,
43579,
43585,
43585,
43585,
43597,
43587,
43584,
43589,
43575,
43579,
43565,
43590,
43612,
43560,
43585,
43593,
43576,
43609,
43607,
43605,
43585,
43608,
43584,
43582,
43577,
43566,
43596,
43579,
43553,
43593,
43577,
43573,
43568,
43592,
43565,
43582,
43601,
43599,
43573,
43581,
43575,
43590,
43603,
43583,
43591,
43585,
43583,
43605,
43597,
43583,
43589,
43565,
43561,
43563,
43581,
43589,
43567,
43578,
43592,
43578,
43601,
43595,
43550,
43565,
43573,
43597,
43613,
43583,
43540,
43571,
43585,
43593,
43572,
43577,
43559,
43595,
43585,
43601,
43565,
43585,
43581,
43589,
43593,
43579,
43585,
43550,
43559,
43575,
43569,
43573,
43577,
43565,
43604,
43599,
43571,
43593,
43584,
43581,
43577,
43603,
43585,
43593,
43611,
43570,
43571,
43579,
43563,
43555,
43581,
43579,
43566,
43541,
43557,
43539,
43557,
43584,
43565,
43560,
43549,
43562,
43575,
43582,
43553,
43593,
43589,
43557,
43580,
43582,
43569,
43569,
43577,
43561,
43579,
43573,
43551,
43568,
43544,
43577,
43549,
43568,
43567,
43576,
43581,
43559,
43561,
43561,
43559,
43582,
43581,
43589,
43569,
43575,
43585,
43568,
43589,
43568,
43569,
43559,
43567,
43598,
43584,
43601,
43568,
43571,
43577,
43553,
43581,
43601,
43562,
43569,
43573,
43545,
43565,
43547,
43576,
43585,
43550,
43577,
43611,
43582,
43597,
43567,
43569,
43572,
43590,
43591,
43577,
43574,
43571,
43564,
43583,
43551,
43597,
43584,
43577,
43551,
43571,
43576,
43565,
43602,
43585,
43571,
43581,
43584,
43581,
43617,
43575,
43550,
43585,
43566,
43600,
43596,
43601,
43593,
43585,
43593,
43581,
43585,
43617,
43582,
43599,
43589,
43601,
43605,
43622,
43605,
43576,
43565,
43576,
43585,
43589,
43574,
43557,
43579,
43615,
43579,
43583,
43565,
43584,
43589,
43585,
43603,
43563,
43562,
43583,
43581,
43521,
43578,
43568,
43575,
43581,
43575,
43573,
43545,
43573,
43570,
43601,
43527,
43536,
43601,
43570,
43547,
43583,
43589,
43569,
43582,
43560,
43591,
43591,
43573,
43569,
43577,
43601,
43580,
43583,
43577,
43558,
43553,
43610,
43569,
43580,
43540,
43581,
43581,
43596,
43603,
43595,
43603,
43589,
43551,
43577,
43585,
43584,
43553,
43589,
43587,
43609,
43605,
43578,
43599,
43601,
43593,
43600,
43605,
43593,
43583,
43601,
43600,
43594,
43577,
43553,
43585,
43592,
43561,
43574,
43573,
43575,
43551,
43547,
43573,
43585,
43538,
43571,
43583,
43593,
43567,
43598,
43585,
43569,
43591,
43601,
43573,
43564,
43551,
43568,
43559,
43537,
43545,
43533,
43537,
43529,
43533,
43558,
43511,
43523,
43545,
43569,
43549,
43549,
43565,
43567,
43539,
43537,
43547,
43539,
43549,
43594,
43577,
43549,
43543,
43567,
43576,
43555,
43567,
43547,
43597,
43543,
43545,
43553,
43553,
43545,
43575,
43547,
43573,
43553,
43567,
43567,
43526,
43553,
43557,
43557,
43567,
43596,
43565,
43581,
43561,
43544,
43575,
43531,
43537,
43571,
43573,
43580,
43569,
43580,
43608,
43563,
43584,
43560,
43575,
43601,
43571,
43583,
43545,
43570,
43589,
43552,
43589,
43593,
43581,
43583,
43583,
43567,
43630,
43617,
43552,
43568,
43580,
43593,
43584,
43569,
43592,
43595,
43587,
43585,
43571,
43593,
43584,
43598,
43581,
43597,
43613,
43592,
43595,
43567,
43568,
43574,
43577,
43601,
43600,
43591,
43578,
43605,
43593,
43555,
43604,
43593,
43599,
43585,
43581,
43598,
43551,
43579,
43565,
43569,
43566,
43585,
43601,
43559,
43589,
43585,
43545,
43591,
43567,
43575,
43579,
43565,
43541,
43612,
43591,
43573,
43593,
43559,
43593,
43613,
43579,
43611,
43577,
43585,
43574,
43587,
43585,
43601,
43573,
43557,
43585,
43565,
43593,
43568,
43581,
43590,
43601,
43585,
43611,
43572,
43590,
43545,
43583,
43596,
43596,
43585,
43564,
43599,
43606,
43601,
43589,
43606,
43581,
43591,
43591,
43583,
43575,
43595,
43596,
43616,
43583,
43615,
43598,
43581,
43579,
43592,
43591,
43568,
43585,
43616,
43579,
43601,
43601,
43577,
43601,
43579,
43590,
43617,
43599,
43567,
43596,
43595,
43601,
43607,
43581,
43611,
43599,
43593,
43605,
43617,
43601,
43620,
43627,
43588,
43569,
43624,
43605,
43608,
43604,
43607,
43595,
43580,
43604,
43603,
43593,
43604,
43609,
43596,
43575,
43601,
43609,
43571,
43591,
43617,
43560,
43577,
43563,
43573,
43565,
43576,
43592,
43583,
43603,
43577,
43593,
43592,
43628,
43617,
43570,
43557,
43588,
43591,
43575,
43588,
43581,
43589,
43597,
43601,
43589,
43617,
43588,
43592,
43569,
43576,
43575,
43592,
43561,
43581,
43594,
43580,
43582,
43585,
43568,
43583,
43601,
43605,
43582,
43581,
43599,
43611,
43585,
43585,
43581,
43579,
43594,
43600,
43577,
43612,
43620,
43597,
43591,
43569,
43582,
43590,
43585,
43583,
43580,
43585,
43592,
43561,
43569,
43585,
43583,
43604,
43593,
43597,
43553,
43583,
43557,
43582,
43588,
43609,
43581,
43617,
43580,
43594,
43599,
43589,
43608,
43582,
43601,
43588,
43595,
43588,
43601,
43595,
43608,
43590,
43605,
43601,
43560,
43588,
43576,
43581,
43593,
43578,
43564,
43568,
43544,
43566,
43550,
43569,
43552,
43579,
43553,
43557,
43537,
43571,
43557,
43566,
43605,
43552,
43565,
43569,
43585,
43583,
43583,
43602,
43581,
43567,
43574,
43589,
43594,
43589,
43545,
43581,
43568,
43539,
43585,
43605,
43577,
43599,
43595,
43597,
43601,
43617,
43633,
43605,
43553,
43547,
43598,
43559,
43597,
43584,
43571,
43567,
43589,
43581,
43596,
43581,
43553,
43603,
43579,
43584,
43601,
43583,
43623,
43579,
43599,
43583,
43617,
43600,
43609,
43569,
43597,
43628,
43583,
43589,
43589,
43573,
43578,
43565,
43564,
43607,
43627,
43590,
43607,
43601,
43606,
43605,
43575,
43575,
43588,
43583,
43587,
43576,
43585,
43597,
43593,
43571,
43557,
43573,
43572,
43573,
43579,
43589,
43560,
43601,
43578,
43577,
43605,
43607,
43649,
43612,
43578,
43577,
43577,
43569,
43601,
43571,
43579,
43593,
43569,
43551,
43585,
43557,
43593,
43578,
43561,
43549,
43557,
43571,
43598,
43567,
43561,
43573,
43582,
43601,
43616,
43574,
43601,
43590,
43617,
43585,
43603,
43543,
43577,
43599,
43571,
43549,
43589,
43569,
43583,
43587,
43601,
43583,
43596,
43603,
43606,
43574,
43605,
43594,
43621,
43601,
43585,
43576,
43607,
43583,
43593,
43559,
43581,
43591,
43591,
43584,
43579,
43553,
43577,
43606,
43623,
43615,
43563,
43589,
43569,
43575,
43584,
43582,
43577,
43588,
43563,
43585,
43603,
43605,
43592,
43601,
43602,
43616,
43583,
43573,
43617,
43615,
43582,
43584,
43581,
43583,
43591,
43593,
43625,
43608,
43573,
43579,
43593,
43591,
43600,
43609,
43585,
43593,
43575,
43600,
43598,
43601,
43569,
43580,
43589,
43583,
43597,
43595,
43601,
43593,
43601,
43589,
43585,
43585,
43606,
43591,
43581,
43572,
43576,
43573,
43572,
43552,
43505,
43553,
43583,
43573,
43590,
43601,
43604,
43565,
43569,
43577,
43591,
43630,
43609,
43576,
43567,
43593,
43584,
43622,
43572,
43579,
43596,
43621,
43581,
43565,
43603,
43563,
43569,
43565,
43594,
43558,
43548,
43567,
43583,
43540,
43577,
43571,
43581,
43563,
43561,
43561,
43600,
43585,
43579,
43603,
43624,
43588,
43580,
43597,
43609,
43585,
43605,
43597,
43596,
43581,
43601,
43597,
43603,
43575,
43560,
43547,
43576,
43579,
43584,
43612,
43579,
43595,
43566,
43556,
43567,
43551,
43585,
43584,
43575,
43611,
43581,
43592,
43576,
43616,
43576,
43575,
43592,
43587,
43593,
43558,
43592,
43572,
43589,
43569,
43599,
43577,
43600,
43597,
43565,
43566,
43568,
43591,
43565,
43549,
43569,
43568,
43584,
43561,
43585,
43557,
43594,
43585,
43585,
43575,
43571,
43575,
43629,
43559,
43585,
43569,
43577,
43615,
43573,
43574,
43579,
43569,
43563,
43577,
43558,
43565,
43585,
43595,
43580,
43575,
43600,
43569,
43591,
43569,
43582,
43575,
43609,
43551,
43589,
43589,
43569,
43585,
43590,
43601,
43567,
43613,
43585,
43572,
43572,
43605,
43583,
43617,
43597,
43617,
43569,
43580,
43593,
43585,
43561,
43597,
43581,
43593,
43604,
43583,
43603,
43588,
43612,
43613,
43587,
43569,
43561,
43573,
43600,
43589,
43593,
43577,
43581,
43577,
43577,
43603,
43591,
43573,
43585,
43583,
43563,
43561,
43579,
43607,
43587,
43585,
43576,
43585,
43595,
43591,
43603,
43592,
43615,
43588,
43591,
43610,
43593,
43585,
43597,
43589,
43598,
43604,
43603,
43601,
43583,
43574,
43595,
43597,
43592,
43585,
43592,
43567,
43553,
43569,
43553,
43593,
43564,
43570,
43578,
43587,
43566,
43592,
43573,
43585,
43593,
43585,
43573,
43569,
43545,
43567,
43566,
43585,
43574,
43577,
43585,
43571,
43601,
43552,
43557,
43581,
43577,
43584,
43576,
43574,
43571,
43577,
43544,
43577,
43601,
43581,
43593,
43587,
43580,
43566,
43585,
43549,
43577,
43581,
43571,
43553,
43557,
43567,
43577,
43561,
43525,
43557,
43575,
43557,
43553,
43558,
43535,
43593,
43550,
43567,
43551,
43581,
43575,
43550,
43577,
43574,
43583,
43588,
43563,
43571,
43597,
43575,
43596,
43569,
43577,
43605,
43561,
43591,
43545,
43557,
43587,
43537,
43564,
43555,
43577,
43611,
43573,
43577,
43579,
43570,
43559,
43577,
43569,
43560,
43595,
43593,
43585,
43580,
43585,
43595,
43573,
43605,
43560,
43599,
43576,
43585,
43588,
43574,
43551,
43579,
43577,
43565,
43585,
43583,
43571,
43557,
43568,
43552,
43583,
43599,
43572,
43575,
43571,
43588,
43536,
43561,
43593,
43580,
43547,
43569,
43589,
43590,
43579,
43585,
43617,
43571,
43598,
43594,
43605,
43561,
43593,
43582,
43601,
43576,
43569,
43584,
43569,
43577,
43563,
43553,
43580,
43582,
43559,
43567,
43563,
43605,
43560,
43568,
43587,
43596,
43579,
43575,
43610,
43561,
43585,
43585,
43571,
43561,
43596,
43609,
43601,
43601,
43607,
43581,
43560,
43585,
43577,
43593,
43577,
43564,
43564,
43571,
43576,
43597,
43569,
43583,
43555,
43537,
43577,
43572,
43577,
43574,
43581,
43565,
43571,
43583,
43565,
43591,
43573,
43585,
43613,
43583,
43583,
43601,
43609,
43611,
43597,
43569,
43589,
43572,
43597,
43592,
43584,
43577,
43584,
43583,
43579,
43592,
43568,
43584,
43603,
43593,
43589,
43579,
43572,
43611,
43628,
43592,
43581,
43591,
43573,
43604,
43574,
43571,
43573,
43593,
43563,
43605,
43598,
43603,
43561,
43585,
43580,
43545,
43553,
43591,
43601,
43605,
43592,
43596,
43612,
43545,
43611,
43577,
43567,
43627,
43601,
43611,
43601,
43619,
43588,
43625,
43585,
43606,
43593,
43617,
43627,
43593,
43592,
43617,
43617,
43588,
43585,
43628,
43591,
43621,
43601,
43599,
43627,
43633,
43597,
43601,
43611,
43585,
43602,
43582,
43585,
43594,
43601,
43597,
43591,
43593,
43614,
43611,
43609,
43573,
43615,
43573,
43601,
43637,
43632,
43601,
43603,
43589,
43615,
43631,
43597,
43585,
43573,
43579,
43581,
43583,
43561,
43569,
43617,
43591,
43573,
43584,
43596,
43592,
43607,
43585,
43591,
43588,
43595,
43593,
43569,
43580,
43597,
43585,
43585,
43593,
43596,
43583,
43577,
43611,
43602,
43596,
43573,
43597,
43603,
43585,
43587,
43600,
43592,
43581,
43591,
43595,
43600,
43581,
43581,
43585,
43583,
43569,
43582,
43591,
43585,
43593,
43572,
43607,
43590,
43604,
43588,
43567,
43611,
43603,
43590,
43633,
43606,
43604,
43582,
43584,
43605,
43595,
43563,
43607,
43601,
43605,
43595,
43603,
43593,
43592,
43611,
43557,
43565,
43573,
43600,
43584,
43595,
43585,
43600,
43575,
43583,
43580,
43565,
43581,
43569,
43601,
43585,
43584,
43597,
43572,
43591,
43593,
43563,
43593,
43607,
43541,
43603,
43578,
43617,
43573,
43596,
43596,
43625,
43595,
43527,
43608,
43585,
43603,
43577,
43585,
43571,
43595,
43601,
43571,
43592,
43573,
43585,
43593,
43607,
43603,
43565,
43596,
43540,
43597,
43583,
43580,
43589,
43580,
43561,
43553,
43585,
43590,
43557,
43598,
43585,
43569,
43608,
43595,
43607,
43578,
43585,
43583,
43565,
43576,
43557,
43564,
43557,
43569,
43577,
43565,
43571,
43593,
43585,
43573,
43611,
43601,
43577,
43601,
43573,
43553,
43571,
43559,
43585,
43576,
43590,
43585,
43564,
43585,
43559,
43581,
43576,
43585,
43575,
43583,
43593,
43584,
43581,
43601,
43600,
43601,
43580,
43590,
43581,
43584,
43573,
43579,
43553,
43593
]
},
{
"time": 1579894204819,
"label": "PAM",
"light_intensity": 14.4,
"r": 63.8,
"g": 32,
"b": 18.4,
"w": 109.2,
"temperature": 23.7,
"humidity": 35.835,
"pressure": 979.568,
"temperature2": 23.81,
"humidity2": 34.436,
"pressure2": 979.867,
"contactless_temp": 24.33,
"thickness": 0.3,
"compass_direction": "??",
"compass": -1,
"angle": 2.324,
"pitch": 2.32,
"roll": 0.18,
"data_raw": [
1264,
43622,
1261,
43581,
1262,
43577,
1262,
43601,
1264,
43600,
1264,
43574,
1266,
43601,
1261,
43597,
1262,
43592,
1268,
43598,
1267,
43561,
1262,
43596,
1262,
43611,
1263,
43619,
1266,
43604,
1266,
43611,
1262,
43590,
1269,
43617,
1269,
43614,
1268,
43596,
1264,
43585,
1267,
43608,
1267,
43629,
1265,
43548,
1270,
43601,
1272,
43571,
1266,
43581,
1266,
43629,
1270,
43599,
1269,
43577,
1265,
43609,
1268,
43632,
1270,
43598,
1270,
43585,
1266,
43579,
1269,
43603,
1271,
43596,
1270,
43611,
1266,
43611,
1266,
43597,
1272,
43565,
1274,
43601,
1269,
43615,
1269,
43627,
1276,
43613,
1273,
43630,
1269,
43603,
1267,
43591,
1273,
43641,
1276,
43620,
1274,
43601,
1268,
43567,
1270,
43591,
1276,
43581,
1275,
43607,
1271,
43581,
1269,
43585,
1278,
43607,
1274,
43581,
1269,
43585,
1274,
43585,
1276,
43583,
1276,
43625,
1276,
43579,
1269,
43573,
1270,
43589,
1275,
43620,
1273,
43595,
1270,
43596,
1277,
43589,
1274,
43591,
1276,
43581,
1269,
43581,
1276,
43601,
1278,
43595,
1277,
43579,
1274,
43573,
1274,
43583,
1278,
43617,
1278,
43633,
1273,
43608,
1272,
43597,
1278,
43585,
1276,
43579,
1275,
43585,
1277,
43577,
1276,
43592,
1272,
43563,
1278,
43614,
1278,
43603,
1278,
43547,
1272,
43608,
1274,
43613,
1282,
43613,
1277,
43600,
1272,
43597,
1273,
43601,
1280,
43616,
1279,
43594,
1275,
43603,
3330,
43733,
3682,
43467,
3766,
43431,
3786,
43405,
3796,
43416,
3806,
43419,
3807,
43391,
3808,
43407,
3809,
43377,
3813,
43397,
3808,
43415,
3805,
43385,
3815,
43411,
3813,
43456,
3810,
43401,
3807,
43393,
3810,
43416,
3810,
43415,
3809,
43400,
3814,
43409,
3806,
43379,
3804,
43411,
3804,
43393,
3809,
43425,
3810,
43393,
3805,
43366,
3810,
43388,
3809,
43408,
3804,
43375,
3808,
43365,
3821,
43365,
3823,
43361,
3817,
43401,
3819,
43384,
3824,
43359,
3821,
43385,
3819,
43367,
3819,
43365,
3820,
43371,
3821,
43388,
3824,
43345,
3817,
43313,
3822,
43361,
3818,
43345,
3817,
43348,
3834,
43329,
3829,
43311,
3834,
43345,
3832,
43383,
3834,
43329,
3824,
43337,
3828,
43365,
3828,
43329,
3830,
43344,
3831,
43351,
3833,
43356,
3826,
43367,
3825,
43339,
3833,
43325,
3834,
43339,
3830,
43353,
3831,
43289,
3831,
43312,
3825,
43322,
3822,
43317,
3830,
43292,
3829,
43319,
3830,
43313,
3830,
43300,
3829,
43282,
3824,
43345,
3825,
43303,
3832,
43281,
3826,
43311,
3825,
43313,
3818,
43297,
3816,
43309,
3818,
43288,
3818,
43277,
3818,
43303,
3818,
43281,
3818,
43325,
3813,
43258,
3815,
43291,
3814,
43333,
3816,
43318,
3817,
43313,
3818,
43317,
3818,
43289,
3816,
43281,
3520,
43325,
3046,
43397,
2662,
43473,
2356,
43524,
2122,
43533,
1941,
43539,
1809,
43590,
1722,
43531,
1649,
43583,
1596,
43583,
1556,
43578,
1526,
43591,
1504,
43605,
1486,
43603,
1472,
43592,
1697,
43283,
1597,
43337,
1549,
43345,
1498,
43361,
1455,
43357,
1416,
43409,
1390,
43423,
1367,
43456,
1346,
43455,
1321,
43472,
1304,
43461,
1293,
43457,
1279,
43462,
1271,
43464,
1265,
43489,
1249,
43951,
3371,
43595,
3641,
43409,
3739,
43323,
3776,
43341,
3787,
43355,
3794,
43321,
3800,
43319,
3798,
43318,
3799,
43346,
3796,
43321,
3801,
43294,
3801,
43335,
3790,
43341,
3797,
43311,
3798,
43337,
3791,
43319,
3793,
43318,
3793,
43333,
3785,
43329,
3786,
43309,
3791,
43297,
3789,
43295,
3790,
43331,
3785,
43347,
3785,
43313,
3792,
43301,
3783,
43329,
3786,
43297,
3788,
43304,
3818,
43288,
3817,
43300,
3819,
43287,
3817,
43277,
3817,
43285,
3814,
43301,
3820,
43311,
3816,
43265,
3819,
43267,
3814,
43257,
3819,
43287,
3817,
43285,
3817,
43297,
3817,
43284,
3817,
43309,
3817,
43281,
3814,
43328,
3810,
43291,
3809,
43281,
3806,
43333,
3809,
43297,
3809,
43271,
3805,
43321,
3809,
43351,
3810,
43297,
3810,
43308,
3810,
43297,
3805,
43317,
3803,
43281,
3806,
43297,
3795,
43281,
3785,
43297,
3787,
43289,
3781,
43295,
3783,
43311,
3784,
43329,
3780,
43305,
3778,
43334,
3788,
43313,
3781,
43319,
3776,
43317,
3785,
43340,
3776,
43341,
3784,
43321,
3782,
43337,
1585,
43265,
3640,
43372,
3548,
43437,
3469,
43401,
3406,
43449,
3336,
43477,
3273,
43477,
3219,
43467,
3161,
43512,
3099,
43500,
3040,
43481,
2986,
43487,
2936,
43485,
2891,
43496,
2838,
43541
]
},
{
"time": 1579894211290,
"label": "SPAD",
"absorbance": [
[
7411,
9435,
-40,
0.104365,
2,
3,
0
],
[
65535,
9067,
0,
-0.85901,
6,
1,
0
]
],
"spad": [
42.726,
37.157,
-40,
6.93
],
"light_intensity": 11.415,
"r": 53,
"g": 25,
"b": 15,
"w": 88,
"temperature": 23.81,
"humidity": 35.854,
"pressure": 979.581,
"temperature2": 23.94,
"humidity2": 34.358,
"pressure2": 979.884,
"contactless_temp": 23.81,
"thickness": 0.29,
"compass_direction": "??",
"compass": -1,
"angle": 2.407,
"pitch": 2.32,
"roll": 0.65,
"data_raw": [
]
}
],
"data_raw": [
]
}
]
],
"app_os": "macOS 18.7.0",
"app_name": "PhotosynQ",
"app_version": "1.6.11",
"app_device": "x64",
"location": False,
"time_offset": "America/Detroit"
}