Control domótico con Raspberry Pi

Tras el proyecto de control domótico con Arduino ha pasado un tiempo, y ahora me gustaría hacerlo más seguro y más bonito. En este punto las capacidades de Arduino me fallan un poco y es por lo que me he decidido migrar el proyecto a Raspberry Pi, para lo que voy a utilizar WordPress para todo el interfaz y gestión de usuarios, de esta forma se facilita la gestión de acceso a encender y apagar el relé.

La migración es bastante sencilla ya que vamos a cambiar el Arduino por la Raspberry Pi, conectando la toma de los 5V y la masa a los que provee la Raspberry y la toma de control la voy a colocar en el Pin 18. Tras esto yo he unido la placa de relé con la Raspberry con cinta aislante y queda así:

RPiDomotico03 RPiDomotico02 RPiDomotico01

Una vez que ya tenemos montado el hardware vamos a comenzar con el software. En primer lugar vamos a comenzar por instalar WordPress, PHP y MySQL. Dado que hay muchos tutoriales sobre esto, no voy a entrar en detalles, como ejemplo puedes seguir el que indico a continuación pero como digo da igual cual sigas, ya que al final lo que hay que tener es un WordPress totalmente operativo.

Instalar WordPress –> https://www.raspberrypi.org/learning/lamp-web-server-with-wordpress/

Ahora es el turno de instalar el software para poder controlar las entradas de la Raspberry, yo he optado por el proyecto wiringPi, para ello solo hay que seguir los pasos que hay aquí.

Por último, nos queda buscar algún frontend que nos sirva de ayuda, yo me he basado en el proyecto https://code.google.com/archive/p/raspberrypi-gpio/ para esto, si tenéis curiosidad le podéis echar un vistazo. Desde mi punto de vista lo que le falla es el tema de la seguridad y prefiera que sea wordpress el que se encargue de la gestión de usuarios. En este proyecto vamos a ejecutar el gpio.sql en nuestra Raspberry para preparar la BBDD con los datos que usaremos luego en WordPress, además las imágenes las tenemos que guardar en la raíz de nuestro WordPress.

Ahora que lo tenemos todo vamos a preparar una plantilla de WordPress con la integración del frontend que hemos visto, para ello hay que elegir la plantilla que más te guste y copiarla con otro nombre. Para hacer la copia puedes usar WinSCP para entrar en la Raspberry y tratarla como si fuera un FTP. Las plantillas están en «/wp-content/themes». Una vez copiada vamos a seleccionarla en WordPress para que sea nuestra plantilla activa, haciendo esto evitamos que si modificamos una de las que te vienen por defecto en una actualización de WordPress perdamos nuestras modificaciones ( y sí, lo digo por experiencia)

Ahora entramos en la carpeta de nuestra plantilla copiada (yo la llamé GPIO), y vamos a crear una plantilla de página (que también llamé GPIO) para lo que hay que entrar en el directorio «page-templates» y creamos un fichero php, por ejemplo, GPIO.php, os pongo una copia de mi fichero GPIO.
Dentro del fichero hay que cambiar las lineas donde se indica el usuario y contraseña de la BBDD que tenga acceso a la BBDD que se creó cuando preparamos el frontend, este es el punto en el que usaremos los datos que nos creaba el fichero gpio.sql que hemos ejecutado anteriormente.

Una vez que ya tenemos nuestra plantilla de página vamos a entrar en WordPress y creamos una nueva página desde la zona de administración y como plantilla dejamos la que hemos creado, si llamas a todo GPIO (plantilla, plantilla de página), nuestra plantilla aparecerá como «Plantilla predeterminada». Una vez creada nuestra página y si todo funciona correctamente al acceder a ella veremos algo como:

Page-GPIO

Y ya desde aquí podemos ponerle nombre o descripción para indicarnos que tenemos conectado a que relé. Por ejemplo yo tengo el enchufe conectado al puerto GPIO 18, por lo que voy a nombrar este puerto.

Enchufe_Off

Y ahora, simplemente, pulsando en encender, la Raspberry Pi encendería el enchufe, de tal forma que en esta página aparecería marcado que está encendido y para ello se cambia la imagen del botón.

Enchufe_On

Y ya lo tenemos listo, con esto ya tendríamos realizada la migración desde Arduino a Raspberry Pi. Como podéis comprobar con WordPress podríamos crear varios usuarios que tuvieran acceso a encender y apagar los enchufes, además de que la capa visual que tenemos aquí es bastante más amigable que la que teníamos con Arduino.

 

4 pensamientos en “Control domótico con Raspberry Pi

  1. Que rapidez en contestar!! Gracias! a ver ..los scripts estan completamente funcionales y funcionan lanzados desde consola u otros php que no sean wordpress (quería utilizarlo igual que tu para las autenticaciones y gestion de usuarios) el tema es que al pasar todo a una plantilla wordpress no va y no estoy muy seguro en que path meter los scripts pero he probado muchas rutas distintas y ninguna me va. Seguiré probando. Ya que eres de los pocos que ha ido un poco más allá con wordpress y raspberry (y lo ha publicado), cuando consiga algo te comento por si te interesa en futuros proyectos o ampliaciones de tu sistema. Un saludo!

    • Hace tiempo del Post, pero lo que me estas contando me suena que me pasase con algo. Una cosa que debes verificar tambien es que el usuario de wordpress que ejecuta el php tenga permisos suficientes para ejecutar el script llamando al shell. Prueba haciendo al usuario de php o de apache admin y asignarle permisos de sudo sin necesitar contreseña (recuerdo que esto se hacia editando el fichero sudoers)

  2. Hola!! En primer lugar, felicitarte por la guia. Gracias por compartir tus conocimientos. Quisiera preguntarte algo al respecto. Estoy haciendo algo parecido a ti pero empleando mis propias plantillas pretendiendo hacer lo mismo que tu (encender leds, lamparas y a mayores alguna cosilla más) y he detectado que si en los php hago un exec tipo: sudo gpio -gmode 24 in, se ejecuta la orden perfectamente. Sin embargo si eso lo encapsulo en un script python o sh tipo encenderLuz.sh o encenderLuz.py no se ejecuta. Sabes a que puede deberse?
    Un saludo y gracias nuevamente!

    • Tiene pinta a que cuando encapsulas el comando no tiene el path donde está el comando gpio. En los script sh me suena que si intentas meter algunos comandos tienes que indicar las rutas al inicio del fichero, por ejemplo, comprueba que tu primera linea del fichero sh es «#!/bin/bash»

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.