seee prev. commit

This commit is contained in:
rxf
2023-06-27 17:14:18 +02:00
parent f5fba41a50
commit ecdcded663
7 changed files with 113 additions and 149 deletions
+14 -1
View File
@@ -7,7 +7,7 @@
{ {
"type": "node", "type": "node",
"request": "launch", "request": "launch",
"name": "Launch Program", "name": "Launch esprimo",
"skipFiles": [ "skipFiles": [
"<node_internals>/**" "<node_internals>/**"
], ],
@@ -18,6 +18,19 @@
"MONGOHOST": "esprimo", "MONGOHOST": "esprimo",
"MONGOPORT": "27098" "MONGOPORT": "27098"
} }
},
{
"type": "node",
"request": "launch",
"name": "Launch strato",
"skipFiles": [
"<node_internals>/**"
],
"program": "${workspaceFolder}/bin/www.js",
"env": {
"MONGOHOST": "h3006374.stratoserver.net",
"MONGOPORT": "27097"
}
} }
] ]
} }
+10 -9
View File
@@ -8,12 +8,12 @@ import {csv2Json} from "../utilities/csv2json.js"
import checkParams from "../utilities/checkparams.js" import checkParams from "../utilities/checkparams.js"
import {getOneProperty} from "./getproperties.js" import {getOneProperty} from "./getproperties.js"
import {getNoiseData} from "../sensorspecials/noise.js" import {getNoiseData} from "../sensorspecials/noise.js"
import {getRadioData} from "../sensorspecials/radioact.js" import {getgeigerData} from "../sensorspecials/geigeract.js"
// Possible params for the different sensor types // Possible params for the different sensor types
const noiseParams = [ const noiseParams = [
{name:'data', type: 'string', default: 'live'}, {name:'data', type: 'string', default: 'live'},
{name: 'span', type: 'int', default: ''}, {name: 'span', type: 'int', default: 1},
{name: 'daystart', type: 'bool', default: null}, {name: 'daystart', type: 'bool', default: null},
{name: 'peak', type: 'int', default: 70}, {name: 'peak', type: 'int', default: 70},
{name: 'since', type: 'date', default: '1900-01-01T00:00:00Z'}, {name: 'since', type: 'date', default: '1900-01-01T00:00:00Z'},
@@ -27,11 +27,11 @@ const noiseParams = [
] ]
const thpParams = [] const thpParams = []
const pmParams = [] const pmParams = []
const radioParams = [ const geigerParams = [
{name: 'what', type: 'string', default: 'day'}, {name: 'what', type: 'string', default: 'day'},
{name: 'span', type: 'int', default: ''}, {name: 'span', type: 'int', default: 1},
{name: 'daystart', type: 'bool', default: null}, {name: 'daystart', type: 'bool', default: null},
{name: 'avg', type: 'int', default: 10}, {name: 'avg', type: 'int', default: 1},
{name: 'since', type: 'date', default: '1900-01-01T00:00:00Z'}, {name: 'since', type: 'date', default: '1900-01-01T00:00:00Z'},
{name: 'box', type: 'array', default: null}, {name: 'box', type: 'array', default: null},
{name: 'out', type: 'string', default: ''}, {name: 'out', type: 'string', default: ''},
@@ -39,7 +39,8 @@ const radioParams = [
{name: 'long', type: 'bool', default: false}, {name: 'long', type: 'bool', default: false},
{name: 'sort', type: 'int', default: 1}, {name: 'sort', type: 'int', default: 1},
{name: 'last_seen', type: 'date', default: '1900-01-01T00:00:00Z'}, {name: 'last_seen', type: 'date', default: '1900-01-01T00:00:00Z'},
{name: 'datetime', type: 'date', default: null} {name: 'datetime', type: 'date', default: null},
{name: 'mooving', type: 'bool', default: false},
] ]
// >>>>>>>>>>>>>>>>>>>>> DUMMIES // >>>>>>>>>>>>>>>>>>>>> DUMMIES
@@ -56,7 +57,7 @@ const sensorTypeTable = [
{ typ: 'thp', possibleParams: thpParams, func: getThpData}, { typ: 'thp', possibleParams: thpParams, func: getThpData},
{ typ: 'noise', possibleParams: noiseParams, func: getNoiseData}, { typ: 'noise', possibleParams: noiseParams, func: getNoiseData},
{ typ: 'pm', possibleParams: pmParams, func: getPmData}, { typ: 'pm', possibleParams: pmParams, func: getPmData},
{ typ: 'radioactivity', possiblePramas: radioParams, func: getRadioData} { typ: 'radioactivity', possibleParams: geigerParams, func: getgeigerData}
] ]
/* Units: /* Units:
@@ -149,8 +150,8 @@ export async function getSensorData(params) {
// export const getActData = async (opts) => { // export const getActData = async (opts) => {
export async function getActData(opts) { export async function getActData(opts) {
let retI = await influx.fetchActData(opts) // let retI = await influx.fetchActData(opts)
retI.mongo = false // retI.mongo = false
let retM = await mongo.fetchActData(opts) let retM = await mongo.fetchActData(opts)
retM.mongo = true retM.mongo = true
return retM return retM
+78
View File
@@ -176,6 +176,82 @@ export const fetchActData = async (opts) => {
).toArray(); ).toArray();
*/ */
export const fetchgeigerAVGData = async (opts) => {
let docs = []
let ret = {err: null, values: []}
let start = opts.start.slice(7)
let end = opts.stop.slice(6)
start = DateTime.fromISO(start).toJSDate()
end = DateTime.fromISO(end).toJSDate()
let datRange = {sensorid: opts.sensorid, datetime: {$gte: start, $lt: end}}
let sorting = {datetime: opts.sort};
let client = await connectMongo()
try {
if(opts.mooving) {
docs = await client.db(MONGOBASE).collection('sensors').aggregate([
{
$sort: sorting
}, // sort by date
{
$match: {sensorid: opts.sensorid}
}, // select only values for given sensor
{
$match: datRange
}, // select only values in give data range
{
$setWindowFields: {
sortBy: {datetime: 1},
output: {
cpm_avg: {
$avg: "$values.counts_per_minute",
window: {
range: [-60, 0],
unit: "minute"
}
}
}
}
},
{
$project: {_id:0, cpm_avg: 1, datetime:1, uSvph_avg: { $multiply: ["$cpm_avg", opts.factor]}
}
]).toArray();
} else {
docs = await client.db(MONGOBASE).collection('sensors').aggregate([
{
$sort: sorting
}, // sort by date
{
$match: {sensorid: opts.sensorid}
}, // select only values for given sensor
{
$match: datRange
}, // select only values in give data range
{ $group: {
_id: {$dateTrunc: {
date: "$datetime",
unit: "minute",
binSize: 60
}},
cpm_avg: {$avg: "$values.counts_per_minute"}, // calculate the average
}
},
{ $addFields: { datetime: "$_id"}}, // change '_id' to 'datetime
{
$project: {_id:0, uSvph_avg: { $multiply: ["$cpm_avg", opts.factor]}, datetime: 1, cpm_avg: 1}
}
]).toArray();
}
} catch(e) { // if there was an error
ret.err = e // log it to console
}
finally {
client.close()
}
ret.values = docs
return ret
}
export const fetchNoiseAVGData = async (opts) => { export const fetchNoiseAVGData = async (opts) => {
let docs = [] let docs = []
let ret = {err: null, values: []} let ret = {err: null, values: []}
@@ -216,6 +292,8 @@ export const fetchNoiseAVGData = async (opts) => {
return ret return ret
} }
export const fetchAVGData = async (opts) => {
}
/* /*
// ********************************************* // *********************************************
// getAverageData // getAverageData
+1 -10
View File
@@ -8,16 +8,7 @@ import {DateTime} from 'luxon'
import { translate as trans } from '../routes/api.js' import { translate as trans } from '../routes/api.js'
import * as influx from "../databases/influx.js" import * as influx from "../databases/influx.js"
import * as mongo from "../databases/mongo.js" import * as mongo from "../databases/mongo.js"
import { setoptionfromtable } from "../utilities/chartoptions.js"
const setoptionfromtable = (opt,tabval) => {
let ret = opt
if ((opt === null) || (opt === '') || (opt < tabval)){
ret = tabval
}
return ret
}
export const getNoiseData = async (params, possibles, props) => { export const getNoiseData = async (params, possibles, props) => {
let ret = {err: null} let ret = {err: null}
-128
View File
@@ -1,128 +0,0 @@
// 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},
];
+1 -1
View File
@@ -9,7 +9,7 @@ describe("get data for map - test", function() {
"west": 8.99760833740236 "west": 8.99760833740236
} }
it("radioactivity should return at least 4 elements", async function() { it("geigeractivity should return at least 4 elements", async function() {
const erg = await getData4map( const erg = await getData4map(
{ {
"type": "radioactivity", "type": "radioactivity",
+9
View File
@@ -137,3 +137,12 @@ export function calcDays(data, isyear) {
return days; return days;
}; };
export const setoptionfromtable = (opt,tabval) => {
let ret = opt
if ((opt === null) || (opt === '') || (opt === undefined) || (opt < tabval)){
ret = tabval
}
return ret
}