itender/src/ContainerHelper.ts
Tobias Hopp c9a0ac68c4 V2: Remap many stuff
Took 3 hours 0 minutes
2023-01-23 23:56:39 +01:00

65 lines
2.8 KiB
TypeScript

import Container from "./database/Container";
import {SensorType} from "./SensorType";
import {SensorHelper} from "./SensorHelper";
import {WebSocketHandler} from "./WebSocketHandler";
import {WebSocketPayload} from "./WebSocketPayload";
import {WebSocketEvent} from "./WebSocketEvent";
import debug from "debug";
import {iTender} from "./iTender";
const log = debug("itender:container");
export class ContainerHelper {
/**
* Measure all containers based on their sensor values
*/
static measureContainers(): Promise<void> {
log("Measuring containers...");
return new Promise(async resolve => {
for (let c of (await Container.find({}))) {
if (c.sensorType != SensorType.NONE) {
let weight;
try {
weight = await SensorHelper.measureRaw(c);
} catch (e) {
await WebSocketHandler.send(new WebSocketPayload(WebSocketEvent.ERROR, "Ein 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."));
continue;
}
// V2: New calculation method
/*
(WEIGHT_VAL - NO_WEIGHT_VAL) / Sensitivitätsfaktor = Gewicht in Gramm
(WEIGHT_VAL - NO_WEIGHT_VAL) / (100g_val /100) ist die Formel zur Berechnung des Gewichts in Gramm nach der Kalibrierung mit einem 100 Gramm Gewicht.
100g_val /100 gibt den Sensitivitätsfaktor an, der angibt, wie viel sich der Sensorwert ändert, wenn sich das Gewicht um ein Gramm ändert.
Durch die Division von 100g_val durch 100 wird der Sensitivitätsfaktor berechnet, und durch die Division von (WEIGHT_VAL - NO_WEIGHT_VAL) durch den Sensitivitätsfaktor wird das Gewicht in Gramm berechnet.
Beispiel:
(WEIGHT_VAL - NO_WEIGHT_VAL) / (100g_val /100) = Gewicht in Gramm
(2400 - 2000) / (2450 /100) = 80 Gramm
*/
let newFilled = weight - c.sensorDelta / iTender.sensitivityFactor;
if (newFilled <= 3 && c.filled != -1) {
c.filled = -1;
// Container is empty!
} else {
// Container > 2
c.filled = newFilled;
}
await c.save();
}
}
log("Containers measured!");
resolve();
let payload = new WebSocketPayload(WebSocketEvent.CONTAINERS, (await Container.find()));
await WebSocketHandler.send(payload);
});
}
}