This commit is contained in:
newtbot
2023-12-29 02:21:28 +08:00
parent 990fa8ff34
commit 3913d0d2f7
15 changed files with 118 additions and 124 deletions

View File

@ -0,0 +1,30 @@
const { sequelize } = require("../../Database/mySql.js");
const { IoTModel } = require("../../Database/model/IoTModel.js");
async function insertData(data) {
console.log(data);
try {
const latestData = await IoTModel.create({
psiData: data.psi,
humidityData: data.humidity,
o3Data: data.o3,
no2Data: data.no2,
so2Data: data.so2,
coData: data.co,
temperatureData: data.temperature,
windspeedData: data.windspeed,
currentTime: data.time,
regionData: data.region,
});
}
catch (error) {
console.error(error);
}
}
module.exports = { insertData };

View File

@ -1,17 +1,49 @@
const { app } = require("./modules/express.js");
const client = require("./modules/mqtt");
const client = require("./modules/mqtt");
const { validateData } = require("./functions/validateData.js");
const { insertData } = require("./functions/Database.js");
/*
1) validate data from IoT sensor
2) upload data to database
3) add more routes to api
4) add swagger documentation
5) add middleware for authentication
*/
// Event handlers
client.on('connect', () => {
console.log('Connected to MQTT broker');
client.subscribe('iot-data');
});
client.on('message', (topic, message) => {
//console.log(`Received message on topic ${topic}: ${message}`);
let data = JSON.parse(message);
if (validateData(data)) {
//upload to db logic here
insertData(data);
}
else {
console.log("Data is invalid");
throw new Error("Data is invalid");
}
});
client.on('error', (err) => {
console.error('Error:', err);
client.end();
});
client.on('end', () => {
console.log('Disconnected from MQTT broker');
client.reconnect = true;
}
);

View File

@ -1,22 +1,35 @@
//middleware
/*
const myLogger = function (req, res, next) {
console.log('LOGGED')
next()
}
// Apply the middleware to a specific route
app.use('/special-route', myLogger));
*/
const { connect } = require("../routes/test");
const APIlogger = (req, res, next) => {
/*
console.log("API request received");
console.log(req.ip);
console.log(req.path);
console.log(req.method);
console.log(res.statusCode);
console.log(req.headers['user-agent']);
console.log(req.secure);
console.log(req.protocol);
console.log(req.get('host'));
console.log(new Date());
*/
const log = {
method: req.method,
statusCode: res.statusCode,
protocol: req.protocol,
//formatted in nice utc format
time: new Date().toUTCString(),
ip: req.ip,
userAgent: req.headers["user-agent"],
host: `${req.protocol}://${req.get("host")}${req.originalUrl}`,
};
console.log(log);
//upload to db logic here for api logs
next();
};
module.exports = { APIlogger };
}
module.exports = { APIlogger }

View File

@ -4,6 +4,7 @@
*/
const express = require("express");
const helmet = require('helmet')
const app = express();
app.use(helmet())
const port = 80;
@ -11,10 +12,11 @@ const port = 80;
//disable x-powered-by header for security reasons
app.disable('x-powered-by')
const { APIlogger } = require('../middleware/ApiLogger.js');
//middleware logic
//app.use('/api/v1', require('../middleware/ApiKey.js'));
//app.use('/api/v1', require('../middleware/ApiLogger.js'));
app.use('/api/', APIlogger );
//route logic
app.use('/api/', require('../routes/api_route.js'));
@ -32,4 +34,6 @@ app.listen(port, () => {
console.log(`app listening on port ${port}`);
});
module.exports = { app };
module.exports = { app };

View File

@ -17,32 +17,6 @@ const options = {
const client = mqtt.connect(brokerUrl, options);
module.exports = client;
// Event handlers
client.on('connect', () => {
console.log('Connected to MQTT broker');
client.subscribe('iot-data');
});
client.on('message', (topic, message) => {
//console.log(`Received message on topic ${topic}: ${message}`);
let data = JSON.parse(message);
if (validateData(data)) {
//upload to db logic here
}
else {
console.log("Data is invalid");
}
});
client.on('error', (err) => {
console.error('Error:', err);
client.end();
});
client.on('end', () => {
console.log('Disconnected from MQTT broker');
client.reconnect = true;
}
);

View File

@ -3,12 +3,13 @@ const { IoTModel } = require("../../Database/model/IoTModel.js");
const express = require('express');
const router = express.Router();
// Logic for model and API
// Logic for model and API by 1
async function getLatestData() {
try {
sequelize.sync();
const latestData = await IoTModel.findAll({
order: [['createdAt', 'DESC']],
limit: 1,
order: [['createdAt', 'DESC']]
});
return latestData;
}