fix: read moisture level

This commit is contained in:
Elias Renman
2023-06-17 11:32:02 +02:00
parent 2c93801867
commit 90c1d1fb5f
7 changed files with 84 additions and 34 deletions

View File

@@ -1,30 +1,54 @@
import cron from "node-cron";
import { iotClient } from "../axios/iot.axios";
import { moistureResponse } from "../axios/iot.types";
import { MoistureResponse } from "../axios/iot.types";
import { prisma } from "../prisma";
import { emitter } from "../eventemitter";
import { AxiosError } from "axios";
export function registerCronjobs() {
cron.schedule("* * * * *", async () => {
console.log("Checking moisture levels");
// Read moisture sensors
const { data } = await iotClient.post<moistureResponse>("moisture");
const rows = [];
for (const [key, value] of Object.entries(data)) {
const row = await prisma.moistureValue.create({
try {
const { data } = await readMoistureLevels();
const rows = await insertRows(data);
console.log("Successfully checked moisture levels");
if (rows.length === 0) return;
// Emit event
emitter.emit("moisture.updated", ...rows);
} catch (e) {
console.log(e);
}
});
}
function readMoistureLevels() {
return iotClient
.get<MoistureResponse | undefined>("moisture/read")
.catch((err: AxiosError) => {
return {
data: undefined,
};
});
}
async function insertRows(data: MoistureResponse | undefined) {
if (!data) {
return [];
}
return Promise.all(
Object.entries(data.data).map(([key, value]) =>
prisma.moistureValue.create({
data: {
name: key,
value,
value: value.precentage,
createdAt: new Date(),
},
select: { createdAt: true, id: true, name: true, value: true },
});
rows.push(row);
}
// Emit event
emitter.emit("moisture.updated", rows);
});
})
)
);
}