UNPKG

am43-ctrl

Version:

Control an AM43 Blinds Engine by HTTP or MQTT

73 lines (59 loc) 1.98 kB
const express = require('express'); class WebConnector { constructor(devices, port, log) { this.devices = devices; this.express = express(); this.setupExpressRoutes(); this.log = log; this.log('listening on port %d', port); this.express.listen(port); } setupExpressRoutes() { this.express.get('/', (req, res) => { var output = {}; Object.entries(this.devices).forEach(([id, device]) => output[id] = device.getState()); res.json(output); }); this.express.get('/:am43Id', (req, res) => { let device = this.requireDevice(req, res); if (!device) {return;} res.json(device.getState()); }); this.express.post('/:am43Id/open', (req, res) => { let device = this.requireDevice(req, res); if (!device) { return; } device.log('requesting AM43 open'); device.am43Open(); res.sendStatus(200); }); this.express.post('/:am43Id/close', (req, res) => { let device = this.requireDevice(req, res); if (!device) { return; } device.log('requesting AM43 close'); device.am43Close(); res.sendStatus(200); }); this.express.post('/:am43Id/stop', (req, res) => { let device = this.requireDevice(req, res); if (!device) { return; } device.log('requesting AM43 stop'); device.am43Stop(); res.sendStatus(200); }); } requireDevice(req, res) { var device = this.devices[req.params.am43Id]; if (!device) { res.sendStatus(404); return; } return device; } } module.exports = WebConnector;