64 lines
1.3 KiB
JavaScript
64 lines
1.3 KiB
JavaScript
const path = require('path');
|
|
|
|
|
|
const grpc = require('grpc');
|
|
const protoLoader = require('@grpc/proto-loader');
|
|
|
|
const PROTO_PATH = path.join(__dirname, '..', '..', 'framebuffer', 'framebuffer.proto');
|
|
const packageDefinition = protoLoader.loadSync(PROTO_PATH);
|
|
const framebuffer = grpc.loadPackageDefinition(packageDefinition);
|
|
|
|
const client = new framebuffer.Drawer('raspi.cacti.makerforce.io:5000', grpc.credentials.createInsecure());
|
|
|
|
|
|
const express = require('express');
|
|
|
|
const app = express();
|
|
const PORT = 5001;
|
|
|
|
const PIXEL_COUNT = 275;
|
|
|
|
// TODO: async
|
|
app.post('/on', (req, res, next) => {
|
|
let fill = 0x00000000;
|
|
switch (req.query.tempreature) {
|
|
case 'cool':
|
|
fill = 0xFFFFFFFF;
|
|
break;
|
|
case 'warm':
|
|
default:
|
|
fill = 0xFFFFAA77;
|
|
break;
|
|
}
|
|
client.drawFrame({
|
|
frame: {
|
|
dots: Array(PIXEL_COUNT-1).fill(fill).concat([0xBBFF0000]),
|
|
},
|
|
layer: 'LIGHT',
|
|
}, (err, resp) => {
|
|
if (err) {
|
|
return next(err);
|
|
}
|
|
res.writeHead(200);
|
|
res.end();
|
|
});
|
|
});
|
|
app.post('/off', (req, res, next) => {
|
|
client.drawFrame({
|
|
frame: {
|
|
dots: Array(PIXEL_COUNT).fill(0x00000000),
|
|
},
|
|
layer: 'LIGHT',
|
|
}, (err, resp) => {
|
|
if (err) {
|
|
return next(err);
|
|
}
|
|
res.writeHead(200);
|
|
res.end();
|
|
});
|
|
});
|
|
|
|
app.use(express.static('public'));
|
|
|
|
app.listen(PORT, () => console.log(`App listening on ${PORT}`));
|