UNPKG

mongo-john

Version:

Simple and powerful Big Data and IoT, this API combines the power of MongoDB (with mongoose) and JhonnyFive

629 lines (595 loc) 14.5 kB
'use strict'; var mongoose = require('mongoose'), five = require('johnny-five'); var Schema = mongoose.Schema; //plugins function timestamp(schema, settings) { if(settings && settings.timestamp == false) { next(); } else{ schema.add({ timestamp: Date }); schema.pre('save', function (next) { this.timestamp = Date.now(); next(); }); } } var AccelerometerSchema = new Schema({ id: { type: String, required: false }, zeroV: { type: Number, required: false }, pitch: { type: Number, required: false }, roll: { type: Number, required: false }, x: { type: Number, required: false }, y: { type: Number, required: false }, z: { type: Number, required: false }, acceleration: { type: Number, required: false }, inclination: { type: Number, required: false }, orientation: { type: Number, required: false } }); AccelerometerSchema.plugin(timestamp); var Accelerometer = mongoose.model('Accelerometer', AccelerometerSchema); var ThermometerSchema = new Schema({ id: { type: String, required: false }, celsius: { type: Number, required: false }, fahrenheit: { type: Number, required: false }, kelvin: { type: Number, required: false } }); ThermometerSchema.plugin(timestamp); var Thermometer = mongoose.model('Thermometer', ThermometerSchema); var GyroSchema = new Schema({ id: { type: String, required: false }, isCalibrated: { type: Boolean, required: false }, pitch: { rate: Number, angle: Number, required: false }, roll: { rate: Number, angle: Number, required: false }, yaw: { rate: Number, angle: Number, required: false }, rate: { x: Number, y: Number, z: Number, required: false }, x: { type: Number, required: false }, y: { type: Number, required: false }, z: { type: Number, required: false } }); GyroSchema.plugin(timestamp); var Gyro = mongoose.model('Gyro', GyroSchema); var AltimeterSchema = new Schema({ id:{ type: String, required: false }, feet: { type: Number, required: false }, meters: { type: Number, required: false }, }); AltimeterSchema.plugin(timestamp); var Altimeter = mongoose.model('Altimeter', AltimeterSchema); var BarometerSchema = new Schema({ id:{ type: String, required: false }, pressure: { type: Number, required: false }, controller: { type: String, required: false } }); BarometerSchema.plugin(timestamp); var Barometer = mongoose.model('Barometer', BarometerSchema); var CompassSchema = new Schema({ id:{ type: String, required: false }, raw: { x: {type: Number}, y: {type: Number}, z: {type: Number}, required: false }, heading: { type: Number, required: false }, bearing: { point: { type: String, required: false }, abbr: { type: String, required: false }, low: { type: Number, required: false }, mid: { type: Number, required: false }, high: { type: Number, required: false } } }); CompassSchema.plugin(timestamp); var Compass = mongoose.model('Compass', CompassSchema); var ProximitySchema = new Schema({ id:{ type: String, required: false }, centimeters: { type: Number, required: false }, inches: { type: Number, required: false } }); ProximitySchema.plugin(timestamp); var Proximity = mongoose.model('Proximity', ProximitySchema); var RelaySchema = new Schema({ id:{ type: String, required: false }, isOn: { type: Boolean, required: false }, type: { type: String, required: false } }); RelaySchema.plugin(timestamp); var Relay = mongoose.model('Relay', RelaySchema); var GPSSchema = new Schema({ id:{ type: String, required: false }, latitude: { type: Number, required: false }, longitude: { type: Number, required: false }, altitude: { type: Number, required: false }, sat: { type: String, required: false }, course: { type: Number, required: false }, speed: { type: Number, required: false }, time: { type: Number, required: false } }); GPSSchema.plugin(timestamp); var GPS = mongoose.model('GPS', GPSSchema); var ServoSchema = new Schema({ id:{ type: String, required: false }, pin: { type: Number, required: false }, range: { type: Number, required: false }, invert: { type: Boolean, required: false }, history: { type: [Number], required: false }, interval: { type: Number, required: false }, isMoving: { type: Number, required: false }, last: { type: Number, required: false }, position: { type: Number, required: false }, value: { type: Number, required: false }, startAt: { type: Number, required: false } }); ServoSchema.plugin(timestamp); var Servo = mongoose.model('Servo', ServoSchema); var JoystickSchema = new Schema({ id:{ type: String, required: false }, x: { type: Number, required: false }, y: { type: Number, required: false } }); JoystickSchema.plugin(timestamp); var Joystick = mongoose.model('Joystick', JoystickSchema); var LightSchema = new Schema({ id:{ type: String, required: false }, pin: { type: Number, required: false }, threshold: { type: Number, required: false }, value: { type: Number, required: false }, level: { type: Number, required: false } }); LightSchema.plugin(timestamp); var Light = mongoose.model('Light', LightSchema); var HygrometerSchema = new Schema({ id:{ type: String, required: false }, relativeHumidity: { type: Number, required: false } }); HygrometerSchema.plugin(timestamp); var Hygrometer = mongoose.model('Hygrometer', HygrometerSchema); var MotionSchema = new Schema({ id:{ type: String, required: false }, pin: { type: Number, required: false }, value: { type: Number, required: false }, detectedMotion: { type: Boolean, required: false }, isCalibrated: { type: Boolean, required: false } }); MotionSchema.plugin(timestamp); var Motion = mongoose.model('Motion', MotionSchema); //Animation segment var SegmentSchema = new Schema({ id:{ type: String, required: false }, duration:{ type: Number, required: false }, cuePoints:{ type: [Number], min: 0.0, max: 1.0, required: false }, keyFrames:{ type: [Schema.Types.Mixed], required: false }, easing:{ type: String, required: false }, loop:{ type: Boolean, required: false }, loopback:{ type: Number, required: false }, metronomic:{ type: Boolean, required: false }, progress:{ type: Number, required: false }, currentSpeed:{ type: Number, required: false }, fps:{ type: Number, required: false } }); SegmentSchema.plugin(timestamp); var Segment = mongoose.model('Segment', SegmentSchema); var SensorSchema = new Schema({ id:{ type: String, required: false }, pin: { type: Number, required: false }, threshold: { type: Number, required: false }, boolean: { type: Boolean, required: false }, raw: { type: Number, required: false }, analog: { type: Number, required: false }, constrained: { type: Number, required: false }, value: { type: Number, required: false } }); SensorSchema.plugin(timestamp); var Sensor = mongoose.model('Sensor', SensorSchema); /* * Creates a accelerometer snapshot in mongodb from a given instance http://johnny-five.io/api/accelerometer/ */ var accelerometer = function(accelerometer) { var instance = new Accelerometer({id: accelerometer.id,zeroV: accelerometer.zeroV,pitch: accelerometer.pitch,roll: accelerometer.roll,x: accelerometer.x,y: accelerometer.y,z: accelerometer.z,acceleration: accelerometer.acceleration,inclination: accelerometer.inclination,orientation: accelerometer.orientation}); instance.save(function(err) { if(err) console.log("Error: " + err); }); }; /* * Creates a thermometer snapshot in mongodb from a given instance http://johnny-five.io/api/thermometer/ */ var thermometer = function(thermometer) { var instance = new Thermometer({id: thermometer.id,celsius: thermometer.celsius,fahrenheit: thermometer.fahrenheit,kelvin: thermometer.kelvin}); instance.save(function(err) { if(err) console.log("Error: " + err); }); }; /* * Creates a gyroscope snapshot in mongodb from a given instance http://johnny-five.io/api/gyro/ */ var gyro = function(gyro) { var instance = new Gyro({id: gyro.id,isCalibrated: gyro.isCalibrated,pitch: gyro.pitch,roll: gyro.roll,yaw: gyro.yaw,rate: gyro.rate,x: gyro.x,y: gyro.y,z: gyro.z }); instance.save(function(err) { if(err) console.log("Error: " + err); }); }; /* * Creates an altimeter snapshot in mongodb from a given instance http://johnny-five.io/api/altimeter/ */ var altimeter = function(altimeter) { var instance = new Altimeter({id: altimeter.id, feet: altimeter.feet, meters: altimeter.meters }); instance.save(function(err) { if(err) console.log("Error: " + err); }); }; /* * Creates a barometer snapshot in mongodb from a given instance http://johnny-five.io/api/barometer/ */ var barometer = function(barometer) { var instance = new Barometer({id: barometer.id, pressure: barometer.pressure, controller: barometer.controller }); instance.save(function(err) { if(err) console.log("Error: " + err); }); }; /* * Creates a compass snapshot in mongodb from a given instance http://johnny-five.io/api/compass/ */ var compass = function(compass) { var instance = new Barometer({id: compass.id, raw: { x: compass.raw.x, y: compass.raw.y, z: compass.raw.z}, heading: compass.heading, bearing: { point: compass.bearing.point, abbr: compass.bearing.abbr, low: compass.bearing.low, mid: compass.bearing.mid, high: compass.bearing.high }}); instance.save(function(err) { if(err) console.log("Error: " + err); }); }; /* * Creates a proximity snapshot in mongodb from a given instance http://johnny-five.io/api/proximity/ */ var proximity = function(proximity) { var instance = new Proximity({id: proximity.id, centimeters: proximity.centimeters, inches: proximity.inches}); instance.save(function(err) { if(err) console.log("Error: " + err); }); }; /* * Creates a relay snapshot in mongodb from a given instance http://johnny-five.io/api/relay/ */ var relay = function(relay) { var instance = new Relay({id: relay.id, isOn: relay.isOn, type: relay.type}); instance.save(function(err) { if(err) console.log("Error: " + err); }); }; /////// /* * Creates a joystick snapshot in mongodb from a given instance http://johnny-five.io/api/joystick/ */ var joystick = function(joystick) { var instance = new Joystick({id: joystick.id, x: joystick.x, y: joystick.y}); instance.save(function(err) { if(err) console.log("Error: " + err); }); }; exports.save = function(instance, settings){ switch(instance.constructor){ case five.Accelerometer: accelerometer(instance); break; case five.Thermometer: thermometer(instance); break; case five.Gyro: gyro(instance); break; case five.Altimeter: altimeter(instance); break; case five.Barometer: barometer(instance); break; case five.Compass: compass(instance); break; case five.Proximity: proximity(instance); break; case five.Relay: relay(instance); break; case five.Joystick: joystick(instance); break; default: console.log("Class type of " + instance.constructor + " not found"); break; } }