From a8addc5aaaecca292b7d2bdc3a848a795329a3b4 Mon Sep 17 00:00:00 2001 From: Autumn Date: Tue, 12 May 2026 18:31:59 +0100 Subject: [api] added device toggling API route --- src/app.ts | 4 +++- src/lib/helpers/device.ts | 20 ++++++++++++++++++++ src/routes/api.ts | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 src/lib/helpers/device.ts create mode 100644 src/routes/api.ts (limited to 'src') diff --git a/src/app.ts b/src/app.ts index bdefefa..5000fbb 100644 --- a/src/app.ts +++ b/src/app.ts @@ -12,8 +12,10 @@ app.set("view engine", "pug") app.set("views", "./src/views") // setup routes -import dashboardRouter from "@routes/dashboard" +import apiRouter from "@routes/api.ts" +import dashboardRouter from "@routes/dashboard.ts" +app.use("/api", apiRouter) app.use("/", dashboardRouter) // export app diff --git a/src/lib/helpers/device.ts b/src/lib/helpers/device.ts new file mode 100644 index 0000000..42076cb --- /dev/null +++ b/src/lib/helpers/device.ts @@ -0,0 +1,20 @@ +// +// ~~~ device helper utilities +// + +// imports +import { sendMessage } from "@lib/mqtt.ts" +import allDevices from "@lib/config/devices.ts" + +// set state +export async function setState(device, state) { + + const deviceInfo = allDevices.find((dev) => dev.id === device) + + if (!deviceInfo) return false + + const deviceTopic = `${deviceInfo.mqtt}/set` + const deviceMessage = JSON.stringify({ "state": state }) + + return sendMessage(deviceTopic, deviceMessage) +} diff --git a/src/routes/api.ts b/src/routes/api.ts new file mode 100644 index 0000000..84a0f5d --- /dev/null +++ b/src/routes/api.ts @@ -0,0 +1,33 @@ +// +// ~~~ api routing +// + +// imports +import { Router } from "express" +import { setState } from "@lib/helpers/device.ts" + +// setup router +const router = Router() + +// toggle device +router.get("/device/:id/toggle", async (req, res) => { + + const device = req.params.id + const state = await setState(device, "TOGGLE") + + console.debug(`-> toggling ${device}`) + + if (state === false) { + + console.error(`!> cannot toggle ${device}`) + res.sendStatus(500) + + } else { + + res.sendStatus(200) + + } +}) + +// export router +export default router -- cgit v1.3