La historia de hoy es de victoria y derrota, de misterio y aventura … Es hora de automatizar la puerta del garaje. Conectar la puerta del garaje a internet era una necesidad en mi lista de características de casa inteligente. Nuestro abridor tiene capacidades de conexión a internet incorporadas. Como puede imaginar, soy muy escéptico en cuanto a la conexión de un dispositivo a Internet cuando no tengo control sobre el software que se ejecuta en él.

La puerta del garaje está controlada por un botón colgado en la pared del garaje. Solo hay un par de cables, por lo que un simple relé debe ser todo lo que se necesita para simular la presión del botón desde una Raspberry Pi. Conecté un módulo de relé a un GPIO en el Pi montado en el techo del garaje y escribí un programa de prueba rápido y sucio en Python. Efectivamente, el pequeño relé estaba haciendo clic alegremente, pero la puerta del garaje no se movía. Tiempo para solucionar problemas. ¿Sigue funcionando el pulsador? * levanta la puerta del garaje * sip. ¿Qué tal el relé ahora? * haga clic … haga clic * no.

Es posible que ya se haya dado cuenta, pero este abridor de puerta de garaje no es solo un simple botón de contacto momentáneo. Sí, eso es un microcontrolador, en un botón de la puerta del garaje. Este tipo de escenario requiere un equipo forense más capaz que un multímetro simple, por lo que recurrí a Amazon para un osciloscopio USB que podría realizar un análisis de señal limitado. Un dispositivo con soporte para Linux era una necesidad, y la tecnología Pico encajaba perfectamente.

Buscando un secreto que en realidad no necesitamos

Mi osciloscopio Picotech de 2 canales, el 2204A, finalmente llegó, y llegó el momento de ver qué tipo de tecnología alienígena había en este abridor de puertas de garaje. Hay dos cables para el botón, una conexión a tierra y una línea de cinco voltios. Cuando se presiona el botón, el microcontrolador envía datos a través de esa línea tirando de la línea de 5 V a tierra. Si esto no es una implementación de Dallas 1-wire, es un concepto muy similar.

El protocolo de conexión parece ser lo suficientemente simple para reproducirse, idealmente con un optoaislador. Encontré un chip adecuado y lo puse en orden. Con la interfaz física ordenada, era hora de pasar a los datos en sí.

Entonces, ¿qué aspecto tiene la solicitud de apertura? "Ábrete Sésamo"? El software Picoscope es capaz de decodificar señales, por lo que algunos problemas con esos ajustes obtuvieron resultados reproducibles. UART a 9,6 kbaud. Se enviaron 38 bytes de datos a través del cable, y el siguiente paso fue capturar varios de esos paquetes para buscar patrones.

Cada paquete comenzó con un patrón repetible que Picoscope decodificó como 55 01 00. ¿Un encabezado de clases? ¿Un identificador de origen o destino? Hasta ahora, simplemente no tenía suficiente información para contar. Aparte de ese patrón, los datos parecían ser aleatorios. Entonces, ¿dónde a partir de aquí?

La parte inferior del interruptor muestra un par de números de patente. Las solicitudes de patente a menudo tienen mucha información útil que no está disponible en ningún otro lugar. Las patentes también muestran un discurso legal en su peor momento. Vadeando a través de patentes como 7,561,075 cede la pepita ocasional. Describe un esquema de encriptación (o ofuscación) que gira en torno a una transformación simple. Mirando la documentación de la patente, sospeché que sería posible romper el esquema de encriptación y falsificar el botón de la puerta del garaje al presionar.

Un script de Python para hacer el procesamiento de datos fue mi próximo movimiento planificado. Con un poco de suerte, pensé que podría recrear el algoritmo, así como recuperar potencialmente los secretos utilizados para generar los datos. Muchos proyectos se han descarrilado cuando las necesidades de la vida real se han entrometido en la vida del pirata informático y no soy inmune. Durante aproximadamente un mes, ahí es donde el proyecto languideció. Nos hemos mudado a la casa, mi primogénito tiene una semana, y es hora de que finalmente funcione la puerta del garaje.

Spoof the Button, Not the Cryptography

¿Recuerdas cómo empezamos buscando un simple interruptor de botón? Resulta que hay un interruptor integrado en el abridor de cable. Soldar cables en ese pequeño botón es el más rápido de implementar, si no el más elegante. Sí, mi solución es una Raspberry Pi que ejecuta un relé, y ese relé que une el pequeño botón físico del abridor cableado.

Las soluciones elegantes pero complicadas pueden ser escollos importantes para hacer las cosas. A veces tienes tiempo para profundizar y armar la solución ideal, pero a veces solo tienes que terminar el proyecto. Si está haciendo trampa y funciona, no es … Ok, todavía es trampa, pero funciona, lo que es más importante.

Podemos abrir la puerta del garaje desde una línea de comando en la Raspberry Pi. Eso es útil, pero tal vez un poco torpe. Recuerda Vuelta al primer artículo., ¿Mencioné el uso de matraz para crear una interfaz REST? Aquí es donde realmente podemos empezar.


de matraz de importación matraz
tiempo de importación
Importar RPi.GPIO como GPIO
aplicación = Frasco (__ nombre__)
GPIO.setmode (GPIO.BCM)
GPIO.setup (20, GPIO.OUT)
GPIO.setup (20, GPIO.LOW)

@ app.ruta ("/")
  def hola ():
  regresa "¡Hola!"

@ app.ruta ("/ momento /")
  momento de def (pin):
  changePin = int (pin)
  GPIO.output (changePin, GPIO.HIGH)
  time.sleep (.5)
  GPIO.output (changePin, GPIO.LOW)
  devuelve "ok"
si __name__ == "__main__":
  app.run (host = '0.0.0.0', puerto = 80, debug = False)

Esto ejecuta un servidor de matraz rudimentario, escuchando las conexiones http. Aquí el relé está en GPIO20, por lo que el servidor está esperando una solicitud de "/ momento / 20", momento en el que cambia el GPIO por medio segundo, activando la puerta del garaje. Para ejecutarlo automáticamente, guardé esto en /usr/local/bin/gpio-flask.py, y luego definí un servicio systemd en /lib/systemd/system/gpio-flask.service:

[Unit]

Descripción = Servicio de matraz para GPIO
After = multi-user.target

[Service]
Tipo = simple
ExecStart = / usr / bin / python /usr/local/bin/gpio-flask.py
Reiniciar = siempre

[Install]
WantedBy = multi-user.target

Decirle a systemctl que habilite e inicie ese servicio nos permite hacer negocios. Una última pieza del rompecabezas, construyamos una página de control en nuestro servidor PXE.




Ampliaremos este script PHP más en el futuro, pero por ahora tiene dos funciones. El primero crea y muestra la página de la interfaz: solo un botón grande con la etiqueta "ciclo de garaje". La segunda parte de la secuencia de comandos solo actúa cuando se recibe una solicitud POST. Si el valor de "GDO" está presente en la solicitud, utiliza el rizo para disparar el comando a nuestra Raspberry Pi, elevando la puerta del garaje. Ha sido un camino largo, pero finalmente funciona. Un botón en una página web abre la puerta de mi garaje. Déjame saborear mi pequeña victoria por un momento …

Ahora que hemos hecho trampa para pasar por delante del abridor de la puerta del garaje, la próxima vez podemos trabajar en el registro de datos y el control de HVAC. Hasta entonces, ¡feliz piratería!

LEAVE A REPLY

Please enter your comment!
Please enter your name here