msgbartop
Klaatu Barada Nikto
msgbarbottom

23 dic 15 Control remoto de sistemas con WhatApp. Yowsup 2

Nuevos avances. La última vez que utilicé WhatsApp como sistema de control remoto (Riego de jardín con WhatsApp y radiofrecuencia) hice uso de la versión 1 de Yowsup, librería de comunicación con WhatsApp escrita en python. Pero algún tiempo después esta primera versión de Yowsup dejó de ser funcional, y aunque tiempo después fue reescrita en una segunda versión, todo el código que había desarrollado para ello no era compatible.

Después de algunos trasteos, y de comprender cómo funciona esta nueva librería, he conseguido volver a hacer operativo el sistema de comunicación. E incluso el código ha quedado bastante más limpio. Recopilemos: se envía desde un terminal móvil un mensaje de control. Este mensaje es recibido gracias a una aplicación que hace uso de Yowsup, instalada en una Raspberry Pi. El programa interpreta el mensaje, y toma la acción oportuna. Hasta este momento, encender y apagar un relé durante un número de segundos indicado en el mensaje; relé que no se encuentra conectado directamente a la RPi, sino controlado por un chip Attiny85. La RPi, haciendo uso de un emisor de RF de 433 MHz, da las órdenes de encendido y apagado al Attiny85. El Attiny, que se encuentra a la espera de mensajes en un modo de bajo consumo, recibe la señal de interrupción hardware provocada por el receptor de 433 MHz. Sale del modo de bajo consumo, y activa el relé. Posteriormente, bajo otra orden de apagado por parte de la RPi, desactiva el relé y vuelve al modo de bajo consumo.

Teniendo en cuenta que aquí en Irlanda un sistema de riego automático es algo que carece de utilidad (el propio clima es un sistema de riego automático :mrgreen: ), ¿qué se puede querer controlar de manera remota? He aquí la respuesta:

En cuanto a la preocupación por el consumo, éste ha mejorado de manera considerable. El Attiny se encuentra alimentado por una batería de móvil de 2100 mAh, conectada a un panel solar que recarga la batería. Hasta el momento, lleva 4 días funcionando de manera ininterrumpida, y la última medición de la batería indica que la carga es de 3.85v. Un enorme avance con respecto a la anterior versión del reloj de riego de jardín.

VN:F [1.9.20_1166]
Rating: 10.0/10 (2 votes cast)

Etiquetas: , , , ,

22 mar 14 Riego de jardín con WhatsApp y radiofrecuencia

Llevo unas cuantas semanas sin escribir, y es que entre el trabajo y diversas ocupaciones no he podido ponerme a darle a la tecla. Sin embargo, no he estado ocioso todo este tiempo. Y este vídeo es la prueba de ello:

Como se puede ver (aunque un poco oscuro), se trata de un reloj de riego de jardín controlado por WhatsApp. Los mensajes son enviado por WhatsApp y recibidos por una Raspberry Pi, que activa el reloj de riego mediante radiofrecuencia.

El reloj, por otro lado, está controlado por un chip Attiny85, programado con Arduino. El conjunto está alimentado por una batería de 9v. Con un regulador se baja el voltaje a 5v, que proporciona alimentación tanto al sistema attiny como al propio motor de riego. El esquema básico de funcionamiento es el mismo que el de este diagrama…

Diagrama de control RF del sistema de riego con Raspberry y Arduino

…pero reemplazando el arduino por el attiny.

Otro día, con más tiempo, doy más detalles del funcionamiento.

VN:F [1.9.20_1166]
Rating: 0.0/10 (0 votes cast)

Etiquetas: , , , , , ,

01 feb 14 Transmisión de imágenes desde Raspberry a través de WhatsApp

Otro de los avances de este fin de semana ha sido que finalmente he conseguido enviar imágenes desde la Raspberry mediante comandos de WhatsApp. Esta ha sido la primera imagen enviada:

Captura de webcam a través de WhatsApp

Captura de webcam a través de WhatsApp

La imagen es bastante mala, lo sé, pero mi webcam ha pasado por tiempos mejores. :mrgreen:

El método fue el siguiente: conecté una antigua webcam USB a la Raspberry. Instalé la aplicación “fswebcam”, que permite tomar capturas de pantalla de un dispositivo de vídeo (en este caso, la webcam, /dev/video0), y almacenarlas como imágenes. Tras comprobar que esto funcionaba, conseguí por fin modificar el código de Yowsup para que procesara adecuadamente el envío de imágenes, gracias a un código compartido en la web de proyecto, que no me costó demasiado adaptar para que se ejecutara al recibir comandos desde WhatsApp, de una manera similar a como activo y desactivo los relés y el sensor de movimiento.

Las posibilidades de esto son enormes: la idea que tengo ahora es modificar el código de aviso del sensor de movimiento PIR para que, además de avisar de cuándo se ha detectado movimiento, realice una captura automática con la webcam, y la envíe al teléfono. Es decir, tener la posibilidad de tomar capturas bajo demanda, o bien de manera automatizada ante eventos externos.

¿Mejoras? Unas cuantas: la primera es que el código compartido no es capaz de hacer el envío de la miniatura asociada a la imagen, lo que produce en algunas ocasiones que WhatsApp dé un error en Android al intentar mostrar la miniatura (aunque luego la imagen se ve bien). La segunda es conseguir una webcam mejor. :D En cuanto a la tercera, sigue habiendo un problema: la webcam tiene que estar conectada a la raspberry, lo que no resulta demasiado práctico si el sensor de movimiento está, por ejemplo, en la entrada (y conectado con la raspberry por RF). Sería interesante poder hacer uso de una webcam IP, o algún sistema de captura de imágenes para Arduino.

Por cierto, aunque la imagen que encabeza el artículo es la primera que transmití de manera controlada por WhatsApp, no es en realidad la primera imagen enviada. Hubo otras dos antes:

Templo romano de la c/ Claudio Marcelo, Córdoba

Templo romano de la c/ Claudio Marcelo, Córdoba

Esta es la primera imagen que envié al móvil desde la Raspberry, antes de realizar la integración con la webcam. La envié con un comando desde la raspberry, para probar la efectividad de la librería de envío de mensajes.

Captura de webcam

Captura de webcam

En cuanto a esta otra, en la primera imagen que envié tras integrar la captura de la webcam en el sistema de envío de mensajes de WhatsApp. Pero, de nuevo, fue enviada desde la raspberry hacia el teléfono, antes de implementar la lógica que permite capturar la imagen desde el teléfono.

Por cierto, lo que se ve en ambas capturas es una estantería de mi estudio llena de libros, y el reloj de riego automatizado. :D

VN:F [1.9.20_1166]
Rating: 10.0/10 (2 votes cast)

Etiquetas: , , ,

26 ene 14 Sistema de control de riego controlado por WhatsApp

Este fin de semana he seguido avanzando con el tema de la domótica. Tras conseguir intercomunicar un arduino y la raspberry por radiofrecuencia, he conseguido progresar bastante. Como puede verse en el siguiente vídeo:

Se trata de un reloj de riego barato comprado en el Leroy Merlín. Le he reemplazado la lógico, y dejado tan sólo el servomotor que controla el paso del agua. Para ello he necesitado lo siguiente:

  • Mejorar el alcance por de los módulos RF: Esa ha sido la parte sencilla. Tan sólo ha sido necesario soldar sendas antenas de 17 cm. a los módulos de emisión y recepción. ¿Por qué 17 cm.? Porque corresponden (aproximadamente) con 1/4 de la longitud de onda a la que emiten los módulos, lo que permite maximizar la eficiencia de los módulos. He podido comprobar que la señal es perfectamente recibida en toda la casa, a lo largo de las tres plantas. No está mal, para unos módulos de 2€.
  • Modificar el código de mensajería Raspberry/WhatsApp: Además de incorporar un comando para comunicarse con los relés controlados a través de RF, ha sido preciso tener en cuenta que el reloj de riego tiene un servomotor en vez de una electroválvula. La diferencia es que la electroválvula abre paso al agua cuando se la alimenta con voltaje, por lo que simplemente activando el relé se abre. El servomotor, por el contrario, se activa para hacer girar 90º una llave de paso, y tiene que volver a activarse para volver a hacer girar 90º la llave de paso para cerrar el paso de agua. Por lo tanto, tiene una implementación lógica diferente, que ha sido preciso modelar.
  • Modificar el reloj de riego: He eliminado la circuitería del reloj, dejando tan sólo el servomotor. Éste se compone de un motor convencional, alimentado por dos pilas AA de 1.5v, y un interruptor, que permite saber cuándo está completamente abierta o cerrada la llave de paso. Para poder controlar ambos sistemas con arduino, se requieren dos puertos de E/S: uno para activar el relé, y otro para detectar el estado del interruptor.

El sistema quedaría de la siguiente manera:

Diagrama de control RF del sistema de riego con Raspberry y Arduino

Hay una serie de posibles mejoras en las que empezar a trabajar:

  • Mejorar la codificación del sistema de RF: Actualmente sólo es capaz de controlar un único dispositivo. Hay que incorporar una implementación de un sistema de comunicación que permita dar instrucciones a múltiples módulos. También sería conveniente mejorar la seguridad de los mensajes intercambiados. Hasta el momento, el módulo arduino ejecuta cualquier mensaje que reciba, sin verificar fuente, por lo que un atacante malicioso podría activar/desactivar el sistema de riego de manera arbitraria. Lo ideal sería incorporar un sistema de codificación basado en identidad, junto con un cifrado basado en clave pública/privada, pero igual esto último es matar moscas a cañonazos… :mrgreen:
  • Incorporar un sistema de programación de eventos: Hasta ahora es posible dar instrucciones al sistema, pero no programar eventos. Hasta el momento uso una aproximación, consistente en crear en /etc/crontab disparadores que activen el sistema, pero no es especialmente práctico. Mi intención es incorporar un calendario online (Google Calendar, por ejemplo) para poder programar eventos de una manera sencilla
  • Miniaturizar el hardware: Actualmente está todo en una placa de prototipado, y hago uso de la placa con 4 relés. Mi intención es pasar de un arduino a un attiny85, y hacer uso de un único relé. Las piezas están ya encargadas; en cuanto lleguen, habrá que tirar de soldador. :D
  • Desarrollar una aplicación web para monitorizar el sistema: Aquí no hay mucho más que decir. :)
VN:F [1.9.20_1166]
Rating: 9.5/10 (2 votes cast)

Etiquetas: , , , ,

24 ene 14 Código de control de Raspberry Pi por WhatsApp

Llevo desde hace algunos meses trabajando en un sistema de control de domótica controlado por WhatsApp en Raspberry: , , . La parte central del sistema es la librería yowsup, que permite comunicarse por línea de comandos con WhatsApp desde linux. He modificado el código del mismo, para poder capturar los mensajes enviados desde el teléfono, e interactuar con los GPIO de la Raspberry. Este es el código que hasta el momento he desarrollado:

Código fuente de control de Raspberry por WhatsApp

Varios comentarios al mismo:

  • El código es feo de narices, lo sé. Hacía mucho tiempo que no tiraba una sola línea de código, y nunca he sido un especialista en python, lenguaje que he tenido que aprender sobre la marcha. Así que no esperes nada especialmente elegante.
  • La manera menos problemática para ejecutar el sistema es la siguiente:screen -dmS whatsapp sudo python /home/pi/yowsup/src/yowsup-cli -c /home/pi/yowsup/src/config.example -E 346xxxxxxxx -a -k, siendo 6xxxxxxxx el teléfono desde el que queremos comunicarnos. El parámetro “-E” es una de las modificaciones que he efectuado. Permite lanzar el yowsup ejecutando el modo de control de las electroválvulas (Electro.py), que es básicamente donde he metido las zarpas.
  • Aunque se puede lanzar sin hacer uso de screen, aconsejo encarecidamente hacer uso del mismo, ya que nos permitirá recuperar la sesión desde terminales distintos a aquel desde donde hemos lanzado el programa, lo que siempre es una ventaja.
  • Es imperativo lanzar mi modificación de yowsup con sudo (o como root), ya que se trastea con la GPIO.
  • Una buena manera de automatizar el inicio de yowsup cuando se encienda la raspberry es añadiendo el comando anterior a /etc/rc.local
  • Aparte del sistema de control de los relés, también contiene el sistema de control de movimiento con el sensor PIR

Espero que os resulte de utilidad. :mrgreen:

VN:F [1.9.20_1166]
Rating: 10.0/10 (2 votes cast)

Etiquetas: , ,