diff --git a/app.js b/app.js index 5afbc29..b0ad79b 100644 --- a/app.js +++ b/app.js @@ -5,7 +5,8 @@ import cookieParser from 'cookie-parser' import cors from 'cors' import indexRouter from './routes/index.js' -import apiRouter from './routes/index.js' +import { apiRouter } from './routes/api.js' +import chartRouter from './routes/chartapi.js' const app = express() @@ -15,8 +16,9 @@ app.use(express.json()) app.use(express.urlencoded({ extended: true })) app.use(cookieParser()) -app.use('/api', apiRouter) app.use('/', indexRouter) +app.use('/api', apiRouter) +app.use('/chart', chartRouter) // catch 404 and forward to error handler diff --git a/routes/api.js b/routes/api.js new file mode 100644 index 0000000..c79601a --- /dev/null +++ b/routes/api.js @@ -0,0 +1,30 @@ +import express from 'express' + +import {getData4map} from "../actions/data4map.js" +import * as cTable from "../utilities/commands.js" +import * as ERR from "../utilities/errortexts.js" + +export const apiRouter = express.Router(); + + +export const dispatchCommand = async (cmd, table, query, res) => { + for (let c of table) { + if (c.cmd === cmd) { + let erg = await c.func(query) + if (typeof erg === 'string') { + res.type('text') + res.send(erg) + } else { + res.json(erg) + } + return + } + } + res.json({err: ERR.CMNDUNKOWN}) +} + +// normal routes called from javascript client +apiRouter.get('/:cmd', async (req, res) => { + await dispatchCommand(req.params.cmd, cTable.cmdTable, req.query, res) +}) + diff --git a/routes/chartapi.js b/routes/chartapi.js new file mode 100644 index 0000000..2c75055 --- /dev/null +++ b/routes/chartapi.js @@ -0,0 +1,40 @@ +import express from 'express' + +import {getData4map} from "../actions/data4map.js" +import * as cTable from "../utilities/commands.js" +import * as ERR from "../utilities/errortexts.js" + +const router = express.Router(); + +/* GET home page. */ + +// normal routes called from javascript client +router.get('/:cmd', async (req, res) => { + const cmd = req.params.cmd + let table + for (let c of cTable.chartcmdTable) { + if (c.cmd === cmd) { + let erg = await c.func(req.query) + if (typeof erg === 'string') { + res.type('text') + res.send(erg) + } else { + res.json(erg) + } + return + } + } + res.json({err: ERR.CMNDUNKOWN}) +}) + +router.post('/:cmd', async (req, res) => { + const cmd = req.params.cmd + if (cmd === 'getdata4maps') { + const erg = await getData4map(req.body) + res.json(erg) + } else { + res.json({err: ERR.CMNDUNKOWN}) + } +}) + +export default router diff --git a/routes/index.js b/routes/index.js index ff3abce..af56114 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,43 +1,15 @@ import express from 'express' import {getData4map} from "../actions/data4map.js" -import cmdTable from "../utilities/commands.js" +import * as cTable from "../utilities/commands.js" import * as ERR from "../utilities/errortexts.js" const router = express.Router(); /* GET home page. */ + router.get('/', function(req, res, next) { res.status(200).json({message: ERR.NOTHIMG}) }); -// normal routes called from javascript client -router.get('/:cmd', async (req, res) => { - const cmd = req.params.cmd - for (let c of cmdTable) { - if (c.cmd === cmd) { - let erg = await c.func(req.query) - if (typeof erg === 'string') { - res.type('text') - res.send(erg) - } else { - res.json(erg) - } - return - } - } - res.json({err: ERR.CMNDUNKOWN}) -}) - -router.post('/:cmd', async (req, res) => { - const cmd = req.params.cmd - if (cmd === 'getdata4maps') { - const erg = await getData4map(req.body) - res.json(erg) - } else { - res.json({err: ERR.CMNDUNKOWN}) - } -}) - - export default router diff --git a/sensorspecials/noise.js b/sensorspecials/noise.js index 77c93f2..e52aeee 100644 --- a/sensorspecials/noise.js +++ b/sensorspecials/noise.js @@ -124,11 +124,11 @@ const getLiveData = async (opt) => { // // ********************************************* const gethavgData = async (opts, props) => { - let e = await getNoiseAVGData(opts) + let erg = await getNoiseAVGData(opts) if (opts.csv) { let csvStr = "datetime,n_AVG,peakcount\n" - if(!e.err) { - for (let item of e) { + if(!erg.err) { + for (let item of erg.values) { if (item.n_AVG != -1) { csvStr += item.datetime + ',' + item.n_AVG + ',' + item.peakcount + '\n' } @@ -136,7 +136,7 @@ const gethavgData = async (opts, props) => { } return csvStr } else { - return {err: e.err, values: e.values} + return {err: erg.err, values: erg.values} } } @@ -172,18 +172,19 @@ async function getdavgData(opts) { let val = []; let csvStr = 'datetime,n_AVG,peakcount\n'; if(!erg.err) { - for (let i = 0; i < erg.length; i += 24) { + for (let i = 0; i < erg.values.length; i += 24) { let sum = 0; let count = 0; let pk = 0; let werte = {}; for (let k = 0; k < 24; k++) { - if ((erg[i + k] != null) && (erg[i + k].n_sum != -1)) { - sum += erg[i + k].n_sum; - count += erg[i + k].count; - pk += erg[i + k].peakcount; + const item = erg.values[i + k] + if ((item != null) && (item.n_sum != -1)) { + sum += item.n_sum; + count += item.count; + pk += item.peakcount; if (werte.datetime === undefined) { - let dt = DateTime.fromISO(erg[i + k].datetime, {zone: 'utc'}) + let dt = DateTime.fromISO(item.datetime, {zone: 'utc'}) werte.datetime = dt.startOf('day').toISO() } } @@ -241,32 +242,33 @@ async function getdaynightData(opts) { if(!erg.err) { let done = false; let dt; - // The received houerly data array always (!!) starts at 0h00 local (!) time. + // The received hourly data array always (!!) starts at 0h00 local (!) time. // So to calculate day values, we skip the first 6 hour and start from there // now we add 16 hour for day and following 8 hour for night - for (let i = 6; i < erg.length;) { + for (let i = 6; i < erg.values.length;) { let dsum = 0, dcnt = 0; let nsum = 0, ncnt = 0; let werte = {}; + const item = erg.values[i] for (let k = 0; k < 16; k++, i++) { - if (erg[i].n_sum != -1) { + if (item.n_sum != -1) { if (werte.datetime === undefined) { - let dt = DateTime.fromISO(erg[i].datetime, {zone: 'utc'}) + let dt = DateTime.fromISO(item.datetime, {zone: 'utc'}) werte.datetime = dt.startOf('day').toISO() } - dsum += erg[i].n_sum; - dcnt += erg[i].count; + dsum += item.n_sum; + dcnt += item.count; } } - if (i < (erg.length - 8)) { + if (i < (erg.values.length - 8)) { for (let k = 0; k < 8; k++, i++) { - if (erg[i].n_sum != -1) { + if (item.n_sum != -1) { if (werte.datetime === undefined) { - let dt = DateTime.fromISO(erg[i].datetime, {zone: 'utc'}) + let dt = DateTime.fromISO(item.datetime, {zone: 'utc'}) werte.datetime = dt.startOf('day').toISO() } - nsum += erg[i].n_sum; - ncnt += erg[i].count; + nsum += item.n_sum; + ncnt += item.count; } } } else { @@ -343,38 +345,39 @@ async function getLdenData(opts) { // So to calculate day values, we skip the first 6 hour and start from there // now we add 12 hour for day and following 4 hour for evening and // additional 8 hours for night - for (let i = 6; i < erg.length;) { + for (let i = 6; i < erg.values.length;) { let dsum = 0, dcnt = 0; let nsum = 0, ncnt = 0; let esum = 0, ecnt = 0; let werte = {}; let dayAVG = 0, evnAVG = 0, nightAVG = 0; + const item = erg.values[i] for (let k = 0; k < 12; k++, i++) { - if (erg[i].n_sum != -1) { + if (item.n_sum != -1) { if (werte.datetime == undefined) { - werte.datetime = erg[i].datetime; + werte.datetime = item.datetime; } - dsum += erg[i].n_sum; - dcnt += erg[i].count; + dsum += item.n_sum; + dcnt += item.count; } } for (let k = 0; k < 4; k++, i++) { - if (erg[i].n_sum != -1) { + if (item.n_sum != -1) { if (werte.datetime == undefined) { - werte.datetime = erg[i].datetime; + werte.datetime = item.datetime; } - esum += erg[i].n_sum; - ecnt += erg[i].count; + esum += item.n_sum; + ecnt += item.count; } } - if (i < (erg.length - 8)) { + if (i < (erg.values.length - 8)) { for (let k = 0; k < 8; k++, i++) { - if (erg[i].n_sum != -1) { + if (item.n_sum != -1) { if (werte.datetime == undefined) { - werte.datetime = erg[i].datetime; + werte.datetime = item.datetime; } - nsum += erg[i].n_sum; - ncnt += erg[i].count; + nsum += item.n_sum; + ncnt += item.count; } } } else { @@ -488,18 +491,18 @@ peak = data // hour in an element in docs becomes the index into the new array (for every new day this // 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 - hoursArr.fill(emptyValues); // fill array with 'empty' values - let startDay = DateTime.fromISO(ret.values[0].datetime, {zone: 'utc'}).get('day'); // calc first day - let k = 0; + hoursArr.fill(emptyValues) // fill array with 'empty' values + let startDay = DateTime.fromISO(ret.values[0].datetime, {zone: 'utc'}).get('day') // calc first day + let k = 0 for (let d of ret.values) { // loop through docs 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 if (day != startDay) { // if date has changed - k += 24; // increment index by 24 - startDay = day; + k += 24 // increment index by 24 + startDay = day } - hoursArr[k+stunde] = d; // copy date into hourArray + hoursArr[k+stunde] = d // copy date into hourArray } - return hoursArr; + return { err: ret.err, values: hoursArr} } diff --git a/sensorspecials/noiseChart.js b/sensorspecials/noiseChart.js new file mode 100644 index 0000000..40ba3d4 --- /dev/null +++ b/sensorspecials/noiseChart.js @@ -0,0 +1,2 @@ +// Prepare all data to plt the charts + diff --git a/utilities/commands.js b/utilities/commands.js index 6bb9d49..b5aea60 100644 --- a/utilities/commands.js +++ b/utilities/commands.js @@ -8,7 +8,7 @@ import * as radioact from "../sensorspecials/radioact.js" import * as noise from "../sensorspecials/noise.js" import {getData4map} from "../actions/data4map.js"; -const cmdTable = [ +export const cmdTable = [ {cmd: 'getactdata', func: getData.getActData}, {cmd: 'getlongavg', func: getData.getLongAvg}, {cmd: 'getavgdata', func: getData.getAvgData}, @@ -19,4 +19,13 @@ const cmdTable = [ {cmd: 'getmapdata', func: getData4map} ] -export default cmdTable +export const chartcmdTable = [ + {cmd: 'getactdata', func: getData.getActData}, + {cmd: 'getlongavg', func: getData.getLongAvg}, + {cmd: 'getavgdata', func: getData.getAvgData}, + {cmd: 'getoneproperty', func: getProps.getOneProperty}, + {cmd: 'getakwdata', func: getAKWs.getakwdata}, + {cmd: 'getaddress', func: holAddr.getAddress}, + {cmd: 'getsensordata', func: getData.getChartSensorData}, + {cmd: 'getmapdata', func: getData4map} +] \ No newline at end of file