Skip to content
Permalink
master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
console.log("Server is booting...");
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const mqtt = require('mqtt');
const handlebars = require('express-handlebars').create({defaultLayout: 'main'});
// Custom Modules
const documentation = require('./modules/common/documentation');
const temperature = require('./modules/temperature');
const constants = require('./modules/common/constants');
// Initialise ExpressJS
var api = express();
api.use(bodyParser.urlencoded({ extended: true }));
api.use(bodyParser.json());
api.use(express.static('public'));
api.use(cors());
// Initialise Handlebars View handler.
api.engine('handlebars', handlebars.engine);
api.set('view engine', 'handlebars');
// Initialise Constants
const PORT = 8080;
const BASE_URL = "/api/v1";
const DATABASE_CONNECTION = constants.sqlConnection();
const MQTT_CONNECTION = constants.mqttConnection();
console.log(`Connecting to ${MQTT_CONNECTION.url}...`);
const CLIENT = mqtt.connect(MQTT_CONNECTION.url);
console.log(`Connected to ${MQTT_CONNECTION.url}`);
// MQTT Endpoints - (Arduino Circuits ONLY)
CLIENT.on('connect', () => {
console.log('Setting up MQTT Client Subscriptions...');
// Temperature
CLIENT.subscribe(MQTT_CONNECTION.temperature_feed);
console.log(`Subscribed to ${MQTT_CONNECTION.temperature_feed}`);
CLIENT.subscribe(MQTT_CONNECTION.servo_feed);
console.log(`Subscribed to ${MQTT_CONNECTION.servo_feed}`);
console.log('MQTT Client Subscriptions have been registered');
});
CLIENT.on('message', (topic, message) => {
switch (topic) {
case MQTT_CONNECTION.temperature_feed:
console.log('Current Temperature: %s*C', message);
temperature.setCurrentTemperature(message);
break;
case MQTT_CONNECTION.servo_feed:
console.log('Current Target: %s*C', message);
break;
default:
console.log('Connected Status %s', message);
break;
}
});
// API Endpoints - (Web Application)
api.get(`${BASE_URL}/`, (req, res) => {
var endpoints = documentation.getDocumentation();
res.render('documentation', {endpoints: endpoints});
});
api.get(`${BASE_URL}/temperature/settings`, (req, res) => {
temperature.getTemperatureSettings(DATABASE_CONNECTION, function (err, data){
if(err){
res.status(400);
res.end("Error:" + err)
return;
}
res.status(200);
res.end(data);
});
});
api.post(`${BASE_URL}/temperature/settings`, (req, res) => {
temperature.createTemperatureSetting(DATABASE_CONNECTION, req, function (err, data){
if(err){
res.status(400);
res.end("Error:" + err)
return;
}
res.status(200);
res.end(data);
});
});
api.get(`${BASE_URL}/temperature/settings/:uid`, (req, res) => {
temperature.getTemperatureSetting(DATABASE_CONNECTION, req, function (err, data){
if(err){
res.status(400);
res.end("Error:" + err);
return;
}
res.status(200);
res.end(data);
});
});
api.delete(`${BASE_URL}/temperature/settings/:uid`, (req, res) => {
temperature.deleteTemperatureSetting(DATABASE_CONNECTION, req, function (err, data) {
if(err){
res.status(400);
res.end("Error:" + err);
return;
}
res.status(200);
res.end(data);
});
});
api.patch(`${BASE_URL}/temperature/settings/:uid`, (req, res) => {
temperature.patchTemperatureSetting(DATABASE_CONNECTION, req, function (err, data) {
if(err){
res.status(400);
res.end("Error:" + err);
return;
}
res.status(200);
res.end(data);
});
});
api.get(`${BASE_URL}/temperature/dial`, (req, res) => {
temperature.getTemperatureDial(DATABASE_CONNECTION, function (err, data) {
if(err){
res.status(400);
res.end("Error:" + err);
return;
}
res.status(200);
res.end(data);
});
});
api.patch(`${BASE_URL}/temperature/dial`, (req, res) => {
temperature.updateTemperatureDial(DATABASE_CONNECTION, req, function (err, data) {
if(err){
res.status(400);
res.end("Error:" + err);
return;
}
res.status(200);
res.end(data);
});
});
api.get(`${BASE_URL}/temperature/current`, (req, res) => {
const currentTemperature = temperature.getCurrentTemperature();
console.log(currentTemperature);
res.status(200);
res.end(currentTemperature);
});
api.get(`${BASE_URL}/servo/:targetTemp`, (req, res) => {
if (!isNaN(req.params.targetTemp)) {
CLIENT.publish(MQTT_CONNECTION.servo_feed, req.params.targetTemp);
res.status(201);
res.end();
}
res.status(400);
res.end();
});
// Set program listener on specific port.
api.listen(PORT, function() {
console.log("Server is currently listening to port: " + PORT);
});