diff --git a/public/stylesheets/inputs.css b/public/stylesheets/inputs.css index 6d8fd20..2153304 100644 --- a/public/stylesheets/inputs.css +++ b/public/stylesheets/inputs.css @@ -7,6 +7,7 @@ cursor: none !important; font-weight: 500; margin-right: 2%; + transition: 0.2s all; } diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css index 97a82b6..aba88af 100644 --- a/public/stylesheets/style.css +++ b/public/stylesheets/style.css @@ -37,7 +37,7 @@ h1 { font-size: 1.74em; font-weight: 500; margin-bottom: 2%; - color: white; + } @@ -100,13 +100,22 @@ h1 { #overlay #bottom #menuBtn { height: 100%; width: 10%; - background-color: blue; + background-color: #21212d; padding: 1px; font-size: 1.5em; border: 0; - border-radius: 0 8px 0 0; + border-radius: 0 12px 0 0; color: white; float: left; + transition: all 0.4s; +} +#menuBtn:hover { + background-color: #313147 !important; +} + +#menuBtn:disabled { + background-color: #777 !important; + color: #C1C1C1 !important; } diff --git a/src/WebSocketHandler.ts b/src/WebSocketHandler.ts index 16a1cf7..60cb555 100644 --- a/src/WebSocketHandler.ts +++ b/src/WebSocketHandler.ts @@ -2,6 +2,7 @@ import {WebSocketPayload} from "./WebSocketPayload"; import {WebSocketEvent} from "./WebSocketEvent"; import {iTender} from "./iTender"; import {Settings} from "./Settings"; +import Container from "./database/Container"; export class WebSocketHandler { private static _ws: WebSocket; @@ -40,4 +41,11 @@ export class WebSocketHandler { WebSocketHandler.send(payload).then(resolve); }) } + + static sendContainers() { + return new Promise(async resolve => { + let payload = new WebSocketPayload(WebSocketEvent.CONTAINERS, false, ( await Container.find() )); + WebSocketHandler.send(payload).then(resolve); + }) + } } \ No newline at end of file diff --git a/src/iTender.ts b/src/iTender.ts index 74a7160..f387520 100644 --- a/src/iTender.ts +++ b/src/iTender.ts @@ -71,12 +71,20 @@ export class iTender { return new Promise(async resolve => { for (let c of (await Container.find({enabled: true}))) { try { + if( !c.sensorFilledMax || c.sensorFilledMin ) + { + c.enabled = false; + await c.save(); + continue; + } + let rand = Math.random() * 5; if (c.sensorType == SensorType.ULTRASOUND) { let sensor = new HCSR04(c.sensorPin1, c.sensorPin2); c.rawData = sensor.distance(); c.rawData = rand; + c.filled = c.rawData * c.sensorFilledMin / 100; } else if (c.sensorType == SensorType.LOADCELL) { @@ -90,6 +98,7 @@ export class iTender { c.filled = -1; c.rawData = 0; } + console.log(c); await c.save(); } log("Containers measured!"); diff --git a/src/routes/ws/websocketRoute.ts b/src/routes/ws/websocketRoute.ts index 16fe7a7..52e7352 100644 --- a/src/routes/ws/websocketRoute.ts +++ b/src/routes/ws/websocketRoute.ts @@ -23,6 +23,7 @@ router.ws('/', async (ws, req, next) => { WebSocketHandler.ws = ws; await WebSocketHandler.sendRunningConfig(); + await WebSocketHandler.sendContainers(); await WebSocketHandler.sendStatus(); async function sendWhenReady() { @@ -64,20 +65,28 @@ router.ws('/', async (ws, req, next) => { } case WebSocketEvent.CONTAINERS: { let data = msg.data as { pumpPin: number; sensorType: SensorType; sensor1: number; sensor2: number; volume: number; }[]; - await Container.remove({}); + await Container.deleteMany({}); let i = 0; for (let c of data) { let container = new Container(); container.slot = i; container.volume = c.volume; + container.pumpPin = c.pumpPin; container.sensorType = c.sensorType; container.sensorPin1 = c.sensor1; container.sensorPin2 = c.sensor2; container.enabled = true; container.autoDisabled = true; + await container.save(); i++; } + break; + } + + case WebSocketEvent.CONFIG: { + // ToDo + // Danach setup modus aus } } }); diff --git a/src/web/WebHandler.ts b/src/web/WebHandler.ts index 40f981f..2e221a7 100644 --- a/src/web/WebHandler.ts +++ b/src/web/WebHandler.ts @@ -3,6 +3,10 @@ import {IDrink} from "../database/IDrink"; import {Modal} from "./Modal"; import {ButtonType} from "./ButtonType"; import {Pane} from "./Pane"; +import {IContainer} from "../database/IContainer"; +import {Setup} from "./Setup"; +import * as Events from "events"; +import {SensorType} from "../SensorType"; export class WebHandler { private static containers = []; @@ -58,6 +62,37 @@ ${ingredients}`*/ //todo public static onContainerUpdate(payload: WebSocketPayload) { + let containerDiv = document.getElementById("setupContainers") as HTMLDivElement; + containerDiv.innerHTML = ""; + + let containers = payload.data as IContainer[]; + for (let c of containers) { + Setup.addSetupContainer(); + } + + let i = 0; + let list = containerDiv.getElementsByTagName("div"); + for (let c of containers) { + let current = list[i] as HTMLDivElement; + let selects = current.getElementsByTagName("select"); + + (selects[0] as HTMLSelectElement).value = c.pumpPin.toString(); + let type; + if( c.sensorType == SensorType.NONE ) + type = "-1"; + else if( c.sensorType == SensorType.ULTRASOUND ) + type = "0"; + else + type = "1"; + (selects[1] as HTMLSelectElement).value = type; + (selects[2] as HTMLSelectElement).value = c.sensorPin1.toString(); + (selects[3] as HTMLSelectElement).value = c.sensorPin2.toString(); + (selects[4] as HTMLSelectElement).value = c.volume.toString(); + let event = new Event('change', { bubbles: true }); + selects[1].dispatchEvent( event ); + + i++; + } } diff --git a/views/index.pug b/views/index.pug index 1f86e33..b823307 100644 --- a/views/index.pug +++ b/views/index.pug @@ -31,7 +31,8 @@ block setup div#setupContainers - button.btn.btn-success#setup_saveBtn(style="grid-row: span 1; grid-column: span 2; border-radius: 15px; font-size: 1.2em;") Speichern + button.btn.btn-danger#setup_cancelBtn(style="grid-row: span 1; grid-column: span 1; border-radius: 15px; font-size: 1.2em;" onclick="window.location.reload()") Abbrechen + button.btn.btn-success#setup_saveBtn(style="grid-row: span 1; grid-column: span 1; border-radius: 15px; font-size: 1.2em;") Speichern block menu // Menu