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 async measureContainers() { log("Measuring containers..."); for (let c of (await Container.find({}))) { if (c.sensorType != SensorType.NONE) { let weight: number; try { weight = await SensorHelper.measureRaw(c); } catch (e) { log(e); await WebSocketHandler.send(new WebSocketPayload(WebSocketEvent.ERROR, "Ein Sensor hat beim Austarieren einen ungültigen Wert zurückgegeben.
Dies weist auf eine Fehlkonfiguration oder kaputten Sensor hin.
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(); } } await WebSocketHandler.sendContainers(); log("Containers measured!"); } static async tare() { // Start TARE for (let c of await Container.find({})) { if (c.sensorType != SensorType.NONE) { c.sensorTare = 0; await c.save(); } } let timeouts: Array = []; async function measureAndSave() { await SensorHelper.measureAllRaw(); for (let c of await Container.find({})) { if (c.sensorType != SensorType.NONE) { c.sensorTare += c.rawData; } } } timeouts.push(setTimeout(measureAndSave, 500)); timeouts.push(setTimeout(measureAndSave, 1000)); timeouts.push(setTimeout(measureAndSave, 2000)); timeouts.push(setTimeout(measureAndSave, 3000)); await Promise.all(timeouts); for (let c of await Container.find({})) { if (c.sensorType != SensorType.NONE) { c.sensorTare = c.sensorTare / 4; await c.save(); } } } }