82 lines
2.4 KiB
TypeScript
82 lines
2.4 KiB
TypeScript
//http://usday1vms006:4000/api/v1/zebra/wrapper1
|
|
import { z, createRoute, OpenAPIHono } from "@hono/zod-openapi";
|
|
import { readTags } from "../controller/readTags.js";
|
|
import { createLog } from "../../logger/logger.js";
|
|
import { responses } from "../../../globalUtils/routeDefs/responses.js";
|
|
import { newHeartBeat } from "../controller/readerControl.js";
|
|
import { apiHit } from "../../../globalUtils/apiHits.js";
|
|
|
|
const app = new OpenAPIHono();
|
|
let lastGpiTimestamp = 0;
|
|
|
|
const ParamsSchema = z.object({
|
|
reader: z
|
|
.string()
|
|
.min(3)
|
|
.openapi({
|
|
param: {
|
|
name: "reader",
|
|
in: "path",
|
|
},
|
|
example: "1212121",
|
|
}),
|
|
});
|
|
|
|
app.openapi(
|
|
createRoute({
|
|
tags: ["rfid"],
|
|
summary: "Post info from the reader",
|
|
method: "post",
|
|
path: "/mgtevents/{reader}",
|
|
request: {
|
|
params: ParamsSchema,
|
|
},
|
|
responses: responses(),
|
|
}),
|
|
async (c) => {
|
|
const { reader } = c.req.valid("param");
|
|
const body = await c.req.json();
|
|
apiHit(c, { endpoint: `/mgtevents/${reader}` });
|
|
if (body.type === "heartbeat") {
|
|
const heart = await newHeartBeat(reader);
|
|
return c.json(
|
|
{ success: heart.success, message: heart.message },
|
|
200
|
|
);
|
|
}
|
|
|
|
if (body.type === "gpi" && body.data.state === "HIGH") {
|
|
const eventTimestamp = new Date(body.timestamp).getTime(); // Convert ISO timestamp to milliseconds
|
|
if (eventTimestamp - lastGpiTimestamp > 30 * 1000) {
|
|
// Check if it's been more than 2ms
|
|
lastGpiTimestamp = eventTimestamp; // Update last seen timestamp
|
|
|
|
createLog(
|
|
"info",
|
|
"rfid",
|
|
"rfid",
|
|
`${reader} is reading a tag.`
|
|
);
|
|
await readTags(reader);
|
|
} else {
|
|
createLog(
|
|
"debug",
|
|
"rfid",
|
|
"rfid",
|
|
`A new trigger from ${reader} was to soon`
|
|
);
|
|
lastGpiTimestamp = eventTimestamp;
|
|
}
|
|
|
|
//console.log(body);
|
|
}
|
|
|
|
return c.json(
|
|
{ success: true, message: `New info from ${reader}` },
|
|
200
|
|
);
|
|
}
|
|
);
|
|
|
|
export default app;
|