¡Recomienda este blog!

miércoles, 23 de marzo de 2011

Programación de Socket en C: Servidor multiprotocolo ECHO.

El problema que se propone es la realización mediante socket de una aplicación con arquitectura cliente-servidor lo más sencilla posible para la mayor comprensión de este tipo de programación.

Para ello implementaremos un servidor ECHO multiprotocolo y con concurrencia aparente en el que podremos realizar conexiones con varios clientes que usen protocolo UDP o TCP, de forma simultanea.

Para aquellos que estén un poco perdidos, comentar que el servidor ECHO, es un servicio ya implementado en linux, el cual se limita a devolver el "string" que es enviado por un cliente, pero se realizará una implementación diferente.


#include
#include
#include
#include
#include

#include
#include
#include
#include

#include "error.h"
#include "socket_utils.h"

#define MAX_BUFF_SIZE 128

int main(int argc, char *argv[]) {

struct sockaddr_in cli_addr;
unsigned int cli_size;

int ms, cs, auxsock, nfds, usock;/* sock. maestro, cliente y aux, y número total de descriptores en el sistema */
fd_set rfds; /* conjunto de sockets para lectura */
fd_set afds; /* conjunto de sockets activos */

char buff[MAX_BUFF_SIZE];
int n;

/* obtenemos número máximo de descriptores en el sistema */
nfds = getdtablesize();

FD_ZERO(&afds);

ms = passiveTCP("echo", 5);
usock = passiveUDP("echo");

FD_SET(ms, &afds);

while (1) {

FD_SET(usock,&afds);

memcpy(&rfds, &afds, sizeof(rfds));
if (select(FD_SETSIZE, &rfds, (fd_set*)0, (fd_set*)0, (struct timeval *) 0) == -1)
errexit("select: %s\n", strerror(errno));

/* Cliente TCP */
if (FD_ISSET(ms, &rfds)) {
/* hay actividad sobre el socket maestro*/
cli_size = sizeof (cli_addr);
cs = accept (ms, (struct sockaddr *)&cli_addr, &cli_size);
if (cs != -1)
FD_SET(cs, &afds);
}

/* Cliente UDP */
if (FD_ISSET(usock, &rfds)) {
cli_size = sizeof(cli_addr);
if (recvfrom(usock, buff, sizeof(buff), 0,(struct sockaddr *)&cli_addr, &cli_size) < auxsock="0;" if="" auxsock="" n="recv"> 0))
send (auxsock, buff, n, 0);
if (n == 0) {
close(auxsock);
FD_CLR(auxsock, &afds);
}
}
}
(void) close(ms);
}

jueves, 3 de marzo de 2011

Estudio sobre Domótica: Vivienda familiar completamente autónoma.

Para la realización de este estudio, se centrará la atención en una vivienda unifamiliar, que posee un sistema de control integrado, para asegurar a los usuarios un aumento del confort, de la seguridad, del ahorro energético y de las facilidades de comunicación dentro de la vivienda y hacia el exterior con otros entes inteligentes, como por ejemplo la compañía de suministro eléctrico, el departamento de bomberos, un hospital o el supermercado.

Así concebida, una construcción inteligente debe buscar funcionalidad, flexibilidad y economía, generando un aumento de la productividad de los que la habitan. Si entendemos como productividad el mejor aprovechamiento del tiempo y una disminución de costes y riesgos.

Descripción detallada de la Vivienda Domotizada.

En general, en los sistemas de automatización de casas, el software que controla el funcionamiento de la casa debe ser ajustado para que responda al estilo de vida de los habitantes de la casa, y debe ser reprogramado, de forma sencilla, si la familia cambia sus referencias. También se dispondrá de un mando central, con el que pueden manejarse todos los elementos de la casa, de forma rápida.

En el diseño de la vivienda, se atiende especialmente, y con las particulares del caso, a los aspectos o necesidades primarias, que son el confort, seguridad y gestión de la misma. Desde el punto de vista del confort, la vivienda dispondrá de varios elementos inteligentes, enumerados a continuación:

- Se tendrá la opción de encender el equipo de audio y la televisión mediante un detector de voz.

- El aire acondicionado se enciende cuando entramos en nuestro hogar.

- El televisor bajará el volumen automáticamente si suena el teléfono.

- La lavadora enviará un mensaje a nuestro teléfono móvil, indicando que el ciclo de lavado terminó.

- Las persianas de la vivienda pueden subirse y bajarse de forma automática mediante palmadas o usando el mando central.

Automáticamente se tendrá lista el agua en la bañera a una hora determinada, los días que el usuario indique.

- El frigorífico de forma automática, dará un aviso sobre aquellos productos que están a punto de caducar. También al retirar un producto de éste, comprobará la cantidad disponible, y tendrá la capacidad de realizar la compra de forma automática si está por debajo de la cantidad programada.

- La posibilidad de mostrar en el televisor, la persona que está llamando a la puerta en ese momento, y permitirle pasar a la vivienda de forma automática.

- Sistema automático de regado y cortado del césped.

Para poder desarrollar este proyecto es necesario que por toda la casa se disponga de sensores que proveen información como la temperatura y luz ambiente, sonidos, movimientos, etc, y de actuadores que alteran las variables de ese ambiente en función de cómo se haya programado su sistema de control central.

Si nos centramos en cuestiones de seguridad, en la vivienda dispondremos de:

-Un Sistema de prevención de alarmas ante siniestros, mediante un detector de inundación con aviso y corte de agua, un detector de escape de gas con aviso y corte de gas, detectores de humo y detectores de intrusión.

- Un Sistema inteligente o simulación de presencia, que es capaz de darle vida a la vivienda cuando los usuarios no van a estar en ella por una larga temporada, para ello se podrá poner el sistema en modo vacaciones y la vivienda encenderá varias luces, subirá y bajará las persianas etc.

- Un sistema de vídeo vigilancia.

- Un dispositivo de alerta médica, tanto dentro como fuera de la vivienda, que se ponga encontacto de forma automática con los servicios de emergencia.

Para tratar la gestión de la vivienda de una forma óptima se tratará de racionalizar los distintos consumos energéticos en función de la ocupación de la vivienda, tarifas energéticas y nivel de potencia contratada, entre otros criterios. Además de la incorporación a la vivienda de elementos de auto-abastecimiento de energía como placas solares.

Cuando la demanda de energía eléctrica de nuestro hogar es superior a la contratada, el sistema puede desconectar los circuitos eléctricos a los que están conectados equipos de un uso no prioritario y con un consumo significativo, para evitar un corte del suministro eléctrico. Esto nos permite reducir la potencia contratada, reduciendo al mismo tiempo el coste mensual de la factura eléctrica. Al mismo tiempo existen equipos domésticos que pueden entrar en funcionamiento en horas distintas a las normales (lavadoras, lavavajillas, secadoras, calefacción eléctrica por acumuladores, etc.).

Todos ellos podrían funcionar aprovechando las condiciones más económicas de las posibles tarifas (tarifa nocturna.).A su vez, podemos controlar independientemente el consumo de los electrodomésticos para contratar la potencia exacta en nuestro hogar. Dentro de este campo, también es interesante que el sistema controle la iluminación de la vivienda, haciendo que el sistema controle cada una de las estancias según el nivel de luminosidad ambiente y presencia de usuarios, evitando con esto que haya estancias que tengan un consumo innecesario de energía.

Para finalizar, me gustaría hacer hincapié en que el uso de la domótica puede ser muy interesante para personas con cualquier tipo de dificultad, y que podría ser capaz de ayudar a personas con alguna discapacidad (física, sensorial y/o intelectual), así como a ancianos para que puedan vivir en sus casas de una forma independiente y autónoma. Por ejemplo usando dispositivos capaces de modificar la altura de la encimera de la cocina, para permitir un uso adecuado a personas con dificultades etc.