116 lines
3.3 KiB
JavaScript
116 lines
3.3 KiB
JavaScript
const env = process.env.NODE_ENV || 'development';
|
|
console.log("ENV: %s", 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 mongoose = require('mongoose');
|
|
const Schema = mongoose.Schema;
|
|
|
|
let DeviceMessageSchema = new Schema({
|
|
_id: {type: Number, required: true},
|
|
device_id: {type: String, required: true, max: 100}
|
|
});
|
|
|
|
let DevicesSchema = new Schema({
|
|
id: {type: Number, required: true},
|
|
url: {type: String, required: true, max: 100}
|
|
});
|
|
|
|
|
|
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', {
|
|
id: { type: Sequelize.INTEGER, autoIncrement: true, primaryKey: true },
|
|
name: Sequelize.STRING,
|
|
baseurl: Sequelize.TEXT,
|
|
apikey: Sequelize.TEXT,
|
|
//config: Sequelize.JSON,
|
|
lastseen: Sequelize.DATE
|
|
});
|
|
|
|
var DeviceMessage = sqlz.define('devicemessage', {
|
|
id: { type: Sequelize.INTEGER, autoIncrement: true, primaryKey: true },
|
|
device_id: { type: Sequelize.INTEGER, allowNull: false},
|
|
//id,"device_id","field_name","field_value","timestamp"
|
|
field_name: { type: Sequelize.STRING(120), allowNull: false},
|
|
field_value: { type: Sequelize.TEXT, allowNull: false},
|
|
timestamp: { type: Sequelize.DATE, allowNull: false},
|
|
// createdAt: {
|
|
// type: Sequelize.DATE,
|
|
// allowNull: false,
|
|
// defaultValue: Sequelize.literal('CURRENT_TIMESTAMP'),
|
|
// },
|
|
}
|
|
,{
|
|
timestamps: false, // Disable automatic timestamp management
|
|
}
|
|
);
|
|
|
|
DeviceMessage.GetByName = function (name, days)
|
|
{
|
|
var User = sqlz.User;
|
|
User.find({
|
|
where: {
|
|
field_name: name,
|
|
timestamp: {$gte: new Date()}
|
|
}
|
|
}).then(function(user)
|
|
{
|
|
if(!user)
|
|
{
|
|
error.status = 500; error.message = "ERROR_INVALID_USER"; error.code = 301;
|
|
return next(error);
|
|
}
|
|
|
|
// Build the profile from the user object
|
|
profile = {
|
|
"firstName": user.firstName,
|
|
"lastName": user.lastName,
|
|
"emailAddress": user.emailAddress
|
|
}
|
|
response.status(200).send(profile);
|
|
});
|
|
}
|
|
|
|
var DeviceCommand = sqlz.define("command", {
|
|
device: { type: Sequelize.STRING},
|
|
command: {type: Sequelize.TEXT},
|
|
info: {type: Sequelize.STRING},
|
|
ac_power: Sequelize.BOOLEAN,
|
|
ac_mode: Sequelize.ENUM('Auto', 'Heat', 'Cool', "Fan"),
|
|
ac_fan: Sequelize.ENUM('Auto', 'Low', 'Med', "Hi"),
|
|
ac_temp: Sequelize.FLOAT,
|
|
ac_turbo: Sequelize.BOOLEAN,
|
|
ac_swing: Sequelize.BOOLEAN,
|
|
ac_display: Sequelize.BOOLEAN,
|
|
ac_econo: Sequelize.BOOLEAN,
|
|
ac_health: Sequelize.BOOLEAN,
|
|
|
|
});
|
|
|
|
sqlz.sync(
|
|
//{ force: true }
|
|
)
|
|
.then(() => {
|
|
console.log(`Database & tables created!`)
|
|
})
|
|
|
|
module.exports = {
|
|
init: function() {
|
|
//console.log(DeviceCommand.rawAttributes.states.values);
|
|
sqlz.sync();
|
|
},
|
|
sqlz,
|
|
Device,
|
|
DeviceCommand,
|
|
DeviceMessage
|
|
//etc
|
|
} |