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 { 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.
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(); } } log("Containers measured!"); resolve(); let payload = new WebSocketPayload(WebSocketEvent.CONTAINERS, (await Container.find())); await WebSocketHandler.send(payload); }); } }