Update measure and tare

Took 4 hours 19 minutes
This commit is contained in:
2023-01-11 00:06:21 +01:00
parent c509fb2bf7
commit 9626cb43c9
3 changed files with 117 additions and 70 deletions

View File

@ -23,7 +23,6 @@ router.ws('/', async (ws, req, next) => {
log("Incoming websocket connection...");
if (WebSocketHandler.ws) {
iTender.toggleTare(false);
WebSocketHandler.ws.close(1001);
}
WebSocketHandler.ws = ws;
@ -44,14 +43,6 @@ router.ws('/', async (ws, req, next) => {
switch (msg.event) {
case WebSocketEvent.TARE: {
if (msg.data["state"] == true) {
iTender.toggleTare(true);
} else {
iTender.toggleTare(false);
}
break;
}
case WebSocketEvent.CONTAINERS: {
let data = msg.data as { pumpPin: number; sensorType: SensorType; sensor1: number; sensor2: number; }[];
await Container.deleteMany({}); // V2: Remove this and check every container based on id if changes occurs
@ -73,7 +64,7 @@ router.ws('/', async (ws, req, next) => {
}
case WebSocketEvent.CONTAINER_UPDATE: {
let container : IContainer | null = await Container.findById(msg.data["container"]);
let container: IContainer | null = await Container.findById(msg.data["container"]);
if (!container) break;
let ingredient;
@ -83,20 +74,16 @@ router.ws('/', async (ws, req, next) => {
ingredient = undefined;
}
let filled : number = parseInt(msg.data["filled"]);
let filled: number = parseInt(msg.data["filled"]);
container.filled = filled;
container.volume = filled; // V2: Volume is now being updated after change of ingredient
if( container.sensorType != SensorType.NONE )
{
if (container.sensorType != SensorType.NONE) {
let raw = SensorHelper.measure(container);
if( !raw )
{
await WebSocketHandler.send(new WebSocketPayload(WebSocketEvent.ERROR, "Der Sensor hat beim Austarieren einen ungültigen Wert zurückgegeben.<br>Dies weist auf eine Fehlkonfiguration oder kaputten Sensor hin.<br>Aus Sicherheitsgründen wurde der Sensor für diesen Behälter deaktiviert." ));
}
else
{
if (!raw) {
await WebSocketHandler.send(new WebSocketPayload(WebSocketEvent.ERROR, "Der Sensor hat beim Austarieren einen ungültigen Wert zurückgegeben.<br>Dies weist auf eine Fehlkonfiguration oder kaputten Sensor hin.<br>Aus Sicherheitsgründen wurde der Sensor für diesen Behälter deaktiviert."));
} else {
container.sensorDelta = raw - filled; // V2: Kalkuliere differenz zwischen Gewicht und gefülltem Inhalt // Todo Möglicherweise ist der "raw"-Wert nicht Gewicht
}
}
@ -170,6 +157,51 @@ router.ws('/', async (ws, req, next) => {
WebSocketHandler.answerRequest(msg.data["type"] as RequestType, "ok");
break;
}
case RequestType.TARE: {
let type = msg.data["type"];
// Start TARE
let success = true;
for (let c of await Container.find({})) {
if (c.sensorType != SensorType.NONE) {
c.sensorTare = 0;
await c.save();
}
}
async function measureAndSafe() {
try {
await iTender.measureAllRaw();
for (let c of await Container.find({})) {
if (c.sensorType != SensorType.NONE) {
c.sensorTare += c.rawData;
}
}
} catch (e) {
// { success: boolean, msg: string }
WebSocketHandler.answerRequest(type, {success: false, msg: e});
success = false;
}
}
setTimeout(measureAndSafe, 500);
setTimeout(measureAndSafe, 1000);
setTimeout(measureAndSafe, 2000);
setTimeout(measureAndSafe, 3000);
setTimeout(async () => {
if (success) {
for (let c of await Container.find({})) {
if (c.sensorType != SensorType.NONE) {
c.sensorTare = c.sensorTare / 4;
await c.save();
}
}
WebSocketHandler.answerRequest(type, {success: true, msg: "OK"});
}
}, 4000);
}
}
break;