129 lines
3.8 KiB
JavaScript
129 lines
3.8 KiB
JavaScript
// Data preparation for fetching radioactivity data
|
|
// rxf 2022-06-24
|
|
|
|
import {returnOnError} from "../utilities/reporterror.js";
|
|
import { getActData, getAvgData, getLongAvg } from "../actions/getsensorData.js"
|
|
import checkParams from "../utilities/checkparams.js";
|
|
|
|
|
|
const radioactFilter = (data, opts, actual) => {
|
|
let erg = {}
|
|
erg.sid = opts.sensorid
|
|
erg.sname = opts.sname
|
|
erg.values = []
|
|
for (let x of data.values) {
|
|
let entry = {}
|
|
entry.datetime = x.datetime
|
|
if(actual) {
|
|
entry.cpm = x.counts_per_minute,
|
|
entry.uSvh = x.counts_per_minute / 60 * opts.factor
|
|
} else {
|
|
entry.cpmAvg = x.counts_per_minute,
|
|
entry.uSvhAvg = x.counts_per_minute / 60 * opts.factor
|
|
}
|
|
erg.values.push(entry)
|
|
}
|
|
return erg
|
|
}
|
|
|
|
|
|
export const getRadioData = async (params, possibles, props) => {
|
|
let ret = {err: null}
|
|
|
|
let {opts, erro} = checkParams(params, {
|
|
mandatory:[
|
|
{name:'sensorid', type: 'int'},
|
|
],
|
|
optional: possibles
|
|
})
|
|
// To be compatible with old API:
|
|
if (opts.out === 'csv') {
|
|
opts.csv = true
|
|
}
|
|
if (erro) {
|
|
return returnOnError(ret, erro, getNoiseData.name)
|
|
}
|
|
|
|
// execute function depending on given 'what'
|
|
for(let x of whatTable) {
|
|
if (x.what === opts.what) {
|
|
opts.span = setoptionfromtable(opts.span, x.span)
|
|
opts.daystart = setoptionfromtable(opts.daystart, x.daystart)
|
|
let {start, stop} = calcRange(opts) // calc time range
|
|
opts.start = start
|
|
opts.stop = stop
|
|
let erg = await x.func(opts) // get the data
|
|
ret = {
|
|
err: erg.err,
|
|
options: {
|
|
sid: opts.sensorid,
|
|
indoor: props.location[0].indoor,
|
|
span: opts.span,
|
|
start: DateTime.fromISO(opts.start.slice(7)),
|
|
data: opts.data,
|
|
count: erg.values.length,
|
|
},
|
|
values: erg.values,
|
|
}
|
|
if(ret.values.length === 0) {
|
|
ret.err = trans('NODATA')
|
|
}
|
|
return ret
|
|
}
|
|
}
|
|
return returnOnError(ret, 'CMNDUNKNOWN', getNoiseData.name)
|
|
}
|
|
|
|
/*
|
|
|
|
|
|
let erg = { err: null, data: {}}
|
|
|
|
let params = {
|
|
sensorid: opts.sensorid,
|
|
avg: opts.avg,
|
|
datetime: opts.start
|
|
}
|
|
if (opts.what === 'oneday') {
|
|
params.span = 1
|
|
} else if (opts.what === 'oneweek') {
|
|
params.span = 7
|
|
} else {
|
|
params.span = 31
|
|
params.moving = false
|
|
params.avg = 1440
|
|
}
|
|
let { data, err } = await getAvgData(params)
|
|
if (err != null) {
|
|
return returnOnError(erg, err, getRadioData.name)
|
|
}
|
|
erg.data.radiomovavg = radioactFilter(data, opts, false)
|
|
if (opts.what === 'oneday') {
|
|
const { data, err} = await getActData(params)
|
|
if (err != null) {
|
|
return returnOnError(erg, err, getRadioData.name)
|
|
}
|
|
erg.data.radioactual = radioactFilter(data, opts, true)
|
|
}
|
|
if(opts.climatesid && ((opts.what === 'oneday') || (opts.what === 'oneweek'))) {
|
|
params.sensorid = opts.climatesid
|
|
params.avg = 10
|
|
const { data, err} = await getAvgData(params)
|
|
if (err != null) {
|
|
return returnOnError(erg, err, getRadioData.name)
|
|
}
|
|
data.sid = opts.climatesid
|
|
data.sname = opts.climatesname
|
|
erg.data.climate = data
|
|
}
|
|
return erg
|
|
}
|
|
*/
|
|
|
|
|
|
const whatTable = [
|
|
{'what':'day', 'span': 1, 'daystart': false, 'func': getDayData},
|
|
{'what':'week', 'span': 7, 'daystart': false, 'func': getWeekgData},
|
|
{'what':'month', 'span': 30, 'daystart': true, 'func': getMonthData},
|
|
];
|