IoTConnectivity.txt => Slides http://www.tamberg.org/mtc/2014/IoTConnectivity.pdf (@tamberg, MobileTech Conference 2014, München, 18.03.2014, http://mobiletechcon.de/2014se/sessions/iot-connectivity-wie-bringt-man-die-elektronik-online) 2) Das Internet der Dinge entsteht, wenn Internet-verbundene Computer mit Sensoren und Aktuatoren ausgestattet werden. Statt virtuelle Ressourcen, wie bisher im Web, werden damit physikalische Eigenschaften gemessen und manipuliert. Das Netz dringt also sozusagen in die reale Welt ein. 3) Ein Beispiel: Twine, ein Gummiklotz mit Sensoren und Wi-Fi, triggert virtuelle Aktionen, z.B. sendet er ein Email, wenn er umfällt. 4) Bubblino, ein anderer IoT Klassiker, hört bei Twitter auf seinen Namen und bläst jedesmal Seifenblasen, wenn er erwähnt wird. Hier triggert eine virtuelles Ereignis eine physische Aktion. 5) Geostationäre Raumfahrt, ein Kunstprojekt von Olsen, kombiniert beides. Es lässt den Benutzer per App einen Himmelskörper aussuchen, dem sein Bett folgen soll. Man schläft also immer mit dem Kopf zum Mond, zur Venus, oder zur internationalen Raumstation. Ein Ding (Himmelskörper) steuert über's Internet ein anderes (Bett). 6) Wie sind solche Systeme aufgebaut? - Ein Gerät oder Objekt mit Sensoren und Aktuatoren erlaubt eine direkte, physische Interaktion. Da es zudem per Internet mit einem Server verbunden ist, kann ich auch virtuell damit interagieren, mittels Browser oder App - lokal, oder aus der Ferne. 7) Heute schauen wir genauer an, wie man ein IoT Hardware ans Netz bringt, und was Connectivity in der Praxis bedeutet. Die folgenden Beispiele sind im Rahmen von Workshops entstanden, an denen ich beteiligt war. Wir sind aber keineswegs die ersten, die sowas gebaut haben. Im Gegenteil: es ist heute einfacher denn je, solche IoT Projekte zu bauen. 8) Beim ersten Projekt war die Idee, festzustellen ob eine Pflanze Wasser braucht und über das Internet eine entsprechende Aktion auszulösen. 9) An dieser Stelle muss man Botanicalls erwähnen, ein IoT Klassiker. Der Internet-vebundene Sensor lässt eine Pflanze twittern, wenn sie Wasser braucht. Er basiert auf dem Arduino Controller und hat einen Ethernet Anschluss. Das Projekt ist als Do It Yourself Kit erhältlich, und inzwischen sogar Teil der Sammlung des Museum of Modern Art, in New York City. 10) Natürlich gibt es auch Consumer-Produkte, mit demselben Prinzip. Koubachi, ein Wi-Fi Pflanzensensor aus Zürich, sendet Notifications zum iPhone. Neben der Bodenfeuchtigkeit, misst dieser Sensor auch Licht und Raumtemperatur. Rechts, ein Produkt von Parrot. Hier wird Bluetooth Low Energy verwendet, um mit einem Smartphone zu kommunizieren. (+Accelerometer) 11) Im Workshop haben wir einen Sensor aus Gips gebaut, inspiriert vom Thirsty Plant DIY Kit von Technology Will Save Us aus London. (http://shop.technologywillsaveus.org/products/thirsty-plant-kit) 12) Das Projekt wurde mit einem Arduino Uno realisiert. Für die Verbindung ins Netz wird das TI CC3000 Wi-Fi Modul verwendet, das von Adafruit angeboten wird - als Breakout wie hier, oder als Shield. (SPI Schnittstelle, LCD => Arduino Mega). Im Gegensatz zu anderen Wi-Fi Modulen für Arduino ist das CC3000 ziemlich günstig (~35$) und einfach zu benutzen, trotz der neuen Library. 13) Eine Alternative wäre vielleicht auch der Electric Imp, ein Mikrocontroller mit Wi-Fi, eingebaut in eine SD Card. Die Netzwerk-Konfiguration erfolgt über eine App (lustig, aber relativ mühsam). Programmiert wird der Imp via Cloud IDE, und es gibt ein REST Backend, inklusive Webhooks. Super wenn man's braucht. Weniger praktisch, wenn gerade mal wieder das Netz down ist. 14) Für outdoor Anwendungen könnte 3G (mobiles Internet) eine Lösung sein. Die Hardware ist da, allerdings sind heute die Libraries bzw. Software-Treiber oft noch ziemlich schlecht. Auch der Stromverbrauch, vor allem beim Senden, ist ein Problem. Hier sehen sie übrigens das Sodaq Moja, ein Arduino-kompatibles Kickstarter Projekt aus Holland, mit GPRSbee Modul und Grove Konnektoren für Sensoren von Seeedstudio. 15) Wenn der Pflanzen-Sensor mal am Internet ist, braucht's auf der anderen Seite eine Anzeige. Um die Anzeige für verschiedene Projekte verwenden zu können, haben wir versucht, auf dieser Seite möglichst wenig Logik einzubetten. Das Objekt ist im wesentlichen ein Internet-verbundener Motor, dem man eine Position in Grad angeben kann, die er dann anzeigt. 16) Dazu haben wir einen Arduino Uno als Web-Server benutzt, diesmal mit dem Ethernet Shield. Der ist zwar eher teuer, dafür aber robust und einfach. Allerdings bleibt auf dem Uno nicht viel RAM frei, wenn man die Ethernet Library lädt. Wichtig ist auch, eine eindeutige MAC Addresse zu verwenden, da sonst Probleme im lokalen Netz entstehen. Eine IP bekommt man via DHCP. 17) Für den Arduino schrieben wir einen kleinen Web-Server bzw. HTTP Parser, der POST Requests liest, um die gewünschte Position des Servo Motors zu empfangen. Für einfache Anwendungen ist das machbar, solche Parser werden aber schnell kompliziert. Leider gibt es keine guten Libraries dazu. Hier ist Linux klar im Vorteil, z.B. mit Node.js auf dem BB. 18) Eine andere Art von Notifikation ist die mehrfarbige LED. Solche ambient Orbs sind sozusagen das "Hello World" des IoT. Auch hier läuft ein einfacher Web-Service, der einen RGB Farbwert entgegen nimmt, als HTTP POST. Zum Testen solcher Server verwendet man z.B. cURL, einen Command Line HTTP Client für Mac, Linux und Windows. (http://www.instructables.com/id/Arduino-Web-LED/) 19) Statt dem Arduino Uno hätten wir auch den neuen Spark Core nehmen können. Ein Arduino-ähnlicher Controller, mit CC3000 Wi-Fi Modul (für 39$). Programmiert wird er aus einer online IDE. Ein REST Backend in der Cloud übernimmt das Parsen von HTTP und sendet Requests binär zum Controller, als CoAP. Eine App vereinfacht die Wi-Fi Konfiguration. Nachteil: ATmel Arduino Libraries laufen nicht auf dem ARM Chip. 20) Wenn etwas grösseres gesteuert werden soll als ein Servo oder eine LED, eignen sich solche Relais. Dieser Shield wird an den Spark Core angesteckt. Der Spark hat per default ein Programm installiert, mit dem sich die einzelnen Pins des Controllers fernsteuern lassen. Die mitgelieferte App dient als Fernsteuerung. Über die REST Schnittstelle in der Cloud kann man auch schnell was eigenes bauen. 21) Hier noch ein vergleichbares Setup mit einem Raspberry Pi und dem PiFace Shield. Der Shield kommt mit einem kleinen Web-Interface, das direkt auf dem Raspi gehostet wird. Änderungen im User Interface werden als Web Requests an den Raspi gesendet. Der Zugriff im lokalen Netz erfolgt über die IP Adresse des Raspi. Für den Fernzugriff braucht man z.B. DynDNS und Port forwarding, oder einen Relay Service wie Yaler. (http://piface.github.io/pifacedigitalio/, http://www.piface.org.uk/, https://yaler.net/) 22) Die nächste Anwendung, #OktoberfestOfThings, begann als Projekt von mir und Marc Pous. Die Mission: Bier mit dem Internet verbinden. Getestet wird das Resultat jeweils am Oktoberfest. Im Bild der erste Prototyp. Ein Arduino Nano liest einen Tilt-Sensor aus und sendet Messwerte mittels Bluetooth an eine Gateway App. Das BlueSmirf Modul von Sparkfun unterstützt das Serial Port Protocol (SPP) und ist sehr einfach zu benutzen. 23) Von der App werden die Messwerte weitergeleitet an eine IoT Platform die früher Pachube hiess, dann Cosm und heute Xively. Per HTTP POST kann man dort Messdaten ablegen und später wieder auslesen. Eine open source Variante dieser Platform heisst ThingSpeak. Platformen sind super, wenn man schnell was prototypen will. Das Datenschema ist aber oft relativ starr. Eine flexiblere Lösung ist z.B. AWS DynamoDB. 24) Ein Nachteil von Bluetooth Classic ist, dass man nicht mit dem iPhone kommunizieren kann ohne einen "Made for iOS" Chip, den Apple nicht an Hobbyisten verkauft. Mit Bluetooth Low Energy ist das jetzt endlich möglich. Sobald die ersten BLE Arduino Shields verfügbar wurden, haben wir einen Masskrug damit ausgestattet. Der Shield von Dr. M. Kroll ist sehr einfach zu benutzen, bietet dafür per default nur ein Characteristic. 25) Es geht sogar ganz ohne Arduino. Der TI SensorTag ist ein BLE Chip mit eingebautem Beschleunigungs-messer, sowie Temperatur und IR Wärme-Sensoren, für 25$. Mit einem selbstgedruckten Adapter passt er problemlos an einen Masskrug. TI liefert auch Demo Apps um die App Entwicklung zu vereinfachen. 26) Statt einem Smartphone könnten in Zukunft auch solche BLE zu 3G Gateways ein Thema werden. Der hier ist von Oberon microsystems, wo ich neben unserem Startup Yaler auch noch arbeite. Auf dem ARM Cortex M3 Prozessor läuft eine kleine, open source Variante von .NET, das .NET Micro Framework. Das 3G Modul ist von uBlox, eine Firma aus Zürich. Die Steckverbindungen entsprechen dem Gadgeteer Standard von MSR. 27) Das nächste Projekt ist ein Internet-verbundener Kicker-Tisch. Jedes Tor ist mit einem Sensor ausgestattet, der über Wi-Fi den Spielstand registriert, in der Cloud. Dieses Projekt wurde im Hyperwerk Basel realisiert. Ähnliche Projekte gibt es fast überall, wo Kicker gespielt wird. Um sie zu sammeln hab ich einen Tumblr gestartet, iot-foosball.tumblr.com 28) Die Elektronik besteht in unserem Fall aus einem PIR Sensor, um Tore zu detektieren. Ein Buzzer und eine LED zeigen an, dass ein Tor gefallen ist. Der Undo-Button macht ungewollte Tore wieder rückgängig. Via den CC3000 Wi-Fi Chip wird der Zählstand auf einer Cloud Platform namens Dweet.io gespeichert. Diese neue Platform von Buglabs in New York erlaubt es, key/value Paare in JSON zu posten. Dazu kommt ein Timestamp. 29) Die Anzeige des Spielstands ist eine einfache HTML Webseite mit Javascript. Der Stand der beiden Zähler wird alle paar Sekunden bei Dweet.io als JSON abgeholt und graphisch aufbereitet. Die Arduinos wissen eigentlich nichts voneinander und auch nichts von den Kicker Regeln. Erst das Mashup im Display macht die "dummen" Zähler zum Spielstand. 30) Gehostet wurde der Spielstand bzw. Die Webseite auf einem alten Mac Mini mit Ethernet. Auch super geeignet wäre ein Raspberry Pi. Via HDMI kann man einfach einen Beamer anschliessen, und per USB Wi-Fi Dongle geht's ins Internet. 31) Da die Cloud Geschichte nicht allen geheuer ist, gibt's inzwischen auch lokale Hub-Software wie NodeRed, ein open source Projekt von IBM. Gehostet auf einem Raspi lassen sich damit Arduinos im lokalen Netz und Web Dienste wie Twitter graphisch verknüpfen. Der Source Code dieser Konfigurationen kann einfach per copy und paste mit Freunden geteilt werden. 32) An dieser Auflistung von TheThingSystem (einem weiteren open source Hub) sieht man, dass die Hauptarbeit im Schreiben von Adaptern für 3rd party Produkte und exotische Protokolle besteht. Ein ähnliches Projekt ist OpenHab aus Deutschland. Es gibt übrigens auch closed source Initiativen wie Qeo von Technicolor, aber ich würde nicht darauf wetten, dass die lange überleben. 33) Ein typisches home-automation Produkt ist Philips Hue, eine Internet-verbundene Glühbirne deren Farbe man per App einstellen kann. Hue verwendet ZigBee für lokale Kommunikation und einen ZigBee zu Ethernet Gateway ins Internet. Entwickler haben Zugriff auf das gut dokumentierte Hue API. 34) Die Hue Lampe ist auch über die Mash-up Plattform "If This Then That" benutzbar. So kann zum Beispiel ein Sportkanal die Raumbeleuchtung steuern. 35) Oder mein Fitnessarmband sagt mir per Email, dass ich mehr trainieren soll. Diese Regel-basierten Plattformen sind so einfach zu bedienen, dass die Benutzer zu Hause ihre Geräte selbst verknüpfen können. High-level Programmierung für jedermann. 36) Allerdings ist IFTTT selbst auch ziemlich geschlossen. Um sich mit einem DIY Projekt in die Plattform einzuhängen gibt's nur langsame RSS feeds, oder den Umweg über Twitter. Besser sieht's bei Zapier aus, einer Konkurrenzplattform. Dort gibt es heute schon Webhooks, also getriggerte Aufrufe von der Cloud Platform auf mein Gerät. 37) Zum Schluss noch ein Beispiel mit Twilio, einem gehosteten REST API für Telefonie. Mein kleiner Arduino Web-service zu Hause liefert auf Anfrage eine XML Datei im TwiML Format. Das Dokument enthält den Text, der als Antwort auf einen Telefonanruf geprochen werden soll. Der Arduino fügt jeweils den aktuellen (erfundenen) Temperatur-Wert ein. Twilio macht den Rest. 38) Das war's zum Thema Connectivity. Als Einstieg ins Thema IoT empfehle ich die online Tutorials von Adafruit oder eines dieser Bücher. Viele Projektideen findet man auch auf Instructables.