Works now for noise sensors

This commit is contained in:
rxf
2023-03-24 13:50:32 +01:00
parent 088005c040
commit 836d2848b6
2 changed files with 178 additions and 189 deletions
+2 -2
View File
@@ -132,8 +132,8 @@ export const getSensorData = async (params) => {
export const getActData = async (opts, props) => { export const getActData = async (opts) => {
let ret = {values: [], props: props, err: null} let ret = {err: null, values: []}
let sorting = '' let sorting = ''
if(opts.sort) { if(opts.sort) {
if (opts.sort === 1) { if (opts.sort === 1) {
+69 -80
View File
@@ -8,6 +8,7 @@ import {getOneProperty} from "../actions/getproperties.js";
import * as ERR from "../utilities/errortexts.js" import * as ERR from "../utilities/errortexts.js"
import {DateTime} from 'luxon' import {DateTime} from 'luxon'
import {getData4map} from "../actions/data4map.js"; import {getData4map} from "../actions/data4map.js";
import {NODATA} from "../utilities/errortexts.js";
const setoptionfromtable = (opt,tabval) => { const setoptionfromtable = (opt,tabval) => {
let ret = opt let ret = opt
@@ -42,18 +43,24 @@ export const getNoiseData = async (params, possibles, props) => {
let {start, stop} = calcRange(opts) // calc time range let {start, stop} = calcRange(opts) // calc time range
opts.start = start opts.start = start
opts.stop = stop opts.stop = stop
let erg = await x.func(opts, props) // get the data let erg = await x.func(opts) // get the data
ret.sid = opts.sensorid ret = {
ret.start = opts.start.slice(7) err: erg.err,
ret.span = opts.span sid: opts.sensorid,
if ((x.what === 'havg') || (x.what === 'davg')) { indoor: props.location[0].indoor,
ret.average = x.avg span: opts.span,
ret.peak = opts.peak start: opts.start.slice(7),
data: opts.data,
peak: opts.peak,
count: erg.values.length,
values: erg.values,
}
if (!x.peak) {
delete ret.peak
}
if(ret.values.length === 0) {
ret.err = ERR.NODATA
} }
ret.count = erg.values.length
ret.values = erg.values
ret.err = erg.err
ret.props = erg.props
return ret return ret
} }
} }
@@ -85,9 +92,8 @@ export const getNoiseData = async (params, possibles, props) => {
// .... // ....
// //
// ********************************************* // *********************************************
const getLiveData = async (opt, props) => { const getLiveData = async (opt) => {
let retur = {sid: opt.sensorid, span: opt.span, start: opt.datetime, count: 0, values: [], err: null}; return await getActData(opt)
return await getActData(opt, props)
} }
@@ -117,19 +123,21 @@ const getLiveData = async (opt, props) => {
// .... // ....
// //
// ********************************************* // *********************************************
const gethavgData = async (opts) => { const gethavgData = async (opts, props) => {
let e = await getNoiseAVGData(opts) let e = await getNoiseAVGData(opts)
if (opts.csv) { if (opts.csv) {
let csvStr = "datetime,n_AVG,peakcount\n"; let csvStr = "datetime,n_AVG,peakcount\n"
if(!e.err) {
for (let item of e) { for (let item of e) {
if (item.n_AVG != -1) { if (item.n_AVG != -1) {
csvStr += item.datetime + ',' + item.n_AVG + ',' + item.peakcount + '\n' csvStr += item.datetime + ',' + item.n_AVG + ',' + item.peakcount + '\n'
} }
} }
return csvStr; }
return csvStr
} else { } else {
return e return {err: e.err, values: e.values}
} }
} }
@@ -163,13 +171,14 @@ async function getdavgData(opts) {
let erg = await getNoiseAVGData(opts); let erg = await getNoiseAVGData(opts);
let val = []; let val = [];
let csvStr = 'datetime,n_AVG,peakcount\n'; let csvStr = 'datetime,n_AVG,peakcount\n';
for (let i = 0; i < erg.length; i+=24) { if(!erg.err) {
for (let i = 0; i < erg.length; i += 24) {
let sum = 0; let sum = 0;
let count = 0; let count = 0;
let pk = 0; let pk = 0;
let werte = {}; let werte = {};
for(let k=0; k<24; k++) { for (let k = 0; k < 24; k++) {
if (( erg[i+k] != null) && (erg[i+k].n_sum != -1)) { if ((erg[i + k] != null) && (erg[i + k].n_sum != -1)) {
sum += erg[i + k].n_sum; sum += erg[i + k].n_sum;
count += erg[i + k].count; count += erg[i + k].count;
pk += erg[i + k].peakcount; pk += erg[i + k].peakcount;
@@ -179,7 +188,7 @@ async function getdavgData(opts) {
} }
} }
} }
werte.n_AVG = 10 * Math.log10( sum/count); werte.n_AVG = 10 * Math.log10(sum / count);
werte.peakcount = pk; werte.peakcount = pk;
if (opts.csv) { if (opts.csv) {
csvStr += werte.datetime + ',' + werte.n_AVG + ',' + werte.peakcount + '\n' csvStr += werte.datetime + ',' + werte.n_AVG + ',' + werte.peakcount + '\n'
@@ -187,19 +196,11 @@ async function getdavgData(opts) {
val.push(werte); val.push(werte);
} }
} }
}
if (opts.csv) { if (opts.csv) {
return csvStr; return csvStr;
} else { } else {
return val return {err: erg.err, values: val}
// {
// sid: opts.sensorid,
// span: opts.span,
// start: opts.start.slice(7),
// 'average': 'day',
// peak: opts.peak,
// count: val.length,
// values: val
// };
} }
} }
@@ -237,6 +238,7 @@ async function getdaynightData(opts) {
let erg = await getNoiseAVGData(opts); let erg = await getNoiseAVGData(opts);
let val = []; let val = [];
let csvStr = 'datetime,n_dayAVG,n_nightAVG\n'; let csvStr = 'datetime,n_dayAVG,n_nightAVG\n';
if(!erg.err) {
let done = false; let done = false;
let dt; let dt;
// The received houerly data array always (!!) starts at 0h00 local (!) time. // The received houerly data array always (!!) starts at 0h00 local (!) time.
@@ -247,7 +249,7 @@ async function getdaynightData(opts) {
let nsum = 0, ncnt = 0; let nsum = 0, ncnt = 0;
let werte = {}; let werte = {};
for (let k = 0; k < 16; k++, i++) { for (let k = 0; k < 16; k++, i++) {
if(erg[i].n_sum != -1) { if (erg[i].n_sum != -1) {
if (werte.datetime === undefined) { if (werte.datetime === undefined) {
let dt = DateTime.fromISO(erg[i].datetime, {zone: 'utc'}) let dt = DateTime.fromISO(erg[i].datetime, {zone: 'utc'})
werte.datetime = dt.startOf('day').toISO() werte.datetime = dt.startOf('day').toISO()
@@ -257,9 +259,8 @@ async function getdaynightData(opts) {
} }
} }
if (i < (erg.length - 8)) { if (i < (erg.length - 8)) {
for (let k = 0; k < 8; k++, i++) for (let k = 0; k < 8; k++, i++) {
{ if (erg[i].n_sum != -1) {
if(erg[i].n_sum != -1) {
if (werte.datetime === undefined) { if (werte.datetime === undefined) {
let dt = DateTime.fromISO(erg[i].datetime, {zone: 'utc'}) let dt = DateTime.fromISO(erg[i].datetime, {zone: 'utc'})
werte.datetime = dt.startOf('day').toISO() werte.datetime = dt.startOf('day').toISO()
@@ -290,17 +291,11 @@ async function getdaynightData(opts) {
break; break;
} }
} }
}
if (opts.csv) { if (opts.csv) {
return csvStr; return csvStr;
} else { } else {
return val return {err: erg.err, values: val}
// {
// sid: opts.sensorid,
// span: opts.span,
// start: opts.start.slice(7),
// count: val.length,
// values: val
// };
} } } }
// ********************************************* // *********************************************
@@ -334,8 +329,9 @@ async function getLdenData(opts) {
let erg = await getNoiseAVGData(opts); let erg = await getNoiseAVGData(opts);
let val = []; let val = [];
let csvStr = 'datetime,lden\n'; let csvStr = 'datetime,lden\n';
if(!erg.err) {
let done = false; let done = false;
const calcAVG = (sum,cnt) => { const calcAVG = (sum, cnt) => {
if (cnt != 0) { if (cnt != 0) {
return (10 * Math.log10(sum / cnt)); return (10 * Math.log10(sum / cnt));
} else { } else {
@@ -354,8 +350,7 @@ async function getLdenData(opts) {
let werte = {}; let werte = {};
let dayAVG = 0, evnAVG = 0, nightAVG = 0; let dayAVG = 0, evnAVG = 0, nightAVG = 0;
for (let k = 0; k < 12; k++, i++) { for (let k = 0; k < 12; k++, i++) {
if (erg[i].n_sum != -1) if (erg[i].n_sum != -1) {
{
if (werte.datetime == undefined) { if (werte.datetime == undefined) {
werte.datetime = erg[i].datetime; werte.datetime = erg[i].datetime;
} }
@@ -364,8 +359,7 @@ async function getLdenData(opts) {
} }
} }
for (let k = 0; k < 4; k++, i++) { for (let k = 0; k < 4; k++, i++) {
if (erg[i].n_sum != -1) if (erg[i].n_sum != -1) {
{
if (werte.datetime == undefined) { if (werte.datetime == undefined) {
werte.datetime = erg[i].datetime; werte.datetime = erg[i].datetime;
} }
@@ -374,10 +368,8 @@ async function getLdenData(opts) {
} }
} }
if (i < (erg.length - 8)) { if (i < (erg.length - 8)) {
for (let k = 0; k < 8; k++, i++) for (let k = 0; k < 8; k++, i++) {
{ if (erg[i].n_sum != -1) {
if (erg[i].n_sum != -1)
{
if (werte.datetime == undefined) { if (werte.datetime == undefined) {
werte.datetime = erg[i].datetime; werte.datetime = erg[i].datetime;
} }
@@ -392,10 +384,10 @@ async function getLdenData(opts) {
evnAVG = calcAVG(esum, ecnt); evnAVG = calcAVG(esum, ecnt);
nightAVG = calcAVG(nsum, ncnt); nightAVG = calcAVG(nsum, ncnt);
// Calculate LDEN: // Calculate LDEN:
let day = 12 * Math.pow(10,dayAVG/10); // ... and calculate the LDEN values following ... let day = 12 * Math.pow(10, dayAVG / 10); // ... and calculate the LDEN values following ...
let evn = 4 * Math.pow(10, (evnAVG+5)/10); // ... the LDEN formaula (see function description) let evn = 4 * Math.pow(10, (evnAVG + 5) / 10); // ... the LDEN formaula (see function description)
let night = 8 * Math.pow(10,(nightAVG+10)/10); let night = 8 * Math.pow(10, (nightAVG + 10) / 10);
werte.lden = 10 * Math.log10((day+evn+night)/24); werte.lden = 10 * Math.log10((day + evn + night) / 24);
if (opts.csv) { if (opts.csv) {
csvStr += werte.datetime + ',' + werte.lden + '\n' csvStr += werte.datetime + ',' + werte.lden + '\n'
} else { } else {
@@ -405,17 +397,11 @@ async function getLdenData(opts) {
break; break;
} }
} }
}
if (opts.csv) { if (opts.csv) {
return csvStr; return csvStr;
} else { } else {
return val return {err: erg.err, values: val}
// {
// sid: opts.sensorid,
// span: opts.span,
// start: opts.start.slice(7),
// count: val.length,
// values: val
// };
} }
} }
@@ -425,18 +411,18 @@ const getAPIprops = (opt) => {
} }
const whatTable = [ const whatTable = [
{'what':'live', 'span': 1, 'daystart': false, avg: null, 'func': getLiveData}, {'what':'live', 'span': 1, 'daystart': false, peak: false, 'func': getLiveData},
{'what':'havg', 'span': 30, 'daystart': true, avg: 'hour', 'func': gethavgData}, {'what':'havg', 'span': 7, 'daystart': true, peak: true, 'func': gethavgData},
{'what':'davg', 'span': 30, 'daystart': true, avg: 'day', 'func': getdavgData}, {'what':'davg', 'span': 30, 'daystart': true, peak: true, 'func': getdavgData},
{'what':'daynight', 'span': 30, 'daystart': true, avg: null, 'func': getdaynightData}, {'what':'daynight', 'span': 30, 'daystart': true, peak: false, 'func': getdaynightData},
{'what':'lden', 'span': 30, 'daystart': true, avg: null, 'func': getLdenData}, {'what':'lden', 'span': 30, 'daystart': true, peak: false, 'func': getLdenData},
{'what':'props', 'span': 0, 'daystart': true, avg: null, 'func': getAPIprops}, {'what':'props', 'span': 0, 'daystart': true, peak:false, 'func': getAPIprops},
]; ];
const getNoiseAVGData = async (opts) => { const getNoiseAVGData = async (opts) => {
let ret = {data: {count: 0, values: []}, err: null} let ret = {err: null, values: []}
let emptyValues = {n_AVG:-1}; let emptyValues = {n_AVG:-1}
let small = '|> keep(columns: ["_time", "peakcount", "n_AVG"])' let small = '|> keep(columns: ["_time", "peakcount", "n_AVG"])'
if (opts.long) { if (opts.long) {
small = '' small = ''
@@ -469,7 +455,7 @@ esum = data
|> pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value") |> pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value")
|> rename(columns: {"E10tel_eq" : "n_sum"}) |> rename(columns: {"E10tel_eq" : "n_sum"})
peak = data peak = data
|> filter(fn: (r) => r._field == "noise_LAeq") |> filter(fn: (r) => r._field == "noise_LA_max")
|> aggregateWindow( |> aggregateWindow(
every: 1h, every: 1h,
fn: (column, tables=<-) => tables fn: (column, tables=<-) => tables
@@ -489,9 +475,12 @@ peak = data
join( tables: {P1: part1, P2: part2}, on: ["_time"]) join( tables: {P1: part1, P2: part2}, on: ["_time"])
${small} ${small}
` `
let erg = await fetchFromInflux(ret, queryAVG) ret = await fetchFromInflux(ret, queryAVG)
if(erg.err) { if(ret.err) {
return returnOnError(ret, err, getNoiseAVGData.name) return returnOnError(ret, ret.err, getNoiseAVGData.name)
}
if(ret.values.length === 0) {
return returnOnError(ret, ERR.NODATA, getNoiseAVGData.name)
} }
// The times are always the END of the period (so: period from 00:00h to 01:00h -> time is 01:00) // The times are always the END of the period (so: period from 00:00h to 01:00h -> time is 01:00)
@@ -500,9 +489,9 @@ peak = data
// index will be incremented by 24). Missing values are marked by: {n_sum=-1, n_AVG=-1}. // index will be incremented by 24). Missing values are marked by: {n_sum=-1, n_AVG=-1}.
let hoursArr = new Array(opts.span * 24); // generate new array let hoursArr = new Array(opts.span * 24); // generate new array
hoursArr.fill(emptyValues); // fill array with 'empty' values hoursArr.fill(emptyValues); // fill array with 'empty' values
let startDay = DateTime.fromISO(erg.values[0].datetime, {zone: 'utc'}).get('day'); // calc first day let startDay = DateTime.fromISO(ret.values[0].datetime, {zone: 'utc'}).get('day'); // calc first day
let k = 0; let k = 0;
for (let d of erg.values) { // loop through docs for (let d of ret.values) { // loop through docs
let stunde = DateTime.fromISO(d.datetime, {zone: 'utc'}).get('hour') // get current hour let stunde = DateTime.fromISO(d.datetime, {zone: 'utc'}).get('hour') // get current hour
let day = DateTime.fromISO(d.datetime, {zone: 'utc'}).get('day') // get current day let day = DateTime.fromISO(d.datetime, {zone: 'utc'}).get('day') // get current day
if (day != startDay) { // if date has changed if (day != startDay) { // if date has changed