Vorwort

Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com

Das Internet der Dinge (IoT) ist ein komplexes, vernetztes System von Systemen, das aus verschiedenen Hardware-Geräten, Software-Anwendungen, Datenstandards, Kommunikationsparadigmen und Cloud-Diensten besteht. Zu wissen, wo du mit deinem eigenen IoT-Projekt anfangen sollst, kann ein wenig entmutigend sein. Das Internet der Dinge zu programmieren soll dir den Einstieg in die IoT-Entwicklung erleichtern und dir, dem Entwickler, zeigen, wie das IoT funktioniert.

Wenn du dich entscheidest, mit mir durch dieses Buch zu gehen, wirst du lernen, wie du die Software schreibst, testest und einsetzt, die du brauchst, um deine eigene grundlegende, durchgängige IoT-Fähigkeit aufzubauen.

Für wen ist dieses Buch?

Das Internet der Dinge programmieren ist im Kern ein Buch über den Aufbau von IoT-Lösungen - vom Gerät bis zur Cloud.

Dieses Buch wurde in erster Linie als Lehrbuch für meinen Kurs über vernetzte Geräte an der Northeastern University und für alle Studierenden geschrieben, die lernen möchten, wie man IoT-Lösungen programmiert. Obwohl es sich strukturell auf die Unterstützung von Studierenden und Praktikern konzentriert, kann es auch für diejenigen hilfreich sein, die mehr über IoT-Konzepte und -Prinzipien erfahren möchten.

Im gesamten Buch findest du Schritt-für-Schritt-Anleitungen für den Aufbau deiner eigenen End-to-End-IoT-Fähigkeit. Die Übungen in den einzelnen Kapiteln bauen aufeinander auf und helfen dir, dein Wissen über das IoT zu festigen. Wenn du mehr an den Konzepten interessiert bist, ist das völlig in Ordnung! Du kannst das "Was" und das "Warum" lernen, aber schnell durch das "Wie" gehen und die Übungen auslassen, wenn du das möchtest.

Als Pädagoge und Berater habe ich den Inhalt so strukturiert, dass er als Wegweiser für Einführungskurse in die IoT-Programmierung verwendet werden kann, um Schritt für Schritt die wichtigsten Konzepte zu vermitteln und schrittweise eine Wissensbasis in diesem wichtigen Bereich aufzubauen. Ich hoffe, dass dieses Buch dir beim Aufbau deines Kurses und deines Wissens hilft, ganz gleich, ob du als Lehrkraft an einer Hochschule unterrichtest oder als Schülerin oder Schüler deine Fähigkeiten im IoT erweitern möchtest.

Und schließlich überlasse ich die meisten spezifischen Anweisungen und Details den bestehenden Spezifikationen und Open-Source-APIs. Auch wenn einige Teile des Buches als übergeordnete Referenz dienen können, konzentriert sich der Großteil des Inhalts darauf, dir zu helfen, diese Informationen zu nutzen, um die von dir benötigte Lösung zu erstellen. Wir können uns glücklich schätzen, dass wir Zugang zu gut geschriebenen Protokollspezifikationen und einer lebendigen Open-Source-Gemeinschaft haben, und ich bin denjenigen dankbar, die sich für diese Bemühungen eingesetzt haben.

An den Programmierer

Wenn du dich als Praktiker/in auf deine eigene IoT-Lernreise begibst, bist du vermutlich vor allem daran interessiert, deine Fähigkeiten zu erweitern. Vielleicht hast du das Wachstum der IoT-Möglichkeiten beobachtet und möchtest Teil dieser wichtigen technologischen Entwicklung sein. Im Laufe der Jahre habe ich festgestellt, dass der schrittweise Aufbau von integrierten und offenen IoT-Lösungen sehr hilfreich ist, um die Komplexität dieses Bereichs zu verstehen.

Die Programmierbeispiele, die du hier findest, sind das Ergebnis meiner eigenen Reise, auf der ich viel über das IoT gelernt habe. Viele von ihnen sind aus den Labormodulen des Kurses "Connected Devices" entstanden, den ich im Rahmen des Cyber Physical Systems-Programms der Northeastern University unterrichte.

Jedes Kapitel und jede Übung baut auf dem vorherigen auf. Wenn du also gerade erst mit dem IoT anfängst und nicht weißt, wie ein durchgängiges IoT-System durch Software zusammengesetzt wird, empfehle ich dir, die Übungen in der angegebenen Reihenfolge durchzuarbeiten. Anpassungen der Anwendungen solltest du am besten erst in Erwägung ziehen, wenn du jedes Kapitel gemeistert hast.

Wenn du ein erfahrener Programmierer bist und dieses Buch als Nachschlagewerk verwendest, kannst du vielleicht einige der grundlegenden Verfahren zum Einrichten der Entwicklungsumgebung überspringen und einige der Programmierübungen einfach überfliegen; ich empfehle dir jedoch, die in jeder Übung genannten Anforderungen durchzuarbeiten, auch wenn du dein eigenes Design verwendest.

An den Ausbilder

Die Inhalte, die diesem Buch zugrunde liegen, habe ich in den letzten Jahren erfolgreich in meinem Graduiertenkurs "Vernetzte Geräte" eingesetzt. Dieses Buch ist die formale Zusammenfassung dieser Vorlesungsunterlagen, Präsentationen, Beispiele und Laborübungen und ist ähnlich aufgebaut wie mein Kurs.

Ursprünglich habe ich den Kurs als Einführung in das Internet der Dinge konzipiert, aber mit dem Input der Studierenden und den Vorschlägen meiner Lehrassistenten hat er sich schnell zu einem projektorientierten Softwareentwicklungskurs entwickelt. Er ist jetzt einer der letzten Pflichtkurse für Studenten, die ihren Master-Abschluss im Studiengang Cyber Physical Systems machen. Ziel des Kurses ist es, ein solides Grundwissen über das Internet der Dinge zu vermitteln, damit die Studierenden von der Hochschule in die Industrie wechseln und grundlegende IoT-Fähigkeiten und -Kenntnisse in ihre jeweiligen Unternehmen einbringen können.

Dieses Buch ist so aufgebaut, dass es als Nachschlagewerk oder sogar als Hauptbestandteil eines kompletten Lehrplans verwendet werden kann, um dir bei deinem eigenen IoT-bezogenen Kurs zu helfen. Der Inhalt konzentriert sich auf den Aufbau einer durchgängigen, offenen und integrierten IoT-Lösung, vom Gerät bis zur Cloud, und verfolgt dabei einen "Learning as you build"-Ansatz. Da jedes Kapitel auf dem vorangegangenen aufbaut, kannst du dieses Buch nutzen, um deine Schüler/innen beim Aufbau ihrer eigenen Plattform von Grund auf anzuleiten.

Du kannst dich mit den Online-Übungen auf dem Laufenden halten, indem du dir das IoT-Kanban-Board programmieren ansiehst.1 Weitere relevante Inhalte, die für den Unterricht und die Erläuterung einiger Konzepte in diesem Buch nützlich sind, findest du auf der Website des Buches.

An den Technologiemanager oder die Führungskraft

Der Inhalt dieses Buches soll dir helfen, die Integrationsherausforderungen jedes IoT-Projekts besser zu verstehen, und dir einen Einblick in die Fähigkeiten geben, die dein(e) Technologieteam(s) für den Erfolg deiner IoT-Initiativen benötigen.

Wenn du zu dieser Gruppe gehörst, gehe ich davon aus, dass es dir vor allem darum geht, diesen Technologiebereich als Ganzes zu verstehen - seine Integrationsherausforderungen, die Anforderungen und Bedürfnisse der Entwicklerteams, die Fähigkeiten der Teams, die Bedenken der Geschäftsanwender und Stakeholder gegenüber dem IoT und die Herausforderungen des Change Managements, denen du auf dem Weg zum IoT in deinem Unternehmen begegnen wirst.

Du musst die Übungen nicht selbst durchführen, aber es ist hilfreich, das gesamte Buch zu lesen, um die Herausforderungen zu verstehen, denen dein Team wahrscheinlich begegnen wird.

Unternehmen, die vor allem daran interessiert sind, zu verstehen, was das IoT mit sich bringt, empfehle ich, zumindest den Überblicksabschnitt zu Beginn jedes Kapitels zu lesen und sich dann auf das letzte Kapitel zu konzentrieren, in dem eine Handvoll praktischer Fälle, Szenarien und Umsetzungsvorschläge besprochen werden.

Was muss ich wissen?

Obwohl die Übungen in diesem Buch voraussetzen, dass du bereits Erfahrung mit dem Schreiben von Softwareanwendungen in Python und Java hast, erfordern die meisten keine ausgefeilten Programmierkenntnisse oder einen formalen Hintergrund in Informatik. Die meisten Übungen setzen jedoch voraus, dass du mit der Entwicklung von Code in einer integrierten Entwicklungsumgebung (IDE), dem Lesen, Schreiben und Ausführen von Unit-Tests, dem Ausführen von Anwendungen über die Kommandozeile und der Konfiguration von Linux-basierten Systemen über eine Shell-basierte Kommandozeile vertraut bist.

Wenn du die optionalen Übungen auf der Kanban-Tafel oder am Ende einiger Kapitel bearbeiten willst, musst du Python- und Java-Anwendungen von Grund auf und ohne Anleitung erstellen können.

Allen Übungen geht ein Zielzustandsdiagramm für die jeweilige Aufgabe voraus, in dem detailliert beschrieben wird, wie alle neuen logischen Komponenten, die du erstellst, mit den bereits vorhandenen Komponenten zusammenarbeiten sollen, die du bereits entwickelt hast. Die meisten sind einfache Blockdiagramme, die die grundlegenden Beziehungen zwischen den Komponenten der Anwendung zeigen.

Hinweis

Viele der Diagramme sind nicht für eine bestimmte Dokumentationsmethodik ausgelegt und zeigen nur eine Übersicht über die Komponenten und ihre grundlegenden Wechselwirkungen. In diesen Fällen füge ich ein oder mehrere Klassendiagramme auf Basis der Unified Modeling Language (UML) hinzu, um die Absicht des Entwurfs zu verdeutlichen.2

Wie ist dieses Buch gegliedert?

Dieses Buch führt dich durch den Aufbau einer durchgängigen, integrierten IoT-Lösung mit verschiedenen Open-Source-Bibliotheken und Softwarekomponenten, die du Schritt für Schritt aufbaust. Jede Komponente ist Teil eines größeren Systems, und du wirst in den Übungen der einzelnen Kapitel sehen, wie die Komponenten miteinander verbunden sind und sich in eine Endarchitektur einfügen.

In jedem Kapitel werde ich eine kurze Einführung in das Thema des Kapitels geben und einige hilfreiche Hintergrundinformationen liefern, darunter auch einige relevante Definitionen. Außerdem fasse ich zusammen, warum das Thema wichtig ist und was du lernen kannst. Danach folgen Programmierübungen zum Thema. Viele Kapitel enden mit zusätzlichen Übungen, die du ebenfalls durchführen kannst, um dein Wissen über das Thema des Kapitels zu festigen.

Ich habe ähnliche Kapitel gruppiert und dieses Schema verwendet, um die vier Teile des Buches zu erstellen: Teil I, "Erste Schritte"; Teil II, "Die Verbindung zur physischen Welt"; Teil III, "Die Verbindung zu anderen Dingen"; und Teil IV, "Die Verbindung zur Cloud". Ich werde hier auf jeden Teil und jedes Kapitel etwas ausführlicher eingehen und dann einige Hintergrundinformationen über das IoT selbst geben.

Jeder Teil oder jedes Kapitel beginnt mit einem Haiku, das versucht, die Essenz dessen, was du lernen wirst, und einige der Herausforderungen, denen du wahrscheinlich begegnen wirst, zu erfassen. Wie kam es zu diesem Buch? In meinen Anfängen als Softwareentwickler gab es in einem der Teams, in denen ich arbeitete, eine Regel: Wenn du einen Code einfügst, der zu einem Fehler im nächtlichen Build führt, musst du ein Haiku über das Problem schreiben und es an alle Teammitglieder schicken. Während du die Übungen in diesem Buch durcharbeitest, wirst du wahrscheinlich nicht auf viele fehlerhafte nächtliche Builds stoßen, aber du solltest dich frei fühlen, deine eigenen Haiku zu schreiben, während du deine Fehler machst und daraus lernst!

Teil I, "Erste Schritte"

In diesem Abschnitt legen wir die erste Grundlage für die IoT-Entwicklung. Du beginnst mit der Erstellung einer Entwicklungs- und Testumgebung und schreibst zum Abschluss zwei einfache Anwendungen, um zu überprüfen, ob deine Umgebung richtig funktioniert.

  • Kapitel 1, "Erste Schritte", ist das längste Kapitel des Buches. Es legt den Grundstein für deine End-to-End-Lösung und hilft dir, einen Grundstock an IoT-Wissen aufzubauen. Es hilft dir auch dabei, deinen Arbeitsplatz und deine Entwicklungsumgebung einzurichten, damit du so schnell wie möglich produktiv sein kannst. In diesem Kapitel erläutere ich einige grundlegende IoT-Begriffe, erstelle eine einfache Problemstellung, definiere die wichtigsten Architekturkonzepte und lege einen ersten Entwurfsansatz fest, auf den ich mich bei allen weiteren Übungen beziehen werde.

    Hinweis

    Das IoT besteht aus einer Vielzahl heterogener Geräte und Systeme, und es gibt viele Tools und Dienstprogramme, die die Entwicklung und Systemautomatisierung unterstützen. Ich verwende im gesamten Buch Open-Source-Tools und -Hilfsprogramme. Diese stellen nur eine kleine Auswahl dessen dar, was dir zur Verfügung steht, und sollten nicht als uneingeschränkte Empfehlungen verstanden werden; vielleicht hast du deine eigenen Vorlieben. Mein Ziel ist es lediglich, den Inhalt des Buches übersichtlich zu halten und einen allgemeinen Entwicklungs- und Automatisierungsansatz zu vermitteln, der dir hilft, die Übungen erfolgreich umzusetzen.

  • Kapitel 2, "Erste Edge-Tier-Anwendungen", befasst sich mit der Einrichtung deiner Entwicklungsumgebung und der Erfassung deiner Anforderungen und geht dann zum Programmieren über. Hier erstellst du deine ersten beiden IoT-Anwendungen - eine in Python und die andere in Java. Diese sind recht einfach, bilden aber die Grundlage für die folgenden Kapitel. Auch wenn du bereits ein erfahrener Entwickler bist, ist es wichtig, dass du die Übungen wie vorgegeben durcharbeitest, damit wir in Zukunft von der gleichen Basis ausgehen.

Teil II, "Die Verbindung zur physischen Welt"

Dieser Abschnitt behandelt ein grundlegendes Merkmal des IoT - die Integration mit der physischen Welt. Die Übungen konzentrieren sich zwar auf Simulation und Hardware-Emulation, aber die Prinzipien, die du lernst - wie man Sensordaten ausliest und einen Aktor (virtuell) auslöst - werden dir helfen, wenn du dich entscheidest, in Zukunft echte Hardware einzusetzen.

  • InKapitel 3, "Datensimulation", lernst du, wie du mit Hilfe von Simulationen Daten aus der physischen Welt sammeln (Sensing) und Aktionen auf Basis dieser Daten auslösen kannst (Acting). Du beginnst damit, eine Reihe von einfachen Simulatoren zu bauen, die du in jeder weiteren Übung verwenden wirst. Diese Simulatoren sind zwar sehr einfach aufgebaut, aber sie werden dir helfen, die Prinzipien der Datenerfassung und der Nutzung dieser Daten zur Auslösung von Aktionen besser zu verstehen.

  • Kapitel 4, "Datenemulation", erweitert die Simulationsfunktionen, die du in Kapitel 3 entwickelt hast, um das Verhalten von Sensoren und Aktoren zu emulieren. Dieses Kapitel bleibt in der virtuellen Welt und verwendet einen Open-Source-Hardware-Emulator, den du auf deinem Entwicklungsarbeitsplatz einsetzen kannst.

  • In Kapitel 5, "Datenmanagement", geht es um Telemetrie und Datenformatierung und darum, wie du deine Daten so strukturieren kannst, dass Menschen und Maschinen sie problemlos speichern, übertragen und verstehen können. Dies ist die Grundlage für deine Interoperabilität mit anderen "Dingen".

Teil III, "Die Verbindung zu anderen Dingen"

Das ist der Punkt, an dem der Gummi auf die Straße trifft. Teil III konzentriert sich auf die geräteübergreifende Integration: Um wirklich integriert zu sein, brauchst du eine Möglichkeit, deine Telemetriedaten und andere Informationen von einem Ort zum anderen zu bringen. Du lernst die Protokolle der Anwendungsebene kennen, die für IoT-Ökosysteme entwickelt wurden, und setzt sie ein. Ich gehe davon aus, dass deine Netzwerkschicht bereits vorhanden und funktionsfähig ist, auch wenn ich auf dem Weg dorthin ein paar drahtlose Protokolle besprechen werde.

  • In Kapitel 6, "MQTT-Integration - Überblick und Python-Client", werden Publish/Subscribe-Protokolle vorgestellt, insbesondere der Message Queuing Telemetry Transport (MQTT), der häufig in IoT-Anwendungen verwendet wird. Ich gehe auf einige Details der Spezifikation ein und erkläre, wie du eine einfache Abstraktionsschicht aufbauen kannst, die es dir ermöglicht, mit gängigen Open-Source-Bibliotheken zu kommunizieren, angefangen mit Python.

  • InKapitel 7, "MQTT-Integration - Java Client", baust du dein Wissen über MQTT weiter aus, indem du dich mit einer Open-Source-Bibliothek beschäftigst, mit der du deine Java-Anwendungen mit einem MQTT-Server verbinden kannst. Du wirst dieses Protokoll in den Übungen und Tests am Ende des Kapitels verwenden, um den Python-Code, den du in Kapitel 6 entwickelt hast, zu integrieren.

  • Kapitel 8, "CoAP-Server-Implementierung", befasst sich mit Anfrage-/Antwort-Protokollen, insbesondere mit dem Constrained Application Protocol (CoAP), das ebenfalls häufig in IoT-Anwendungen verwendet wird. Der große Unterschied ist, dass du mit Java beginnst und einen CoAP-Server mit einer anderen Open-Source-Bibliothek erstellst. Außerdem gibt es optionale Übungen, um einen CoAP-Server in Python zu erstellen.

  • Kapitel 9, "CoAP-Client-Integration", fährt mit CoAP fort, konzentriert sich aber auf die Erstellung des Client-Codes, mit dem du dich mit deinem neu entwickelten Java-Server verbinden wirst. Mit diesem Client-Code, der sowohl in Python als auch in Java geschrieben ist, kannst du die Kommunikation von Gerät zu Gerät mit CoAP als Protokoll unterstützen.

  • In Kapitel 10, "Integration am Rand", geht es um die Integration, bei der du deine beiden Anwendungen entweder über MQTT oder CoAP miteinander verbinden kannst. Für jedes Protokoll gibt es Übungen, die dir helfen zu entscheiden, welches Protokoll für deine Lösung am besten geeignet ist. Ähnlich wie in Kapitel 9 musst du auch in diesem Kapitel sowohl mit Python als auch mit Java arbeiten.

Teil IV, "Die Verbindung zur Cloud"

Schließlich lernst du an der "Spitze" des Integrationsstapels, wie du deine gesamte IoT-Geräteinfrastruktur mit der Cloud verbinden kannst, indem du deine Gateway-Anwendung als Vermittler zwischen deiner Cloud-Funktionalität und all deinen Geräten einsetzt.

Dieser Abschnitt behandelt die grundlegenden Prinzipien der Cloud-Konnektivität und geht auf verschiedene Cloud-Dienste ein, die deine IoT-Umgebung speichern, analysieren und verwalten können. Du wirst auf jeder Plattform dieselbe einfache Cloud-Anwendung erstellen.

  • In Kapitel 11, "Integration mit verschiedenen Cloud-Diensten", werden die wichtigsten Konzepte für die Verbindung deiner IoT-Lösung mit der Cloud erörtert und verschiedene Übungen zur Cloud-Integration vorgestellt, die du mithilfe des MQTT-Protokolls umsetzen kannst. Da es viele Bücher und Tutorials für diese Plattformen gibt, werde ich nur auf diese Möglichkeiten eingehen und nicht auf die Entwicklung von spezifischen Lösungen. Die Übungen helfen dir bei der Auswahl der Cloud-Plattform, die du für deine eigene Implementierung nutzen möchtest.

  • Kapitel 12, "Das IoT zähmen", untersucht die wichtigsten Voraussetzungen für eine IoT-Lösung und ordnet sie einigen einfachen IoT-Anwendungsfällen zu, die ich bei der Vorbereitung meines Kurses "Vernetzte Geräte" besonders hilfreich fand. Ich gehe auf die allgemeine Problemstellung, das erwartete Ergebnis und den fiktiven Designansatz ein.

Ich hoffe, dass der Ansatz dieses Buches es dir ermöglicht, ein integriertes IoT-System von Anfang bis Ende zu verstehen und zu erstellen.

Einige Hintergrundinformationen über das IoT

Hier ist eine kurze Zusammenfassung, wie das IoT zu diesem Punkt gekommen ist.

Mit der Erfindung des Transistors in den 1950er Jahren machte die Computertechnik einen großen Schritt nach vorn. In den 1960er Jahren folgte Gordon Moores Arbeit, in der er die Verdoppelung der Transistoren auf gleichem Raum beschrieb (später in den 1970er Jahren aktualisiert).3

Mit der Erfindung des ARPAnet im Jahr 1969 kam die moderne Computertechnik und die Anfänge des Internets.4 Dies führte in den 1970er Jahren zu neuen Möglichkeiten, Daten mithilfe des Network Control Protocol (NCP) und des Transmission Control Protocol (TCP) über das Internet Protocol (IP) in Pakete zu packen und die bestehende kabelgebundene Infrastruktur zu nutzen. Dies war für die Industrie von Nutzen und ermöglichte es der elektrischen Industrieautomatisierung, den Weg der zentralen Verwaltung verteilter, verbundener Systeme einzuschlagen. Überwachungs- und Datenerfassungssysteme (Supervisory Control and Data Acquisition, SCADA) - die Vorläufer der Machine-to-Machine (M2M)-Technologien, die zum IoT führten - lösten sich von ihren proprietären Wurzeln, und speicherprogrammierbare Steuerungen (SPS) - die kurz vor dem ARPAnet erfunden wurden - entwickelten sich weiter, um die Vorteile des TCP/IP-Netzwerks und der damit verbundenen Gerätestandards zu nutzen.5

In den 1980er Jahren wurde das User Datagram Protocol (UDP) eingeführt6 und die Geburt dessen, was viele von uns als das frühe moderne Internet erlebt haben - das World Wide Web (WWW), das in den späten 1980er Jahren von Tim Berners-Lee erfunden wurde.7

Hinweis

Dieser Zeitraum war auch ein wichtiger Wegbereiter für das, was später als Industrielles Internet der Dinge (IIoT) bekannt wurde, eine Untergruppe des IoT und ein wichtiger Teil der Entwicklung des IoT.

Du hast sicher schon bemerkt, dass es ein gemeinsames Thema gibt: Auf ein Problem folgt eine (oft proprietäre) technologische Innovation, um das Problem zu lösen, die dann standardisiert wird oder durch einen oder mehrere Standards ersetzt wird, was zu einer breiten Akzeptanz und weiteren Innovationen führt.

Damit sind wir in der Ära des IoT angekommen. In den 1980er und frühen 1990er Jahren tauchten die ersten vernetzten Geräte auf, darunter ein mit dem Internet verbundener Toaster, der von John Romkey und Simon Hackett auf der Interop 1990 vorgeführt wurde.8 1991 richteten die Nutzer des Computerlabors in der Nähe des Trojan Room an der Universität Cambridge eine Webkamera ein, um die Kaffeekanne zu überwachen - denn wer will schon einen Ausflug machen, nur um festzustellen, dass die Kanne leer ist?9

Es folgten natürlich noch mehr Geräte, und ich schätze, dass noch mehr gebaut und als Experimente in College-Laboren, Wohnheimen, Häusern, Wohnungen und Unternehmen angeschlossen wurden. Währenddessen wurden Computer und Netzwerke immer preiswerter, leistungsfähiger und natürlich auch kleiner. Es wird allgemein angenommen, dass Kevin Ashton 1999 den Begriff "Internet der Dinge" prägte, als er bei Proctor & Gamble einen Vortrag zu diesem Thema hielt.10

Spule vor bis 2005, als das Interaction Design Institute Ivrea in Italien uns den preiswerten, für Anfänger entwickelten Arduino Einplatinencomputer (SBC) schenkte,11 Er öffnete die Tür für mehr Menschen, die ihre eigenen Sensor- und Automatisierungssysteme bauen wollten. Wenn man dann noch eine leicht zugängliche Speicherung und die Möglichkeit der Datenanalyse durch Dienste, die von überall aus dem Internet erreichbar sind, hinzufügt, hat man die Grundlage für ein IoT-Ökosystem geschaffen: das heißt, eine Menge individueller Dinge, die miteinander verbunden werden können, um einen größeren Zweck zu erfüllen.

Doch das IoT als eine Ansammlung von Dingen zu betrachten, die die physische Welt mit dem Internet verbinden, wird dem IoT nicht gerecht. Meiner Meinung nach liegt das Wesen des IoT und ein wesentlicher Grund für seine Komplexität in seiner Heterogenität: Ungleichheit und große Unterschiede bei Gerätetypen, Funktionen und Fähigkeiten, Verwendungszwecken, Implementierungsansätzen, unterstützten Protokollen, Sicherheits- und Verwaltungstechniken.

Komplexität neu definiert

Was genau ist also das Internet der Dinge? Es handelt sich um ein komplexes technologisches Ökosystem, das die physische Welt mit dem Internet verbindet, indem es eine Vielzahl von Kantencomputern und Cloud-Computing-Diensten einsetzt.

Für die Zwecke dieses Buches werden wir einige leicht vereinfachte Definitionen verwenden. Edge-Computing-Geräte beziehen sich auf eingebettete Elektronik, Computersysteme und Softwareanwendungen, die entweder über Sensoren und Aktoren direkt mit der physischen Welt interagieren oder ein Gateway oder eine Brücke für die Verbindung dieser Geräte und Anwendungen mit dem Internet darstellen. Cloud Computing-Dienste beziehen sich auf Computersysteme, Softwareanwendungen, Datenspeicherung und andere Rechendienste, die in einem oder mehreren Rechenzentren untergebracht und jederzeit über das Internet zugänglich sind.

Im Folgenden bezeichne ich diese beiden Bereiche als ihre jeweilige Architekturebene, d.h . Cloud Tier für Cloud Computing-Dienste und Edge Tier für Edge Computing-Geräte. Die architektonischen Ebenen trennen die wichtigsten Funktionen eines IoT-Systems sowohl physisch als auch logisch voneinander. Das bedeutet zum Beispiel, dass alle Sensoren und Aktoren in der Edge-Ebene und alle langfristigen Speicherungen und komplexen Analysen in der Cloud-Ebene angesiedelt sind.

Hinweis

Für diejenigen, die sich eingehender mit Architektur und den dazugehörigen Standards befassen möchten, gibt es viele Organisationen, die sich aktiv an diesen Bereichen beteiligen und entsprechende Inhalte veröffentlichen. Einige davon sind zum Beispiel:

Die IIC hat eine Reihe nützlicher Dokumente veröffentlicht. Von besonderem Interesse ist die Industrial Internet Reference Architecture, die einen Rahmen und ein gemeinsames Vokabular für IIoT-Systeme beschreibt und mein Denken zum Thema IoT-Architektur stark beeinflusst hat.12

Wert schaffen

Der wahre Wert eines IoT-Systems liegt in seiner Fähigkeit, durch die Integration der physischen und logischen Welt und die Sammlung und Analyse von Zeitreihendaten ein verbessertes oder erweitertes Ergebnis zu erzielen.

Nehmen wir ein einfaches Beispiel aus einer Haushaltsküche mit vielen Geräten. Wenn ich zum Beispiel jede Minute die Innentemperatur eines Kühlschranks messe, kann ich feststellen, wie lange die im Kühlschrank gelagerten Lebensmittel einer bestimmten Temperatur ausgesetzt waren. Wenn ich die Innentemperatur nur einmal am Tag messe, habe ich keine ausreichenden Informationen, um diese Feststellung zu treffen.

Wenn andere Systeme die von mir gesammelten Daten nicht verstehen können, sind sie natürlich ziemlich nutzlos. Auch wenn jedes Teil für sich genommen einzigartig ist und nicht von einem anderen Teil abhängt, musst du als Entwickler beim Aufbau integrierbarer IoT-Lösungen sorgfältig darüber nachdenken, wie das Design (und die Daten) der einzelnen Teile eines IoT-Systems mit anderen Systemen (und anderen Entwicklern) interagieren können.

Ein weiterer wichtiger Teil der Wertschöpfungskette ist die Skalierbarkeit. Es ist eine Sache, ein System zu bauen, das eine Handvoll Eingaben unterstützt, aber eine ganz andere, Tausende, Millionen oder sogar Milliarden von Eingaben zu verarbeiten. Skalierbarkeit - die Fähigkeit eines Systems, so viele oder so wenige Informationen zu verarbeiten, wie wir wollen - ist das, was dem IoT seine wahre Stärke verleiht. Ein skalierbares Cloud-System, das das IoT unterstützt, kann zum Beispiel ein einziges Gateway-Gerät, das ihm Daten sendet, oder Tausende (oder Millionen oder Milliarden) von Eingaben verarbeiten, ohne dass es fehlschlägt.

Wahrscheinlich ist dir inzwischen klar, dass du dich beim Aufbau eines integrierten IoT-Systems bei jedem Schritt mit erheblichen Nuancen auseinandersetzen musst. Du kannst nicht erwarten, dass sich die Systeme, die dir Daten senden, einfach einschalten lassen oder sich sogar einheitlich verhalten. Und selbst wenn du versuchst, deinen Code so generisch zu schreiben, dass er von einem Hardware-Gerät zum anderen auf die gleiche Weise funktioniert, wird er nicht immer auf allen Plattformen funktionieren.

Hinweis

Es ist weder möglich, in einem Buch alle speziellen Plattformen abzudecken, noch ist es einfach, konsistenten Semi-Low-Level-Code auf Geräteebene zu schreiben, der nicht für jedes Gerät optimiert werden muss. Auch wenn es bei jedem Gerät Unterschiede gibt, die wir bei der Entwicklung (und beim Testen) unserer Lösungen berücksichtigen müssen, sind die Codebeispiele in diesem Buch (mit einigen kleinen Ausnahmen) portabel und können auf den meisten Systemen verwendet werden, auf denen eine Java Virtual Machine oder ein Python 3 Interpreter läuft.

Leben am Rande

Bei aller Leistungsfähigkeit und Flexibilität der Cloud Tier weist eine IoT-Lösung in der Regel die größte Komplexität an den Kanten auf, wo sich die meiste (und oft auch die gesamte) Heterogenität des Systems befindet. Die beiden Gerätekategorien, auf die sich dieses Buch konzentrieren wird, sind eingeschränkte Geräte und Gateway-Geräte.

Um es grob zu vereinfachen: eingeschränkte Geräte haben einige Einschränkungen in Bezug auf Leistung, Kommunikation und Verarbeitung, während Gateway-Geräte in der Regel keine haben.

Hinweis

Ich lasse die Nomenklatur der "intelligenten Geräte" absichtlich weg, da es immer unklarer wird, wie man "intelligente" und "nicht so intelligente" Geräte am besten definiert.

Eine Möglichkeit, ein eingeschränktes Gerät zu betrachten, ist ein stromsparender (manchmal batteriebetriebener) SBC, der entweder Daten aus der Umgebung liest (z. B. Temperatur, Druck oder Feuchtigkeit) oder eine mechanische Aktion auslöst (z. B. das Öffnen oder Schließen eines Ventils).

Hinweis

Die IETF stellt in RFC 7228 detaillierte Definitionen und Begriffe für verschiedene "Constrained Devices or Nodes" bereit.13 Es ist nicht die Absicht dieses Buches, diese Definitionen in irgendeiner Weise zu ändern - ich verwende die Begriffe "Constrained Device" und "Constrained Device App" lediglich, um die beabsichtigte Funktionalität des "Constrained Device" vom "Gateway Device" zu trennen und gleichzeitig die Natur jedes Gerätetyps zu verdeutlichen (kurz gesagt, dass Ersteres mehr technische Einschränkungen hat als Letzteres).

Ein Gateway-Gerät kann auch als SBC implementiert werden, ist aber viel leistungsfähiger: Es kann mit vielen verschiedenen eingeschränkten Geräten kommunizieren und verfügt über genügend Rechenleistung, um die Daten von diesen anderen Geräten zu aggregieren, einige Analysefunktionen auszuführen und zu bestimmen, wann (und wie) relevante Daten zur weiteren Speicherung und Verarbeitung in die Cloud gesendet werden sollen.

Abbildung P-1 zeigt eine fiktive IoT-Systemarchitektur, die die Beziehungen zwischen diesen Gerätetypen im Edge Tier und den Diensten und anderen Funktionen im Cloud Tier darstellt.

Notional IoT system architecture
Abbildung P-1. Fiktive IoT-Systemarchitektur

Für die Zwecke dieses Buches bezeichne ich diese Geräte wie folgt:

  • Gateway-Geräte konzentrieren sich in erster Linie auf die Verarbeitung, Interpretation und Integration von Daten am Rand und die Interaktion mit der Cloud. Sie führen Analysen "am Rand" durch, konvertieren und/oder wandeln Protokollstapel um, legen fest, wie Nachrichten weitergeleitet werden sollen (wenn überhaupt), und stellen natürlich eine direkte Verbindung zum Internet und den verschiedenen Cloud-Diensten her, die das IoT für die Akteure im Unternehmen nützlich machen.

  • Eingeschränkte Geräte sind nur in der Lage, Nachrichten selbst zu verarbeiten, weiterzuleiten, wenn das richtige Kommunikationsprotokoll implementiert ist, und Nachrichten an ein Gateway-Gerät zu senden. Kurz gesagt, ihre Fähigkeiten sind begrenzt, und sie können sich möglicherweise nicht direkt mit dem Internet verbinden, sondern sind auf ein Gateway-Gerät für die Cloud-Anbindung angewiesen.

Kann sich ein eingeschränktes Gerät direkt mit dem Internet verbinden? Natürlich, wenn es einen TCP/IP-Stack enthält, eine IP-Adresse hat, die vom öffentlichen Internet aus erreichbar ist, und über die entsprechende Kommunikationshardware verfügt, um mit dem Internet zu kommunizieren.

Für die Zwecke dieses Buches werde ich die Kategorie der eingeschränkten Geräte jedoch auf diese beiden Einschränkungen beschränken:

  • Sie unterstützen keine direkte Weiterleitung von Paketen ins oder aus dem öffentlichen Internet (obwohl sie sowohl TCP/IP als auch UDP/IP unterstützen) und müssen mit einem Gateway-Gerät zusammenarbeiten, um Teil eines IoT-Ökosystems zu sein.

  • Sie verfügen nicht über ausreichende Rechenressourcen, um auf der Grundlage der gesammelten Daten komplexe Handlungsabläufe intelligent zu bestimmen.

Ich konzentriere mich in diesem Buch auf das Paradigma "begrenztes Gerät zu Gateway-Gerät zu Cloud-Verbindung", obwohl es auch andere praktikable Edge-Computing-Modelle gibt, die für deinen speziellen Anwendungsfall besser geeignet sein könnten.

Fazit

Das bedeutet Folgendes: Wenn wir bessere Computergeräte herstellen, die kleiner, schneller und billiger sind, sie zur Interaktion mit der physischen Welt nutzen und sie (oder ihre Daten) mit dem Internet verbinden, um sie mit Hilfe von Cloud-Diensten zu verarbeiten, können wir Erkenntnisse gewinnen, die zu besseren Geschäftsergebnissen führen.

Danke fürs Lesen!

In diesem Buch verwendete Konventionen

In diesem Buch werden die folgenden typografischen Konventionen verwendet:

Kursiv

Weist auf neue Begriffe, URLs, E-Mail-Adressen, Dateinamen und Dateierweiterungen hin.

Constant width

Wird für Programmlistings sowie innerhalb von Absätzen verwendet, um auf Programmelemente wie Variablen- oder Funktionsnamen, Datenbanken, Datentypen, Umgebungsvariablen, Anweisungen und Schlüsselwörter hinzuweisen.

Constant width bold

Zeigt Befehle oder anderen Text an, der vom Benutzer wortwörtlich eingetippt werden sollte.

Constant width italic

Zeigt Text an, der durch vom Benutzer eingegebene Werte oder durch kontextabhängige Werte ersetzt werden soll.

Tipp

Dieses Element steht für einen Tipp oder eine Anregung.

Hinweis

Dieses Element steht für einen allgemeinen Hinweis.

Warnung

Dieses Element weist auf eine Warnung oder einen Warnhinweis hin.

Code-Beispiele verwenden

Zusätzliches Material (Codebeispiele und Dokumentationsvorlagen) findest du online unter https://github.com/programming-the-iot. Die Codebeispiele in diesem Buch sind unter der MIT-Lizenz lizenziert.

Wenn du eine technische Frage oder ein Problem mit den Codebeispielen hast, sende bitte eine E-Mail an

Dieses Buch soll dir helfen, deine Arbeit zu erledigen. Wenn in diesem Buch Beispielcode angeboten wird, darfst du ihn in deinen Programmen und deiner Dokumentation verwenden. Du musst uns nicht um Erlaubnis fragen, es sei denn, du reproduzierst einen großen Teil des Codes. Wenn du zum Beispiel ein Programm schreibst, das mehrere Teile des Codes aus diesem Buch verwendet, brauchst du keine Erlaubnis. Der Verkauf oder die Verbreitung von Beispielen aus O'Reilly-Büchern erfordert jedoch eine Genehmigung. Die Beantwortung einer Frage mit einem Zitat aus diesem Buch und einem Beispielcode erfordert keine Genehmigung. Wenn du einen großen Teil des Beispielcodes aus diesem Buch in die Dokumentation deines Produkts aufnimmst, ist eine Genehmigung erforderlich.

Wir freuen uns über eine Namensnennung, verlangen sie aber in der Regel nicht. Eine Quellenangabe umfasst normalerweise den Titel, den Autor, den Verlag und die ISBN. Ein Beispiel: "Programming the Internet of Things von Andy King (O'Reilly). Copyright 2021 Andrew D. King, 978-1-492-08141-8."

Wenn du der Meinung bist, dass die Verwendung von Code-Beispielen nicht unter die Fair-Use-Regelung oder die oben genannte Erlaubnis fällt, kannst du uns gerne unter kontaktieren

O'Reilly Online Learning

Hinweis

Seit mehr als 40 Jahren bietet O'Reilly Media Schulungen, Wissen und Einblicke in Technologie und Wirtschaft, um Unternehmen zum Erfolg zu verhelfen.

Unser einzigartiges Netzwerk von Experten und Innovatoren teilt sein Wissen und seine Erfahrung durch Bücher, Artikel und unsere Online-Lernplattform. Die Online-Lernplattform von O'Reilly bietet dir On-Demand-Zugang zu Live-Trainingskursen, ausführlichen Lernpfaden, interaktiven Programmierumgebungen und einer umfangreichen Text- und Videosammlung von O'Reilly und über 200 anderen Verlagen. Weitere Informationen erhältst du unter http://oreilly.com.

Wie du uns kontaktierst

Bitte richte Kommentare und Fragen zu diesem Buch an den Verlag:

Wir haben eine Webseite für dieses Buch, auf der wir Errata, Beispiele und zusätzliche Informationen auflisten. Du kannst diese Seite unter https://oreil.ly/programming-the-IoT aufrufen .

Neuigkeiten und Informationen über unsere Bücher und Kurse findest du unter http://oreilly.com.

Finde uns auf Facebook: http://facebook.com/oreilly

Folge uns auf Twitter: http://twitter.com/oreillymedia

Schau uns auf YouTube: http://youtube.com/oreillymedia

Danksagungen

Ich glaube, wir sind alle auf einem ständigen Weg, uns selbst zu finden, sei es im Beruf, in einer Beziehung oder in der Missionsarbeit. Die besonderen Wendungen, durch die Gott mich geführt hat, und die Mentoren und Wegbegleiter, die er in mein Leben gestellt hat, sind das Fenster, durch das ich seine Liebe zu mir erfahren habe. Es versteht sich von selbst, dass dieses Buch ohne die Geduld, die Kritik, die Ermutigung und das Fachwissen von Familie, Freunden und Kollegen, die bereit waren, mich auf dieser Reise zu begleiten, nicht zustande gekommen wäre. Ich werde versuchen, alle zu erwähnen, die mich beeinflusst haben und die an diesem Buch mitgewirkt haben, aber ich fürchte, dass ich versehentlich einige Namen vergessen werde. Bitte verzeih mir unbeabsichtigte Versehen.

Ich habe mit 12 Jahren oder so mit dem Programmieren angefangen, nachdem mein Vater einen Atari 400 mit nach Hause gebracht hatte, den ihm ein Freund geliehen hatte. Nachdem ich mich eine Weile mit BASIC beschäftigt hatte (und meine Arbeit nach jedem Stromausfall verloren ging), kauften mir meine Eltern einen Atari 800XL mit Bandspeicherung (erinnerst du dich?), den wir später auf eine 5¼"-Diskettenspeicherung aufrüsteten und schließlich mit einem rasend schnellen 1200-Kbps-Modem ausstatteten. Danke, Mama und Papa. Papa ... ich wünschte, du wärst noch hier bei uns.

25 Jahre später wurde ich (endlich) Programmierer und Informatiker. Aber wie kam es zu diesem Projekt? Mein Freund Jimmy Song, Autor von Programming Bitcoin (O'Reilly), brachte mich mit dem Team von O'Reilly Media zusammen, als ich mich eines Tages meldete und sagte: "Ich denke darüber nach, ein Buch zu schreiben..." Ich schätze Jimmys ehrlichen Rat, sein Feedback und seine Ermutigung während dieser Reise sehr.

Der Ursprung der Labormodule in diesem Buch ist natürlich mein Kurs "Connected Devices" an der Northeastern University. Ich habe das große Glück, mit einigen großartigen Kollegen aus der Wissenschaft zusammenzuarbeiten, wie z. B. mit Dr. Peter O'Reilly, dem Direktor des Cyber Physical Systems-Programms am College of Engineering der Northeastern University, der mich für den Kurs "Connected Devices" gewinnen konnte. Dr. Rolando Herrero, ebenfalls von der Northeastern University, war einer der ersten, der den Inhalt des Buches geprüft hat. Sein Fachwissen über IoT-Systeme und -Protokolle war eine große Hilfe bei der Gestaltung der Form und Funktion des Materials. Die Zusammenarbeit mit Peter und Rolando als Freunde und Kollegen beim Aufbau einer IoT-Disziplin war einer der Höhepunkte meiner Karriere, und ich bin beiden sehr dankbar für ihre Mentorenschaft.

Allen Studierenden des Studiengangs Connected Devices, die ich unterrichten und mit denen ich zusammenarbeiten durfte, ein großes Dankeschön! Der Inhalt dieses Buches und die Übungen in den einzelnen Kapiteln wurden von eurem Feedback, euren Vorschlägen, Wünschen, Kommentaren und eurer Toleranz gegenüber meinen albernen Vaterwitzen inspiriert. Ihr seid der Hauptgrund dafür, dass dieses Buch zustande gekommen ist und dass ich meine Leidenschaft für das Unterrichten ausleben kann (und nicht als Stand-up-Comedian).

Viele der Lehrassistentinnen und -assistenten des Kurses lieferten Buchkommentare und Rezensionen und halfen mir, Unstimmigkeiten zwischen der Prosa und den Online-Übungen zu beseitigen. Ein herzliches Dankeschön an diese tollen Kollegen: Cheng Shu, Ganeshram Kanakasabai, Harsha Vardhanram Kalyanaraman, Jaydeep Shah, Yogesh Suresh und Yuxiang Cao. Ich bin froh, mit jedem von ihnen zusammengearbeitet zu haben und schätze ihren Beitrag zum Erfolg des Kurses sehr.

Einige meiner Freunde und Kollegen aus der Branche haben mir detailliertes Feedback und Kommentare zum vorläufigen Entwurf gegeben. Tim Strunck, ein Experte für die Entwicklung kommerzieller IoT-Lösungen, lieferte eine Fülle von Rückmeldungen zum Gesamtablauf und zum technischen Inhalt - ich bin dankbar für seine Freundschaft und seine scharfen Einsichten sowie für das großartige Vorwort zu diesem Buch. Steve Resnick, Geschäftsführer eines großen Beratungsunternehmens und Autor von zwei eigenen Büchern, teilte mit mir seine Sicht der Dinge und gab mir Ratschläge zu Aufbau, Form und Inhalt, die mir halfen, die wichtigsten Konzepte zu verdeutlichen. Ben Pu gab mir einen neuen Blick auf das Buch und half mir, es durch eine Linse zu sehen, die es mir ermöglichte, eine Verbindung zu zukünftigen Lesern herzustellen. Ich bin dankbar, dass ich ein Netzwerk habe, zu dem Fachleute wie Tim, Steve und Ben gehören, und ich bin sehr dankbar für ihr schnelles Feedback und ihre Anregungen.

An alle meine Kollegen und Freunde bei O'Reilly Media - was für ein Team! Mike Loukides, VP und Intake Editor, der stundenlang Videokonferenzen, E-Mails und Telefonate führte und dabei half, den Vorschlag zu gestalten und ihn durch den Aufnahmeprozess zu bringen. Melissa Duffield, VP of Content Strategy, die mit mir an der Marketingstrategie gearbeitet hat und dafür gesorgt hat, dass der Antrag in Rekordzeit genehmigt wurde. Cassandra Furtado, die geduldig alle meine anfänglichen Fragen beantwortete. Chris Faucher, der mein Manuskript in ein Buch verwandelt hat. Virginia Wilson, die den Zeitplan und den technischen Überprüfungsprozess verwaltet hat. Arthur Johnson, der als Lektor viele Fehler in der Prosa und bei der Formatierung entdeckt und korrigiert hat. Und natürlich Sarah Grey, die mir als Entwicklungsredakteurin dabei geholfen hat, die Organisation des Materials zu durchdenken und in die Tat umzusetzen. Ich habe großen Respekt vor jedem von ihnen und für ihre Professionalität, Unterstützung, Reaktionsfähigkeit und Kameradschaft während dieses Projekts.

Bei der Erstellung dieses Buches, seiner Beispiele und Übungen wurden zahlreiche Open-Source-Software und offene Spezifikationen verwendet. Ich möchte mich bei den Entwicklern und Mitwirkenden dieser Projekte bedanken.

Vor allem danke ich meiner wunderbaren Frau Yoon-Hi und meinem unglaublichen Sohn Eliot: Ihr beide seid die Felsen in meinem Leben und ich weiß nicht, wie ich diesen Weg ohne eure Ermutigung und Unterstützung überhaupt hätte einschlagen können. Vielen Dank für all die Rezensionen, die wortgewandten Gespräche (und Korrekturen), die Herausforderungen, die Unterstützung und den Glauben! Ihr habt mich aus Tälern herausgezogen und mich auf Berge gebracht. Ihr seid beide fantastisch und ich liebe euch mehr, als ich es in Worte fassen kann.

1 Alle Übungen in diesem Buch stammen aus meinem Buch Programming the IoT Kanban Board und werden mit meiner Genehmigung verwendet.

2 Im Anhang findest du eine grundlegende UML-Darstellung für jede Übung. Die aktuelle UML-Spezifikation findest du auf der Website der Object Management Group (OMG).

3 Encyclopaedia Britannica Online, s.v. "Moore's law", von Redaktion der Encyclopaedia Britannica, zuletzt aktualisiert am 26. Dezember 2019.

4 Encyclopaedia Britannica Online, s.v. "ARPANET", von Kevin Featherly, zuletzt aktualisiert am 23. März 2021.

5 Simon Duque Antón et al., "Two Decades of SCADA Exploitation: A Brief History", in 2017 IEEE Conference on Application, Information and Network Security (AINS) (New York: IEEE, 2017), 98-104.

6 John Postel, "User Datagram Protocol", Internet Standard RFC 768, August 28, 1980.

7 Weitere Informationen zum WWW-Vorschlag von Tim Berners-Lee findest du unter https://www.w3.org/History/1989/proposal.html.

8 Siehe eine Erklärung unter "Der Internet-Toaster".

9 Encyclopaedia Britannica Online, "Know Your Joe: 5 Things You Didn't Know About Coffee" (2. The Watched Pot), von Alison Eldridge, abgerufen am 18. Januar 2021.

10 Kevin Ashton, "That 'Internet of Things' Thing", RFID Journal, 22. Juni 2009.

11 Eine kurze Zusammenfassung der Entstehung des Arduino findest du in der Timeline of Computer History Museum's Timeline of Computer History.

12 The Industrial Internet of Things, Volume G1: Reference Architecture, Version 1.9 (Needham, MA: Industrial Internet Consortium, 2019).

13 Carsten Bormann, Mehmet Ersue, and Ari Keränen, "Terminology for Constrained-Node Networks", IETF Informational RFC 7228, May 2014, 8-10.

Get Programmierung des Internets der Dinge now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.