miércoles, 21 de marzo de 2007

Domótica y FreeBSD



El término Domótica proviene de la unión de las palabras domus (que significa casa en latín) e informática (DRAE). Se entiende por domótica al conjunto de sistemas capaces de automatizar una vivienda, aportando servicios de gestión energética, seguridad, bienestar y comunicación, y que pueden estar integrados por medio de redes interiores y exteriores de comunicación, cableadas o inalámbricas, y cuyo control goza de cierta ubicuidad, desde dentro y fuera del hogar. Se podría definir como la integración de la tecnología en el diseño inteligente de un recinto. (Fuente: Wikipedia)

En fin ya hace unos dias, a la lista que estoy suscrito Freebsd@es.freebsd.org (se aprende mucho en ella) un colistero solicito información sobre este tema además de que funcionara bajo FreeBSD (ya hace unos años buscando una solución a un problema operativo en la empresa donde trabajo me tope con un articulo publicado en www.eldemonio.org el cual daba inicio a la solución) con mucho gusto respondí el correo indicando que tenia información que podía serle de utilidad, le di el link del articulo (Watchdog para router ADSL con FreeBSD) junto con fuentes tanto en lenguaje C como en php, aunque es algo un poco primitivo (en mi caso funciona para lo que necesito) debería fácilmente ser punto de partida para el desarrollo que requería implementar.

Bueno al parecer también existen otras personas interesadas en el tema así que decidi incluir este articulo en el blog.

Este es el programa (muy sencillo) que uso para enviar un pulso (+5 Volts DC) al pine 2 del puerto paralelo:

#include
#include
#define IMPRESORA 0x378
#define ACTIVA 0x01
#define DESACTIVA 0x00
void outp(unsigned short puerto, unsigned char dato)
{
unsigned char D=dato;
__asm __volatile("outb %0,%%dx" : : "a" (D), "d" (puerto) );
}

int main(void)
{
FILE *IO;
IO=fopen("/dev/io","rw");
if (IO!=NULL)
{
outp(IMPRESORA, ACTIVA);
usleep(950);
outp(IMPRESORA, DESACTIVA);
fclose(IO);
return (0);
}
else
{
fprintf(stderr,"Error de Entrada/Salida\n");
return (1);
}
}

Por otro lado también esta la programación en lenguaje PHP que permite operar via web

c2.php

include('conectarse2.php');
$link=Conectarse();
$date = ucfirst(strftime("%A %B %d, %Y. %I:%M %p %Z"));
$donde=$REMOTE_ADDR;
$estado=yes;
if ($estado == 'yes') { system("sudo /usr/local/www/data/homechannel");
echo 'Se realizo el cambio';
}
mysql_query("Update canal set donde='$REMOTE_ADDR'",$link);
mysql_query("Update canal set cuando='$date'",$link);
mysql_query("insert into canal2 (fecha,donde,estado) values ('$date','$REMOTE_ADDR','celular')",$link);


"La idea de la base de datos es saber cuando y desde que ip se realizo el cambio" por otra parte me permite ver en que estado esta el puerto (aunque en teoría me comentan que por lenguaje c no se puede leer el estado del puerto) tengo la idea de utilizar otros pines del puerto como buffers de entrada y saber de forma real que evento ocurrió (si se coloco en 0 (cero) o en 1). Tal vez aproveche mis vacaciones documentándome y echando código.

El dispositivo que utilice en lugar de un Rele común fue un optoacoplador los mismo son muy baratos (al menos en mi pais) consumen menor corriente y el tiempo de respuesta es mejor.

NOTA: se debe usar sudo ya que el user www de apache no tiene permisologia para acceder al paralelo, solo con sudo lo hice funcionar (claro que no tenia mucho tiempo para buscar y documentarme mas a fondo) creo que hay una librería o instrucción que permite que cualquier user pueda escribir en el puerto.

Espero que les sea de Utilidad.

Saludos...

FreeBSD

Loading...

Windows Vista AERO VS Linux BERYL

Loading...