var express = require( "express" ), weather = require( "./routes/weather.js" ), mongoose = require( "mongoose" ), Cache = require( "./models/Cache" ), CronJob = require( "cron" ).CronJob, port = process.env.PORT || 3000, app = express(); if ( !process.env.PORT ) { require( "dotenv" ).load(); } // Connect to local MongoDB instance mongoose.connect( "localhost" ); // If the database connection cannot be established, throw an error mongoose.connection.on( "error", function() { console.error( "MongoDB Connection Error. Please make sure that MongoDB is running." ); } ); // Handle requests matching /weatherID.py where ID corresponds to the // weather adjustment method selector. // This endpoint is considered deprecated and supported for prior firmware app.get( /weather(\d+)\.py/, weather.getWeather ); // Handle 404 error app.use( function( req, res ) { res.status( 404 ); res.send( "Error: Request not found" ); } ); // Start listening on the service port app.listen( port, "127.0.0.1", function() { console.log( "OpenSprinkler Weather Service now listening on port %s", port ); } ); // Schedule a cronjob daily to consildate the weather cache data, runs daily new CronJob( "0 0 0 * * *", function() { // Find all records in the weather cache Cache.find( {}, function( err, records ) { // Cycle through each record records.forEach( function( record ){ // If the record contains any unaveraged data, then process the record if ( record.currentHumidityCount > 0 ) { // Average the humidity by dividing the total over the total data points collected record.yesterdayHumidity = record.currentHumidityTotal / record.currentHumidityCount; // Reset the current humidity data for the new day record.currentHumidityTotal = 0; record.currentHumidityCount = 0; // Save the record in the database record.save(); } } ); } ); }, null, true, "UTC" );