Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

15 Schritt:Schritt 1: Anforderungen Schritt 2: Einrichten Azure 1: einen Crash-Kurs in Azure Schritt 3: Einrichten Azure 2: Erstellen Sie Ihre Azure Service Bus Schritt 4: Einrichten Azure 3: Erstellen von Themen und Abonnements Schritt 5: Einrichten der Raspberry Pi 1: Konfiguration der Umgebung Schritt 6: Einrichten der Raspberry Pi 2: Codierung der Ersteinrichtung Schritt 7: Einrichten der Raspberry Pi 3: Codierung der Zeichnungs Schritt 8: Erstellen Sie Ihre Windows Phone App Teil 1: Einführung in Windows Phone 8.1 Schritt 9: Erstellen Sie Ihre Windows Phone App Teil 2: Konfigurieren und Navigieren im Projekt Schritt 10: Erstellen Sie Ihre Windows Phone App Teil 3: Azure auf Windows Phone 8.1 Schritt 11: Erstellen Sie Ihre Windows Phone App Teil 4: Cortana Schritt 12: Erstellen Sie Ihre Windows Phone App Teil 4: Codierung Cortana - SSML Schritt 13: Erstellen Sie Ihre Windows Phone App Teil 4: Codierung Cortana - Logic Schritt 14: Das fertige Produkt! Schritt 15: Fehlersuche und Referenzen

Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

Einführung


Es gibt neue Technologien überall um uns herum, und nur mehr kommen jeden Tag. Unsere Mikrocontroller werden immer schneller, sind Handys immer intelligenter, und die Wolke wird immer stärker. Mit all dieser neuen Technologie alle fragen sich: Wie kann ich nutzen, sie alle?
Nun, heute werden wir genau das tun. Dieses Handbuch wird Sie durch Verwendung eines Raspberry Pi, Microsoft Azure, und Cortana auf Windows Phone zu Ihrem Haus halten zu automatisieren gehen. Haben Sie vergessen, das Licht auszuschalten, wenn Sie zur Arbeit gegangen? Kein Problem. Willst du auf der Slow-Cooker drehen ein paar Stunden, bevor Sie nach Hause kommen? Betrachten Sie es als erledigt. Wir können die Macht des Internet der Dinge und Cortana nutzen, um unser Haus in einer völlig neuen Art und Weise zu kontrollieren!

Goals


Für diese Anleitung ist es unser vorrangiges Ziel, einen Proof-of-Concept-Gerät Zyklus, der funktionsfähig ist zeigen und wirklich können Sie die Leistung von Kämmen all diese technologischen Ressourcen. Wir werden nicht so die Produktion bereit Code zu sehen und gewann ' t werden unter Verwendung jedes Gerät / Technologie in vollen Zügen Fähigkeit. Dieses Handbuch ist schon ziemlich lange all den Boden haben wir zur Deckung gegeben, und dabei eine vollständige Eintauchen in jeder würde uns ganz den Roman zu geben. Stattdessen sind wir auf etwas, das die meisten "bastelt", solange sie die Hardware und eine begrenzte Programmierkenntnisse haben machen könnte Fokussierung. Wir möchten, dass Sie eine funktionierende Projekt zu geben und zu inspirieren, um sie noch weiter zu drücken. Dieses Projekt ist Ihre "Erste Schritte" Führung und der eigentliche Spaß beginnt, wenn Sie den Hörer danach!

Schritt 1: Anforderungen

  1. Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Wissensbedarf


    Wir haben versucht, diese Anleitung als "freundlich" wie möglich an das allgemeine Publikum zu machen, aber in Ordnung für uns, schnell zu bewegen und zu kondensieren die Führung nach unten von einer dreistündigen Epos zu einer 1-stündigen Projekt haben wir annehmen, dass Sie wissen, ein wenig etwas, bevor die Hand.
    * Sie wissen nicht, was? Keine Sorge! Während der gesamten Führungs wir sind viele Links zu anderen Quellen, wo Sie oben vorher zu studieren und zu fangen schnell!
    1. Begrenzte Python und C # Kenntnisse
    Grundlegende Programmierkenntnisse benötigt werden. Wir werden nicht tauchen in alles zu kompliziert sein, aber es ist gut, ein grundlegendes Verständnis dieser beiden Sprachen haben
    2. Raspberry Pi-Grundlagen
    Denn es ist ein bisschen mehr beliebt im Vergleich zu Windows Phone und Azure, ich will nicht zu gehen, in der Tiefe zur Einrichtung Ihres Raspberry Pi und Verdrahtung sie alle zusammen. Es gibt auch viele gute Tutorials gibt bereits an Ihnen den Einstieg erleichtern. Stellen Sie sicher, dass Sie in eine ssh können, Ihre grundlegenden Linux-Befehle, und sich wohl fühlen Putting eine Schaltung zusammen (eine sehr grundlegende eins).
    3. Allgemeine App Development Wissen (Windows Phone ein Plus!)
    Offensichtlich, da werden wir Cortana verwenden wir ein Windows Phone app bauen. Beim Einrichten des Projekts ist nicht allzu schwer, und wir werden nicht alles zu kompliziert zu tun, es ist eine gute Idee, ein grundlegendes Verständnis der Anwendungsdateien und was sie zu tun haben. Der Code-Logik gegenüber der Design-Logik, Anwendungsmanifest usw. Wenn alle diese Schlagworte sind zweite Natur zu Ihnen, dann nicht zu kümmern. Andernfalls stellen Sie sicher, auf den in diesem Abschnitt des Handbuchs zur Verfügung gestellten Ressourcen nachlesen.

    Hardware-Anforderungen


    Was wäre ein Projekt ohne eine süße Hardware dahinter? Dieses Projekt wird eigentlich recht kahl in der Hardware-Abteilung und zu probieren eine Menge auf der Software. Wir werden durchgehen, wie die spezifische Software-Pakete zu installieren, unmittelbar bevor sie in dem Bemühen, machen, dass Prozess einfacher benötigt werden.
    Ein Windows-8-Computer mit Windows Phone 8.1 Software-Update (Muss Cortana!) Raspberry Pi
    SD-Karte mit Raspbian für Rasberrry Pi (NOOBS funktioniert prima) 3 Drähte für Ihre einfache Schaltung 1 LED 1 270-Ohm-Widerstand Breadboard für Ihren LED-Schaltung

Schritt 2: Einrichten Azure 1: einen Crash-Kurs in Azure

  1. Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Es ist sehr wahrscheinlich, dass Sie noch nie verwendet haben, einen Dienst wie Microsoft Azure, so dass wir beginnen mit ein bisschen wie ein Crash-Kurs. Natürlich werden wir nicht alles abdeckt (das ist, was die Stunden und Stunden der Online-Material ist für), sondern die Konzentration auf, was genau wir tun. Auf diese Weise werden nicht nur den Aufbau einer Blackbox und haben keine Ahnung, dass Magie passiert hinter den Kulissen, sondern eine hochrangige konzeptionelles Verständnis. Dies ermöglicht es Ihnen, auf sie in der Zukunft zu erweitern, und auch die Absicht hinter warum wir mit Azure gegen einen anderen Dienst zu verstehen.

    Warum Azure?


    Warum nicht node.js? Das ist wahrscheinlich eine Frage viele von euch werden sich fragen, und es ist eine sehr berechtigte Frage. Warum nicht einfach eine Grund REST-Server, die wir treffen, um unsere Geräte den Befehl zu erstellen? Nun das Problem ist, dass wir in Zukunft leben, und die Zukunft ist alles über das Internet der Dinge (IoT). IoT befasst sich mit Zehn wenn nicht Hunderte von kleinen Geräten im ganzen Haus, alle angeschlossenen Ihnen beispiellose Kontrolle. Wird ein einfacher Knoten Server auf einem Pi laufen in der Lage, all das zu bewältigen? Ist nicht mit allen dieser flippige Server-Code ein weiteres Führungs sich (wenn nicht ein ganzes Buch) in seinem eigenen Recht? Ja, ja, es ist, und das ist, warum Azure ist hier zu Hilfe. Während wir wirklich nicht sehen, die Vorteile von Azure in dieser Anfangsführer, weil wir nur Einhaken ein Gerät, sobald wir anfangen, hook up immer mehr Geräte haben wir in der Lage, die wahren Vorteile sehen.

    Was werden wir machen?


    Für unser Projekt werden wir einen Service Bus, die Themen und Abonnements zu verarbeiten machen. Mach dir keine Sorgen, ich weiß, dass wir viel schöne Worte werfen um früh, aber ich versichere Ihnen, dass es nicht lange dauern, um ein grundlegendes Verständnis zu bekommen. Ein Service Bus, kurz gesagt, eine sehr robuste Messaging-Framework, das als Relais zwischen zwei (oder mehr) Endpunkte dient. Es ist im Wesentlichen die magische "Wolke", die wir so viel hören. Etwas, sendet er eine Nachricht, es entscheidet, wo die Nachricht gehen soll, sendet er, und ein anderes Gerät erhält die Nachricht. Der Service Bus wird unsere Mail-Sortieranlage, sinnvoll?
    Also, was über diese Themen und Abonnements? Warum wir nicht nennen sie können nur Nachrichten? Nun, weil es nicht ganz so einfach. Ein Thema enthält eine Nachricht, aber man kann nicht sagen, dass ein Thema ist eine Botschaft. Es ist einfach nicht richtig. Also, was ist ein Thema, dann? Ein Thema bildet eine Beziehung (logisch und physikalisch) zwischen Verlegern und Abonnenten, so dass ein Verlag (Cortana) können Nachrichten an mehrere Teilnehmer (alle unserer IoT-Geräte) zu veröffentlichen. Betrachten Sie es mal so: Sagen wir, wir hatten 10 verschiedene IoT-Geräte rund um unser Haus, alle bis zu verschiedenen Lichtschalter angeschlossen. Als wir geben den Befehl "Mach das Licht aus" wir um eine Nachricht an jeden IoT-Gerät sagen sie zu deaktivieren senden wollen, aber wir wollen nicht, dass zu 10 verschiedene Nachrichten senden. Darüber hinaus ist, wie viel von einem Schmerz es, dass jedes Mal, wenn wir eine IoT-Gerät hinzufügen müssen wir erneut unsere gesamte Code Cortana Logik? Stattdessen veröffentlichen wir eine Mitteilung zum Thema "LightControls" und das Thema veröffentlicht nun an alle Teilnehmer (die würde jeder IoT-Gerät, das einen Lichtschalter kontrolliert werden), um auf die Position "OFF" zu gehen.
    Immer noch verwirrt? Mach dir keine Sorgen, das ist nicht etwas, das leicht zu erlernen ist (geschweige denn zu erklären) in einem Absatz oder zwei. Wenn Sie noch mehr erfahren möchten, sind hier einige große Ressourcen:
    Einführung in Warteschlangen und Themen in Azure Service Bus - Kodex Magazine
    Wie die Benutzer Service Bus Themen / Abonnements - Microsoft
    Windows Azure Service Bus Themen und Abonnements - Neudesic

    In einer Nussschale ...


    Cortana wird eine Nachricht an ein Thema auf dem Service Bus (die Wolke) zu senden. Unsere Wolke sendet dann die Nachricht an jedem Gerät, das "abonniert" hat zu diesem Thema. Also, wenn wir senden "DeskLightsOff" zum "Lightcontrol" Thema wird unsere DeskLights um sie abonniert haben, wird es erhalten und dann diesen Befehl zu verarbeiten.

Schritt 3: Einrichten Azure 2: Erstellen Sie Ihre Azure Service Bus

  1. Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Time to-Code! Na ja ... noch nicht. Erstens haben wir zum Aufbau unserer Azure Service Bus. Microsoft hat eine ziemlich glatt Online-Schnittstelle, die tatsächlich können wir die ganze Sache zu schaffen, ohne die Eingabe einer einzigen Code-Zeile vorgesehen. Ziemlich Cool. Lasst uns anfangen!

    1. Erstellen Sie Ihr Konto Azure


    Die Chancen sind Sie nicht über ein Konto Azure, so müssen Sie für die kostenlose Testversion anmelden . Es ist recht geradlinig, obwohl Sie benötigen, um eine Kreditkarte einzugeben
    Über die Zahlung monatlich dafür besorgt? Unterlassen Sie. Die Service-Bus werden wir einrichten werden wahrscheinlich erhalten weniger als 1 Million Anrufe pro Monat. Es kostet derzeit ca. € 1,00 für 30 Millionen. Sie werden ein paar Groschen zahlen am meisten. Falls Sie über die kostenlose Testversion auch weiterhin, jedoch möchten, müssen bereit zu berappen etwa 11 € pro Monat.

    2. Erstellen Sie eine Service Bus

    Melden Sie sich im Azure Management Portal , nachdem Sie Ihr Konto erstellt haben. Abbildung 1:. Klicken Sie auf "Service Bus", um zum "Service Bus Dashboard gehen. Abbildung 2: Klicken Sie auf" Erstellen "im unteren Fensterbereich Bild 3: Geben Sie in einen Namen für Ihren Namensraum (muss eindeutig sein!). Beachten Sie, dass meine Region Central US, weil das ist, wo ich bin. Azure wird wahrscheinlich in welcher Region sie denkt, ist am besten ausgedrückt, und Sie sollten lassen Sie es einfach. Klicken Sie auf das Häkchen in der unteren rechten Ecke, um fortzufahren. Ihr Namespace wird "Aktivieren" Nach einer kurzen und dann Boom! Ihr Service Bus wurde erstellt! *** HINWEIS *** Aus diesem Führer, habe ich meine Namespace "CustomNamespace" benannt. Überall, wo Sie sehen, dass String, sollten Sie es mit Ihrem eigenen Namespace-Namen zu ersetzen.

    Rekapitulieren


    Also im Grunde alles, was wir haben hier mit Azure loszulegen. Wir haben ein Konto und dann einen Service Bus. Denken Sie daran, dass ein Service Bus bietet uns eine Cloud "Post sortieren Facility", aber im Moment, dass der Einrichtung nicht wirklich jede Richtung haben. Im nächsten Schritt werden wir uns auf das Hinzufügen eigentliche Logik mit Themen und Abonnements zu arbeiten.

Schritt 4: Einrichten Azure 3: Erstellen von Themen und Abonnements

  1. Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Jetzt, da wir die Service Bus erstellt haben, ist es Zeit, unsere Themen und Abonnements hinzuzufügen. Denken Sie daran, von unserem vorherigen write-up, die wir Nachrichten zu einem Thema, das dann an einen oder mehrere Abonnements weitergeleitet senden.

    Konzeptionelle Setup-


    Bevor wir gerade anfangen zu hacken, werfen wir einen Schritt zurück und denken Sie daran, was genau wir tun. Schauen Sie Abbildung 1 und stellen Sie sicher, Sie haben eine Idee von dem, was vor sich geht. Wir werden nicht zu schaffen, dass die genaue Modell heute, aber es ist definitiv etwas, das Sie weiter die Straße hinunter tun konnte. Wir haben eine LightTopic die gehen, zu sein, wo wir senden Befehle, die sich mit Ausschalten der Beleuchtung. Wir haben dann unsere LightSubscription die wir DeskLightSubscription beschriften, weil es ist, was wir den Schreibtisch Lichter (die LED haben wir bis zum Pi hakt) hören möchten.

    1. Erstellen Sie die 'LightTopic' Topic

    Abbildung 2. Klicken Sie auf Ihren Service Bus, um zum Service Bus Armaturenbrett Abbildung 3. Klicken Sie auf "Themen" auf der oberen Platte gehen, um zu den Themen Seite Abbildung 4. Klicken Sie auf "Ein neues Thema" Abbildung 5. Geben Sie in 'gehen LightTopic "(oder was auch immer Sie es nennen wollen) dann auf" Ein neues Thema '
    Toll! Wir haben unser erstes Thema erstellt. Dies ist, wo wir alle unsere Befehle von Cortana schicken.

    2. Erstellen Sie die 'LightSubscription' Subscription

    Abbildung 6. Klicken Sie auf "Neues Abonnement" Am unteren Rand der Seite Ihre Themen (wo Sie aufgehört haben) 7. Geben Sie 'LightSubscription "in das Textfeld und klicken Sie auf den Pfeil in der rechten unteren Ecke. Abbildung 8 Sie.' werde zu einem 'Details' Seite entnommen werden. So dass alles auf die Standardwerte in Ordnung sein, so einfach wieder auf den Pfeil klicken. Abbildung 9. Sobald Sie zurück zum Topic-Dashboard gehen, werden Sie feststellen, dass es jetzt ein Abonnement zu dem Thema beigefügt.

    Rekapitulieren


    Jawohl. Wir sind fertig. Es ist wirklich so einfach. Nun, die Navigation durch Azure kann ein wenig einschüchternd auf den ersten, vor allem mit all den verschiedenen Begriffe, die wir nicht alle mit vertraut sein. Wie wir aber gesehen haben, ist der Prozess eigentlich ziemlich einfach. Ich weiß, dass es nicht das Gefühl, wir haben nichts getan, weil es nicht wirklich etwas materielle oder Code, und leider wird es nicht für eine Weile. Aber wir haben einen wesentlichen und wichtigen Teil unseres Projektes erstellt!

Schritt 5: Einrichten der Raspberry Pi 1: Konfiguration der Umgebung

  1. Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Nun, da wir unsere Azure Service Bus Setup hat, ist es Zeit, um das Setup unserer IoT-Gerät, AKA unsere Raspberry Pi.

    Was unsere Raspberry Pi Will Do:


    Zur Erinnerung, unsere Raspberry Pi einfach da, um ein IoT Sklave sein. Er wird tun, was er sagte zu tun, die entweder an oder aus den Lichtern ist einzuschalten. In Zukunft könnte dies zu dem Senden von Nachrichten über verschiedene Variablen Sie messen möchten erweitert werden, aber jetzt werden wir es einfach aus Gründen der Zeit und der Länge der in diesem Handbuch, um zu halten. Die Pi zu unserem 'LightSubscription' angebracht werden und hören Sie zu jeder Zeit wird es eine Nachricht von diesem Abonnement, die selbstverständlich von unserem Thema ausgelöst ist.

    Hardware-Setup


    Einrichten der Schaltung, die sich mit GPIO und allgemeine Raspberry Pi shenanigans ist ein wenig über den Rahmen dieses Handbuchs, einfach weil es buchstäblich eine instructable in sich. Im Grunde, eine allgemeine Setup müssen Sie ein sehr einfaches "Blinky" Schaltung mit Raspberry Pi erstellen zu bekommen. Wenn Sie Hilfe bei dem benötigen, würde ich sehr empfehlen Auschecken ein paar von diesen Führungen, die die Deckung unterliegt .

    Software Setup


    Nun, da Sie eine grundlegende Schaltung führte die Arbeit an Ihrem Pi haben, wir brauchen, um die Software-Pakete benötigt, um mit unseren Azure Service Bus interagieren zu installieren. Zum Glück für uns gibt es eine Python-SDK für Azure , die ganz gut funktioniert. Wir können einfach git, um den Repo unten zu klonen, und installieren Sie es auf unserer Maschine:
      >>>> Git clone https://github.com/Azure/azure-sdk-for-python.git
     >>>> Cd azur-sdk-for-python 
     >>>> Python setup.py install 

    Wenn Sie irgendwelche Probleme, stellen Sie sicher, dass Sie eine "Update" und "Update" getan haben vor kurzem.
      >>>> Sudo apt-get update
     >>>> Sudo apt-get upgrade 

    Um zu testen, und stellen Sie sicher, dass die Azure SDK korrekt installiert, gehen Sie die folgenden Befehle ein und stellen Sie sicher, die Ausgabe ist die gleiche:
      >>>> Python  
     Python 2.7.3 
     >>>> Import azur
     >>>> 
     >>>> Exit () 

    Wenn es richtig installiert, die Eingabe der Linie `import azure'` sollte in einer leeren Zeile folgenden es führen. Geben Sie einfach `exit ()`, um den Python-Terminal zu verlassen.

Schritt 6: Einrichten der Raspberry Pi 2: Codierung der Ersteinrichtung

  1. Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    In Ordnung! Zeit, um tatsächlich erhalten und schmutzig mit einigen Code! Der Code für das ist eigentlich ziemlich einfach, und es ist nur etwa 50 Zeilen Code. Davon abgesehen, werden wir versuchen und zu Fuß durch sie langsam, so dass Sie ein besseres konzeptionelles Verständnis, wie es funktioniert bekommen kann. Wenn Sie wollen einfach nur "Grab and Go" so zu sprechen, wird die gesamte Datei für diejenigen, die dies wünschen, befestigt.

    Import Libraries


    Wir haben eine ganze Reihe von Bibliotheken müssen wir importieren für alle diese beweglichen Teile, um zu arbeiten. Denken Sie daran, dass wir auch die Steuerung der Stifte, werden wir brauchen, um die GPIO-Funktionalität als auch importieren. Insgesamt sollte die Spitze Ihrer Import-Anweisungen wie folgt aussehen:
      Import RPi.GPIO als GPIO # Für die Steuerung der Pins <br> import Einfädeln #Um Run Async
     import sys
     Import auswählen
     von azure.servicebus import *
     import os 

    Die 3 auch sonderbare, sind offensichtlich die GPIO, Threading und Azure-Bibliotheken. Der mittlere, Gewindeschneiden, vielleicht ein wenig seltsam auf den ersten Blick. Im Wesentlichen müssen wir es, um sicherzustellen, sind wir aktiv "Hören" an den Server zu erhalten. Um dies effektiv zu tun, laufen wir, dass "Hören" auf einem separaten Thread.

    Konstante erzeugen Variablen


    Ja, kann dies scheinen ein wenig trivial, aber es wird auch helfen, eine Menge mit dem Verständnis der Verbindung zwischen Azure und Python. Der Code ist ziemlich geradlinig:
    # Achten Sie folgende Einstellungen vornehmen:
      AZURE_SERVICEBUS_NAMESPACE = 'CustomNamespace'
     AZURE_SERVICEBUS_SHARED_KEY_NAME = 'RootManageSharedAccessKey'
     AZURE_SERVICEBUS_ACCESS_KEY_VALUE = '<INSERT_YOUR_ACCESS_KEY_HERE>'
     GPIO_BCM_PIN = 11 # Die Pin Ihre LED wird durch kontrollierte 

    Die "Namespace" und "GPIO 'Variablen sollte ziemlich offensichtlich sein, aber die beiden mittleren könnte zu Verwirrung führen. Im Wesentlichen ist dies Ihre speziellen "login Key", die Zugriff auf Ihre Azure Service Bus gewährt wird. Im Moment keine Gedanken darüber machen (Wir werden es herausfinden, wo dieser Key in der nächsten Stufe zu bekommen!).

    Richten Sie Lichter auf Start-up


    Immer, wenn wir anfangen, unser Programm wollen wir unsere Leuchten zu geben (oder in unserem Fall, unsere kleine LED) einen bestimmten Zustand. In diesem Fall werden wir es an "OFF" gesetzt
      # Setup die GPIO für die LED-
     GPIO.setmode (GPIO.BCM)
     GPIO.setup (GPIO_BCM_PIN, GPIO.OUT)
     # Zunächst schalten Sie die LED
     GPIO.output (GPIO_BCM_PIN, 0) 

    Starten Sie Eingehende Nachrichten Themen


    Hier ist, wo wir beginnen, um die Magie zu arbeiten. Wir werden einen Thread zu erstellen und haben es eine neue Funktion (die wir noch nicht erstellt) Ziel process_messages genannt. Wir werden diese Funktion in der nächsten Stufe zu schaffen. Denn jetzt, erstellen wir und starten Sie den Faden.
      # Beginnen einen Thread auf eingehende Nachrichten
     t = threading.Thread (target = process_messages) #will erstellen nächsten Schritt 'process_messages'
     t.daemon = True;
     t.start ()
    

    Warten Aufräum


    Wir werden dann "warten" für jede raw_input unserer Benutzer. Im Grunde dieses Programm nicht beenden, es sei denn jemand einen Schlüssel trifft. Schließlich werden wir alle GPIO Ressourcen freizugeben, um eine sichere Ausfahrt aus unserem Programm zu gewährleisten.
      # Warten, bis der Benutzer etwas eingibt
     char = raw_input ("Drücken Sie die Eingabetaste, um Programm zu beenden")
     # Lösen keine GPIO-Ressourcen
     GPIO.cleanup () 

    Rekapitulieren


    Was bedeutet dieser Code tun? Nun, nicht viel. In der Tat in nicht einmal richtig zu kompilieren jetzt (wir verpassen, dass process_messages Funktion!). Aber wir haben die Struktur für das Internet der Dinge, wie unser Gerät funktionieren wird eingestellt. Wir werden das Licht auf "OFF" gesetzt ist, dann hört für jeden Befehl aus dem Service Bus auf einem separaten Thread. Der nächste Schritt wird uns zeigen, wie man das macht.

Schritt 7: Einrichten der Raspberry Pi 3: Codierung der Zeichnungs

  1. Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Dieser Schritt komplett dreht sich um die process_messages Funktion, über die wir gesprochen im vorherigen Schritt. Wir werden die Python Azure SDK verwenden, um sich aktiv für Nachrichten hören von der Azure-Abonnement und aktualisiert entsprechend unserer LED.

    Den Service Bus-Objekt zu initialisieren


    First things first, werden wir dies schaffen "process_messages () 'Funktion und dann den Service-Bus-Objekt.
      def process_messages (): # Initialisieren Sie den Service-Bus
         service_bus = ServiceBusService (service_namespace = AZURE_SERVICEBUS_NAMESPACE, shared_access_key_name = AZURE_SERVICEBUS_SHARED_KEY_NAME,			
    	  shared_access_key_value = AZURE_SERVICEBUS_ACCESS_KEY_VALUE
     )
    

    Ziemlich einfach, nicht wahr? Beachten Sie, dass wir nutzten unsere Namespace, Schlüsselname und Schlüssel Wert, um zum Service Bus anschließen. Dies sind die wichtigsten Dinge, die Sie wirklich melden Sie sich an und interagieren mit Ihrem Service Bus. Wir werden herausfinden, wie Sie die Schlüssel und Wert am Ende dieser Schritt hinzuzufügen.

    Holen Sie sich das Thema und Abonnement


    Ziemlich einfach. Wir werden unser Thema 'LightTopic "und" LightSubscription' Subscription 'zu bekommen. Auf diese Weise unseren Service Bus weiß, wer zu interagieren.
      service_bus.get_topic ("lighttopic")
     service_bus.get_subscription ("lighttopic", "lightsubscription") 

    Looping und Logic


    Jetzt kommt der interessante Teil. Wir werden eine Grund tun "Während True 'Schleife (eine Endlosschleife), sich aktiv für unsere Abonnement zu hören.
      while True:      
           msg = service_bus.receive_subscription_message ('lighttopic', 'lightsubscription', peek_lock = False)
           wenn msg.body nicht None:
             print (msg.body)
             wenn msg.custom_properties ["LED"] == 1:
                 print ("Einschalten der LED")
                 GPIO.output (GPIO_BCM_PIN, 1)
             sonst:
                 print ("Ausschalten der LED")
                 GPIO.output (GPIO_BCM_PIN, 0)
    

    Wie Sie sehen, haben wir ein paar Debugging-Anweisungen in hier (durch Drucken der Nachrichtentext an die Konsole, zusammen mit LED-Kommandos). Sie sind frei, sie zu löschen, wenn Sie möchten.
    Dieser Code ist ziemlich geradlinig. Unsere 'msg' Objekt bekommt, was Mitteilung vom Bezugs kam, und dann schauen wir uns die custom_properties davon. Wenn es ein Objekt 'geführt', die 1 entspricht, wenden wir die LED auf. Andernfalls wenden wir es ab. Wenn wir anfangen zu programmieren Cortana und befassen sich mehr mit der Publishing-Seite der Dinge, werden wir sehen, wie genau wir mit diesem 'led' benutzerdefinierte Eigenschaft zu interagieren.

    Finden und eintragen Azure Key


    Ja, ich weiß, ich bin ein necken. Es war das erste, was ich mit gestartet und jetzt bin ich mit der Endung es. Der Prozess ist ziemlich geradlinig:
    Gehen Sie zu Ihrem "CustomNameSpace Dashboard auf der Azure Management Portal Klicken Sie auf" Konfigurieren "Sie werden sehen, sehen ein Abschnitt mit der Bezeichnung" gemeinsamer Zugang Schlüsselgenerator "Die" Richtlinienname "ist Ihr Schlüsselname Der" Primärschlüssel "ist Ihr Schlüssel Wert Legen Sie diejenigen, zwei Dinge in den Code in ihre jeweiligen Spots Siehe Abbildung 1. Hilfe

    Führen Sie Ihren Code!


    Und jetzt sind Sie bereit zu laufen! Alles sollte kompilieren und zu arbeiten. Wenn nicht, lesen Sie bitte zuerst die beigefügten Beispielcode, um zu sehen, wenn Sie irgendwelche Teile verpasst.
    Davon abgesehen, ist es wirklich nicht viel zu tun. Das ist, weil gerade jetzt ist es nur hören, aber wir nichts Senden! Es ist nur da sitzen und glücklich auf eine leere Wolke hören. Als nächstes werden wir in Cortana und Windows Phone zu tauchen, um eine Nachricht in die Cloud zu veröffentlichen, so dass unsere Pi hat tatsächlich eine Nachricht zu hören!

Schritt 8: Erstellen Sie Ihre Windows Phone App Teil 1: Einführung in Windows Phone 8.1

  1. Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Einführung in die Fenster der Phone 8.1


    Trotz seines geringen Marktanteil, das ist wirklich Fensters Phone ein großes Telefon, das Ihnen eine Menge Energie als Entwickler. Weil ich weiß, dass es nicht die am häufigsten entwickelte Plattform zu sein, und nicht jeder mit C # hier auskennt, werde ich versuchen, ein wenig langsamer und mit ein bisschen mehr Detail in diesem Abschnitt der instructable gehen. Wenn Sie bereits komfortabel mit der Fenster Phone-Plattform, Natural Language Processing (SSML) und C #, werden Sie wahrscheinlich in der Lage, durch diese ziemlich schnell zip sein. Ansonsten greifen eine Tasse Kaffee, finden Sie einen bequemen Stuhl und anschnallen. Wir haben eine App zu schreiben, bekam!

    Einrichten der Umgebung


    First things first, wie bei allen Codierung Projekte, ist die Einrichtung unserer Umwelt. Wenn Sie noch nie mit C #, bevor entwickelt, die Chancen sind Sie nicht einmal Visual Studio installiert könnten. Lassen Sie uns alles einzurichten.
    Stellen Sie sicher, haben Sie einen Computer mit Windows 8 läuft, müssen Sie dies! Wenn Sie nicht über Visual Studio, laden Sie Visual Studio Gemeinschaft 2013 mit Update 4 Die Windows Phone SDK 8.1 sollte mit Visual Studio Gemeinschaft installiert werden Wenn Sie ein Windows Phone haben, werden Sie wollen, um es für die Entwicklungs registrieren
    Nicht zu hart, nicht wahr? Visual Studio ist ein großer Download und ein recht großes Software-Paket. Es kann einige Zeit zu installieren, aber es funktioniert in der Regel aus der Box ziemlich gut. Als Nächstes werden wir beginnen auf tatsächlich die Schaffung unserer Windows Phone App!

Schritt 9: Erstellen Sie Ihre Windows Phone App Teil 2: Konfigurieren und Navigieren im Projekt

  1. Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Erstellen Sie Ihre Anwendung
    Lassen Sie uns gehen Sie vor und erstellen unsere Windows Phone 8.1-Projekt, dann können wir durch einige der Nitty Gritty gehen und entdecken Sie, was drin ist.
    Abbildung 1 - Klicken Sie auf "Neues Projekt ..." 2 - Schauen Sie unter: Templates> Visual C #> Store Apps und sollten Sie eine Projektvorlage mit dem Namen 'Blank App (Universal Apps) "zu sehen. Wählen Sie es aus, und geben Sie einen Namen für die Home Automation App.
    * HINWEIS * - ich meine App "BACH", die für "Badass Automated Wolken Home 'steht benannt. Du bist frei, um Ihr Projekt, was auch immer Sie wollen, aber jede Bezugnahme auf "BACH" in meinem Code oder Bilder sollten mit Ihrem eigenen Projektnamen ersetzt werden, zu nennen

    Konfigurieren des Projekt


    Wenn Sie noch nie Visual Studio benutzt haben, dies ein wenig einschüchternd aussehen kann (und ich entschuldige mich auch Sie, was ich glaube, die besten IDE Hände nach unten sein vermisst habe). Ich werde versuchen, Sie durch die Tausende von verschiedenen Knöpfe und Tasten ziemlich speziell zu gehen, also keine Sorge.
    Ein wichtiger erster Schritt ist, einen Blick auf Abbildung 3 zu nehmen und zu verstehen, ein bisschen was los ist. Denken Sie daran, wie wir uns auf "Universal App" wieder auf das Projekt-Vorlage? Nun, das ist, weil die App könnte tatsächlich auf Windows Phone und Windows Desktop bereitgestellt werden (8.1 und höhere Versionen, natürlich). Deshalb sehen wir zwei verschiedene Projekte im Rahmen unserer "Projektmappen-Explorer" auf der rechten Seite. Alles unter BACH.Windows (Windows 8.1)? Einfach ignorieren. Wir werden nicht die Entwicklung einer Desktop-Anwendung in diesem Tutorial.
    Eine andere Sache im Auge zu nehmen ist, dass innerhalb unserer Code-Dateien, werden wir eine Menge "plattformspezifischen Code" zu sehen. Das ist Code, der wie folgt aussieht:
      #if WINDOWS_PHONE_APP
             Private TransitionCollection Übergänge;
     #endif
    

    Das ist, wie die kompilierte App weiß, ob es sollte ein Stück Code oder nicht, je nachdem, ob es als Windows 8.1 App oder als Windows Phone 8.1 App im Einsatz. Warum ist das wichtig? Nun, weil Visual Studio ist ziemlich glatt, und wir können sogar sagen, dass es, was wir gerade arbeiten. In Abbildung 3 werden Sie feststellen, ich habe auch etwas kreisten in der oberen linken Ecke: ein Register, die derzeit, sagt BACH.Windows. Das ist im Grunde sagen Sie uns Visual Studio, die wir gerade arbeiten, auf dem Windows-Anwendung, mit der Ausnahme, dass wir nicht wollen, es zu sagen! Stattdessen lassen Sie schalten Sie ihn über BACH.Windowsphone (Abbildung 4) sagen.
    Nun müssen wir auch sagen, dass Visual Studio, wenn wir auf "Run Program" wir sie, um die Windowsversion, nicht die Windows-Version ausgeführt werden soll. Um dies zu erreichen, werden wir einfach mit der rechten Maustaste auf das Projekt Bach.WindowsPhone (Windows Phone 8.1) und wählen Sie "Als Startprojekt festlegen '(Abbildung 5).

    Navigieren in der Projektstruktur


    Jetzt, wo wir alles, um im Modus 'Windowsphone' laufen konfiguriert haben, können Sie einen sehr schnellen Überblick über Ihre Projektstruktur (Abbildung 6):
    Eigenschaften Über Umfang Handbuch Weitere Bibliotheken Sie verwenden könnten, werden wir einige Bibliotheken Schreiben in den in unseren Azure Service-Assets Wenn Sie alle diese schönen Bilder speichern zu verbinden. Sie werden zum Teil bereits in es standardmäßig angezeigt. Wir werden uns nicht mit diesem Ordner zu tun haben in diesem Handbuch. MainPage.xaml> MainPage.xaml.cs Ihr "Design" Logik und "Code" Logik. Wir könnten eine ganze Führung an sich, wie Sie diese beiden Dokumente Code zu machen. Im Grunde, was Sie wissen müssen, ist, das ist die "Front Page" Ihrer Anwendung. Package.appxmanifest App Bezeichnung, Anforderungen, Pakete, etc. Wir werden auf die "Internet" Berechtigungen später drehen werden. BACH.SHARED App.xaml> App.xaml.cs Was soll das "Gemeinschafts" Unsinn? Nun, erinnern diese App ist "Universal", so ist dies Code, zwischen Ihrem Desktop und Handy App geteilt wird. Dies ist, wo wir setzen alle der Azure Service-Anrufe.
    Hoffentlich macht Sie ein bisschen mehr mit dem Windows Phone Struktur komfortabel, und fühlen sich nicht überfordert. Wenn Sie das tun, oder möchten Sie mehr erfahren möchten, würde ich sehr empfehlen Sie auschecken Channel9 der Video-Tutorial:
    Windows Phone 8-Entwicklung für absolute Anfänger - Channel9

Schritt 10: Erstellen Sie Ihre Windows Phone App Teil 3: Azure auf Windows Phone 8.1

  1. Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Wo die Dinge kompliziert werden ...


    Das super nett, einfach zu sagen beinhaltet wir so lange gehabt haben? Jawohl. Auf wiedersehen sagen. Diese spezifische Schritt ist zwar nicht schwer kann wirklich verwirrend für Personen, die nicht mit einfachen REST-Services und Netzwerkprotokollen vertraut sein. Im Interesse der nicht weht dieses instructable in eine Voll über neuartige, werden wir die Azure Service-Anruf hier im Windows Phone als im Wesentlichen eine "Black Box" Anruf zu behandeln. Das bedeutet, dass wir nach unten kopieren und nur einen Code kompilieren. Wir werden nicht durch sie hindurchgehen, und einige von euch vielleicht keine Ahnung, was es auch tut, aber das ist nicht wirklich wichtig, weil es works.There ist eine große Liste von Ressourcen am Ende dieser Anleitung, die Ihnen helfen können, verstehen es besser, aber für jetzt, lass uns einfach beißen unsere Lippen und drücken Sie nach vorn.

    Installieren von Bibliotheken und Berechtigungen


    Wir werden mit einigen ausgefallenen Internet-Protokoll-Bibliotheken zu Azure zugreifen, da leider gibt es derzeit nicht eine bestimmte Azure SDK für Windows Phone (noch) nicht. Um das zu tun, müssen wir ein Paket installieren (eine Bibliothek) von der NuGet Package Manager.
    Abbildung 1 - Rechtsklick auf das Windowsphone-Projekt und wählen Sie "Verwalten NuGet Packages ... 'Abbildung 2 - Suche nach" Json "in die Suchleiste oben rechts, und klicken Sie auf' Json.NET ', dann' Installieren 'Close aus dem Package Manager
    Große, haben wir die Bibliotheken müssen wir bekamen. Jetzt müssen wir die 'Microphone' und 'Internet' Fähigkeiten für unsere App zu aktivieren. Auf diese Weise können unsere App ermöglicht es uns, Cortana und Post-Nachrichten an unsere Azure Service Bus verwenden.
    Klicken Sie doppelt auf "Package.appxmanifest '3 - Wechseln Sie auf die Registerkarte Capabilities Abbildung 3 - Stellen Sie sicher, dass" Internet (Client und Server) und "Microphone" überprüft werden.
    Jetzt, am Anfang der Datei, fügen Sie folgenden Code, damit wir alle diese neuen fantastischen Pakete in unserem Code verweisen:
      Verwendung Newtonsoft.Json; <br> mit Windows.Security.Cryptography;
     Verwendung Windows.Security.Cryptography.Core;
     Verwendung System.Net;
     Verwendung System.Net.Http;
     Verwendung System.Net.Http.Headers; 

    Codieren des Azure Anruf


    Die beigefügten Codedatei AzureCall.cs ist nicht die gesamte App.xaml.cs Datei, es ist einfach 3 Funktionen, die Sie in Ihre App.xaml.cs Datei kopieren. Ich würde empfehlen, Kopie und diese 3 Funktionen unterhalb des OnSuspending Funktion einfügen. Lass uns einen sehr kurzen Überblick über diese 3 Funktionen:
    SendSBMessage - Die Hauptfunktion werden Sie anrufen. Wir tauchen tiefer in diese Funktion unter SASTokenHelper -. Diese Funktion hilft uns kodieren aus SAS-Token an, um unsere Azure Service Bus HMACSHA256 einloggen - Diese Funktion ist rein es für Kryptographie. Wenn Sie nicht verstehen, keine Sorge.

    Kurz Blick in SendSbMessage ()


    Lassen Sie uns gerade sehr kurz in dieser Nachricht spähen. Insbesondere möchte ich uns, bei diesem Stück der Logik innerhalb der Funktion sehen:
      HttpContent content = neue StringContent (JSON, Encoding.UTF8);
     content.Headers.ContentType = new MediaTypeHeaderValue ("application / json");
     content.Headers.Add ("LED", message);
     string path = "/ lighttopic / messages";
     var response = client.PostAsync (path, Inhalt) .Result; 

    Specifically, let's look at that call
     content.Headers.Add("led", message);
    string path = "/lighttopic/messages";
    

    Remember that 'lighttopic' is our Topic name, and that in our Python script on our Raspberrry Pi we checked for the header variable attached to the `led` header. Hopefully this is starting to come together a little bit. Essentially, this function takes in a 'Message' which is going to be a 0 or 1 for either "OFF" or "ON". We will attached that to our LED Header and then send it off to our Azure Service Bus.

Step 11: Creating Your Windows Phone App Part 4: Cortana

  1. Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Introducing Cortana


    Cortana is the personal assistant within Window's Phone, and soon the entire Windows ecosystem. She is Microsoft's answer to Apple's 'Siri', and a very strong answer at that. One of the most important features of Cortana is the third party support for app developers. This means that we can actually use Cortana within our app and interact with her through our own personal app that we developed rather than be restricted to just commands she is programmed with.

    How we will use Cortana: An Overview


    For our App, we won't get too deep into all the different ways we can leverage Cortana simply because there isn't enough time. We'll hard-code Cortana to respond to 2 distinct phrases:
    "Turn my lights Off" - Will send a message to the Azure Service Bus to turn off our lights
    "Turn my lights On" - Will send a message to the Azure Service Bus to turn on our lights
    I've provided some more resources for learning more about Cortana and different ways we can develop with her at the end of this guide but without dissecting every little detail of Cortana, let's learn just enough to get by:
    SSML - Speech Synthesis Markup Language is how we tell Cortana what phrases to listen to and basic responses.
    Installing - When we first install our app, we won't be able to interact with our app through Cortana until we manually start the app for the first time. This is because opening our app installs the voice commands Cortana needs to recognize our app.
    Pick your App name Wisely - We can't directly interact with our app through Cortana, we have to tell Cortana that we want to use the commands from a specific app, rather than her general list. For example, if I made an sports app and told Cortana "What is the Score of the Packer Game?" she wouldn't use the information from my app, because she doesn't know that my app can provide such information (she instead would look it up herself and give you the correct answer anyway). So instead, we have to say "SportsApp, what is the score of the Packer game?". This tells Cortana that the command 'what is the score of the Packer game?' belongs to the 'SportsApp' and she should consult that app to give the proper feedback.
    Want to learn more about Cortana and her features? I highly recommend Channel9's excellent video lecture on her.

Step 12: Creating Your Windows Phone App Part 4: Coding Cortana - SSML

  1. Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    SSML


    For the first part of coding Cortana we will focus on the SSML or Speech Synthesis Markup Language document. This xml document, also called the will allow us to program Cortana and tell her what to listen for and what kind of phrases should open our app. First things first, let's go ahead and create our SSML document.
    Figure 1 - Right click on the WP8.1 project, click Add and then New Item Figure 2 - Scroll to find the Voice Command Definition template, and create it with a name. I named mine ControlCommands.xml Click OK to create the document.
    Navigating SSML
    This might look overwhelming at first glance, but that's just because the template is nice enough to fill it with tons of examples. In reality, we don't need a lot of this code, and once you get the hang of it is actually pretty simple. Let's take a look at the first block at the top:
     <CommandSet xml:lang="en-US">
    	<CommandPrefix> Contoso Rodeo </CommandPrefix>
    	<Example> play a new game </Example> 

    Figure 3
    The ' CommandPrefix ' tag is what we talked about in the last step: Your app's name as known by Cortana. This doesn't really even have to be your actual app's name, it could be anything. I suggest something easy that you are going to remember. Remember that I named this app 'BACH" so I am going to insert 'bach' as my CommandPrefix.
    The 'Example ' tag is a suggestion to the user. When they scroll through Cortana and see all the available apps, it can show them suggested things to say.
    Now erase the other large tag blocks in the file!
    What? Why did I have you do that? Well, because we're using KISS in this project (Keep It Simple Stupid). At the risk of boring/teasing you to death with all the different SSML write-up we can use for Cortana, we will keep it simple and just use what we need (Also, inserting xml code on Instructables is very difficult due to their editor!).
    So what do we need to put in? Let's insert the following command block:
     <Command Name="DeskLightsOn">
    	<Example> turn on my desk lights </Example>
    	<ListenFor> turn on my desk lights </ListenFor>
    	<Feedback> Turning On Your Desk Lights... </Feedback>
    	<Navigate />
    </Command>
    

    So what the heck is going on here?
    Command - the tag block is what we reference in the actual code. When we refer to this later on, we'll call it 'DeskLightsOn' after it's name attribute. Example this is, again, the suggested input to the user for this command ListenFor - What phrase 'triggers' this command to 'fire' . Pretty self explanatory hopefully. Feedback - What Cortana responds with (she actually speaks it out loud). Navigate This would be used it we were going to a specific page in the App, but we're not, so let's just leave it blank for now.
    Take a look at Figure 4 to see the XML code for both the "ON" and "OFF" commands for the desk lights. If you want to check out the entire code file, you can download it from the attached file.

    A Final Note


    The above usage of Cortana is very primitive, and I will fully acknowledge there are quite a few things we could do to improve this code. However, this isn't an instructable about Cortana (Coming Soon though!), it is simply an introduction to her. If you wish to learn how to leverage and improve this SSML even more, I highly suggest you check out my resources guide at the back of this instructable!

Step 13: Creating Your Windows Phone App Part 4: Coding Cortana - Logic

  1. Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Cortana's Logic


    Now that Cortana can hear you, we need her to understand you. This part of the guide goes into the 'backend' of Cortana and pairing her with our app's logic. We want to program her so that when she hears one of these commands, she sends a message to our Azure Service Bus and turns on or off the lights.

    Installing the Voice Commands


    Vergiss nicht! This is a problem a lot of people have when first using Cortana, simply because it is easily overlooked. Let's do it right away to make sure it is done and over with.
    Put the following code in your MainPage.xaml.cs document.
    First, import the correct reference calls at the top of your file:
     using System.Threading.Tasks;
    using Windows.Media.SpeechRecognition;
    using Windows.Storage; 

    Then the code to install our voice commands can be written as a function like so:
     private async Task InstallVoiceCommandsAsync()
     {
    	var storageFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///ControlCommands.xml"));
    	await VoiceCommandManager.InstallCommandSetsFromStorageFileAsync(storageFile);
     }
    

    Not familiar with Async and Await ? Read up on the MSDN documents here .
    Now that we have our function, let's make sure to call it! A good spot to put it is within the OnNavigatedTo function.
    Because our install is an asynchronous task, we will have to turn the OnNavigateTo function into an async function by simple adding the following code:
     protected override async void OnNavigatedTo(NavigationEventArgs e) 

    Then we just check that this is the first time the page has been navigated to and install our voice commands:
     if (e.NavigationMode == NavigationMode.New)
     {
    	await InstallVoiceCommandsAsync();
     } 

    Toll! Now our voice commands will install as soon as open the app for the first time!

    Voice Command Logic


    Now, we will use what command the user spoke to figure out which command to send to our Azure Service Bus. Open up your App.xaml.cs file and scroll to just below the RootFrame_FirstNavigated function. We will put the following function under there:
     protected override void OnActivated(IActivatedEventArgs args)
    		 {
    			base.OnActivated(args);
    			if (args.Kind == ActivationKind.VoiceCommand)
    			 {
    				var commandArgs = args as VoiceCommandActivatedEventArgs;
    				if (commandArgs != null)
    				 {
    					SpeechRecognitionResult speechRecognitionResult = commandArgs.Result;
    					var voiceCommandName = speechRecognitionResult.RulePath[0];
    					
    					switch (voiceCommandName)
    					 {
    						case "DeskLightsOff":
    							SendSBMessage("0");
    							 brechen;
    						case "DeskLightsOn":
    							SendSBMessage("1");
    							 brechen;
    					 }
    				 }
    			 }
    			Window.Current.Activate();
    		 } 

    This function is called every time somebody uses our Command Prefix (BACH) when giving Cortana an instruction. While it may seem a little confusing at first, the real important part are the following lines of code:
     switch (voiceCommandName)
    	 {
    		case "DeskLightsOff":
    			SendSBMessage("0");
    			 brechen;
    		case "DeskLightsOn":
    			SendSBMessage("1");
    			 brechen;
    	 } 

    We use a switch statement to jump through the different commands in our SSML document. What we are checking is for the String to match up with our Command Name from our Command blocks in the ssml doc. Once we know what command we have received, we can then act accordingly by firing our SendSBMessage which sends a message to our Azure Service Bus. For "Off" we send a '0' and "On" we send a '1'.
    Code not working 100%? Don't worry, I've attached both a MainPage.xaml.cs and App.xaml.cs that should give you more clarity when following along.

Step 14: The Final Product!

  1. Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    You Did It!


    With a few simple clicks, you can deploy your app to your Windows Phone device and you are all set! Initially, you'll simply see a black screen ( Figure 1 ), but that is nothing to be alarmed about. Remember we didn't really code any GUI for this project and simply based it entirely around the voice commands with Cortana.
    By holding down the search button you can activate Cortana. Simply say
    "BACH turn on my desk lights"
    Cortana should return with the message that she is turning them on ( Figure 2) .
    Hopefully, this will trigger your LED to go on! Congrats!

    Moving Forward...


    In this guide, we've only just barely scratched the surface of what this technology is capable of. Here are just a few ideas that you can take going forward to really flesh out your automated home with Cortana and Azure:
    Hook up your music player to Cortana, set wake-up alarms! Hook up a relay with your RPi to control large lights Use Cortana's Geofencing feature to have the lights turn off when you leave your house (Guide on this coming soon!) Create a GUI interface on your Windows Phone app to control your lights Create an Azure Storage Table and keep the 'status' of different IoT devices around your home and send them to your App!
    Got more ideas? Post them in the comments and I will add them to the list!


Step 15: Troubleshooting and References

  1. Verwenden RPi, Azurblau, und Cortana zu Automatisieren Sie Ihre Startseite!

    Fehlerbehebung


    I keep getting the error:
     Error 2 The type or namespace name 'SpeechRecognition' does not exist in the namespace 'Windows.Media' (are you missing an assembly reference?)
    

    Yes, this is a strange one. I actually made two of these projects (one to test it, the other as a code-along). On one project I did have this error, and the other I didn't, despite identical code. The problem is that 'SpeechRecognition' is a library only available to Windows Phone, and not Windows in general. Because this code is in our 'App.xaml.cs' file, it's technically shared code. To get around this, simply wrap it in a Windows Phone 8 IF:
     #if WINDOWS_PHONE_APP
    using Windows.Media.SpeechRecognition;	
     #endif
    

    That will make it exclusive to your Windows Phone project, and should compile.
    I keep getting a "Authorization Denied" when trying to connect to my Azure Service Bus through the Windows Phone app
    Let me guess, you were the rebellious one who decided to name all their variables on their own? Double check that you have substituted all my instructable names with your own custom names. Doing a 'CTRL-F' on certain variables works well.
    It takes almost 20 seconds from giving the command to my phone to the light actually turning on/off, what gives?
    Yes, I've encountered this too. I've seen the 'delay' range anywhere from 10-30 seconds, with an average of just around 17 seconds. My initial thought is that this slow-down is coming from the code on the RPi, and it isn't 'listening' to the subscription as fast as we would hope for. If I find a fix for it in the future, I will add to this instructable.
    I will post more troubleshooting tips as people comment on various problems!

    Referenzen


    Raspberry Pi
    WiringPi Guide GPIO Reference Python and LED Wiring Tutorial
    Azure
    Brokered Messaging REST Tutorial Azure Service Bus and IoT How to Use Service Bus Topic/Subscriptions Service Bus Queues, Topics and Subscriptions Overview Service Bus Topic and Subscription Tutorial Python Azure SDK Shout out to 'mlinnen' for his work in developing this awesome RPi Service Bus Example!
    Windows Phone 8.1 and Cortana
    Windows Phone 8.1 for Absolute Beginners Windows Phone SDK Documentation Windows Phone 8.1 Development Center Universal Windows App Development with Cortana and the Speech SDK Launch a foreground app with voice commands in Cortana Integrating your Application to work with Cortana in Windows Phone 8.1 Building Text to Speech Applications using Windows Phone 8.1 and Cortana What Developers need to Know about the Cortana API