From 63f05300db5daeb03236eddd05c0faa9c7f0b219 Mon Sep 17 00:00:00 2001 From: lrabius Date: Fri, 14 May 2021 18:28:53 +0200 Subject: [PATCH 1/7] added PowerRouter Id to Webinterface with query of url --- server.js | 92 +++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 72 insertions(+), 20 deletions(-) diff --git a/server.js b/server.js index 9ba1830..78fc2f6 100644 --- a/server.js +++ b/server.js @@ -70,47 +70,86 @@ app.use(express.json()) app.use(morgan('combined')) let updateAvailable = false -let currentData = {} -let currentStatuses = {} -let events = [] -let isWinterMode = false -let isMaintenanceCharge = false -let lastUpdate = null -let stats = initStats() +let powerRouters = new Map() runUpdateCheck(CURRENT_VERSION, () => updateAvailable = true) app.get('/', (req, res) => { - res.send(buildWebinterface(currentData, stats, { isWinterMode, isMaintenanceCharge }, { webReload }, lastUpdate, updateAvailable)) + let powerRouterId = req.query.powerRouterId + console.log('PowerRouter ID: ', powerRouterId) + if (!powerRouters.has(powerRouterId)) { + let powerRouter = powerRouters.get(powerRouterId) + let isWinterMode = powerRouter.isWinterMode + let isMaintenanceCharge = powerRouter.isMaintenanceCharge + res.send(buildWebinterface(powerRouter.currentData, powerRouter.stats, { + isWinterMode, + isMaintenanceCharge + }, {webReload}, powerRouter.lastUpdate, updateAvailable)) + } else if (powerRouters.size > 0) { + let powerRouter = powerRouters.values().next().value + let isWinterMode = powerRouter.isWinterMode + let isMaintenanceCharge = powerRouter.isMaintenanceCharge + res.send(buildWebinterface(powerRouter.currentData, powerRouter.stats, { + isWinterMode, + isMaintenanceCharge + }, {webReload}, powerRouter.lastUpdate, updateAvailable)) + } else { + res.send(buildWebinterface({}, initStats(), { + isWinterMode:false, + isMaintenanceCharge:false + }, {webReload}, null, updateAvailable)) + } }) app.get('/values.json', (req, res) => { - res.type('json').send(currentData) + let powerRouterId = req.query.powerRouterId + if (!powerRouters.has(powerRouterId)) { + res.type('json').send(powerRouters.get(powerRouterId).currentData) + } else { + res.type('json').send({}) + } }) app.get('/status.json', (req, res) => { - res.type('json').send(currentStatuses) + let powerRouterId = req.query.powerRouterId + if (!powerRouters.has(powerRouterId)) { + res.type('json').send(powerRouters.get(powerRouterId).currentStatuses) + } else { + res.type('json').send({}) + } }) app.get('/events.json', (req, res) => { - res.type('json').send([...events].reverse()) + let powerRouterId = req.query.powerRouterId + if (!powerRouters.has(powerRouterId)) { + res.type('json').send([...powerRouters.get(powerRouterId).events].reverse()) + } else { + res.type('json').send([]) + } }) app.post('/logs.json', (req, res) => { try { const { data, statuses } = paramConverter(req.body, paramDefinition) - currentData = data - currentStatuses = statuses - lastUpdate = new Date() - updateStats(data, stats) + const powerRouterId = req.body.header.powerrouter_id + if (!powerRouters.has(powerRouterId)) { + let powerRouter = {} + powerRouter.powerRouterId = powerRouterId + powerRouters.set(powerRouterId, powerRouter) + } + let powerRouter = powerRouters.get(powerRouterId) // null {} + powerRouter.stats = initStats() + powerRouter.currentData = data + powerRouter.currentStatuses = statuses + powerRouter.lastUpdate = new Date() + updateStats(data, powerRouter.stats) if (logRequests) { logUnknownRequest(req) } - const powerRouterId = req.body.header.powerrouter_id actions.forEach((action, index) => { try { - action.update({ data, powerRouterId }) + action.update({ data, powerRouterID }) } catch (e) { console.error(`Failed to invoke action at index ${index}`, e) } @@ -134,14 +173,27 @@ app.post('/logs.json', (req, res) => { app.post('/events.json', (req, res) => { try { const event = parseEvent(req.body.event) + let isWinterMode = false + let isMaintenanceCharge = false if (isWinterModeStartedEvent(event)) isWinterMode = true if (isWinterModeEndedEvent(event)) isWinterMode = false if (isMaintenanceChargeStartedEvent(event)) isMaintenanceCharge = true if (isMaintenanceChargeEndedEvent(event)) isMaintenanceCharge = false - events.push(event) - if (events.length > 300) { - events.shift() + const powerRouterId = req.body.header.powerrouter_id + if (!powerRouters.has(powerRouterId)) { + let powerRouter = {} + powerRouter.powerRouterId = powerRouterId + powerRouter.events = [] + powerRouters.set(powerRouterId, powerRouter) + } + let powerRouter = powerRouters.get(powerRouterId) + powerRouter.isWinterMode = isWinterMode + powerRouter.isMaintenanceCharge = isMaintenanceCharge + + powerRouter.events.push(event) + if (powerRouter.events.length > 300) { + powerRouter.events.shift() } } catch (e) { console.error(e) From b3b23383efdc17be64608af0a6d1c17014b4f607 Mon Sep 17 00:00:00 2001 From: lrabius Date: Fri, 14 May 2021 19:40:24 +0200 Subject: [PATCH 2/7] fixed some bugs --- server.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/server.js b/server.js index 78fc2f6..56ef17e 100644 --- a/server.js +++ b/server.js @@ -85,7 +85,7 @@ app.get('/', (req, res) => { isWinterMode, isMaintenanceCharge }, {webReload}, powerRouter.lastUpdate, updateAvailable)) - } else if (powerRouters.size > 0) { + } else if (powerRouters.size > 0 && powerRouterId === undefined) { let powerRouter = powerRouters.values().next().value let isWinterMode = powerRouter.isWinterMode let isMaintenanceCharge = powerRouter.isMaintenanceCharge @@ -103,7 +103,7 @@ app.get('/', (req, res) => { app.get('/values.json', (req, res) => { let powerRouterId = req.query.powerRouterId - if (!powerRouters.has(powerRouterId)) { + if (powerRouters.has(powerRouterId)) { res.type('json').send(powerRouters.get(powerRouterId).currentData) } else { res.type('json').send({}) @@ -112,7 +112,7 @@ app.get('/values.json', (req, res) => { app.get('/status.json', (req, res) => { let powerRouterId = req.query.powerRouterId - if (!powerRouters.has(powerRouterId)) { + if (powerRouters.has(powerRouterId)) { res.type('json').send(powerRouters.get(powerRouterId).currentStatuses) } else { res.type('json').send({}) @@ -121,7 +121,7 @@ app.get('/status.json', (req, res) => { app.get('/events.json', (req, res) => { let powerRouterId = req.query.powerRouterId - if (!powerRouters.has(powerRouterId)) { + if (powerRouters.has(powerRouterId)) { res.type('json').send([...powerRouters.get(powerRouterId).events].reverse()) } else { res.type('json').send([]) @@ -149,7 +149,7 @@ app.post('/logs.json', (req, res) => { actions.forEach((action, index) => { try { - action.update({ data, powerRouterID }) + action.update({ data, powerRouterId }) } catch (e) { console.error(`Failed to invoke action at index ${index}`, e) } From aef46d1ed5a352437f4af7a63d0644f900d83c6a Mon Sep 17 00:00:00 2001 From: lrabius Date: Fri, 14 May 2021 19:44:56 +0200 Subject: [PATCH 3/7] fixed some bugs --- server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server.js b/server.js index 56ef17e..498b336 100644 --- a/server.js +++ b/server.js @@ -77,7 +77,7 @@ runUpdateCheck(CURRENT_VERSION, () => updateAvailable = true) app.get('/', (req, res) => { let powerRouterId = req.query.powerRouterId console.log('PowerRouter ID: ', powerRouterId) - if (!powerRouters.has(powerRouterId)) { + if (powerRouters.has(powerRouterId)) { let powerRouter = powerRouters.get(powerRouterId) let isWinterMode = powerRouter.isWinterMode let isMaintenanceCharge = powerRouter.isMaintenanceCharge From d4b600349948daa0ae1830c060bdea40b7dbb335 Mon Sep 17 00:00:00 2001 From: lrabius Date: Fri, 14 May 2021 20:53:44 +0200 Subject: [PATCH 4/7] added PowerRouter ID links to webinterface --- server.js | 13 +++++++------ src/webinterface.js | 13 ++++++++++++- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/server.js b/server.js index 498b336..65977ca 100644 --- a/server.js +++ b/server.js @@ -76,25 +76,25 @@ runUpdateCheck(CURRENT_VERSION, () => updateAvailable = true) app.get('/', (req, res) => { let powerRouterId = req.query.powerRouterId - console.log('PowerRouter ID: ', powerRouterId) if (powerRouters.has(powerRouterId)) { let powerRouter = powerRouters.get(powerRouterId) let isWinterMode = powerRouter.isWinterMode let isMaintenanceCharge = powerRouter.isMaintenanceCharge - res.send(buildWebinterface(powerRouter.currentData, powerRouter.stats, { + res.send(buildWebinterface(powerRouterId, powerRouters.keys(), powerRouter.currentData, powerRouter.stats, { isWinterMode, isMaintenanceCharge }, {webReload}, powerRouter.lastUpdate, updateAvailable)) } else if (powerRouters.size > 0 && powerRouterId === undefined) { - let powerRouter = powerRouters.values().next().value + let powerRouterId = powerRouters.keys().next().value + let powerRouter = powerRouters.get(powerRouterId) let isWinterMode = powerRouter.isWinterMode let isMaintenanceCharge = powerRouter.isMaintenanceCharge - res.send(buildWebinterface(powerRouter.currentData, powerRouter.stats, { + res.send(buildWebinterface(powerRouterId, powerRouters.keys(), powerRouter.currentData, powerRouter.stats, { isWinterMode, isMaintenanceCharge }, {webReload}, powerRouter.lastUpdate, updateAvailable)) } else { - res.send(buildWebinterface({}, initStats(), { + res.send(buildWebinterface(null, null, {}, initStats(), { isWinterMode:false, isMaintenanceCharge:false }, {webReload}, null, updateAvailable)) @@ -135,9 +135,10 @@ app.post('/logs.json', (req, res) => { if (!powerRouters.has(powerRouterId)) { let powerRouter = {} powerRouter.powerRouterId = powerRouterId + powerRouter.events = [] powerRouters.set(powerRouterId, powerRouter) } - let powerRouter = powerRouters.get(powerRouterId) // null {} + let powerRouter = powerRouters.get(powerRouterId) powerRouter.stats = initStats() powerRouter.currentData = data powerRouter.currentStatuses = statuses diff --git a/src/webinterface.js b/src/webinterface.js index 53c0d01..8b654ad 100644 --- a/src/webinterface.js +++ b/src/webinterface.js @@ -15,6 +15,15 @@ const buildStatsMonthlyLabel = (stats) => `seit ${stats.dataSince.monthly.toLoca { day: '2-digit', month:'2-digit' } )}` +const buildPowerRouterIds = (powerRouterIds) => { + let powerRouterIdsString = '' + for (let powerRouterId of powerRouterIds) { + powerRouterIdsString = powerRouterIdsString + '' + powerRouterId + '' + ', ' + } + powerRouterIdsString.slice(0, -2) + return powerRouterIdsString +} + const buildHeader = () => ` @@ -161,8 +170,10 @@ const buildNoDataMessage = () => ` ` -const buildWebinterface = (data, stats, status, config, lastUpdate, updateAvailable = false) => ` +const buildWebinterface = (powerRouterId, powerRouterIds, data, stats, status, config, lastUpdate, updateAvailable = false) => ` ${buildHeader()} +${lastUpdate ? '

Aktuelle Powerrouter ID: ${powerRouterId}

' : ''} +${lastUpdate ? '

Verfügbare Powerrouter IDs: ${buildPowerRouterIds(powerRouterIds)}

' : ''} ${lastUpdate ? buildTable(data, stats, status) : buildNoDataMessage()} ${buildFooter(lastUpdate, updateAvailable, config.webReload)} ` From ef77d9111fd39a7eb2ec0bf9d9bfc13847d97436 Mon Sep 17 00:00:00 2001 From: lrabius Date: Fri, 14 May 2021 21:09:35 +0200 Subject: [PATCH 5/7] fixed some bugs --- src/webinterface.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/webinterface.js b/src/webinterface.js index 8b654ad..de03fbe 100644 --- a/src/webinterface.js +++ b/src/webinterface.js @@ -20,7 +20,7 @@ const buildPowerRouterIds = (powerRouterIds) => { for (let powerRouterId of powerRouterIds) { powerRouterIdsString = powerRouterIdsString + '' + powerRouterId + '' + ', ' } - powerRouterIdsString.slice(0, -2) + powerRouterIdsString = powerRouterIdsString.slice(0, -2) return powerRouterIdsString } @@ -172,8 +172,8 @@ const buildNoDataMessage = () => ` const buildWebinterface = (powerRouterId, powerRouterIds, data, stats, status, config, lastUpdate, updateAvailable = false) => ` ${buildHeader()} -${lastUpdate ? '

Aktuelle Powerrouter ID: ${powerRouterId}

' : ''} -${lastUpdate ? '

Verfügbare Powerrouter IDs: ${buildPowerRouterIds(powerRouterIds)}

' : ''} +${lastUpdate ? '

Aktuelle Powerrouter ID: ' + powerRouterId + '

' : ''} +${lastUpdate ? '

Verfügbare Powerrouter IDs: ' + buildPowerRouterIds(powerRouterIds) + '

' : ''} ${lastUpdate ? buildTable(data, stats, status) : buildNoDataMessage()} ${buildFooter(lastUpdate, updateAvailable, config.webReload)} ` From 36a7d536c86c0f506e6d7c1d715144942b33dc44 Mon Sep 17 00:00:00 2001 From: lrabius Date: Mon, 17 May 2021 18:23:42 +0200 Subject: [PATCH 6/7] no data page now shows selected and available ids when available values/status/events pages now also show first seen powerrouter when no id in the query is given fixed reset of stats cleaned up code --- server.js | 58 +++++++++++++++++++++++++++------------------ src/webinterface.js | 4 ++-- 2 files changed, 37 insertions(+), 25 deletions(-) diff --git a/server.js b/server.js index 65977ca..e24f638 100644 --- a/server.js +++ b/server.js @@ -72,29 +72,36 @@ app.use(morgan('combined')) let updateAvailable = false let powerRouters = new Map() +const addNewPowerRouter = (powerRouterId) => { + let powerRouter = {} + powerRouter.powerRouterId = powerRouterId + powerRouter.currentData = {} + powerRouter.currentStatuses = {} + powerRouter.lastUpdate = null + powerRouter.stats = initStats() + powerRouter.isWinterMode = false + powerRouter.isMaintenanceCharge = false + powerRouter.events = [] + powerRouters.set(powerRouterId, powerRouter) +} + runUpdateCheck(CURRENT_VERSION, () => updateAvailable = true) app.get('/', (req, res) => { let powerRouterId = req.query.powerRouterId + if (powerRouters.size > 0 && powerRouterId === undefined) { + powerRouterId = powerRouters.keys().next().value + } + if (powerRouters.has(powerRouterId)) { let powerRouter = powerRouters.get(powerRouterId) - let isWinterMode = powerRouter.isWinterMode - let isMaintenanceCharge = powerRouter.isMaintenanceCharge - res.send(buildWebinterface(powerRouterId, powerRouters.keys(), powerRouter.currentData, powerRouter.stats, { - isWinterMode, - isMaintenanceCharge - }, {webReload}, powerRouter.lastUpdate, updateAvailable)) - } else if (powerRouters.size > 0 && powerRouterId === undefined) { - let powerRouterId = powerRouters.keys().next().value - let powerRouter = powerRouters.get(powerRouterId) - let isWinterMode = powerRouter.isWinterMode - let isMaintenanceCharge = powerRouter.isMaintenanceCharge res.send(buildWebinterface(powerRouterId, powerRouters.keys(), powerRouter.currentData, powerRouter.stats, { - isWinterMode, - isMaintenanceCharge + isWinterMode:powerRouter.isWinterMode, + isMaintenanceCharge:powerRouter.isMaintenanceCharge }, {webReload}, powerRouter.lastUpdate, updateAvailable)) } else { - res.send(buildWebinterface(null, null, {}, initStats(), { + let powerRouterIds = powerRouters.size > 0 ? powerRouters.keys() : null + res.send(buildWebinterface(powerRouterId, powerRouterIds, {}, initStats(), { isWinterMode:false, isMaintenanceCharge:false }, {webReload}, null, updateAvailable)) @@ -103,6 +110,10 @@ app.get('/', (req, res) => { app.get('/values.json', (req, res) => { let powerRouterId = req.query.powerRouterId + if (powerRouters.size > 0 && powerRouterId === undefined) { + powerRouterId = powerRouters.keys().next().value + } + if (powerRouters.has(powerRouterId)) { res.type('json').send(powerRouters.get(powerRouterId).currentData) } else { @@ -112,6 +123,10 @@ app.get('/values.json', (req, res) => { app.get('/status.json', (req, res) => { let powerRouterId = req.query.powerRouterId + if (powerRouters.size > 0 && powerRouterId === undefined) { + powerRouterId = powerRouters.keys().next().value + } + if (powerRouters.has(powerRouterId)) { res.type('json').send(powerRouters.get(powerRouterId).currentStatuses) } else { @@ -121,6 +136,10 @@ app.get('/status.json', (req, res) => { app.get('/events.json', (req, res) => { let powerRouterId = req.query.powerRouterId + if (powerRouters.size > 0 && powerRouterId === undefined) { + powerRouterId = powerRouters.keys().next().value + } + if (powerRouters.has(powerRouterId)) { res.type('json').send([...powerRouters.get(powerRouterId).events].reverse()) } else { @@ -133,13 +152,9 @@ app.post('/logs.json', (req, res) => { const { data, statuses } = paramConverter(req.body, paramDefinition) const powerRouterId = req.body.header.powerrouter_id if (!powerRouters.has(powerRouterId)) { - let powerRouter = {} - powerRouter.powerRouterId = powerRouterId - powerRouter.events = [] - powerRouters.set(powerRouterId, powerRouter) + addNewPowerRouter(powerRouterId) } let powerRouter = powerRouters.get(powerRouterId) - powerRouter.stats = initStats() powerRouter.currentData = data powerRouter.currentStatuses = statuses powerRouter.lastUpdate = new Date() @@ -183,10 +198,7 @@ app.post('/events.json', (req, res) => { const powerRouterId = req.body.header.powerrouter_id if (!powerRouters.has(powerRouterId)) { - let powerRouter = {} - powerRouter.powerRouterId = powerRouterId - powerRouter.events = [] - powerRouters.set(powerRouterId, powerRouter) + addNewPowerRouter(powerRouterId) } let powerRouter = powerRouters.get(powerRouterId) powerRouter.isWinterMode = isWinterMode diff --git a/src/webinterface.js b/src/webinterface.js index de03fbe..e60ecc1 100644 --- a/src/webinterface.js +++ b/src/webinterface.js @@ -172,8 +172,8 @@ const buildNoDataMessage = () => ` const buildWebinterface = (powerRouterId, powerRouterIds, data, stats, status, config, lastUpdate, updateAvailable = false) => ` ${buildHeader()} -${lastUpdate ? '

Aktuelle Powerrouter ID: ' + powerRouterId + '

' : ''} -${lastUpdate ? '

Verfügbare Powerrouter IDs: ' + buildPowerRouterIds(powerRouterIds) + '

' : ''} +${powerRouterId ? '

Aktuelle Powerrouter ID: ' + powerRouterId + '

' : ''} +${powerRouterIds ? '

Verfügbare Powerrouter IDs: ' + buildPowerRouterIds(powerRouterIds) + '

' : ''} ${lastUpdate ? buildTable(data, stats, status) : buildNoDataMessage()} ${buildFooter(lastUpdate, updateAvailable, config.webReload)} ` From a78ee231159d80cf964bbe596894ddd8e0092b74 Mon Sep 17 00:00:00 2001 From: lrabius Date: Wed, 19 May 2021 18:27:21 +0200 Subject: [PATCH 7/7] updated README added comments --- README.md | 10 +++++----- server.js | 19 +++++++++++++++++++ src/webinterface.js | 1 + 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 72f141f..a24ef0f 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ # powerinterface -This is a simple web interface that shows statistics about your Nedap PowerRouter. It aims to serve as a self-hosted replacement for the discontinued mypowerrouter.com interface. +This is a simple web interface that shows statistics about your Nedap PowerRouters. It aims to serve as a self-hosted replacement for the discontinued mypowerrouter.com interface. ## Features -- Show current PowerRouter stats of your PowerRouter +- Show current PowerRouter stats of multiple PowerRouters - Forward data to an InfluxDB ## Documentation @@ -50,7 +50,7 @@ Enter `http://[IP of your devie running Powerinterface]` in your browser. You sh #### Install without Docker / run from source -Make sure to have NodeJS and Git installed. +Make sure to have NodeJS (>=12) and Git installed. ```bash git clone https://github.com/ngrie/powerinterface.git @@ -121,8 +121,8 @@ actions: port: 8086 ``` -Of course, adjust host, database, username, password and port as needed (if you run InfluxDB on the same device without changing any configs the above values should work). +Of course, adjust host, database, username, password and port as needed (if you run InfluxDB on the same device without changing any configs the above values should work). If you're using Powerinterface with Docker localhost (127.0.0.1) doesn't work here because the Docker container runs in its own separated environment. Because of that you have to give the local ip address of the device. -If you installed Powerinterface using Docker, edit `docker-compose.yml` and uncomment (remove the `#`) the last four lines. +If you installed Powerinterface using Docker, edit `docker-compose.yml` and uncomment (remove the `#`) the last four lines. Then you need to update your Docker container with `docker-compose up -d` Afterwards, restart Powerinterface (Docker: `docker-compose restart`, systemd: `systemctl restart powerinterface`). diff --git a/server.js b/server.js index e24f638..28f6da2 100644 --- a/server.js +++ b/server.js @@ -72,6 +72,7 @@ app.use(morgan('combined')) let updateAvailable = false let powerRouters = new Map() +// creates and initializes new powerrouter object and stores it in a map const addNewPowerRouter = (powerRouterId) => { let powerRouter = {} powerRouter.powerRouterId = powerRouterId @@ -88,18 +89,22 @@ const addNewPowerRouter = (powerRouterId) => { runUpdateCheck(CURRENT_VERSION, () => updateAvailable = true) app.get('/', (req, res) => { + // get the powerrouter ID from url query + // change the powerrouter ID to the first one which sent data already when no query is given let powerRouterId = req.query.powerRouterId if (powerRouters.size > 0 && powerRouterId === undefined) { powerRouterId = powerRouters.keys().next().value } if (powerRouters.has(powerRouterId)) { + // show webinterface with data of the correct powerrouter let powerRouter = powerRouters.get(powerRouterId) res.send(buildWebinterface(powerRouterId, powerRouters.keys(), powerRouter.currentData, powerRouter.stats, { isWinterMode:powerRouter.isWinterMode, isMaintenanceCharge:powerRouter.isMaintenanceCharge }, {webReload}, powerRouter.lastUpdate, updateAvailable)) } else { + // show no data page and selected, available IDs when available if no powerrouter sent data or this ID isn't known let powerRouterIds = powerRouters.size > 0 ? powerRouters.keys() : null res.send(buildWebinterface(powerRouterId, powerRouterIds, {}, initStats(), { isWinterMode:false, @@ -109,40 +114,52 @@ app.get('/', (req, res) => { }) app.get('/values.json', (req, res) => { + // get the powerrouter ID from url query + // change the powerrouter ID to the first one which sent data already when no query is given let powerRouterId = req.query.powerRouterId if (powerRouters.size > 0 && powerRouterId === undefined) { powerRouterId = powerRouters.keys().next().value } if (powerRouters.has(powerRouterId)) { + // send current data of the correct ID in json format res.type('json').send(powerRouters.get(powerRouterId).currentData) } else { + // send empty object if no powerrouter sent data or this ID isn't known res.type('json').send({}) } }) app.get('/status.json', (req, res) => { + // get the powerrouter ID from url query + // change the powerrouter ID to the first one which sent data already when no query is given let powerRouterId = req.query.powerRouterId if (powerRouters.size > 0 && powerRouterId === undefined) { powerRouterId = powerRouters.keys().next().value } if (powerRouters.has(powerRouterId)) { + // send current status of the correct ID in json format res.type('json').send(powerRouters.get(powerRouterId).currentStatuses) } else { + // send empty object if no powerrouter sent data or this ID isn't known res.type('json').send({}) } }) app.get('/events.json', (req, res) => { + // get the powerrouter ID from url query + // change the powerrouter ID to the first one which sent data already when no query is given let powerRouterId = req.query.powerRouterId if (powerRouters.size > 0 && powerRouterId === undefined) { powerRouterId = powerRouters.keys().next().value } if (powerRouters.has(powerRouterId)) { + // send events list of the correct ID in json format res.type('json').send([...powerRouters.get(powerRouterId).events].reverse()) } else { + // send empty list if no powerrouter sent data or this ID isn't known res.type('json').send([]) } }) @@ -154,6 +171,7 @@ app.post('/logs.json', (req, res) => { if (!powerRouters.has(powerRouterId)) { addNewPowerRouter(powerRouterId) } + // update the correct powerrouter with the newly received data let powerRouter = powerRouters.get(powerRouterId) powerRouter.currentData = data powerRouter.currentStatuses = statuses @@ -200,6 +218,7 @@ app.post('/events.json', (req, res) => { if (!powerRouters.has(powerRouterId)) { addNewPowerRouter(powerRouterId) } + // update the correct powerrouter with the newly received data let powerRouter = powerRouters.get(powerRouterId) powerRouter.isWinterMode = isWinterMode powerRouter.isMaintenanceCharge = isMaintenanceCharge diff --git a/src/webinterface.js b/src/webinterface.js index e60ecc1..01edd92 100644 --- a/src/webinterface.js +++ b/src/webinterface.js @@ -15,6 +15,7 @@ const buildStatsMonthlyLabel = (stats) => `seit ${stats.dataSince.monthly.toLoca { day: '2-digit', month:'2-digit' } )}` +// build a string with links to all given powerrouter IDs const buildPowerRouterIds = (powerRouterIds) => { let powerRouterIdsString = '' for (let powerRouterId of powerRouterIds) {