Transcript
Page 1: Monitor de Temperatura

Monitor de Temperatura

Page 2: Monitor de Temperatura

OBJETIVO

Monitoreo de Temperatura en Salas de Computo

Elaborar graficas de comportamiento

Envío de Alertas

Page 3: Monitor de Temperatura

Termómetro Digital interfase Serial

Page 4: Monitor de Temperatura

Diagrama de Clases de Persistencia

class System

Ubicacion

- IdUbicacion: int- Descripcion: char- Volumen: int

Lectura

- IdLectura: int- Valor: int- Fecha: int- Hora: int

Alarm

- IdAlarm: int- Status: boolean- Max: int- Min: int

Unidad

- IdUnidad: int- NombreUnidad: int- Status: boolean

AlarmLog

- IdAlarmLog: int- Hora: int- Fecha: int

1 0..*

1

1

1

0..*

1

1

1

0..*

1 1..*

Page 5: Monitor de Temperatura

.Net

Vista Servicios Integración

Capas significativas de la Aplicación

Page 6: Monitor de Temperatura

Mapeo de capas con Vista Física

Vista -> Administrador Web, MotorTemperatura.exeServicios -> MonitorTemperatura.Operaciones , EmailIntegración -> MonitorTemperatura.DataAccess : Acceso a Servidor DB4O

Page 7: Monitor de Temperatura

Vistas

Page 8: Monitor de Temperatura

Configuracion DB4O Client/Server

Iniciar Servidor

class Monitor {...private void buttonStart_Click(object sender, EventArgs e) { Comun c = new Comun(); c.AsyncStartServer(); }

}

class Comun{...public delegate void MethodDelegate();

public void AsyncStartServer() { MethodDelegate dlgt = startServer; IAsyncResult ar = dlgt.BeginInvoke(null,null); } private void startServer() { StartServer server = new StartServer(); server.RunServer(); }}

Cliente

Operaciones

Page 9: Monitor de Temperatura

Configuracion DB4O Client/ServerClass StartServer : Util {…public void RunServer() { lock (this) { try { IObjectServer server = Db4oFactory.OpenServer(YapFileName, PORT); server.GrantAccess(USER, PASS); server.Ext().Configure().ClientServer().SetMessageRecipient(this); try { if (!this.stop) { Monitor.Wait(this); } } catch (Exception exception) { System.Diagnostics.EventLog.WriteEntry("MonitorTemperatura", exception.ToString()); } server.Close(); } catch (Exception ex) { System.Diagnostics.EventLog.WriteEntry("MonitorTemperatura", ex.ToString()); } }}

Acceso a Datos

Page 10: Monitor de Temperatura

Configuracion DB4O Client/Server

Detener Servidor

class Monitor {...private void buttonStop_Click(object sender, EventArgs e) { Comun c = new Comun(); c.stopServer(); }}

class Comun{... public void stopServer() { StopServer.Stop(); }}

Cliente

Operaciones

Page 11: Monitor de Temperatura

Configuracion DB4O Client/Server

Class StopServer : Util{

public static void Stop() { IObjectContainer container = null; try { container = Db4oFactory.OpenClient("localhost", PORT, USER, PASS); } catch (Exception exception) { System.Diagnostics.EventLog.WriteEntry("MonitorTemperatura", exception.ToString()); } if (container != null) { container.Ext().Configure().ClientServer().GetMessageSender().Send(new StopServer()); container.Close(); } }}

Acceso a Datos

Page 12: Monitor de Temperatura

Configuracion Base de Datos public class Util { public static readonly string ServerPassword = "password"; public static readonly string ServerUser = "user“; public static readonly string YapFileName = “MonitorTemperaturaDB.yap"; public static readonly string PASS = "db4o"; public static readonly string HOST = "localhost"; public static readonly int PORT = 0x1188; public static readonly string USER = "db4o";}

public class ComunDAO { private IObjectContainer OpenFileRemote() { IObjectContainer db = Db4oFactory.OpenClient(Util.HOST, Util.PORT, Util.USER, Util.PASS); ConfigureDBObjects(); return db; } private void CloseFile(IObjectContainer db) { db.Close(); } private void ConfigureDBObjects() // Permite la Actualizacion de Objetos y el Borrado en Cascada { Db4oFactory.Configure().ObjectClass(typeof(Ubicacion)).CascadeOnUpdate(true); Db4oFactory.Configure().ObjectClass(typeof(Ubicacion)).CascadeOnDelete(true); }}

Page 13: Monitor de Temperatura

Queries public class UbicacionDAO { public Hashtable ObtenerUbicaciones(Ubicacion filtro) {

db = OpenFileRemote(); list = db.QueryByExample(filtro); Hashtable t = GetDataTable(list); CloseFile(db); return t; } public Ubicacion ObtenerUbicacion(Ubicacion filtro) { return ObtenerUbicacion(filtro,true); } public Ubicacion ObtenerUbicacion(Ubicacion filtro, bool closedb) {

db = OpenFileRemote(); list = db.QueryByExample(filtro); Ubicacion obj2=null; if (list.Count > 0) { obj2 = (Ubicacion)list.Next(); } if (closedb) CloseFile(db); return obj2; }

Page 14: Monitor de Temperatura

Grabado public class UbicacionDAO { public void GrabarUbicacion(Ubicacion obj) { UbicacionDAO dao = new UbicacionDAO(); dao.GrabarUbicacion(obj); }

public void GrabarLecturas(Ubicacion obj) { UbicacionDAO dao = new UbicacionDAO();

Ubicacion filtro = new Ubicacion(); Ubicacion obj2; if( obj.IdUbicacion>0) filtro.IdUbicacion = obj.IdUbicacion; obj2 = (Ubicacion)dao.ObtenerUbicacion(filtro,false); // false-> no cierra la conexion para actualizalo if (obj2!= null) { obj2.Estado = obj.Estado; if (obj.Lecturas[0] != null) { obj.Lecturas[0].idLectura = (obj2.Index+1).ToString(); obj2.Lecturas[obj2.Index] = obj.Lecturas[0]; obj2.Index++; } .

Page 15: Monitor de Temperatura

Grabado ...

dao.GrabarUbicacion(obj2); } else { obj.Estado = true; dao.GrabarUbicacion(obj); } }

}

Class UbicacionDAO{ public void GrabarUbicacion(Ubicacion obj) { GrabarUbicacion(obj, true); }

public void GrabarUbicacion(Ubicacion obj, bool closedb) { db = OpenFileRemote(); db.Store(obj); if (closedb) CloseFile(db); }}

Page 16: Monitor de Temperatura

Borrado de Datospublic class ComunDAO {

.

.

. public void DeleteAll() { IObjectContainer db = OpenFileRemote(); Util.DeleteAll(db); CloseFile(db); }}

public class Util {... public static void DeleteAll(IObjectContainer db) { object obj = new object(); IObjectSet set = db.QueryByExample(obj); foreach (object obj2 in set) { db.Delete(obj2); } }}

Page 17: Monitor de Temperatura

Simulación de Lecturaspublic class Lector {

private void startReader() { stop = true; EstablecerEstadoBotones(); int i = 1; int top = int.Parse(ConfigurationManager.AppSettings["MaxLecturas"].Trim()); while (i < top && stop) { double val = ObtenerLectura(); labelLectura.Text = val.ToString() + " °C"; GrabarLectura(val); i++; } }

private static double ObtenerLectura() { return RandomDouble(15,70); }...

Page 18: Monitor de Temperatura

Simulación de Lecturas... private void GrabarLectura(double val, bool agregarlectura) { UbicacionOP op = new MonitorTemperatura.Operciones.UbicacionOP(); Ubicacion obj = new Ubicacion(); obj.IdUbicacion = int.Parse(ConfigurationManager.AppSettings["IdUbicacion"].Trim()); obj.Descripcion = ConfigurationManager.AppSettings["Descripcion"].Trim(); obj.Estado = stop; if (agregarlectura) { Lectura l = new Lectura(); l.Tipounidad.IdUnidad = ConfigurationManager.AppSettings["TipoUnidad"].Trim(); l.Valor = val; l.Fecha = System.DateTime.Now; l.Hora = System.DateTime.Now; obj.Lecturas[0] = l; } op.GrabarLecturas(obj);

}}

Page 19: Monitor de Temperatura

Configuracion Cliente

<configuration><appSettings>

<add key="IdUbicacion" value="1" /><add key="Descripcion" value="Ubicacion Prueba 1" /><add key="TipoUnidad" value="1" /><add key="MaxLecturas" value="20" /><add key="WebAdmin"

value="http://localhost/MonitorTemperatura.View/Default.aspx" /></appSettings>

</configuration>


Top Related