Tabla de contenido:

SmartWand: 6 pasos
SmartWand: 6 pasos

Video: SmartWand: 6 pasos

Video: SmartWand: 6 pasos
Video: ТЕПЕРЬ MI BAND 6 ЛУЧШИЙ ФИТНЕС БРАСЛЕТ ЗА СВОИ ДЕНЬГИ 2024, Noviembre
Anonim
SmartWand
SmartWand

Este proyecto es para obtener un script de Python para controlar Smartthings con la varita de codificación Kano como entrada.

Mis hijas (8 y 12) son grandes fanáticas de Harry Potter y obtuvieron la varita codificadora Kano para Navidad. La aplicación de codificación Kano es genial y se están divirtiendo con ella. Gran herramienta para introducir conceptos de codificación.

También tenemos un poco de domótica esparcida por toda la casa con SmartThings, Phillips Hue, Logitech Harmony Hub, etc. Inevitablemente llegaron al punto en el que querían encender las luces del árbol de Navidad con la varita y comenzaron a lanzar términos como Lumos y Nox a mí. Parecía un desafío divertido, así que lo asumí.

Tenía que ir con un sistema operativo Linux ya que un elemento crítico (biblioteca de Python Bluepy para conectarse a la varita Bluetooth) solo está disponible en plataformas Linux. Conveniente de todos modos desde el punto de vista de eventualmente querer ejecutar esto en una Raspberry Pi.

Aquí hay dos referencias principales, sin las cuales, nunca hubiera podido hacer esto.

Gracias a GammaGames por crear y compartir un script de Python para leer la varita de codificación de Kano.

github.com/GammaGames/kano-wand-demos/blob…

y

Gracias a rllynch por crear y compartir un script de Python para una interfaz de línea de comandos de SmartThings.

github.com/rllynch/smartthings_cli

Para mantener esto intacto, voy a copiar la mayoría de los pasos a este Instructable para capturar cualquier ajuste que necesite para que funcione en mi configuración.

Esto es lo que necesitará:

  • Kit de codificación Harry Potter Kano (https://www.amazon.com/Kano-Harry-Potter-Coding-Ki…
  • Un sistema operativo basado en Linux (tengo uno en funcionamiento con VirtualBox, luego lo instalé en una Raspberry Pi)
  • Un adaptador USB Bluetooth (utilicé un adaptador USB Bluetooth 4.0 de Kensington)
  • Conexión a Internet (para el RPi, utilicé un adaptador WiFi USB Edimax que tenía de un proyecto anterior)

Paso 1: Instale Linux en Raspberry Pi

Siga los enlaces a continuación para instalar un sistema operativo Linux en la Raspberry Pi. Usé Raspbian Stretch con el software de escritorio y recomendado y lo flasheé con Etcher.

www.raspberrypi.org/learning/software-guid…

Una vez que haya completado la instalación y tenga un símbolo del sistema de Linux, es una buena práctica ejecutar los siguientes dos comandos para asegurarse de que todo esté actualizado.

sudo apt-get update

sudo apt-get upgrade

Escriba lo siguiente en la interfaz de línea de comandos para iniciar la interfaz de usuario del escritorio.

sudo startx

Lo siguiente que debe configurar es una conexión a Internet para que pueda acceder a repositorios y demás para instalar más software. También se requerirá conexión a Internet para acceder a la API de SmartThings. Siga esta guía para conectarse. Bastante sencillo desde el escritorio. Usé un adaptador wifi USB que tenía por ahí.

www.raspberrypi.org/learning/software-guid…

Alternativamente a la Raspberry Pi, puede usar otra computadora existente para arrancar dual un sistema operativo Linux junto con su sistema operativo existente (una especie de molestia porque tiene que reiniciar para cambiar entre los dos) o ejecutar una instancia del sistema operativo Linux en un VirtualBox. Para que este proyecto funcione inicialmente, instalé Debian Stretch con Raspberry Pi Desktop en una caja virtual usando esta guía:

thepi.io/how-to-run-raspberry-pi-desktop-o…

(nota: Me lo pasé genial instalando los complementos para invitados correctamente según las instrucciones anteriores. Nunca conseguí que el cortar y pegar entre el host y el cliente funcionara, lo que habría sido bueno, pero logré actualizar la resolución para utilizarla mi tamaño de monitor completo. Esta fue una serie de agujeros de rabit de Google que no documentaré aquí).

Paso 2: instala Python 3

Python3 ya debería estar instalado con Raspian Stretch.

Paso 3: Configurar el módulo de varita

Sigue esta guía creada por GammaGames

Primero tuve que cambiar a un directorio diferente antes de clonar el repositorio kano_wand, de lo contrario, mi script de Python no podría encontrarlo. Probablemente podría haber actualizado algunas referencias de ruta en algún archivo en algún lugar, pero no profundicé en eso.

cd /usr/local/lib/python3.5/dist-packages

clon de git

sudo pip3 instalar bluepy moosegesture

Tuve que usar sudo para que estos obtuvieran los permisos adecuados. También tuve que usar los siguientes comandos en su lugar para instalar numpy, por alguna razón, no pudo hacer que pip funcionara. Podría haber sido otro problema de ruta, pero esto funcionó para mí, así que lo seguí:

sudo apt-get install python3-numpy

Por último, para obtener los permisos adecuados para ejecutar bluepy desde el script de Python, encontré este comando.

sudo setcap 'cap_net_raw, cap_net_admin + eip' /usr/local/lib/python3.5/dist-packages/bluepy/bluepy-helper

Esto es todo lo que se necesita para poner en marcha nuestro script. El resto de la guía de GammaGames recorre las piezas paso a paso requeridas en el script de Python. Es un gran desglose para comprender mejor cómo está estructurado el script y qué está haciendo cada objeto. Muchas gracias a GammaGames por proporcionar esta documentación. También podría ser útil para solucionar problemas de una sección del script. Por ejemplo, el primer objeto mostrado realiza la tarea de buscar varitas y devolver una lista de varitas descubiertas. Buena verificación de que su configuración de bluetooth está funcionando en todos los cilindros. Para hacer esto, puede copiar el código de test1_BLE_wand_detect.py que se encuentra en el siguiente repositorio:

github.com/maspieljr/SmartWand

Paso 4: Configurar la CLI de SmartThings

A continuación se muestra una copia de las instrucciones incluidas en el repositorio smartthings_cli en github (https://github.com/rllynch/smartthings_cli).

He incluido aquí los pequeños ajustes que tuve que hacer en mi configuración para que todo funcionara. Gracias de nuevo a rllynch por proporcionar esto.

1) Inicie sesión y en Mis SmartApps, cree una nueva SmartApp con el código en groovy / app.groovy.

* Tenga en cuenta que en el primer paso hay una referencia a un sitio web de SmartThings. Preste mucha atención a dónde está su cuenta de smartthings. Esto me hizo tropezar por un tiempo ya que el otro sitio me permitió iniciar sesión, pero no pude encontrar ninguna de mis cosas. Tuve que usar el siguiente enlace para acceder a mi cuenta de SmartThings.

(De nada por las 2 horas que pasé resolviendo eso:) esto también será importante en el paso posterior).

2) Haga clic en Configuración de la aplicación y, en OAuth, haga clic en Habilitar OAuth en la aplicación inteligente. Anote el ID de cliente OAuth y el secreto del cliente OAuth. Actualice la pantalla del cliente OAuth a SmartThings CLI Control. Haga clic en Actualizar.

3) Vuelva a My SmartApps y luego haga clic en SmartThings CLI Control. Haga clic en Publicar => Para mí.

4) Clone el repositorio smartthings_cli, cree un virtualenv si lo desea (no hice esto), luego ejecute los siguientes comandos, reemplazando CLIENTID y CLIENTSECRET con la ID y el secreto del paso 2.

Para clonar el repositorio de smartthings, puede utilizar el siguiente comando. Asegúrese de que el símbolo del sistema de Linux esté en el directorio de su proyecto creado durante la configuración del módulo Wand.

clon de git >

then change directory again down to the smartthings_cli directory that was just created.

cd smartthings_cli

python setup.py install

smartthings_cli --clientid clientid --clientsecret clientsecret

5) smartthings_cli will direct you to a url to authorized access. copy the url from the response in the command window and be sure to update it with the proper path as we had to in step 1. go to that url in a browser and specify which devices the cli should be able to access. click authorize when finished. you should be redirected to a page reporting smartthings_cli.py received auth code.

last few things i needed to do in order to get rid of a warning that kept coming up:

sudo apt-get install libssl-dev

pip install service_identity

pip install attrs pip install pyopenssl pip install pyasn1 pip install pyasn1-modules pip install ipaddress

raspberry pi should now be set-up to issue smart thing commands from the command line interface, try it out with these examples:

smartthings_cli query switch all

smartthings_cli query switch "switch name"

smartthings_cli set switch "switch name" on

step 5: improve response

everything is running at this point but there's a bit of a lag once the wand gesture is captured. in attempt to speed up the response, i've embedded the smarthings logic into the smartwand python script rather than calling it from a command line as it does in smartwand.py. this eliminated the need to repeatedly import the modules required for smartthings communication, which is what was slowing everything down. here's what i had to do to get that working:

python3 -m pip install future

python3 -m pip install twisted

made update to the python script. see smartwand2.py stored in the following repo:

github.com/maspieljr/smartwand

step 6: make smartwand execute on raspberry pi bootup

so you only need to plug in the raspberry pi near your smartthings things and not require a monitor, and keyboard, i followed these instructions to get the script to run on boot or any time a command line terminal is launched. the script seems pretty robust but does get hung up from time to time, requiring a reboot. alternatively you could have a keyboard connected and use alt+f4 to kill a running script and ctrl+alt+t to launch a new terminal without needing a monitor to see anything.

method 2: modify the.bashrc file as described in the link below:

www.dexterindustries.com/howto/run-a-progr…

Recomendado: