Archivo de la categoría: Mejoras

ALEXA – DOMOTICA LOW COST CON RASPBERRY PI (II)

Quizás es un poco tarde, pero tal y como prometí en su momento, me dispongo de nuevo a documentar la nueva versión del sistema de domótica que ya desarrollé en entradas anteriores y enumerar las nuevas características con las que lo he equipado.

En la última entrada comenté que quería desensamblar aquel ser monstruoso que creé para rehacer todo de nuevo  y así lo hice, conservando, claro está, el corazón del sistema, la Raspberry Pi y los SSR (Solid State Relay). No hay la verdad mucha novedad en lo que el software se refiere, por lo que la mejor manera de mostrar las partes del hardware es, lógicamente, a través de fotografías. Pero antes de ello, os comento qué idea exactamente tenía en la cabeza.

Tenía claro que no quería insertar el sistema en el cuadro de luces de nuevo. Quería que el sistema fuera independiente e incrustado todo en una especie de cuadro eléctrico externo que podía apañar en establecimientos tipo Leroy Merlin. En un principio quería algo pequeño, sin embargo pensé en problemas de disipación de calor y luego tuve un genial idea que me hizo decidirme finalmente por un cuadro de un tamaño un tanto mayor. ¿Por qué no incluir unos altavoces? Y así fue, estuve buscando por diferentes lugares unos altavoces pequeños que NO funcionaran por USB y con una forma vertical para incrustarlos también dentro del sistema.

Vista del sistema cerrado.

Vista del sistema cerrado.

Fue lo primero que hice nada más adquirir la caja. Desmonté los altavoces junto con el transformador y los conseguí incrustar uno a cada lado dejando espacio para todo lo demás y consiguiendo un bonito efecto estéreo en la caja. Hacer hincapié en que el sistema recibe una única entrada AC y cuatro salidas fásicas que abrirían o cerrarían el circuito de cualquier cosa que conecte. Claro está, que de esa entrada AC se alimentarían los altavoces y, por supuesto, la Raspberry; por lo que también deberían buscar sitio para el transformador de 5V que necesita. Estaba ávido por probar al menos esa configuración y todo fue como la seda. Conectado por SSH y reproduciendo música sin ningún problema y con una calidad aceptable. Se abría un abanico de posibilidades.

Anteriormente tenía un pequeño ventilador que  daba aire fresco al procesador de la RBPI, y aunque quería verdaderamente mantenerlo, quería también que se pusiese en funcionamiento cuando la temperatura fuera un tanto elevada. Como muchos sabréis, la placa no cuenta con PWM para controlar la velocidad del ventilador y tampoco lo quería 24/7 girando y generando ruido. Me las apañé con la ayuda de internet, de diseñar un pequeño circuito con un Diodo y un Transistor para manejar el funcionamiento del ventilador a mi antojo y usando un puerto GPIO para ese menester. Así que con soldador y estaño en mano me lié la manta a la cabeza y quemándome un par de veces conseguir hacerlo funcionar. Aquí un diseño del circuito.

 

Circuito para controlar el ventilador del procesador

Circuito para controlar el ventilador del procesador

Circuito

Circuito

Otro nuevo abanico de posibilidades ante mí. Ahora con un script ejecutándose cada minuto, me aseguro de medir la temperatura y activando y desactivando el ventilador automáticamente. Hay que tener en cuenta que la caja de marras iba a estar cerrada y que no existe re-circulación del aire. Así que conseguí una con una bonita ventanita que podía dejar abierta con un ventilador de 12V extra que sí está funcionando permanente. Las salidas que la placa proporciona son máximo de 5V, y ahí reside el truco. Conectar un ventilador de 12V a una fuente de 5v es una maravilla. Gira, ventila y hace un ruido mínimo. Lo conecte a un Switch para poder desactivarlo a demanda ya que en verano aquí hace un calor torrador. Sin embargo, en invierno, lo mantengo desactivado y aquel que depende del script, apenas trabaja. Otra opción que estoy estudiando es hacer funcionar el puerto GPIO del ventilador en modo PWD para controlar a su vez la velocidad.

Vista del sistema cerrado.

Vista del sistema cerrado. Ventilador de 12V

También quería saber con un simple vistazo en qué estado estaba mi sistema. Mantuve la idea y hice tres bonitos agujeros en la caja para insertar tres leds. Verde, amarillo y rojo. Así, con tan sólo un vistazo, y como de un semáforo se tratara, el sistema se mantiene en un perenne verde esperanza mientras la temperatura no sobrepasa los 50ºC. En caso de hacerlo, el led amarillo se activaría junto con el ventilador para volver al estado anterior. Que no se preocupen aquellos con el sueño ligero. El sistema entra en modo “sueño” a partir de las doce donde los LEDs de desactivan y los ventiladores permanecen apagados a no ser que se sobrepase los 70ºC.

Altavoz Derecho y los tres LEDs

Altavoz Derecho y los tres LEDs

Para que me voy a engañar, construí el sistema con un propósito, poder activar la caldera a demanda. Tal y como comenté, el agua caliente en este país funciona con energía solar o, en su defecto, por la corriente eléctrica. Si quieres agua caliente, debes activar el interruptor y esperar unos 20 minutos a que el depósito se caliente. Os podéis imaginar en invierno cuando hay muy pocas horas de sol. Tener que levantarse antes o esperar sudando después de hacer deporte a que el agua esté lista. Esto solucionaría todos mis problemas, sin embargo, quería también tener una forma fácil de activar el termo sin tener que acudir a la consola. ¿Solución? Instalar un bonito botón en la caja, que al pulsarlo, mantuviera el termo activado durante 15 minutos para apagarse automáticamente transcurrido ese tiempo. Fácil, un proceso en linux que escuchara continuamente el estado de un GPIO que cuando valiera 1, activase el calentador durante un tiempo estimado. ¿Algo mejor que eso? Sí, que al pulsarlo de nuevo, lo desactive en caso de no querer mantenerlo encendido ese tiempo.

Botón para activar el calentador durante 15 minutos

Botón para activar el calentador durante 15 minutos y la circuitería de los LEDs

Teniendo el diseño más o menos pensando conseguí incrustar  todos los componentes básicos. La Raspberry, altavoces, ambos transformadores y los cinco SSRs. Faltaba también montar la circuitería de los LEDs e incluir tambien la placa que controlaba el ventilador del procesador más, obviamente, todo el cableado que tendréis la oportunidad de ver.

Me surgía en ese momento una duda, ¿qué hago con las dos cámaras que tenía instaladas? Y ya no sólo eso, sino que en el caso de mantenerlas me obligaba a también incluir en el equipo un HUB USB autoalimentado, ergo otro transformador extra. Además no había tenido muy buenas sensaciones anteriormente. Me decidí entonces por comprar una cámara IP barata que además me diera la oportunidad de controlar el movimiento y la podía instalar donde quisiera ya que se conectaría por WIFI. Concretamente adquirí este modelo por Ebay. Muy contento con el resultado. Funcionando 24/7 y dando un servicio perfecto. Sólo la uso como visor, pero cuenta con un montón de interesantes características. Si te bajas la aplicación móvil puedes incluso hablar desde el móvil y el altavoz de la cámara lo reproducirá. Ideal para amedrentar cacos.

Una vez puertos abiertos inserté la imagen procedente de la cámara Ip al servidor web de la raspberry para así poder no solo visualizar las imágenes, sino mover la cámara a mi antojo. Ahí no acababa todo. Pensé que sería una buena idea mantener una  de las dos webcams USB que tenía, pero no como webCam, sino como micrófono. Desmonté la cámara para que ocupara el menor espacio posible, localicé el micro y lo introduje en una pequeño agujero que hice en la caja. Ahora, Alexa, como llamo cariñosamente a mi sistema, tenía orejas y boca para interectuar con ella. Así luce ahora la página web y accesible desde cualquier lugar del planeta, obviamente, con doble autentificación

 

WEB

 

Micrófono y los controles de los altavoces. Switch, Salida Jack y Volumen

Micrófono y los controles de los altavoces. Switch, Salida Jack y Volumen

Los avispados habrán llegado a misma conclusión que yo. Ahora que Alexa tenía oídos, vamos a enseñarle a hablar. Encontré un software acorde a mis necesidades y hecho por y para la Raspberry. VoiceCommand Cumplía perfectamente con lo descrito y además cuenta con un archivo de configuración muy fácil. Lo primero que hice fue definir la “keyword”. El sistema estaría escuchando constantemente hasta captar la palabra que diera paso al siguiente comando. En este caso sería “Alexa”, ella respondía para escuchar a continuación el siguiente comando que había introducido con anterioridad en el archivo de configuración.

El funcionamiento en sí es simple. Graba tu voz, usa el reconocimiento de voz de google, recibe el texto y si coincide con tus patrones, responde con un “Yes, sir” o en mi caso con un “Dime”. Esto hace un poco lento el proceso. Empecé haciendo pruebas básicas… cosas como decirle “abogado” y responderme “el que tengo aquí colgado“. Modifiqué el TTS para que me respondiera en español, usando, claro, la voz femenina que tiene google en su traductor y en el GPS de maps mismamente. Sí, tiene voz de loca, lo que la hace aún más adorable. Fui puliendo poco a poco todos los comandos de voz. Le pregunto todos los días como está y ella, que es todo un amor, me responde con su temperatura y me das las gracias. Absténganse aquellos de compararme con Joaquin Phoenix en la película “Her”.

A decir verdad tengo la mayor parte del tiempo desactivado el control de voz a no ser que tenga visitas en casa para fardar un poco. La función mas divertida es gritar la palabra “Fiesta!” y Alexa automaticamente pondrá música techno y toda la casa empieza a parpadear al ritmo de la música. Próximamente, con dos palmas haré reproducir música clásica. 🙂

Aprovechando los altavoces y la voz de loca de Alexa, se me ocurrió otra manera original de aprovechar sus cualidades. Ya no sólo me activaría el agua caliente un tiempo antes, sino que también usaría como alarma para levantarme. Con la opcion tambien de controlar el volumen, hacía reproducir el Ave Maria de Shubert y subir el volumen paulatinamente acompañado del sonido de un riachuelo con pajaritos. Y no solo eso, con otro bonito script, me brindaba valiosa informacion como el tiempo actual y temperatura en la ciudad donde vivo y en la de origen y cualquier tipo de eventos, cumpleaños o citas que tuviera añadido en mi google calendar.

#!/bin/bash

cumple=/usr/local/bin/cumple
today=/usr/local/bin/today
lT=`TempVivo.sh`
cT=`TempOrigen.sh`
lC=`CondVivo.sh`
cC=`CondOrigen.sh`

amixer sset PCM 85%
mpg123 /root/BirdsMusic/AveMaria.mp3&
sleep 2
mpg123 /root/BirdsMusic/birds.mp3

google calendar today --cal "Evento*" | grep ^[A-Za-Z] | sed 's/-.*//g' > $cumple
google calendar today | grep ^[A-Za-Z] > $today

tts Arriba. Hora de levantarse
tts Actualmente $lC en "Ciudad donde vivo" con $lT grados. Y $cC en "ciudad de origen" con $cT grados.

if [[ -s $cumple ]] ; then
tts No olvides felicitar a `cat $cumple`
fi ;

if [[ -s $today ]] ; then
tts Tienes las siguientes tareas para hoy. `cat $today`
fi ;

Para conseguir las condiciones metereológicas y las temperaturas usaba el siguiente script. Pongamos que quiero conocer las los datos referentes a Lisboa:

#!/bin/bash
wget -q http://www.accuweather.com/en/pt/lisbon/274087/weather-forecast/274087?unit=c
cat 274087?unit=c | grep '<div class="info"> <span class="cond">' > current.txt
cat current.txt | cut -c 63-150 | sed 's/<.*//g' > cond.txt
cat cond.txt
rm 274087?unit=c
rm current.txt

He pensado siempre en perfeccionarlo para que me informe de la prediccion por horas, pero mira, despues de escuchar todos los días la misma cantinela, lo único que quiero es que termine de hablar cuanto antes para poder tener esos minutos de paz  en la cama antes de ponerme en marcha.

Por lo demas, la distrubucion de los relés (SSR) se distribuye de la siguiente forma:

  • SSR1 –> Salón
  • SSR2 –> Habitacion
  • SSR3 –> Termo
  • SSR4 –> Lavadora
  • SSR5 –> Altavoces
Transformador de la Raspberry PI y de los altavoces

Vista de los SSR, altavoces y demás circuitería.

Aunque puedo desactivar los altavoces por medio de un Switch, me decidí finalmente por conectarlos también a un SSR para poder activarlos o desactivarlos por software y que Alexa permanezca callada en horas de sueño. Y bueno,  dado que vivo solo decidí que sería buena idea poder activar la lavadora a distancia en caso de estar fuera y poder tender la ropa nada más acabar el programa. Introduzco la ropa, echo los productos y listo. Ayuda que mi lavadora no sea digital, aunque imagino que las digitales continuarían el programa donde lo dejaron en caso de falta de corriente.

Aunque no lo he mencionado antes, el puerto USB que queda disponible una vez conectada la Camera-micrófono, es usado lógicamente por un Nano Dongle wifi que funciona “Out of the box”. Concretamente uno basado en el chip Ralink 5370 que compré en Pi-supply.com.

Antes tenía conectado un TP-LINK cuyos drivers tenía que compilar con cada actualización del kernel y era una pesadilla. Lo que conllevaba a que tenía que abrir el sistema para conectarme a través de LAN. Solucioné ese inconveniente instalando un conector LAN exterior que me permitía conectarme sin necesidad de abrir la caja. La verdad que el dongle actual me está dando resultados excelentes. A pesar de varios Kernel updates, el módulo se carga correctamente y no he tenido hasta ahora que tirar de la conexión LAN para solucionar cualquier incidente.

Raspberry PI - Sensor de humedad y temperatura - Micrófono de la cámara USB

Raspberry PI – Sensor de humedad y temperatura – Micrófono de la cámara USB

Y para terminar, hace unos días recibí de Adafruit un sensor de temperatura y humedad para poner la guinda al sistema permitiendome controlar el nivel de humedad de mi casa que habitualmente permanece cerrada. Los requerimientos serían un puerto GPIO libre, 5V + GND y una resistencia para hacerlo funcionar. Ahora desde la consola puedo visualizar los siguientes datos:

Puta humedad

Alexa está completa, es una maravilla y es un sistema completamente portátil que puede ser transportado sin ninguna dificultad a otra vivienda brindando su amor y su voz de loca a cualquiera que esté dispuesto y que no odie aún el Ave Maria que yo ya no puedo aguantar.

Vista del sistema cerrado

Vista del sistema cerrado

Entrada AC

Entrada AC

Vista del sistema cerrado.

Vista del sistema cerrado.

Anuncios

Servidor DNS público y discos duros

Llevaba ya algún tiempo sin informar de las mejoras que se han producido en el servidor a lo largo de estos meses, y a decir verdad una de ellas es tan ventajosa que en muchas ocasiones se convierte en un martirio. Me explico:

Antes de meterme de lleno con la utilidad de DNS, quiero hacer hincapié en la incorporación de un nuevo disco duro. Para aquellos despistados, en la cabecera del blog podéis ver una foto semi-actual del conjunto del servidor donde se aprecian dos discos duros externos. Recordad que en un principio tan sólo contaba con uno de 200MB y que se empezó a hacer pequeño en cuanto el volumen de películas aumentaba.

De una manera un tanto peculiar que no voy a describir, el servidor acogió con cariño a un nuevo integrante de 1TB de tamaño y con el que se acabaron absolutamente todas los problemas de espacio (espero), porque ni nos quedan entradas USB y el ancho de banda de estos es reducido. Rediseñé la estructura de directorios y monté ambos discos duros en dos directorios distintos para albergar por un lado las fotos y música y por otro las películas y contenidos multimedia. Por lo tanto, y aunque lleno de mierda, la familia crece.

Dejando ahora la rama del hardware, me centraré ahora en una de mis creaciones que más orgulloso me siento, y es la configuración para que mi portátil se comporte como un DNS público.

Como muchos de vosotros sabéis y el que no lo sepa que se entere ahora, el crear un servidor casero se puede hacer de muchas maneras, sin embargo el contar con todos los servicios que te proporciona un hosting profesional es realmente tedioso. En un principio, tan sólo indicaba a mi proveedor de dominio que en sus DNS el nombre apuntara directamente a mi IP. Fácil y rápido, sin embargo me dejaba bastante atado de manos en lo que a subdominios se refiere. No tenía absoluta libertad de creación y mucho menos en la posibilidad de recibir y enviar mails. Se podrían recibir, pero al enviarlos, muchos de los proveedores los rechazarían al no considerar mi dominio como fiable.

Así que ni corto ni perezoso me decidí a acabar con ese monopolio y le indiqué a mi proveedor que YO MISMO gestionaría los DNS de mi nombre de dominio. Obviamente, antes de aplicar la configuración, tendría que cerciorarme que internamente mi servidor resolvía los nombres correctamente. No sólo los de la red, sino los propios que yo me creaba. Me decidí por BIND, para mí es el mejor, y aunque la configuración se realiza mediante archivos de texto, yo finalmente no tuve un éxito completo hasta que no me ayudé con WEBMIN. Sin embargo, ahora que sé cómo funciona, opto por tocar directamente los archivos.

¿Ventajas de todo esto?

En primer lugar la creación de número ilimitados de subdominios y la elección de a dónde quieres que se dirijan; la creación de tus registros SOA, NS y MX y un largo etcétera. Y a lo mejor esto a ti te suena a chino, no obstante presta atención a la creación de los registro MX ya que estos te permitirán el correcto envío de correos y la identificación de tu dominio como fiable ante otros gigantes.

Es curioso como creas un subdominio ‘wiki.gomezbecerra25.com’ y, como es natural, tu servidor en local resolverá inmediatamente, sin embargo en cuestión de horas ya tienes expandido tu subdominio por toda la red. Ahora existe una comunicación entre mi portátil y millones de ordenadores del planeta.

¡Espera! Que no todo es de color de rosa. Con razón siempre es necesario un DNS primario y otro secundario… y para qué os preguntaréis muchos. Pues para que no ocurra lo que me ocurre a mí en muchas ocasiones. Aunque ya lo detallaré en otra entrada, estoy teniendo serios problemas de temperatura y mi servidor, acosado por el calor, simplemente se apaga y si te he visto no me acuerdo.

En otras ocasiones, esto tan sólo ocasionaría que se rechace la conexión. Sin embargo en mi caso tengo abiertos diferentes puertos que apuntan a otros ordenadores. Veamos un ejemplo:

Existen dos Pcs más en el edificio además del portátil. No siempre están encendidos aunque ambos escuchan el servicio SSH. Para poder optar por uno o por otro, obviamente tienen configurado puertos diferentes… entonces… imaginemos la situación. Servidor apagado por calor infernal… qué pasa si yo tecleo en mi terminal

ssh pepe@gomezbecerra25.com -p 3654

… pues que simplemente estoy jodido. El PC está encendido, el ssh escuchando… por qué demonios no puedo conectar? Porque mi DNS está caído… es él quien se encarga de resolver mi nombre a IP… Si fuera mi proveedor el que mantuviese que ese nombre iba asociada a X.X.X.X , pues no tendría problema. Sin embargo ahora, con mi servidor KO, no hay quién suelte palabra…

La solución es bien sencilla, claro… encendemos el portátil de nuevo y ya estamos vivos de nuevo y disponibles por la red… o, claro está, si sabemos la IP de memoria como es mi caso, pues para nada quiero resolver 🙂

En definitiva, curioso mundo aquel de las resoluciones y la creación de registros que dan un toque de profesionalidad a algo tan insignificante y frágil como un ordenador portátil. Y, ojo, que no hay mucha diferencia de las configuraciones que existen en grandes dominios que muchos conocemos… obviamente a mayor escala y no a 70º de temperatura.

Motion – Servidor de WebCam

Como muchos de vosotros sabéis los que me leéis habitualmente, mi servidor portátil da servicio de un foro PHPBB3 que tenemos todos los amigos para no perder el contacto. Desde que el portátil empezó a funcionar el día 2 de Febrero de 2009, uno de mis empeños fue en colocar una webcam para poder observar el piso en directo una vez accedido al foro.

Lejos de centrarme en el código Php para conseguir el propósito, me gustaría contaros qué aplicación Linux usé y por qué. Fue más o menos por Marzo cuando monté el PhpBBPortal. Es simplemente uno de los muchos portales que existen para PhpBB3 y que permiten poner noticias destacadas y darle un aire diferente al Foro. Se me ocurrió que mientras accediéramos al portal, se podría proyectar la imagen que la cámara web capturaba. Se verían las principales noticias y, por qué no, podríamos observar todo lo que aconteciera en el piso en ese momento. Tecnicamente sería una pasada… pero si uno está lejos, sentimentalmente no tendría precio.

Como ya he comentado anteriormente, realizar esto en php es algo muy fácil. Simplemente se localiza en bloque donque queremos proyectar y añadimos la imagen que supuestamente generaría el servidor de la Cam. Después de probar en mi portátil particular varias aplicaciones, finalmente me decidí por Motion. Las razones son bastante obvias… el Motion me funcionó, y además a la primera.

Le di la misma oportunidad a los diferentes webcam-server que había en la red, sin embargo ninguno me convenció, o por incompatibilidades con la cámara, o porque consumía demasiados recursos. Entre ellos se encontraba “Webcam-server”, sin embargo no me acababa de convencer, porque en muchas ocasiones se quedaba colgado y no conseguí ejecutarlo en modo demonio, algo que me parecía indispensable.

Finalmente me decidí por Motion,  y eso que la tarea de capturar imágenes y lanzarlas a la red no es su principal característica. Su verdadera potencia radica en su opción de captura de movimiento y su correspondiente foto. No estaba mal, y aunque lo tuve un tiempo activado, la verdad es que no me daba ninguna utilidad y era llenar el disco duro de basurilla en formato jpeg.

El Motion como muchas aplicaciones para Linux, poseen un tedioso archivo “conf” de configuración. Particularmente me costó entender el 100%, pero con paciencia y un poquito de Google no tendréis problemas. Mi objetivo básicamente era configurar apropiadamente el ServidorWeb para que funcionara. Elegí el puerto, el tiempo de refresco y listo.

Una de las opciones que más me gustaban era que se podía arrancar en modo demonio y echando un vistazo en el TOP,  su proceso me generaba un consumo muy moderado incluso con el detector de movimiento activado.

Aparte de lo comentado, poseía también multitud de opciones de estadísticas que se insertaban automáticamente en bases de datos MySql. Incluso la posibilidad de convertir automáticamente en un archivo de vídeo las fotos capturadas. Una maravilla. Una de las opciones que también utilicé era que apareciera la fecha y hora solapadas en la imagen, incluso hasta cualquier texto que nos diera la gana. En definitva, una aplicación a tener en cuenta.

Aquí os dejo una muestra. Lamentáblemente, la cámara no apuntaba a ningún sitio útil en ese momento.

Imagen Motion
Imagen Motion

En ella aparece la fecha completa y a la izquierda una leyenda que el usuario puede modificar. Naturalmente mi leyenda no podía ser otra que el nombre de dominio.

Para guardar también un pequeño recuerdo de lo que se acontece allí, configuré Motion para que capturar una foto cada media hora y la guardase en una carpeta con la fecha actual. ¿Por qué? Porque ahora se han puesto de moda los vídeos donde se juntan multitud de fotos iguales y se puede ver el paso del tiempo.

Lo suyo sería que la cámara no se moviese, pero es comprensible que allí la gente puede hacer lo que quiera, y aunque tan sólo usuarios autorizados podamos visualizar las imágenes, están en el derecho de apartarla… ¿Qué ocurre? Pues que nadie se acordaba de volverla a colocar en su sitio.

Motion se encuentra en los repositorios oficiales de Debian, por lo que la instalación no es problemática, tan sólo es pegarse con el archivo de configuración y listo. Tan sólo un apunte importante, como es de esperar en nuestro querido navegador IE (nótese lo de “querido” como irónico), no soporta las imágenes que genera el motion, sin embargo no tendréis problemas en Mozilla o en Chrome. Con los otros navegadores no lo he testeado. En mi caso, como no puedo obligar a los usuarios a que todos usen Firefox o Chrome, pues doy la posibilidad a los que usen IE a poder visualizar las imágenes mediante JAVA. “Cambozola” es el programa de marras y muy fácil de configurar mediante cualquier HTML. Sin embargo si vuestro propósito en detectar movimientos y para uso particular, este apunte no os servirá de nada. Usad Firefox o Chrome y listo.

Etiquetado