{"id":1621,"date":"2021-06-30T13:53:34","date_gmt":"2021-06-30T11:53:34","guid":{"rendered":"https:\/\/azure.teamprojects.de\/?page_id=1621"},"modified":"2021-07-14T14:45:44","modified_gmt":"2021-07-14T12:45:44","slug":"1621-2","status":"publish","type":"page","link":"https:\/\/azure.teamprojects.de\/?page_id=1621","title":{"rendered":"IoT Emergency Button Developer Set Up"},"content":{"rendered":"\n<h2>\n\t\tIoT Emergency Button Set Up\n\t<\/h2>\n<h2>\n\t\tEinf\u00fchrung\n\t<\/h2>\n\t<p>Im Folgenden wird erkl\u00e4rt wie ein ganzheitliches Notfallknopf System mithilfe eines \u00fcber Microsoft Azure kommunizierenden IoT Button aufgebaut werden kann.<\/p>\n<p>F\u00fcr das Projekt vorhanden ist 2x der \u201eIot Button V3&#8243; der Firma teXXmo und 2 Bluetooth Beacons.<\/p>\n<p>Der Button selbst ist als eigenst\u00e4ndiges Ger\u00e4t mit dem WiFi verbunden, er kann \u00fcber das FTP konfiguriert werden. Auf Knopfdruck aktiviert der Knopf sich, verbindet sich mit dem n\u00e4chstgelegenen AP und schickt dessen Mac-Adresse und (soweit verbunden) den Namen des n\u00e4chsten Bluetooth Beacon.<\/p>\n<p>Der Button zeigt visuell an, ob der Vorgang erfolgreich oder nicht erfolgreich war.<\/p>\n<h2>\n\t\tIoT Central einrichten\n\t<\/h2>\n<h3>\n\t\tApp erstellen\n\t<\/h3>\n\t<p>IoT Central ist eine auf Microsoft Azure basierende Web App, welche schnelle und einfache Verbindungen zwischen IoT-Ger\u00e4ten und der Cloud erm\u00f6glicht. Dabei steht eine zentralisierte Verwaltung zum Neukonfigurieren und Aktualisieren der Ger\u00e4te, sowie die Verbindung zwischen Gesch\u00e4ftsanwendungen und IoT-Daten im Mittelpunkt.<\/p>\n<p>Zun\u00e4chst starten wir mit dem Erstellen einer neuen App unter: https:\/\/apps.azureiotcentral.com\/build<\/p>\n\t\t\t<a href=\"https:\/\/apps.azureiotcentral.com\/build\" target=\"_blank\" role=\"button\" rel=\"noopener\">\n\t\t\t\t\t\t\tApp erstellen\n\t\t\t\t\t<\/a>\n\t\t\t\t<img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2021\/06\/IoT-Central-1.png\" alt=\"IoT Central 1\" itemprop=\"image\" title=\"IoT Central 1\" onerror=\"this.style.display='none'\" width=\"693\" height=\"259\">\n\t<p>Dabei sollte der App ein sinnvoller Name gegeben werden. Anschlie\u00dfend muss das passende Abonnement ausgew\u00e4hlt werden. Danach geht es mit dem Button &#8222;Erstellen&#8220; weiter.<\/p>\n<h3>\n\t\tGer\u00e4te Vorlage erstellen\n\t<\/h3>\n\t<p>Anschlie\u00dfend erstellen wir eine Vorlage f\u00fcr die Buttons.<\/p>\n\t\t\t\t<img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2021\/06\/IoT-Central-2.png\" alt=\"IoT Central 2\" itemprop=\"image\" title=\"IoT Central 2\" onerror=\"this.style.display='none'\" width=\"199\" height=\"529\">\n\t<p>IoT Ger\u00e4t ausw\u00e4hlen, weiter mit Anpassen, einen sinnvollen Namen setzen und dann anschlie\u00dfend auf Erstellen klicken.<\/p>\n\t\t\t\t<img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2021\/06\/IoT-Central-3.png\" alt=\"IoT Central 3\" itemprop=\"image\" title=\"IoT Central 3\" onerror=\"this.style.display='none'\" width=\"945\" height=\"521\">\n\t<p>Die Ger\u00e4te Vorlage erscheint nun in den Vorlagen. Wir klicke auf die Ger\u00e4te Vorlage um sie weiter zu spezifizieren.<\/p>\n\t\t\t\t<img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2021\/06\/IoT-Central-4.png\" alt=\"IoT Central 4\" itemprop=\"image\" title=\"IoT Central 4\" onerror=\"this.style.display='none'\" width=\"869\" height=\"470\">\n\t<p>Hier deklarieren wir nun die Telemetriedaten, die IoT Central von den Buttons erhalten und auswerten soll. In unserem Fall wollen wir die SSID (bzw. Mac Adresse) des WLAN Access Pointes, die Mac-Adresse des Bluetooth Beacons, die UUID (Owner) des Buttons sowie dessen Batterie Status erhalten und weiter verarbeiten.<\/p>\n<p>Anschlie\u00dfend wird die Ger\u00e4te Vorlage mit dem Button &#8222;Ver\u00f6ffentlichen&#8220; ver\u00f6ffentlicht.<\/p>\n\t\t\t\t<a href=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2021\/06\/IoT-Central-5.png\" target=\"_self\" itemprop=\"url\" rel=\"noopener\">\n\t\t\t\t<img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2021\/06\/IoT-Central-5.png\" alt=\"IoT Central 5\" itemprop=\"image\" title=\"IoT Central 5\" onerror=\"this.style.display='none'\" width=\"1692\" height=\"669\">\n\t\t\t\t<\/a>\n<h3>\n\t\tDen Button mit IoT Central verbinden\n\t<\/h3>\n\t<p>Im n\u00e4chsten Schritt verbinden wir nun den Button mit IoT Central um die ersten Daten zu schicken. Hierf\u00fcr erstellen wir unter Ger\u00e4te ein neues Ger\u00e4t und weisen diesem einen sinnvollen Namen sowie unsere Ger\u00e4te Vorlage zu.<\/p>\n\t\t\t\t<a href=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2021\/06\/IoT-Central-6.png\" target=\"_self\" itemprop=\"url\" rel=\"noopener\">\n\t\t\t\t<img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2021\/06\/IoT-Central-6.png\" alt=\"IoT Central 6\" itemprop=\"image\" title=\"IoT Central 6\" onerror=\"this.style.display='none'\" width=\"1506\" height=\"876\">\n\t\t\t\t<\/a>\n\t<p>Im n\u00e4chsten Schritt w\u00e4hlen wir nun das Ger\u00e4t aus und klicken auf &#8222;Verbinden&#8220;. Die angezeigten SAS Schl\u00fcssel, sowie ID-Bereich und Ger\u00e4te ID werden gleich ben\u00f6tigt.<\/p>\n\t\t\t\t<img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2021\/06\/IoT-Central-7.png\" alt=\"IoT Central 7\" itemprop=\"image\" title=\"IoT Central 7\" onerror=\"this.style.display='none'\" width=\"1569\" height=\"842\">\n\t<p>Wir rufen die Website https:\/\/dpsgen.z8.web.core.windows.net\/ auf und tragen hier in Scope den ID-Bereich, in Device ID die Ger\u00e4te ID und in Device Key den Prim\u00e4rschl\u00fcssel ein. Anschlie\u00dfend klicken wir auf Get Connection String. Diesen String speichern wir nun ab.<\/p>\n\t\t\t<a href=\"https:\/\/dpsgen.z8.web.core.windows.net\/\" target=\"_blank\" role=\"button\" rel=\"noopener\">\n\t\t\t\t\t\t\tConnection String Generator\n\t\t\t\t\t<\/a>\n\t\t\t\t<img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2021\/06\/IoT-Central-8.png\" alt=\"IoT Central 8\" itemprop=\"image\" title=\"IoT Central 8\" onerror=\"this.style.display='none'\" width=\"1188\" height=\"299\">\n\t<p>Nun aktivieren wir den Button und setzen diesen in den Konfigurationsmodus, in dem der Knopf ca. 9 Sekunden gehalten wird, bis der Button anf\u00e4ngt rot zu blinken. Anschlie\u00dfend verbinden wir uns mit diesem \u00fcber WLAN um das Konfigurationsmen\u00fc zu \u00f6ffnen.<\/p>\n<p>Unter Configuration wird nun in Azure IoT Hub der erste Teil des Strings, in IoT device name der zweite Teil des Strings und in IoT device secret der dritte Teil des Strings eingef\u00fcgt.<\/p>\n<p>Au\u00dferdem konfigurieren wir nun den User Json der an IoT Central geschickt werden soll. Hierbei ist es nun wichtig, die Telemetrie Daten des Buttons den Namen der Vorlage aus IoT Central exakt anzupassen.<\/p>\n<p>Folgender String wird in User Json eingetragen:<\/p>\n<blockquote><p>{&#8222;ssid&#8220;: &#8222;{bssid}&#8220;, &#8222;batterystatuspercentage&#8220;:&#8220;{per}&#8220;, &#8222;bluetoothbeacon&#8220;:&#8220;{blu}&#8220;, &#8222;owner&#8220;:&#8220;{mac}&#8220;}<\/p><\/blockquote>\n<p>Nun wird unter WIFI noch SSID sowie WPA Key des Netzwerkes eingetragen und der Button kann unter Shutdown wieder in den Bereitschaftsmodus gefahren werden.<\/p>\n\t\t\t\t<img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2021\/06\/IoT-Central-9.png\" alt=\"IoT Central 9\" itemprop=\"image\" title=\"IoT Central 9\" onerror=\"this.style.display='none'\" width=\"1084\" height=\"529\">\n\t<p>Nun sind wir bereit f\u00fcr einen ersten Test. Wir dr\u00fccken kurz den Knopf des Buttons, dieser f\u00e4ngt an zu blinken und sollte nach wenigen Sekunden mit einem gr\u00fcnen blinken signalisieren, dass der User Json erfoglreich verschickt wurde.<\/p>\n<p>In IoT Central k\u00f6nnen wir uns nun die gesendeten Daten unter Ger\u00e4te anschauen.<\/p>\n\t\t\t\t<img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2021\/06\/IoT-Central-10.png\" alt=\"IoT Central 10\" itemprop=\"image\" title=\"IoT Central 10\" onerror=\"this.style.display='none'\" width=\"505\" height=\"152\">\n<h2>\n\t\tDaten \u00fcber Pipedream verarbeiten\n\t<\/h2>\n\t<p>Nun werden die Daten zwar geschickt, Ziel ist es aber, diese auch zweckm\u00e4\u00dfig zu verarbeiten und eine Notfall E-Mail mit allen relevanten Informationen zu verschicken. Dies erreichen wir mittels der WebApp Pipedream.<\/p>\n<h2>\n\t\tIoT Central Daten Export erstellen\n\t<\/h2>\n\t<p>Hierf\u00fcr erstellen wir uns ein neues Konto unter https:\/\/pipedream.com und erstellen unter Workflows einen neuen Workflow. Als Trigger f\u00fcr diesen Flow w\u00e4hlen wir HTTP API aus.<\/p>\n\t\t\t<a href=\"https:\/\/pipedream.com\" target=\"_blank\" role=\"button\" rel=\"noopener\">\n\t\t\t\t\t\t\tPipedream Workflow erstellen\n\t\t\t\t\t<\/a>\n\t\t\t\t<img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2021\/06\/IoT-Central-11.png\" alt=\"IoT Central 11\" itemprop=\"image\" title=\"IoT Central 11\" onerror=\"this.style.display='none'\" width=\"1859\" height=\"488\">\n\t<p>Die anschlie\u00dfend angezeigte Trigger URL kopieren wir uns und rufen in IoT Central den Datenexport auf.<\/p>\n\t\t\t\t<img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2021\/06\/IoT-Central-12.png\" alt=\"IoT Central 12\" itemprop=\"image\" title=\"IoT Central 12\" onerror=\"this.style.display='none'\" width=\"1287\" height=\"333\">\n\t<p>Hier klicken wir auf Ziele und erstellen ein neues Ziel. Zieltyp ist Webhook, R\u00fcckruf-URL ist die zuvor gespeicherte URL.<\/p>\n\t\t\t\t<img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2021\/06\/IoT-Central-13.png\" alt=\"IoT Central 13\" itemprop=\"image\" title=\"IoT Central 13\" onerror=\"this.style.display='none'\" width=\"581\" height=\"266\">\n\t<p>Nun erstellen wir unter Datenexport einen neuen Export. Es ist ein sinnvoller Name zu w\u00e4hlen, als Ziel des Exportes wird unser zuvor deklariertes Ziel ausgew\u00e4hlt.<\/p>\n\t\t\t\t<img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2021\/06\/IoT-Central-14.png\" alt=\"IoT Central 14\" itemprop=\"image\" title=\"IoT Central 14\" onerror=\"this.style.display='none'\" width=\"839\" height=\"806\">\n\t<p>IoT Central verschickt nun kontinuierlich s\u00e4mtliche Events in einem Json Objekt an Pipedream und triggert dort einen Workflow. Das Objekt kommt an.<\/p>\n\t\t\t\t<img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2021\/06\/IoT-Central-15.png\" alt=\"IoT Central 15\" itemprop=\"image\" title=\"IoT Central 15\" onerror=\"this.style.display='none'\" width=\"507\" height=\"653\">\n<h3>\n\t\tAnwenderdatenbank erstellen\n\t<\/h3>\n\t<p>In Schritt 3.3. soll dann der eigentliche Workflow vorgestellt werden. Doch um nun UUID der Buttons gewissen Besitzern oder MAC Adressen der Bluetooth Beacons gewissen R\u00e4umen zuzuordnen, ben\u00f6tigen wir eine Datenbank. Diese wird mittels Google Sheets erstellt.<\/p>\n<p>Zun\u00e4chst er\u00f6ffnen wir ein Google Konto und erstellen ein neues Google Sheet.<\/p>\n\t\t\t<a href=\"https:\/\/docs.google.com\/spreadsheets\" target=\"_blank\" role=\"button\" rel=\"noopener\">\n\t\t\t\t\t\t\tGoogle Sheet erstellen\n\t\t\t\t\t<\/a>\n\t<p>Dieses Sheet wird wie folgt organisiert. Dabei wird jeder UUID (Button ID) ein Besitzer, jedem Bluetooth Beacon ein Raum und jedem MAC Adresse eines Access Points ein Bereich zugeordnet.<\/p>\n\t\t\t\t<img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2021\/06\/IoT-Central-16.png\" alt=\"IoT Central 16\" itemprop=\"image\" title=\"IoT Central 16\" onerror=\"this.style.display='none'\" width=\"1035\" height=\"193\">\n<h3>\n\t\tNotfall E-Mail erstellen\n\t<\/h3>\n\t<p>Wir haben nun alle Daten, die wir ben\u00f6tigen um zuverl\u00e4ssig eine Notfall E-Mail verschicken zu k\u00f6nnen. Die Button Daten kommen innerhalb k\u00fcrzester Zeit in einem Json Objekt in Pipedream an. Die zuordnende Datenbank ist in einem Google Sheet vorhanden.<\/p>\n<p>Im ersten Schritt des Workflows speichern wir die 3 f\u00fcr uns relevanten Telemetriedaten (Mac Button, Mac Bluetooth sowie Mac AP) in 3 Variablen.<\/p>\n<blockquote>\nthis.beacon=event.body.telemetry.bluetoothbeacon\nthis.buttonid=event.body.telemetry.owner\nthis.mac=event.body.telemetry.ssid\n<\/blockquote>\n\t\t\t\t<img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2021\/06\/IoT-Central-17.png\" alt=\"IoT Central 17\" itemprop=\"image\" title=\"IoT Central 17\" onerror=\"this.style.display='none'\" width=\"550\" height=\"318\">\n\t<p>Anschlie\u00dfend importieren wir die Daten aus dem Google Sheet in Pipedream mithilfe des vorgefertigten Steps. Die Spreadsheet ID erhalten wir aus der URL des Spreadsheets. Die Range ist variabel, hier ist es wichtig, je nach Anzahl der Buttons die richtige Range auszuw\u00e4hlen.<\/p>\n\t\t\t\t<img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2021\/06\/IoT-Central-21.png\" alt=\"IoT Central 21\" itemprop=\"image\" title=\"IoT Central 21\" onerror=\"this.style.display='none'\" width=\"559\" height=\"448\">\n\t<p>In einem n\u00e4chsten Schritt vergleich wir nun die Werte aus dem Json des Buttons mit den Werten aus der Tabelle. Wenn sie sich matchen, speichern wir sie in 3 separate Variablen zur sp\u00e4teren Verarbeitung in der E-Mail.<\/p>\n<blockquote>\nfor(var&nbsp;i=0;i&lt;2;i++){\n&nbsp;&nbsp;if(steps.get_values.$return_value.values[i][3]===steps.get_buttondata.beacon){\n&nbsp;&nbsp;&nbsp;&nbsp;this.location=steps.get_values.$return_value.values[i][2]\n}\n}\nfor(var&nbsp;i=0;i&lt;2;i++){\n&nbsp;&nbsp;if(steps.get_values.$return_value.values[i][1]===steps.get_buttondata.buttonid){\n&nbsp;&nbsp;&nbsp;&nbsp;this.owner=steps.get_values.$return_value.values[i][0]\n}\n}\nfor(var&nbsp;i=0;i&lt;2;i++){\n&nbsp;&nbsp;if(steps.get_values.$return_value.values[i][5]===steps.get_buttondata.mac){\n&nbsp;&nbsp;&nbsp;&nbsp;this.mac=steps.get_values.$return_value.values[i][4]\n}\n}\n<\/blockquote>\n\t\t\t\t<img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2021\/06\/IoT-Central-22.png\" alt=\"IoT Central 22\" itemprop=\"image\" title=\"IoT Central 22\" onerror=\"this.style.display='none'\" width=\"753\" height=\"546\">\n\t<p>Im letzten Schritt erstellen wir nun eine Custom E-Mail mit den erkannten Daten und schicken diese an eine beliebige E-Mail Adresse.<\/p>\n\t\t\t\t<img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2021\/06\/IoT-Central-23.png\" alt=\"IoT Central 23\" itemprop=\"image\" title=\"IoT Central 23\" onerror=\"this.style.display='none'\" width=\"918\" height=\"357\">\n\t\t\t\t<img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2021\/06\/IoT-Central-24.png\" alt=\"IoT Central 24\" itemprop=\"image\" title=\"IoT Central 24\" onerror=\"this.style.display='none'\" width=\"1374\" height=\"340\">\n","protected":false},"excerpt":{"rendered":"<p>IoT Emergency Button Set Up Einf\u00fchrung Im Folgenden wird erkl\u00e4rt wie ein ganzheitliches Notfallknopf System mithilfe eines \u00fcber Microsoft Azure kommunizierenden IoT Button aufgebaut werden kann. F\u00fcr das Projekt vorhanden ist 2x der \u201eIot Button V3&#8243; der Firma teXXmo und 2 Bluetooth Beacons. Der Button selbst ist als eigenst\u00e4ndiges Ger\u00e4t mit dem WiFi verbunden, er &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/azure.teamprojects.de\/?page_id=1621\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eIoT Emergency Button Developer Set Up\u201c<\/span> weiterlesen<\/a><\/p>\n","protected":false},"author":106,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"https:\/\/azure.teamprojects.de\/index.php?rest_route=\/wp\/v2\/pages\/1621"}],"collection":[{"href":"https:\/\/azure.teamprojects.de\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/azure.teamprojects.de\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/azure.teamprojects.de\/index.php?rest_route=\/wp\/v2\/users\/106"}],"replies":[{"embeddable":true,"href":"https:\/\/azure.teamprojects.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1621"}],"version-history":[{"count":7,"href":"https:\/\/azure.teamprojects.de\/index.php?rest_route=\/wp\/v2\/pages\/1621\/revisions"}],"predecessor-version":[{"id":1667,"href":"https:\/\/azure.teamprojects.de\/index.php?rest_route=\/wp\/v2\/pages\/1621\/revisions\/1667"}],"wp:attachment":[{"href":"https:\/\/azure.teamprojects.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}