diff --git a/src/index.ts b/src/index.ts index 9b50d35..2526cc2 100644 --- a/src/index.ts +++ b/src/index.ts @@ -18,17 +18,22 @@ const ledRed = new Gpio(Number(process.env.GPIO_RED || 14), "out"); const ledGreen = new Gpio(Number(process.env.GPIO_GREEN || 15), "out"); const monitors: { [key: string]: { status: boolean, index: number } } = {}; -const paused: { [key: string]: boolean } = {}; +let paused: { [key: string]: boolean } = {}; const socket = io(`${KUMA_URL}`); socket.on("monitorList", (items) => { console.log("got monitor list"); + paused = {}; + for (const item of Object.values(items) as any[]) { - paused[item.id] = item.active == 0 || item.type == "group"; + if (item.type == "group") continue; + paused[item.id] = item.active == 0; } + console.log(Object.keys(paused)); + think(); }); @@ -104,7 +109,7 @@ function setStatus(status: Status, sound = true) { function think() { const down = Object.entries(monitors) - .filter(m => !m[1].status && !paused[m[0]]); + .filter(m => !m[1].status && paused[m[0]] === false); if (down.length) { if (currentStatus != "red") setStatus("red"); @@ -114,3 +119,24 @@ function think() { } setStatus("working"); + +setInterval(async () => { + if (currentStatus == "green") { + ledGreen.writeSync(NO_GREEN ? 1 : 0); + await sleep(50); + ledGreen.writeSync(NO_GREEN ? 0 : 1); + } + else if (currentStatus == "red") { + for (let i = 0; i < 3; i++) { + ledRed.writeSync(0); + await sleep(50); + ledRed.writeSync(1); + await sleep(50); + } + + // in case the status changed while we were flashing the LED + if (currentStatus != "red") { + setStatus(currentStatus); + } + } +}, 5000);