52 lines
1.1 KiB
JavaScript
52 lines
1.1 KiB
JavaScript
import { LCD } from '@sek1ro/i2c-lcd'
|
|
import si from 'systeminformation'
|
|
|
|
const lcd = new LCD(1, 0x27)
|
|
await lcd.open()
|
|
|
|
function BtoGB(bytes) {
|
|
return (bytes / 1024 ** 3).toFixed(1)
|
|
}
|
|
|
|
async function showSystemStats() {
|
|
const [cpu, mem, disks] = await Promise.all([
|
|
si.currentLoad(),
|
|
si.mem(),
|
|
si.fsSize(),
|
|
]);
|
|
|
|
const cpuLoad = cpu.currentLoad.toFixed(1).padStart(4, ' ')
|
|
const totalMem = BtoGB(mem.total)
|
|
const usedMem = BtoGB(mem.total - mem.available)
|
|
|
|
let diskTotalMem = 0
|
|
let diskUsedMem = 0
|
|
|
|
for (const disk of disks) {
|
|
diskTotalMem += disk.size
|
|
diskUsedMem += disk.used
|
|
}
|
|
diskTotalMem = BtoGB(diskTotalMem)
|
|
diskUsedMem = BtoGB(diskUsedMem)
|
|
|
|
await lcd.send(LCD.ClearDisplay())
|
|
|
|
const hours = new Date().getHours()
|
|
if (hours >= 23 || hours < 7) {
|
|
lcd.backlight = false
|
|
} else {
|
|
lcd.backlight = true
|
|
}
|
|
await lcd.jump(0, 0)
|
|
await lcd.sendString(`${diskUsedMem}/${diskTotalMem}GB`)
|
|
|
|
await lcd.jump(0, 1)
|
|
await lcd.sendString(`${usedMem}/${totalMem}GB`)
|
|
|
|
await lcd.jump(11, 1)
|
|
await lcd.sendString(`${cpuLoad}%`)
|
|
}
|
|
|
|
await showSystemStats()
|
|
setInterval(showSystemStats, 1000)
|