Exemplo n.º 1
0
        public static int Main(string[] args)
        {
            Log.Register(new ConsoleOutEventLog(80));
            Log.Information("Initializing application...");

            HttpSocketClient.RegisterHttpProxyUse(false, false);                // Don't look for proxies.

            DB.BackupConnectionString = "Data Source=sensor.db;Version=3;";
            DB.BackupProviderName     = "Clayster.Library.Data.Providers.SQLiteServer.SQLiteServerProvider";
            db = DB.GetDatabaseProxy("TheSensor");

            Console.CancelKeyPress += (object sender, ConsoleCancelEventArgs e) =>
            {
                e.Cancel = true;
                executionLed.Low();
            };

            // Initializing hardware and retrieving current sensor values

            try
            {
                tmp102.Configure(false, TexasInstrumentsTMP102.FaultQueue.ConsecutiveFaults_6, TexasInstrumentsTMP102.AlertPolarity.AlertActiveLow,
                                 TexasInstrumentsTMP102.ThermostatMode.ComparatorMode, false, TexasInstrumentsTMP102.ConversionRate.Hz_1, false);

                temp         = (short)tmp102.ReadTemperatureRegister();
                temperatureC = temp / 256.0;

                for (int i = 0; i < 10; i++)
                {
                    tempAvgWindow [i] = temp;
                }

                sumTemp = temp * 10;
            } catch (Exception ex)
            {
                Log.Exception(ex);

                sumTemp      = 0;
                temperatureC = 0;
                errorLed.High();
            }

            try
            {
                adc.Configure(true, false, false, false, false, false);

                light        = adc.ReadRegistersBinary() [0];
                lightPercent = (100.0 * light) / 0x0fff;

                for (int i = 0; i < 10; i++)
                {
                    lightAvgWindow [i] = light;
                }

                sumLight = light * 10;
            } catch (Exception ex)
            {
                Log.Exception(ex);

                sumLight     = 0;
                lightPercent = 0;
                errorLed.High();
            }

            // Loading historical Sensor Values

            Log.Information("Loading Minute Values.");
            perMinute.AddRange(Record.LoadRecords(Rank.Minute));

            Log.Information("Loading Hour Values.");
            perHour.AddRange(Record.LoadRecords(Rank.Hour));

            Log.Information("Loading Day Values.");
            perDay.AddRange(Record.LoadRecords(Rank.Day));

            Log.Information("Loading Month Values.");
            perMonth.AddRange(Record.LoadRecords(Rank.Month));

            // Resuming average calculations

            int      Pos         = perSecond.Count;
            DateTime CurrentTime = DateTime.Now;
            DateTime Timestamp;

            while (Pos-- > 0)
            {
                Record Rec = perSecond [Pos];
                Timestamp = Rec.Timestamp;
                if (Timestamp.Minute == CurrentTime.Minute && Timestamp.Hour == CurrentTime.Hour && Timestamp.Date == CurrentTime.Date)
                {
                    sumSeconds += Rec;
                    nrSeconds++;
                }
                else
                {
                    break;
                }
            }

            Pos = perMinute.Count;
            while (Pos-- > 0)
            {
                Record Rec = perMinute [Pos];
                Timestamp = Rec.Timestamp;
                if (Timestamp.Hour == CurrentTime.Hour && Timestamp.Date == CurrentTime.Date)
                {
                    sumMinutes += Rec;
                    nrMinutes++;
                }
                else
                {
                    break;
                }
            }

            Pos = perHour.Count;
            while (Pos-- > 0)
            {
                Record Rec = perHour [Pos];
                Timestamp = Rec.Timestamp;
                if (Timestamp.Date == CurrentTime.Date)
                {
                    sumHours += Rec;
                    nrHours++;
                }
                else
                {
                    break;
                }
            }

            Pos = perDay.Count;
            while (Pos-- > 0)
            {
                Record Rec = perDay [Pos];
                Timestamp = Rec.Timestamp;
                if (Timestamp.Month == CurrentTime.Month && Timestamp.Year == CurrentTime.Year)
                {
                    sumDays += Rec;
                    nrDays++;
                }
                else
                {
                    break;
                }
            }

            // Sampling of new Sensor Values

            Timer Timer = new Timer(SampleSensorValues, null, 1000 - DateTime.Now.Millisecond, 1000);                   // Every second.

            // HTTP Interface

            HttpServer HttpServer = new HttpServer(80, 10, true, true, 1);

            Log.Information("HTTP Server receiving requests on port " + HttpServer.Port.ToString());

            HttpServer.Register("/", HttpGetRoot, false);                                               // Synchronous, no authentication
            HttpServer.Register("/html", HttpGetHtml, false);                                           // Synchronous, no authentication
            HttpServer.Register("/historygraph", HttpGetHistoryGraph, false);                           // Synchronous, no authentication
            HttpServer.Register("/xml", HttpGetXml, false);                                             // Synchronous, no authentication
            HttpServer.Register("/json", HttpGetJson, false);                                           // Synchronous, no authentication
            HttpServer.Register("/turtle", HttpGetTurtle, false);                                       // Synchronous, no authentication
            HttpServer.Register("/rdf", HttpGetRdf, false);                                             // Synchronous, no authentication

            // HTTPS interface

            // Certificate must be a valid P12 (PFX) certificate file containing a private key.
            // X509Certificate2 Certificate = new X509Certificate2 ("Certificate.pfx", "PASSWORD");
            // HttpServer HttpsServer = new HttpServer (443, 10, true, true, 1, true, false, Certificate);
            //
            // foreach (IHttpServerResource Resource in HttpServer.GetResources())
            //    HttpsServer.Register (Resource);
            //
            // Log.Information ("HTTPS Server receiving requests on port " + HttpsServer.Port.ToString ());

            // Main loop

            Log.Information("Initialization complete. Application started...");

            try
            {
                while (executionLed.Value)
                {
                    System.Threading.Thread.Sleep(1000);
                }
            } catch (Exception ex)
            {
                Log.Exception(ex);
                executionLed.Low();
            } finally
            {
                Log.Information("Terminating application.");
                Log.Flush();
                Log.Terminate();
                Timer.Dispose();
                HttpServer.Dispose();
                //HttpsServer.Dispose ();
                executionLed.Dispose();
                measurementLed.Dispose();
                errorLed.Dispose();
                networkLed.Dispose();
                motion.Dispose();
                i2cBus.Dispose();
            }

            return(0);
        }