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.
Ein noch wenig bekanntes aber sehr mächtiges Entwicklungstool ist B4X, weil
hier der Programmcode in nur einer Sprache entworfen werden muss, und sich dann
in die für das jeweilige Betriebssystem optimale Sprache übersetzen lässt: Java
für Windows und Linux (B4J) oder für Android (B4A) sowie Objective-C für iOS
(B4I). So entstehen im Gegensatz zu vielen anderen Lösungen 100% native
Anwendungen. Den größte Vorteil stellen jedoch die umfangreichen Bibliotheken
dar, mit denen sich Lösungen für z.B. Erhebung, Archivierung, Verarbeitung,
Übertragung oder Darstellung von Daten als Bausteine beliebig kombinieren
lassen.
B4X Bibliothekensammlung »
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?
- PC / Notebook (Desktopsoftware, schnelle Ergebnisse bei Entwicklung, großer Bedienkomfort, OS
z.B. Windows 10)
- Server / Webanwendung (von überall erreichbar, einfach über Webbrowser
nutzbar, gut bei vielen Nutzern gemeinsamer Daten)
- Mobile App für Smartphone / Tablet (gut wenn Internetunabhängigkeit, lokale Datenspeicherung oder
Sensoren wie Kamera, GPS notwendig sind - sonst oftmals besser 2.)
- 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
- Serielle Datenübertragung (meist als Basis für Standardprotokolle, aber z.B. bei
Arduino-Projekten gern auch in Verbindung mit eigenen Protokollen)
- TCP (Datenaustausch zwischen IP-Adresse inkl. "Empfangsbestätigung", also ohne
Datenverlust)
- UDP (Datenaustausch zwischen IP-Adresse ohne "Empfangsbestätigung" dafür
schlanker und schneller, geeignet z.B. für Videostreaming)
- HTTP / HTTPS (aufbauend auf 2, mit und ohne Verschlüsselung, vor allem zum
Austausch textbasierter Informationen wie z.B. HTML-Webseiten)
- SOAP (aufbauend auf 2, für Webservice, um Backend mit einer Webanwendung und
gleichzeitig verschiedenen Endgeräten zu verbinden)
- 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.
- Ethernet (für Protokolle 2 - 6, beste Lösung wenn Internetanschluss vorhanden)
- WLAN (für Protokolle 2 - 6, gut wenn WLAN-Router erreichbar)
- GSM (für Protokolle 2 - 6, gute unabhängige Lösung wenn Handynetz vorhanden)
- Bluetooth / Funk (z.B. zwischen Arduinos, für schnelle Datenübertragung bei kleinen Distanzen)
- 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 ...
- Maus & Tastatur für PC (Ziffernblock, Pfeiltasten, F-Tasten, Shortcuts
benutzen?)
- Kinect 3D Kamera (z.B. für Gestensteuerung, Gesichtserkennung,
Bewegungskontrolle)
- Smartphone Sensoren (Touchscreen, Standort, Lagesensor, QR-Code oder andere
Kameraanwendungen, NFC)
- Arduino mit Sensoren (z.B. für Licht, Bewegungsmelder, Geräusch, Temperatur,
Abstand, Feuchtigkeit, Luftqualität, usw.)
- Serieller Datenempfang von verschiedenen Automaten (Meldungen z.B.
zu Füllzustand, Status, Betriebsbereitschaft)
- Kamera mit Bildauswertung, z.B. für Bewegungskontrolle, Zähler, Objektsicherung,
Positionsbestimmung, Displaykontrolle usw.
- 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...
- Archivierung (Speicherung von Daten mit Suchfunktionen nach Kategorien, Zeit,
Schlagwörtern, Dokumentation)
- Berechnung & Analyse (Datengewinnung durch Vergleich, Berechnung, Analyse und
Auswertung vorhandener Daten)
- Automatisierung (Arbeitsschritte von Software automatisch ausführen lassen, z.B.
häufig wiederkehrende Prozesse)
- Kontrolle & Fernsteuerung (entfernte Geräte und Einrichtungen steuern oder deren
Daten kontrollieren)
- Optimierung (Prozesse beschleunigen, verbessern, vereinfachen)
- Social media (Informationsaustausch zwischen Nutzern, Organisation gemeinsamer
Tätigkeiten)
Daten-Speicherung
Wie und wo werden die Daten gespeichert?
- MS-SQL (gut für große Datenmengen und gleichzeitige Zugriffe)
- MS Access (günstig für kleinere Projekte, auf Server und Client einsetzbar, mit
MS Office direkt zu bearbeiten und gut auswertbar)
- SQLite (gut zur strukturierten lokalen Datenspeicherung, z.B. für Apps und
Desktop-Software)
- 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)