Inhaltsverzeichnis:

SmartWand - Gunook
SmartWand - Gunook

Video: SmartWand - Gunook

Video: SmartWand - Gunook
Video: LELO Smartwand Massager Medium Review | PABO 2024, November
Anonim
SmartWand
SmartWand

Dieses Projekt soll ein Python-Skript erhalten, um Smartthings mit dem Kano-Codierungsstab als Eingabe zu steuern.

Meine Töchter (8 und 12) sind große Harry-Potter-Fans und haben den Kano Coding Wand zu Weihnachten bekommen. Die Kano-Codierungs-App ist cool und sie haben Spaß damit. Tolles Tool zur Einführung von Codierungskonzepten.

Wir haben auch ein bisschen Heimautomatisierung im ganzen Haus mit SmartThings, Phillips Hue, Logitech Harmony Hub usw Nox auf mich. Hörte sich nach einer lustigen Herausforderung an, also nahm ich sie an.

Musste mit einem Linux-Betriebssystem gehen, da ein kritisches Element (Bluepy-Python-Bibliothek zum Verbinden mit dem Bluetooth-Stab) nur auf Linux-Plattformen verfügbar ist. Praktisch sowieso, wenn man dies schließlich auf einem Raspberry Pi ausführen möchte.

Es gibt hier zwei Hauptreferenzen, ohne die ich dies nie hätte tun können.

Vielen Dank an GammaGames für das Erstellen und Teilen eines Python-Skripts zum Lesen des Kano-Codierungsstabs.

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

und

Vielen Dank an rllynch für die Erstellung und Freigabe eines Python-Skripts für eine SmartThings-Befehlszeilenschnittstelle.

github.com/rllynch/smartthings_cli

Um dies intakt zu halten, werde ich die meisten Schritte in dieses Instructable kopieren, um alle Optimierungen zu erfassen, die ich benötigte, um es an meinem Setup zum Laufen zu bringen.

Hier ist, was Sie brauchen:

  • Harry Potter Kano Coding Kit (https://www.amazon.com/Kano-Harry-Potter-Coding-Ki…
  • Ein Linux-basiertes Betriebssystem (ich habe eines mit VirtualBox zum Laufen gebracht und dann auf einem Raspberry Pi installiert)
  • Ein Bluetooth-USB-Adapter (ich habe einen Kensington Bluetooth 4.0-USB-Adapter verwendet)
  • Internetverbindung (Für das RPi habe ich einen Edimax USB-WLAN-Adapter verwendet, den ich aus einem früheren Projekt hatte)

Schritt 1: Linux auf Raspberry Pi installieren

Folgen Sie den untenstehenden Links, um ein Linux-Betriebssystem auf dem Raspberry Pi zu installieren. Ich habe Raspbian Stretch mit Desktop und empfohlener Software verwendet und mit Etcher geflasht.

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

Sobald Sie die Installation abgeschlossen haben und über eine Linux-Eingabeaufforderung verfügen, sollten Sie die folgenden beiden Befehle ausführen, um sicherzustellen, dass alles auf dem neuesten Stand ist.

sudo apt-get update

sudo apt-get upgrade

Geben Sie Folgendes in die Befehlszeilenschnittstelle ein, um die Desktop-Benutzeroberfläche zu starten.

sudo startx

Als nächstes müssen Sie eine Internetverbindung einrichten, damit Sie zu Repos und dergleichen gelangen können, um weitere Software zu installieren. Außerdem ist eine Internetverbindung erforderlich, um die SmartThings-API aufzurufen. Folgen Sie dieser Anleitung, um eine Verbindung herzustellen. Ziemlich direkt vom Desktop aus. Ich habe einen USB-WLAN-Adapter verwendet, den ich herumgelegt hatte.

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

Alternativ zum Raspberry Pi können Sie einen anderen vorhandenen Computer verwenden, um entweder ein Linux-Betriebssystem zusammen mit Ihrem vorhandenen Betriebssystem zu booten (ein bisschen mühsam, da Sie neu starten müssen, um zwischen den beiden zu wechseln) oder eine Instanz des Linux-Betriebssystems auf einem VirtualBox. Um dieses Projekt zunächst zum Laufen zu bringen, habe ich Debian Stretch mit Raspberry Pi Desktop in einer virtuellen Box mit dieser Anleitung installiert:

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

(Anmerkung: Ich hatte eine verdammt lange Zeit, Gast-Add-Ons gemäß den obigen Anweisungen richtig zu installieren. Das Ausschneiden und Einfügen zwischen Host und Client funktionierte nie, was schön gewesen wäre, aber ich habe es geschafft, die Auflösung zu aktualisieren, um sie zu verwenden meine volle Monitorgröße. Dies war eine Reihe von Google-Rabit-Löchern, die ich hier nicht dokumentieren werde.)

Schritt 2: Python 3 installieren

Python3 sollte bereits mit Raspian Stretch installiert sein.

Schritt 3: Zauberstabmodul einrichten

Folgen Sie dieser Anleitung von GammaGames

Ich musste zuerst in ein anderes Verzeichnis wechseln, bevor ich das kano_wand-Repository klonen konnte, sonst konnte mein Python-Skript es nicht finden. Ich hätte wahrscheinlich irgendwo einige Pfadverweise in einer Datei aktualisieren können, aber ich habe mich nicht damit befasst.

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

Git-Klon

sudo pip3 install bluepy moosegesture

Musste sudo verwenden, um die richtigen Berechtigungen zu erhalten. Musste auch die folgenden Befehle verwenden, um numpy aus irgendeinem Grund zu installieren, konnte pip nicht zum Laufen bringen. Könnte ein anderes Pfadproblem gewesen sein, aber das hat für mich funktioniert, also bin ich damit gegangen:

sudo apt-get install python3-numpy

Schließlich habe ich diesen Befehl gefunden, um die richtigen Berechtigungen zum Ausführen von Bluepy über das Python-Skript zu erhalten.

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

Dies ist alles, was erforderlich ist, um unser Skript zum Laufen zu bringen. Der Rest des GammaGames-Leitfadens führt Schritt für Schritt durch die im Python-Skript erforderlichen Teile. Es ist eine großartige Aufschlüsselung, um besser zu verstehen, wie das Skript strukturiert ist und was jedes Objekt tut. Vielen Dank an GammaGames für die Bereitstellung dieser Dokumentation. Könnte auch für die Fehlerbehebung in einem Abschnitt des Skripts nützlich sein. Zum Beispiel führt das erste angezeigte Objekt die Aufgabe durch, nach Zauberstäben zu suchen und eine Liste der entdeckten Zauberstäbe zurückzugeben. Gute Bestätigung, dass Ihr Bluetooth-Setup auf allen Zylindern feuert. Kopieren Sie dazu den Code von test1_BLE_wand_detect.py aus dem folgenden Repo:

github.com/maspieljr/SmartWand

Schritt 4: SmartThings-CLI einrichten

Nachfolgend finden Sie eine Kopie der Anweisungen im smartthings_cli-Repo auf github (https://github.com/rllynch/smartthings_cli).

Ich habe hier die kleinen Optimierungen aufgenommen, die ich an meinem Setup vornehmen musste, damit alles funktioniert. Nochmals vielen Dank an rllynch für die Bereitstellung.

1) Loggen Sie sich ein und erstellen Sie unter My SmartApps eine neue SmartApp mit dem Code in groovy/app.groovy.

*Beachten Sie, dass im ersten Schritt ein Verweis auf eine SmartThings-Website vorhanden ist. Achten Sie genau darauf, wo sich Ihr smartthings-Konto befindet. Dies hat mich für eine Weile zum Stolpern gebracht, da ich mich auf der anderen Seite anmelden konnte, aber nichts von meinen Sachen finden konnte. Ich musste den folgenden Link verwenden, um zu meinem SmartThings-Konto zu gelangen.

(Sie sind herzlich willkommen für die 2 Stunden, die ich damit verbracht habe, das auszusortieren:) Dies wird auch in einem späteren Schritt wichtig sein.)

2) Klicken Sie auf App-Einstellungen und unter OAuth auf OAuth in Smart App aktivieren. Notieren Sie sich die OAuth-Client-ID und das OAuth-Client-Geheimnis. Aktualisieren Sie die OAuth-Client-Anzeige auf SmartThings CLI Control. Klicken Sie auf Aktualisieren.

3) Gehen Sie zurück zu My SmartApps und klicken Sie dann auf SmartThings CLI Control. Klicken Sie auf Veröffentlichen => Für mich.

4) Klonen Sie das smartthings_cli-Repository, erstellen Sie bei Bedarf eine virtualenv (ich habe dies nicht getan), führen Sie dann die folgenden Befehle aus und ersetzen Sie CLIENTID und CLIENTSECRET durch die ID und das Geheimnis aus Schritt 2.

Um das Smartthings-Repository zu klonen, können Sie den folgenden Befehl verwenden. Stellen Sie sicher, dass sich die Linux-Eingabeaufforderung in Ihrem Projektverzeichnis befindet, das während des Wandmodul-Setups erstellt wurde.

Git-Klon >

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…