Komponenten-Baukasten

Ein skalierbares System zeichnet sich dadurch aus, dass dessen Komponenten austauschbar sind. Sollte beispielsweise der Kommunikationsweg zwischen zwei Punkten geändert werden, weil ein neues Übertragungsprotokoll gewünscht, oder auf Drahtlosverbindung umgestellt wird, so muss nur die Vernetzungs-Komponente geändert werden. Alles andere bleibt von der Änderung unberührt. Auch aus Gründen der Übersichtlichkeit lohnt es sich, ein Projekt nach Kategorien zu gliedern.

Im folgenden eine Liste von Komponenten verschiedener Kategorien, mit denen ich bereits Erfahrungen sammeln konnte. Sie soll auch Denkanstöße beim Anlegen oder Erweitern von Projekten geben.

Hardware

Wo soll die Software laufen? Welche Geräte, welches Betriebssystem, welche Anforderungen?

  1. PC / Notebook (Desktopsoftware, schnelle Ergebnisse bei Entwicklung, großer Bedienkomfort, OS z.B. Windows 10)
  2. Server / Webanwendung (von überall erreichbar, einfach über Webbrowser nutzbar, gut bei vielen Nutzern gemeinsamer Daten)
  3. Mobile App für Smartphone / Tablet (gut wenn Internetunabhängigkeit oder Sensoren wie Kamera, GPS notwendig sind - sonst oftmals besser 2.)
  4. Arduino (zum Messen und Steuern mit Sensoren für z.B. Temperatur und Aktoren wie z.B. Schrittmotoren - Viele Anwendungen im Bereich Internet der Dinge)

Vernetzung

Eine gute Lösung besteht oft aus mehreren Hardware-Komponenten, da jede ihre Vor- und Nachteile hat. Wie kommunizieren diese Geräte miteinander?

Für eine gelungene Kommunikation zwischen den Geräten bzw. der Software gibt es verschiedene Protokolle und Standards, die z.T. aufeinander aufbauen. Bei der Wahl für das eigene Projekt sollte man "das Rad nicht neu erfinden" und auf möglichst fortgeschrittene Protokolle zurückgreifen. Eine Ausnahme wäre der Schwerpunkt auf sehr schlanke Übertragungen und bewusst kleine Datenmengen.

Protokolle

  1. Serielle Datenübertragung (meist als Basis für Standardprotokolle, aber z.B. bei Arduino-Projekten gern auch in Verbindung mit eigenen Protokollen)
  2. TCP (Datenaustausch zwischen IP-Adresse inkl. "Empfangsbestätigung", also ohne Datenverlust)
  3. UDP (Datenaustausch zwischen IP-Adresse ohne "Empfangsbestätigung" dafür schlanker und schneller, geeignet z.B. für Videostreaming)
  4. HTTP / HTTPS (aufbauend auf 2, mit und ohne Verschlüsselung, vor allem zum Austausch textbasierter Informationen wie z.B. HTML-Webseiten)
  5. SOAP (aufbauend auf 2, für Webservice, um Backend mit einer Webanwendung und gleichzeitig verschiedenen Endgeräten zu verbinden)
  6. MQTT (aufbauend auf 2, vor allem für direkten Datenaustausch zwischen Hardware, z.B. für IoT)

Vernetzung individueller Hardware

Dies ist nur interessant, wenn individuelle Geräte (z.B. Arduinos mit Sensoren) miteinander oder mit einem Server vernetzt werden sollen.

  1. Ethernet (für Protokolle 2 - 6, beste Lösung wenn Internetanschluss vorhanden)
  2. WLAN (für Protokolle 2 - 6, gut wenn WLAN-Router erreichbar)
  3. GSM (für Protokolle 2 - 6, gute unabhängige Lösung wenn Handynetz vorhanden)
  4. Bluetooth / Funk (z.B. zwischen Arduinos, für schnelle Datenübertragung bei kleinen Distanzen)
  5. Kabelverbindung (z.B. zwischen Arduinos oder Arduino + PC, gut wenn keine Distanzen, große Sicherheit, keine doppelte Stromversorgung nötig)

Benutzerschnittstelle (Input / Output)

Das Frontend als Input und Output der Daten, Darstellung, Grafik, im erweiterten Sinne auch Sensoren und Aktoren, ...

Input

Woher kommen die Daten? Eingabegeräte, Sensoren, Datenquellen ...

  1. Maus & Tastatur für PC (Ziffernblock, Pfeiltasten, F-Tasten, Shortcuts benutzen?)
  2. Kinect 3D Kamera (z.B. für Gestensteuerung, Gesichtserkennung, Bewegungskontrolle)
  3. Smartphone Sensoren (Touchscreen, Standort, Lagesensor, QR-Code oder andere Kameraanwendungen, NFC)
  4. Arduino mit Sensoren (z.B. für Licht, Bewegungsmelder, Geräusch, Temperatur, Abstand, Feuchtigkeit, Luftqualität, usw.)
  5. Serieller Datenempfang von verschiedenen Automaten (Meldungen z.B. zu Füllzustand, Status, Betriebsbereitschaft)
  6. Kamera mit Bildauswertung, z.B. für Bewegungskontrolle, Zähler, Objektsicherung, Positionsbestimmung, Displaykontrolle usw.
  7. Web (Webcrawler) zur (regelmäßigen) Kontrolle bestimmter Websites, Foren, Twitter (z.B. für Statistiken, Börse, Forenauswertung, Hyperlinkanalyse, Inhalts- und Rechtschreibkontrolle)

Identifizierung

Um Personen oder Objekte eindeutig zu identifizieren, z.B. für Zugangskontrollen, digitaler Ausweis, Nachverfolgung von Objekten etc.

  • Ziffernblock für Codeeingabe (einfach aber effektiv)
  • Strichcode, QR-Code mit Kamera scannen
  • NFC Chips mit Arduino oder Smartphone auslesen oder beschreiben
  • Weitere potentielle Möglichkeiten: Magnetkarte, Biometrische Daten

Output

Die Anzeige und Darstellung der Daten ...

  • Monitor oder Display (Diagramme, Tabellen, Text und Grafiken, verschiedene Größen?)
  • Arduino mit Aktoren (Lampen, Motoren, Servos, Relais, Alarm ...)
  • Web als Output (automatische Generierung von Websites, E-Mails, Tweets, ...)
  • GSM als Output (automatische Anrufe oder SMS)

 

Backend

Das was im Hintergrund läuft, bevor die Software ein Ergebnis "ausspuckt" ...

Der Backend-Bereich lässt sich sicherlich am wenigsten katalogisieren. Im Folgenden also nur ein kleiner Versuch, die Bereiche und Funktionen mit denen ich bisher zu tun hatte etwas zu gliedern...

  1. Archivierung (Speicherung von Daten mit Suchfunktionen nach Kategorien, Zeit, Schlagwörtern, Dokumentation)
  2. Berechnung & Analyse (Datengewinnung durch Vergleich, Berechnung, Analyse und Auswertung vorhandener Daten)
  3. Automatisierung (Arbeitsschritte von Software automatisch ausführen lassen, z.B. häufig wiederkehrende Prozesse)
  4. Kontrolle & Fernsteuerung (entfernte Geräte und Einrichtungen steuern oder deren Daten kontrollieren)
  5. Optimierung (Prozesse beschleunigen, verbessern, vereinfachen)
  6. Social media (Informationsaustausch zwischen Nutzern, Organisation gemeinsamer Tätigkeiten)

Daten-Speicherung

Wie und wo werden die Daten gespeichert?

  1. MS-SQL (gut für große Datenmengen und gleichzeitige Zugriffe)
  2. MS Access (günstig für kleinere Projekte, auf Server und Client einsetzbar, mit MS Office direkt zu bearbeiten und gut auswertbar)
  3. SQLite (gut zur strukturierten lokalen Datenspeicherung, z.B. für Apps und Desktop-Software)
  4. Dateien (einfach und schnell anzulegen, für Server oder Lokal, auch gut für Arduino mit SD-Karten, gut für eigene Datenformate aber auch XML-Daten)