better config implementation from ENV or json file.

using new environment;
params passed as docker-compose params
This commit is contained in:
Dobromir Popov
2021-08-22 23:53:00 +03:00
parent 28ccaba895
commit 913b1a4f32
11 changed files with 11026 additions and 1264 deletions

View File

@@ -1,7 +1,20 @@
FROM node:8 FROM node:10
# set user
#RUN groupadd -r nodejs && useradd -m -r -g -s /bin/bash nodejs nodejs
#USER nodejs
WORKDIR /app WORKDIR /app
COPY package*.json ./ COPY package*.json ./
RUN npm install RUN npm install
COPY . . COPY . .
ENV NODE_ENV mitko
CMD npm start CMD npm start
# CMD [“dumb-init”, “node”, dht.js”]
# CMD ["npm","run", "pm2"]
EXPOSE 2080 EXPOSE 2080

View File

@@ -1,7 +1,6 @@
var records = [ var records = [
{ id: 1, username: 'me', password: 'A23', displayName: 'admin', emails: [ { value: 'jack@example.com' } ] } { id: 1, username: 'me', password: 'A23', displayName: 'admin', emails: [ { value: 'jack@example.com' } ] }
, { id: 2, username: 'db', password: 'doby', displayName: 'DB', emails: [ { value: 'jill@example.com' } ] } , { id: 2, username: 'db', password: 'doby', displayName: 'DB', emails: [ { value: 'jill@example.com' } ] }
, { id: 3, username: 'popov', password: 'Zelenakrav@', displayName: 'Doby', emails: [ { value: 'db@example.com' } ] }
]; ];
exports.findById = function(id, cb) { exports.findById = function(id, cb) {

42
dht.js
View File

@@ -1,5 +1,17 @@
// ./src/index.js // ./src/index.js
var config = require('./src/setup_const');
const env = process.env.NODE_ENV || 'development';
console.log("ENV: %s", env);
const config = require(__dirname + '/config/config.json')[env];
(function() {
var exLog = console.log;
console.log = function(msg) {
exLog.apply(this, arguments);
fs.appendFileSync(config.logFile, msg +"\r\n");
}
})();
// importing the dependencies // importing the dependencies
const util = require('util'); const util = require('util');
@@ -83,7 +95,7 @@ app.post('/accontrol',
//break it //break it
//code = code.substring(150); //code = code.substring(150);
//console.log("RAW: " + code); //console.log("RAW: " + code);
if(ir.SendCmd("http://"+AcIP, code)) if(ir.SendCmd("http://"+config.AcIP, code))
{ {
console.log("OK. Temp: " + req.body.temp); console.log("OK. Temp: " + req.body.temp);
BroadcastWS(ac.Tlc112.GetState()); BroadcastWS(ac.Tlc112.GetState());
@@ -120,16 +132,19 @@ app.use('/waterTest',function(req, res){
console.log("Watering TEST for: " + req.params); console.log("Watering TEST for: " + req.params);
}); });
config.gardenIP = process.env.GARDEN_IP || config.gardenIP
app.use('/water',function(req, res){ app.use('/water',function(req, res){
var time = req.query.t; var time = req.query.t;
console.log("Watering cmd for: " + time); console.log("Watering cmd for: " + time);
request('http://'+config.GardenIP+'/tools?cmd=event,manualwatering='+ time, { json: true }, (err, res, body) => { request('http://'+config.gardenIP+'/tools?cmd=event,manualwatering='+ time, { json: true }, (err, res, body) => {
if (err) { return console.log("Problem watering: " + err); } if (err) { return console.log("Problem watering: " + err); }
console.log("Watering cmd successfully sent!"); console.log("Watering cmd successfully sent!");
}); });
}); });
app.use('/waterStop',function(req, res){ app.use('/waterStop',function(req, res){
request('http://'+config.GardenIP+'/tools?cmd=event,stopwatering', { json: true }, (err, res, body) => { request('http://'+config.gardenIP+'/tools?cmd=event,stopwatering', { json: true }, (err, res, body) => {
if (err) { return console.log("Problem watering: " + err); } if (err) { return console.log("Problem watering: " + err); }
console.log("STOP watering cmd sent!"); console.log("STOP watering cmd sent!");
}); });
@@ -161,6 +176,7 @@ app.put('/device/:device_id/:field_name/:field_value', (req, res) => {
//!Startup //!Startup
var wws;
if(credentials){ if(credentials){
var httpsServer = https.createServer(credentials, app); var httpsServer = https.createServer(credentials, app);
httpsServer.listen(2443, () => { httpsServer.listen(2443, () => {
@@ -175,6 +191,7 @@ else
console.log('HTTP server listening on port 2080'); console.log('HTTP server listening on port 2080');
}); });
wss = new WebSocket.Server({ port: 2081 });//not secure wss = new WebSocket.Server({ port: 2081 });//not secure
console.log('WebSocket server listening on port 2081');
} }
// // # ┌────────────── second (optional) // // # ┌────────────── second (optional)
@@ -194,25 +211,14 @@ else
//db.devicemessages.getFromDht('http://192.168.1.126/json'); //db.devicemessages.getFromDht('http://192.168.1.126/json');
wss.on('connection', ws => { wss.on('connection', wss => {
ws.on('message', message => { wss.on('message', message => {
console.log('Received message => ${message}'); console.log('Received message => ${message}');
}); });
ws.send('ho!'); wss.send('ho!');
}); });
const env = process.env.NODE_ENV || 'development';
const cfg = require(__dirname + '/config/config.json')[env];
(function() {
var exLog = console.log;
console.log = function(msg) {
exLog.apply(this, arguments);
fs.appendFileSync(cfg.logFile, msg +"\r\n");
}
})();
// const {keys} = Object; // const {keys} = Object;
// const {Console} = console; // const {Console} = console;

View File

@@ -5,14 +5,20 @@ services:
build: . build: .
environment: environment:
- DATABASE_HOST=node-mysql - DATABASE_HOST=node-mysql
- DATABASE_NAME=iot
- DATABASE_USER=root
- DATABASE_PASS=mitko2021
- GARDEN_IP=192.168.0.187
depends_on: depends_on:
- node-mysql - node-mysql
restart: always restart: always
ports: ports:
- 2080:2080 - 2081:2080
node-mysql: node-mysql:
build: ./mysql build: ./mysql
restart: always restart: always
environment: environment:
MYSQL_DATABASE: iot
MYSQL_ROOT_PASSWORD: mitko2021 MYSQL_ROOT_PASSWORD: mitko2021
MYSQL_DATABASE: iot MYSQL_USER: iot
MYSQL_PASSWORD: mitko2021

View File

@@ -5,6 +5,7 @@ const path = require('path');
const Sequelize = require('sequelize'); const Sequelize = require('sequelize');
const basename = path.basename(__filename); const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development'; const env = process.env.NODE_ENV || 'development';
console.log("ENV: %s", env);
const config = require(__dirname + '/../config/config.json')[env]; const config = require(__dirname + '/../config/config.json')[env];
const db = {}; const db = {};
@@ -12,6 +13,7 @@ let sequelize;
if (config.use_env_variable) { if (config.use_env_variable) {
sequelize = new Sequelize(process.env[config.use_env_variable], config); sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else { } else {
console.log("Sequelize: using config.json configuration.");
sequelize = new Sequelize(config.database, config.username, config.password, config); sequelize = new Sequelize(config.database, config.username, config.password, config);
} }

12158
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -4,7 +4,8 @@
"description": " test api for IOT devices", "description": " test api for IOT devices",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
"dev": "nodemon dht.js", "pm2": "pm2 start ecosystem.config.js --no-daemon",
"dev": "nodemon index.js",
"start": "node index.js" "start": "node index.js"
}, },
"repository": { "repository": {
@@ -37,6 +38,7 @@
"mongoose": "^5.9.19", "mongoose": "^5.9.19",
"morgan": "^1.10.0", "morgan": "^1.10.0",
"mosca": "^2.8.3", "mosca": "^2.8.3",
"jsonschema": "1.2.6",
"mqtt": "^4.1.0", "mqtt": "^4.1.0",
"mysql": "^2.18.1", "mysql": "^2.18.1",
"mysql2": "^2.1.0", "mysql2": "^2.1.0",

View File

@@ -1,6 +1,10 @@
const env = process.env.NODE_ENV || 'development'; const env = process.env.NODE_ENV || 'development';
console.log("ENV: %s", env);
const config = require(__dirname + '/../../config/config.json')[env]; const config = require(__dirname + '/../../config/config.json')[env];
config.host = process.env.DATABASE_HOST || config.host || '127.0.0.1';
config.database = process.env.DATABASE_NAME || config.database || 'iot';
config.username = process.env.DATABASE_USER || config.username;
config.password = process.env.DATABASE_PASS || config.password;
const Sequelize = require("sequelize"); const Sequelize = require("sequelize");
const mongoose = require('mongoose'); const mongoose = require('mongoose');
@@ -17,7 +21,12 @@ let DevicesSchema = new Schema({
}); });
var sqlz = new Sequelize(config.database, config.username, config.password,{dialect: config.dialect, logging: false}); console.log('sqlz: Checking config sources: config.host : %s', config.host );
console.log('sqlz: Checking config sources: config.database : %s', config.database );
var sqlz = new Sequelize(config.database, config.username, config.password,
{ dialect: config.dialect,
host: config.host,
logging: false});
var Device = sqlz.define('device', { var Device = sqlz.define('device', {
id: { type: Sequelize.INTEGER, autoIncrement: true, primaryKey: true }, id: { type: Sequelize.INTEGER, autoIncrement: true, primaryKey: true },
name: Sequelize.STRING, name: Sequelize.STRING,

View File

@@ -1,5 +1,5 @@
//devicemessages //devicemessages
var mysql = require('mysql'); var mysql = require('mysql2');
// const fs = require('fs'); // const fs = require('fs');
@@ -7,22 +7,24 @@ var mysql = require('mysql');
// const Sequelize = require('sequelize'); // const Sequelize = require('sequelize');
// const basename = path.basename(__filename); // const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development'; const env = process.env.NODE_ENV || 'development';
console.log("ENV: %s", env);
const config = require(__dirname + '/../../config/config.json')[env]; const config = require(__dirname + '/../../config/config.json')[env];
console.log('DB: Checking config sources: ');
console.log('DB: Checking config sources: process.env.DATABASE_HOST: %s', process.env.DATABASE_HOST);
console.log('DB: Checking config sources: config.host : %s', config.host );
console.log('DB: Checking config sources: process.env.DATABASE_NAME: %s', process.env.DATABASE_NAME);
console.log('DB: Checking config sources: config.database : %s', config.database );
var pool = mysql.createPool({ var pool = mysql.createPool({
connectionLimit : 20, connectionLimit : 20,
host : process.env.DATABASE_HOST || config.host || '127.0.0.1', host : process.env.DATABASE_HOST || config.host || '127.0.0.1',
user : process.env.DATABASE_USER || config.username, port : process.env.DATABASE_PORT || config.port || '3306',
password : process.env.DATABASE_PASS || config.password, user : process.env.DATABASE_USER || config.username,
database : process.env.DATABASE_DB || config.database password : process.env.DATABASE_PASS || config.password,
database : process.env.DATABASE_NAME || config.database || 'iot'
}); });
// var con = mysql.createConnection({
// host : 'localhost',
// user : 'iot',
// password : '!iot_popovi',
// database : 'iot'
// });
//const got = require('got'); //const got = require('got');
pool.on('acquire', function (connection) { pool.on('acquire', function (connection) {

View File

@@ -1,14 +1,17 @@
var mysql = require('mysql'); var mysql = require('mysql2');
const env = process.env.NODE_ENV || 'development'; const env = process.env.NODE_ENV || 'development';
console.log("ENV: %s", env);
const config = require(__dirname + '/../../config/config.json')[env]; const config = require(__dirname + '/../../config/config.json')[env];
var pool = mysql.createPool({ var pool = mysql.createPool({
connectionLimit : 20, connectionLimit : 20,
host : config.host, host : process.env.DATABASE_HOST || config.host || '127.0.0.1',
user : config.username, port : process.env.DATABASE_PORT || config.port || '3306',
password : config.password, user : process.env.DATABASE_USER || config.username,
database : config.database password : process.env.DATABASE_PASS || config.password,
database : process.env.DATABASE_NAME || config.database || 'iot'
}); });
pool.on('acquire', function (connection) { pool.on('acquire', function (connection) {
console.log('Connection %d acquired', connection.threadId); console.log('Connection %d acquired', connection.threadId);

View File

@@ -1,10 +1,12 @@
//dependencies //dependencies
var config = require('./setup_const');
var db = require('./db'); var db = require('./db');
const env = process.env.NODE_ENV || 'development';
console.log("ENV: %s", env);
const config = require(__dirname + '/../config/config.json')[env];
var mosca = require('mosca'); var mosca = require('mosca');
var mqtt_settings = { var mqtt_settings = {
port:1883 port:1884
} }
if(typeof credentials!=='undefined') if(typeof credentials!=='undefined')
@@ -24,7 +26,7 @@ mqtt.on('clientConnected', function(){
}); });
var mqtt = require('mqtt'); var mqtt = require('mqtt');
var mqtt_client = mqtt.connect('mqtt://'+ config.HomeControllerMQTT); var mqtt_client = mqtt.connect('mqtt://'+ config.mqttIP);
mqtt_client.on('connect', function () { mqtt_client.on('connect', function () {
console.log("MQTT connected. subscribing to topics"); console.log("MQTT connected. subscribing to topics");
mqtt_client.subscribe('tele/tasmota/STATE'); mqtt_client.subscribe('tele/tasmota/STATE');