aboutsummaryrefslogtreecommitdiff
path: root/hsm-web/Client
diff options
context:
space:
mode:
authorPaul Oliver <contact@pauloliver.dev>2026-01-02 11:37:35 +0000
committerPaul Oliver <contact@pauloliver.dev>2026-01-02 11:57:54 +0000
commitf7f11acafe0a404fa218c13832e32fce574ae0f6 (patch)
treef3a531050b4be2d708eb6aac53ce4474f798886b /hsm-web/Client
parent43af089b3588b6fd29a1b09be9874054e0291c5e (diff)
Adds battery monitoring to frontend
Diffstat (limited to 'hsm-web/Client')
-rw-r--r--hsm-web/Client/package-lock.json77
-rw-r--r--hsm-web/Client/package.json1
-rw-r--r--hsm-web/Client/src/App.vue11
-rw-r--r--hsm-web/Client/src/INA226.vue48
-rw-r--r--hsm-web/Client/src/config.js3
5 files changed, 139 insertions, 1 deletions
diff --git a/hsm-web/Client/package-lock.json b/hsm-web/Client/package-lock.json
index 5324573..14e6a57 100644
--- a/hsm-web/Client/package-lock.json
+++ b/hsm-web/Client/package-lock.json
@@ -6,6 +6,7 @@
"": {
"dependencies": {
"@vue/cli": "^5.0.9",
+ "axios": "^1.13.2",
"core-js": "^3.8.3",
"vue": "^3.2.13"
},
@@ -4614,6 +4615,12 @@
"retry": "0.13.1"
}
},
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "license": "MIT"
+ },
"node_modules/at-least-node": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
@@ -4687,6 +4694,17 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/axios": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz",
+ "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==",
+ "license": "MIT",
+ "dependencies": {
+ "follow-redirects": "^1.15.6",
+ "form-data": "^4.0.4",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
"node_modules/babel-core": {
"version": "7.0.0-bridge.0",
"resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz",
@@ -5679,6 +5697,18 @@
"node": ">=0.1.90"
}
},
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "license": "MIT",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/commander": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
@@ -6677,6 +6707,15 @@
"node": ">=0.10.0"
}
},
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -7099,6 +7138,21 @@
"node": ">= 0.4"
}
},
+ "node_modules/es-set-tostringtag": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/escalade": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
@@ -8456,7 +8510,6 @@
"version": "1.15.11",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
"integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
- "dev": true,
"funding": [
{
"type": "individual",
@@ -8497,6 +8550,22 @@
"node": ">=0.10.0"
}
},
+ "node_modules/form-data": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
+ "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "es-set-tostringtag": "^2.1.0",
+ "hasown": "^2.0.2",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/forwarded": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
@@ -12930,6 +12999,12 @@
"node": ">= 0.10"
}
},
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
+ "license": "MIT"
+ },
"node_modules/ps-list": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/ps-list/-/ps-list-7.2.0.tgz",
diff --git a/hsm-web/Client/package.json b/hsm-web/Client/package.json
index 65a15d8..21f7248 100644
--- a/hsm-web/Client/package.json
+++ b/hsm-web/Client/package.json
@@ -9,6 +9,7 @@
},
"dependencies": {
"@vue/cli": "^5.0.9",
+ "axios": "^1.13.2",
"core-js": "^3.8.3",
"vue": "^3.2.13"
},
diff --git a/hsm-web/Client/src/App.vue b/hsm-web/Client/src/App.vue
index 202e4d2..84fefcf 100644
--- a/hsm-web/Client/src/App.vue
+++ b/hsm-web/Client/src/App.vue
@@ -1,3 +1,14 @@
<template>
<h1>HsMouse</h1>
+ <INA226 />
</template>
+
+<script>
+import INA226 from './INA226.vue'
+
+export default {
+ components: {
+ INA226
+ }
+}
+</script>
diff --git a/hsm-web/Client/src/INA226.vue b/hsm-web/Client/src/INA226.vue
new file mode 100644
index 0000000..bf0141f
--- /dev/null
+++ b/hsm-web/Client/src/INA226.vue
@@ -0,0 +1,48 @@
+<template>
+ <h3>Battery Status</h3>
+ <table>
+ <tbody>
+ <tr>
+ <td>{{ ina226Reading.voltage.toFixed(2) }}V</td>
+ <td>{{ ina226Reading.current.toFixed(2) }}A</td>
+ <td>{{ ina226Reading.power.toFixed(2) }}W</td>
+ </tr>
+ </tbody>
+ </table>
+</template>
+
+<script>
+import axios from 'axios'
+import config from './config'
+
+export default {
+ data() {
+ return {
+ ina226Reading: {
+ voltage: 0,
+ current: 0,
+ power: 0
+ }
+ }
+ },
+ mounted() {
+ this.getINA226Reading()
+ },
+ methods: {
+ getINA226Reading() {
+ axios
+ .get(`${config.api}/ina226`)
+ .then(res => {
+ this.ina226Reading = res.data
+ setTimeout(this.getINA226Reading, 1000)
+ })
+ }
+ }
+}
+</script>
+
+<style>
+table {
+ width: 100%;
+}
+</style>
diff --git a/hsm-web/Client/src/config.js b/hsm-web/Client/src/config.js
new file mode 100644
index 0000000..b8e9a98
--- /dev/null
+++ b/hsm-web/Client/src/config.js
@@ -0,0 +1,3 @@
+module.exports = {
+ api: 'http://192.168.8.170:3000'
+}