public static void Main(string[] args) { Log.Register(new ConsoleOutEventLog(80)); Log.Information("Initializing application..."); HttpSocketClient.RegisterHttpProxyUse(false, false); // Don't look for proxies. Console.CancelKeyPress += (object sender, ConsoleCancelEventArgs e) => { e.Cancel = true; executing = false; }; Log.Information("Initialization complete. Application started..."); try { MonitorHttp(); } catch (Exception ex) { Log.Exception(ex); } finally { Log.Information("Terminating application."); Log.Flush(); Log.Terminate(); } }
private static void GetPhotos(object State) { object[] P = (object[])State; int i = (int)P [0]; IUPnPService Service = (IUPnPService)P [1]; string ContentType = (string)P [2]; string Extension = (string)P [3]; MailMessage Msg = (MailMessage)P [4]; ManualResetEvent Done = (ManualResetEvent)P [5]; DateTime Next = DateTime.Now; try { UPnPAction GetDefaultImageURL = Service ["GetDefaultImageURL"]; Variables v = new Variables(); GetDefaultImageURL.Execute(v); string ImageURL = (string)v ["RetImageURL"]; ParsedUri ImageURI = Web.ParseUri(ImageURL); HttpResponse Response; int ms; int j; using (HttpSocketClient Client = new HttpSocketClient(ImageURI.Host, ImageURI.Port, ImageURI.UriScheme is HttpsUriScheme, ImageURI.Credentials)) { Client.ReceiveTimeout = 20000; for (j = 1; j <= 3; j++) { ms = (int)System.Math.Round((Next - DateTime.Now).TotalMilliseconds); if (ms > 0) { Thread.Sleep(ms); } Response = Client.GET(ImageURI.PathAndQuery, ContentType); Msg.EmbedObject("cam" + (i + 1).ToString() + "img" + j.ToString() + "." + Extension, ContentType, Response.Data); Log.Information("Click.", EventLevel.Minor, Service.Device.FriendlyName); Next = Next.AddSeconds(5); } } } catch (ThreadAbortException) { Thread.ResetAbort(); } catch (Exception ex) { Log.Exception(ex); } finally { Done.Set(); } }
private object TakeSnapshot(object[] P) { foreach (Camera Camera in Topology.Source.GetObjects(typeof(Camera), User.AllPrivileges)) { if (!string.IsNullOrEmpty(Camera.CameraUrl) && Camera.CameraWidth > 0 && Camera.CameraHeight > 0) { Log.Information("Requesting photo.", EventLevel.Minor, Camera.Id); HttpResponse Response = HttpSocketClient.GetResource(Camera.CameraUrl); Bitmap Bmp = Response.DecodedObject as Bitmap; CamStorage.NewPhoto(Bmp); } } return(null); }
private static void GetPhotos(object State) { object[] P = (object[])State; int i = (int)P [0]; Camera Camera = (Camera)P [1]; MailMessage Msg = (MailMessage)P [2]; ManualResetEvent Done = (ManualResetEvent)P [3]; DateTime Next = DateTime.Now; try { HttpResponse Response; int ms; int j; for (j = 1; j <= 3; j++) { ms = (int)System.Math.Round((Next - DateTime.Now).TotalMilliseconds); if (ms > 0) { Thread.Sleep(ms); } Log.Information("Requesting photo.", EventLevel.Minor, Camera.Id); Response = HttpSocketClient.GetResource(Camera.CameraUrl); Msg.EmbedObject("cam" + (i + 1).ToString() + "img" + j.ToString(), Response.Header.ContentType, Response.Data); Bitmap Bmp = Response.DecodedObject as Bitmap; CamStorage.NewPhoto(Bmp); Next = Next.AddSeconds(5); } } catch (ThreadAbortException) { Thread.ResetAbort(); } catch (Exception ex) { Log.Exception(ex); } finally { Done.Set(); } }
private static async Task HttpConnectExampleAsync() { var socket = Tcp.ConnectToServer("127.0.0.1", HttpConnectPort); var httpSocketClient = new HttpSocketClient(); var connectRequest = new HttpRequestMessage(new HttpMethod("CONNECT"), "http://icanhazip.com/"); var connectStream = await httpSocketClient.GetStreamAsync(socket, connectRequest); await httpSocketClient.SendRequestAsync(connectStream, connectRequest); var receiveResponse = await httpSocketClient.ReceiveResponseAsync(connectStream, connectRequest); Console.WriteLine("{0} {1}", (int)receiveResponse.StatusCode, receiveResponse.ReasonPhrase); var getRequest = new HttpRequestMessage(HttpMethod.Get, "http://icanhazip.com/"); var getStream = await httpSocketClient.GetStreamAsync(socket, getRequest); await httpSocketClient.SendRequestAsync(getStream, getRequest); var getResponse = await httpSocketClient.ReceiveResponseAsync(getStream, getRequest); Console.WriteLine("{0} {1}", (int)getResponse.StatusCode, getResponse.ReasonPhrase); Console.WriteLine((await getResponse.Content.ReadAsStringAsync()).Trim()); }
public CoordinatorProxy(Uri coordinatorUri) : base(HttpSocketClient.GetOne(coordinatorUri)) { }
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=actuator.db;Version=3;"; DB.BackupProviderName = "Clayster.Library.Data.Providers.SQLiteServer.SQLiteServerProvider"; db = DB.GetDatabaseProxy("TheActuator"); Console.CancelKeyPress += (object sender, ConsoleCancelEventArgs e) => { e.Cancel = true; executionLed.Low(); }; // HTTP Interface HttpServer HttpServer = new HttpServer(80, 10, true, true, 1); Log.Information("HTTP Server receiving requests on port " + HttpServer.Port.ToString()); HttpServer.RegisterAuthenticationMethod(new DigestAuthentication("The Actuator Realm", GetDigestUserPasswordHash)); HttpServer.RegisterAuthenticationMethod(new SessionAuthentication()); credentials = LoginCredentials.LoadCredentials(); if (credentials == null) { credentials = new LoginCredentials(); credentials.UserName = "******"; credentials.PasswordHash = CalcHash("Admin", "Password"); credentials.SaveNew(); } state = State.LoadState(); if (state == null) { state = new State(); state.SaveNew(); } else { for (int i = 0; i < 8; i++) { digitalOutputs [i].Value = state.GetDO(i + 1); } if (state.Alarm) { AlarmOn(); } else { AlarmOff(); } } HttpServer.Register("/", HttpGetRoot, HttpPostRoot, false); // Synchronous, no authentication HttpServer.Register("/credentials", HttpGetCredentials, HttpPostCredentials, false); // Synchronous, no authentication HttpServer.Register("/set", HttpGetSet, HttpPostSet, true); // Synchronous, http authentication HttpServer.Register("/xml", HttpGetXml, true); // Synchronous, http authentication HttpServer.Register("/json", HttpGetJson, true); // Synchronous, http authentication HttpServer.Register("/turtle", HttpGetTurtle, true); // Synchronous, http authentication HttpServer.Register("/rdf", HttpGetRdf, true); // Synchronous, http authentication HttpServer.Register(new WebServiceAPI(), true); // 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); // // HttpsServer.RegisterAuthenticationMethod (new DigestAuthentication ("The Actuator Realm", GetDigestUserPasswordHash)); // // 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); RemoveOldSessions(); } } catch (Exception ex) { Log.Exception(ex); executionLed.Low(); } finally { Log.Information("Terminating application."); Log.Flush(); Log.Terminate(); HttpServer.Dispose(); //HttpsServer.Dispose (); executionLed.Dispose(); foreach (DigitalOutput Output in digitalOutputs) { Output.Dispose(); } if (alarmThread != null) { alarmThread.Abort(); alarmThread = null; } } return(0); }
private static void GetPhotos (object State) { object[] P = (object[])State; int i = (int)P [0]; IUPnPService Service = (IUPnPService)P [1]; string ContentType = (string)P [2]; string Extension = (string)P [3]; MailMessage Msg = (MailMessage)P [4]; ManualResetEvent Done = (ManualResetEvent)P [5]; DateTime Next = DateTime.Now; try { UPnPAction GetDefaultImageURL = Service ["GetDefaultImageURL"]; Variables v = new Variables (); GetDefaultImageURL.Execute (v); string ImageURL = (string)v ["RetImageURL"]; ParsedUri ImageURI = Web.ParseUri (ImageURL); HttpResponse Response; int ms; int j; using (HttpSocketClient Client = new HttpSocketClient (ImageURI.Host, ImageURI.Port, ImageURI.UriScheme is HttpsUriScheme, ImageURI.Credentials)) { Client.ReceiveTimeout = 20000; for (j = 1; j <= 3; j++) { ms = (int)System.Math.Round ((Next - DateTime.Now).TotalMilliseconds); if (ms > 0) Thread.Sleep (ms); Response = Client.GET (ImageURI.PathAndQuery, ContentType); Msg.EmbedObject ("cam" + (i + 1).ToString () + "img" + j.ToString () + "." + Extension, ContentType, Response.Data); Log.Information ("Click.", EventLevel.Minor, Service.Device.FriendlyName); Next = Next.AddSeconds (5); } } } catch (ThreadAbortException) { Thread.ResetAbort (); } catch (Exception ex) { Log.Exception (ex); } finally { Done.Set (); } }
private static void MonitorHttp () { HttpSocketClient HttpClient = null; HttpResponse Response; XmlDocument Xml; Thread ControlThread; string Resource; ControlThread = new Thread (ControlHttp); ControlThread.Name = "Control HTTP"; ControlThread.Priority = ThreadPriority.Normal; ControlThread.Start (); try { while (executing) { try { if (HttpClient == null) { HttpClient = new HttpSocketClient ("192.168.0.15", 80, new DigestAuthentication ("Peter", "Waher")); HttpClient.ReceiveTimeout = 30000; HttpClient.Open (); } if (hasValues) { int NrLeds = (int)System.Math.Round ((8 * lightPercent) / 100); double LightNextStepDown = 100 * (NrLeds - 0.1) / 8; double LightNextStepUp = 100 * (NrLeds + 1) / 8; double DistDown = System.Math.Abs (lightPercent - LightNextStepDown); double DistUp = System.Math.Abs (LightNextStepUp - lightPercent); double Dist20 = System.Math.Abs (20 - lightPercent); double MinDist = System.Math.Min (System.Math.Min (DistDown, DistUp), Dist20); if (MinDist < 1) MinDist = 1; StringBuilder sb = new StringBuilder (); sb.Append ("/event/xml?Light="); sb.Append (XmlUtilities.DoubleToString (lightPercent, 1)); sb.Append ("&LightDiff="); sb.Append (XmlUtilities.DoubleToString (MinDist, 1)); sb.Append ("&Motion="); sb.Append (motion ? "1" : "0"); sb.Append ("&Timeout=25"); Resource = sb.ToString (); } else Resource = "/xml?Momentary=1&Light=1&Motion=1"; Response = HttpClient.GET (Resource); Xml = Response.Xml; if (UpdateFields (Xml)) { hasValues = true; CheckControlRules (); } } catch (Exception ex) { Log.Exception (ex.Message); HttpClient.Dispose (); HttpClient = null; } } } finally { ControlThread.Abort (); ControlThread = null; } if (HttpClient != null) HttpClient.Dispose (); }
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); }
private static void MonitorHttp() { HttpSocketClient HttpClient = null; HttpResponse Response; XmlDocument Xml; Thread ControlThread; string Resource; ControlThread = new Thread(ControlHttp); ControlThread.Name = "Control HTTP"; ControlThread.Priority = ThreadPriority.Normal; ControlThread.Start(); try { while (executing) { try { if (HttpClient == null) { HttpClient = new HttpSocketClient("192.168.0.29", 80, new DigestAuthentication("Peter", "Waher")); HttpClient.ReceiveTimeout = 30000; HttpClient.Open(); } if (hasValues) { int NrLeds = (int)System.Math.Round((8 * lightPercent) / 100); double LightNextStepDown = 100 * (NrLeds - 0.1) / 8; double LightNextStepUp = 100 * (NrLeds + 1) / 8; double DistDown = System.Math.Abs(lightPercent - LightNextStepDown); double DistUp = System.Math.Abs(LightNextStepUp - lightPercent); double Dist20 = System.Math.Abs(20 - lightPercent); double MinDist = System.Math.Min(System.Math.Min(DistDown, DistUp), Dist20); if (MinDist < 1) { MinDist = 1; } StringBuilder sb = new StringBuilder(); sb.Append("/event/xml?Light="); sb.Append(XmlUtilities.DoubleToString(lightPercent, 1)); sb.Append("&LightDiff="); sb.Append(XmlUtilities.DoubleToString(MinDist, 1)); sb.Append("&Motion="); sb.Append(motion ? "1" : "0"); sb.Append("&Timeout=25"); Resource = sb.ToString(); } else { Resource = "/xml?Momentary=1&Light=1&Motion=1"; } Response = HttpClient.GET(Resource); Xml = Response.Xml; if (UpdateFields(Xml)) { hasValues = true; CheckControlRules(); } } catch (Exception ex) { Log.Exception(ex.Message); HttpClient.Dispose(); HttpClient = null; } } } finally { ControlThread.Abort(); ControlThread = null; } if (HttpClient != null) { HttpClient.Dispose(); } }
public static void Main(string[] args) { Log.Register(new ConsoleOutEventLog(80)); Log.Information("Initializing application..."); HttpSocketClient.RegisterHttpProxyUse(false, false); // Don't look for proxies. Console.CancelKeyPress += (object sender, ConsoleCancelEventArgs e) => { e.Cancel = true; executing = false; }; // Object database setup DB.BackupConnectionString = "Data Source=controller.db;Version=3;"; DB.BackupProviderName = "Clayster.Library.Data.Providers.SQLiteServer.SQLiteServerProvider"; db = DB.GetDatabaseProxy("TheController"); // Mail setup mailSettings = MailSettings.LoadSettings(); if (mailSettings == null) { mailSettings = new MailSettings(); mailSettings.Host = "Enter mailserver SMTP host name here."; mailSettings.Port = 25; mailSettings.Ssl = false; mailSettings.From = "Enter address of sender here."; mailSettings.User = "******"; mailSettings.Password = "******"; mailSettings.Recipient = "Enter recipient of alarm mails here."; mailSettings.SaveNew(); } SmtpOutbox.Host = mailSettings.Host; SmtpOutbox.Port = mailSettings.Port; SmtpOutbox.Ssl = mailSettings.Ssl; SmtpOutbox.From = mailSettings.From; SmtpOutbox.User = mailSettings.User; SmtpOutbox.Password = mailSettings.Password; SmtpOutbox.OutboxPath = "MailOutbox"; SmtpOutbox.Start(Directory.GetCurrentDirectory()); // UPnP Interface upnpServer = new HttpServer(8080, 10, true, true, 1); Log.Information("UPnP Server receiving requests on port " + upnpServer.Port.ToString()); ssdpClient = new SsdpClient(upnpServer, 10, true, true, false, false, false, 30); stillImageCameras = new Dictionary <string, IUPnPService> (); subscriptions = new SortedDictionary <DateTime, Subscription> (); stateVariables = new Dictionary <string, Dictionary <string, string> > (); events = new UPnPEvents("/events"); upnpServer.Register(events); ssdpClient.OnUpdated += NetworkUpdated; events.OnEventsReceived += EventsReceived; // Main loop Log.Information("Initialization complete. Application started..."); try { #if USE_HTTP MonitorHttp(); #elif USE_COAP MonitorCoap(); #endif } catch (Exception ex) { Log.Exception(ex); } finally { Log.Information("Terminating application."); Log.Flush(); Log.Terminate(); SmtpOutbox.Terminate(); ssdpClient.Dispose(); upnpServer.Dispose(); } }
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=actuator.db;Version=3;"; DB.BackupProviderName = "Clayster.Library.Data.Providers.SQLiteServer.SQLiteServerProvider"; db = DB.GetDatabaseProxy("TheActuator"); Console.CancelKeyPress += (object sender, ConsoleCancelEventArgs e) => { e.Cancel = true; executionLed.Low(); }; // HTTP Interface HttpServer HttpServer = new HttpServer(80, 10, true, true, 1); int i; Log.Information("HTTP Server receiving requests on port " + HttpServer.Port.ToString()); HttpServer.RegisterAuthenticationMethod(new DigestAuthentication("The Actuator Realm", GetDigestUserPasswordHash)); HttpServer.RegisterAuthenticationMethod(new SessionAuthentication()); credentials = LoginCredentials.LoadCredentials(); if (credentials == null) { credentials = new LoginCredentials(); credentials.UserName = "******"; credentials.PasswordHash = CalcHash("Admin", "Password"); credentials.SaveNew(); } state = State.LoadState(); if (state == null) { state = new State(); state.SaveNew(); } else { for (i = 0; i < 8; i++) { digitalOutputs [i].Value = state.GetDO(i + 1); } if (state.Alarm) { AlarmOn(); } else { AlarmOff(); } } HttpServer.Register("/", HttpGetRoot, HttpPostRoot, false); // Synchronous, no authentication HttpServer.Register("/credentials", HttpGetCredentials, HttpPostCredentials, false); // Synchronous, no authentication HttpServer.Register("/set", HttpGetSet, HttpPostSet, true); // Synchronous, http authentication HttpServer.Register("/xml", HttpGetXml, true); // Synchronous, http authentication HttpServer.Register("/json", HttpGetJson, true); // Synchronous, http authentication HttpServer.Register("/turtle", HttpGetTurtle, true); // Synchronous, http authentication HttpServer.Register("/rdf", HttpGetRdf, true); // Synchronous, http authentication HttpServer.Register(new WebServiceAPI(), true); // 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); // // HttpsServer.RegisterAuthenticationMethod (new DigestAuthentication ("The Actuator Realm", GetDigestUserPasswordHash)); // // foreach (IHttpServerResource Resource in HttpServer.GetResources()) // HttpsServer.Register (Resource); // // Log.Information ("HTTPS Server receiving requests on port " + HttpsServer.Port.ToString ()); // CoAP Interface CoapEndpoint CoapEndpoint = new CoapEndpoint(); Log.Information("CoAP endpoint receiving requests on port " + CoapEndpoint.Port.ToString()); //CoapEndpoint.RegisterLineListener (new ConsoleOutLineListenerSink (BinaryFormat.Hexadecimal, true)); for (i = 1; i <= 8; i++) { CoapEndpoint.RegisterResource("do" + i.ToString() + "/txt", "Digital Output " + i.ToString() + ", as text.", CoapBlockSize.BlockLimit_64Bytes, false, 30, false, CoapGetDigitalOutputTxt, CoapSetDigitalOutputTxt); } CoapEndpoint.RegisterResource("do/txt", "Digital Outputs, as a number 0-255 as text.", CoapBlockSize.BlockLimit_64Bytes, false, 30, false, CoapGetDigitalOutputsTxt, CoapSetDigitalOutputsTxt); CoapEndpoint.RegisterResource("alarm/txt", "Alarm Output " + i.ToString() + ", as text.", CoapBlockSize.BlockLimit_64Bytes, false, 30, false, CoapGetAlarmOutputTxt, CoapSetAlarmOutputTxt); foreach (CoapBlockSize BlockSize in Enum.GetValues(typeof(CoapBlockSize))) { if (BlockSize == CoapBlockSize.BlockLimit_Datagram) { continue; } string Bytes = (1 << (4 + (int)BlockSize)).ToString(); CoapEndpoint.RegisterResource("xml/" + Bytes, "Complete sensor readout, in XML. Control content using query parmeters. Block size=" + Bytes + " bytes.", BlockSize, false, 30, false, CoapGetXml); CoapEndpoint.RegisterResource("json/" + Bytes, "Complete sensor readout, in JSON. Control content using query parmeters. Block size=" + Bytes + " bytes.", BlockSize, false, 30, false, CoapGetJson); CoapEndpoint.RegisterResource("turtle/" + Bytes, "Complete sensor readout, in TURTLE. Control content using query parmeters. Block size=" + Bytes + " bytes.", BlockSize, false, 30, false, CoapGetTurtle); CoapEndpoint.RegisterResource("rdf/" + Bytes, "Complete sensor readout, in RDF. Control content using query parmeters. Block size=" + Bytes + " bytes.", BlockSize, false, 30, false, CoapGetRdf); } // Main loop Log.Information("Initialization complete. Application started..."); try { while (executionLed.Value) { System.Threading.Thread.Sleep(1000); RemoveOldSessions(); } } catch (Exception ex) { Log.Exception(ex); executionLed.Low(); } finally { Log.Information("Terminating application."); Log.Flush(); Log.Terminate(); HttpServer.Dispose(); //HttpsServer.Dispose (); executionLed.Dispose(); foreach (DigitalOutput Output in digitalOutputs) { Output.Dispose(); } if (alarmThread != null) { alarmThread.Abort(); alarmThread = null; } } return(0); }
public static void 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=camera.db;Version=3;"; DB.BackupProviderName = "Clayster.Library.Data.Providers.SQLiteServer.SQLiteServerProvider"; db = DB.GetDatabaseProxy("TheCamera"); defaultSettings = DefaultSettings.LoadSettings(); if (defaultSettings == null) { defaultSettings = new DefaultSettings(); defaultSettings.SaveNew(); } Console.CancelKeyPress += (object sender, ConsoleCancelEventArgs e) => { e.Cancel = true; executionLed.Low(); }; try { // HTTP Interface httpServer = new HttpServer(80, 10, true, true, 1); Log.Information("HTTP Server receiving requests on port " + httpServer.Port.ToString()); httpServer.RegisterAuthenticationMethod(new DigestAuthentication("The Camera Realm", GetDigestUserPasswordHash)); httpServer.RegisterAuthenticationMethod(new SessionAuthentication()); credentials = LoginCredentials.LoadCredentials(); if (credentials == null) { credentials = new LoginCredentials(); credentials.UserName = "******"; credentials.PasswordHash = CalcHash("Admin", "Password"); credentials.SaveNew(); } httpServer.Register("/", HttpGetRootProtected, HttpPostRoot, false); // Synchronous, no authentication httpServer.Register("/html", HttpGetHtmlProtected, false); // Synchronous, no authentication httpServer.Register("/camera", HttpGetImgProtected, true); // Synchronous, www-authentication httpServer.Register("/credentials", HttpGetCredentials, HttpPostCredentials, false); // Synchronous, no authentication // UPnP Interface upnpServer = new HttpServer(8080, 10, true, true, 1); Log.Information("UPnP Server receiving requests on port " + upnpServer.Port.ToString()); upnpServer.Register("/", HttpGetRootUnprotected, HttpPostRoot, false); // Synchronous, no authentication upnpServer.Register("/html", HttpGetHtmlUnprotected, false); // Synchronous, no authentication upnpServer.Register("/camera", HttpGetImgUnprotected, false); // Synchronous, no authentication upnpServer.Register("/CameraDevice.xml", HttpGetCameraDevice, false); upnpServer.Register(new HttpServerEmbeddedResource("/StillImageService.xml", "Camera.UPnP.StillImageService.xml")); upnpServer.Register(stillImageWS = new DigitalSecurityCameraStillImage()); // Icons taken from: http://www.iconarchive.com/show/the-bourne-ultimatum-icons-by-leoyue/Camera-icon.html upnpServer.Register(new HttpServerEmbeddedResource("/Icon/16x16.png", "Camera.UPnP.16x16.png")); upnpServer.Register(new HttpServerEmbeddedResource("/Icon/24x24.png", "Camera.UPnP.24x24.png")); upnpServer.Register(new HttpServerEmbeddedResource("/Icon/32x32.png", "Camera.UPnP.32x32.png")); upnpServer.Register(new HttpServerEmbeddedResource("/Icon/48x48.png", "Camera.UPnP.48x48.png")); upnpServer.Register(new HttpServerEmbeddedResource("/Icon/64x64.png", "Camera.UPnP.64x64.png")); upnpServer.Register(new HttpServerEmbeddedResource("/Icon/128x128.png", "Camera.UPnP.128x128.png")); upnpServer.Register(new HttpServerEmbeddedResource("/Icon/256x256.png", "Camera.UPnP.256x256.png")); ssdpClient = new SsdpClient(upnpServer, 10, true, true, false, false, false, 30); ssdpClient.OnNotify += OnSsdpNotify; ssdpClient.OnDiscovery += OnSsdpDiscovery; // Initializing camera Log.Information("Initializing camera."); try { currentResolution = defaultSettings.Resolution; currentCompressionRatio = defaultSettings.CompressionLevel; try { camera.Reset(); // First try @ 38400 baud camera.SetImageSize(currentResolution); camera.Reset(); camera.SetBaudRate(LinkSpriteJpegColorCamera.BaudRate.Baud_115200); camera.Dispose(); camera = new LinkSpriteJpegColorCamera(LinkSpriteJpegColorCamera.BaudRate.Baud_115200); } catch (Exception) // If already at 115200 baud. { camera.Dispose(); camera = new LinkSpriteJpegColorCamera(LinkSpriteJpegColorCamera.BaudRate.Baud_115200); } finally { camera.SetCompressionRatio(currentCompressionRatio); } } catch (Exception ex) { Log.Exception(ex); errorLed.High(); camera = null; } // Main loop Log.Information("Initialization complete. Application started."); while (executionLed.Value) { Thread.Sleep(1000); RemoveOldSessions(); } } catch (Exception ex) { Log.Exception(ex); executionLed.Low(); } finally { Log.Information("Terminating application."); Log.Flush(); Log.Terminate(); ssdpClient.Dispose(); if (upnpServer != null) { upnpServer.Dispose(); } if (httpServer != null) { httpServer.Dispose(); } executionLed.Dispose(); cameraLed.Dispose(); networkLed.Dispose(); errorLed.Dispose(); camera.Dispose(); } }
public static int Main(string[] args) { Log.Register(new ConsoleOutEventLog(80)); Log.Information("Initializing application..."); HttpSocketClient.RegisterHttpProxyUse(false, false); // Don't look for proxies. 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(); } // 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); }