Beschreibung:
Für ein Gebäudekommunikationssystem wurde für ein Gateway, das zur Anbindung des proprietären Kommunikationssystems an IPbasierte
Netzwerke dient, ein Software-Modul entwickelt, das für die Verteilung und Überwachung von Kommunikations-, Benutzer- und
Systemanforderungen zuständig ist (z.B. Rufe, Video, Konfiguration).
Im Fokus standen hierbei die Skalierbarkeit (Parallelisierung, Multithreading: bei Einsatz auf leistungsfähigerer Hardware sollte diese
auch genutzt werden können), Stabilität, Testbarkeit und Wartbarkeit der Software.
Hauptaufgaben waren die Vorgabe der Server-Architektur, die Entwicklung von zentralen Komponenten des Servers, die Vorgabe der
Architektur für die plattformunabhängige Client-Bibliothek, die Vorgabe der Teststrategie und der Testbibliothek, das Coaching des
Teams in C++ (insbesondere C++11/C++14) und die Durchführung von Code-Reviews (dabei war insbesondere die Identifizierung von
Potential zur Verbesserung der Code-Qualität und die Vorgabe von Maßnahmen dieses auszuschöpfen wichtig).
Eine große Teilaufgabe lag in der effizienten Verteilung von Videoströmen über Netzwerke. Ebenso wurde die Anbindung an eine MySQLDatenbank
realisiert.
Weiterhin wurde ein Systemtest-Framework aufgesetzt. Dieses führt automatisiert Testfälle durch, indem es das System initialisiert und
dann die Test-Scripts (Python) auf einen oder mehrere Test-Clients verteilt. Weiterhin synchronisiert es die Clients und sammelt die
Testergebnisse ein.
Das System hat eine REST Schnittstelle erhalten. Für diese habe ich den kompletten Software-Stack auf Server- und Client-Seite
entworfen und federführend implementiert (HTTP-Server, Anbindung an C++-Applikation, Ressourcen-Mapping und Anbindung an
Systemkern, Übersetzung von Transportformat in native Datentypen und zurück, HTTP-Requests). Zum Kommunikations-Layer wurde
ebenso ein MQTT-basiertes Message-System hinzugefügt. Die Anbindung wurde mit paho.mqtt.c entwickelt. Auf der Server-Seite wird
Mosquitto verwendet. Die API wird mit OpenAPI 3.0 definiert. Es wurde ein Generator für Java-Client-Code zum Aufruf der API entwickelt.
Der Generator benutzt die API-Spezifikation als Eingabe. Der generierte Code wird unter anderem auch für REST API-Tests verwendet.
Damit basiert die Kommunikationsschicht auf einem modernen IoT-Technologiestack.
Ein weiterer Aufgabenbereich lag in der Vorgabe der Architektur und der Mitentwicklung von diversen Clients (Windows-Client,
Innensprechstelle, Tür).
Die Bereitstellung eines robusten Update-Mechanismus für Embedded Geräte, inklusiver der kompletten Logik, wurde auch
implementiert. Hier war es wichtig, dass die Geräte auch im Fehlerfall funktionsfähig bleiben. Deswegen wurde auch diverse Recovery-
Mechanismen eingebaut (Fallback auf vorherige Firmware, Recovery-Modus).
In einem weiteren Evolutionsschritt wurde die monolithische Systemarchitektur auf eine Microservice-Architektur umgestellt. Diese
Umstellung habe ich koordiniert und architektonisch gestaltet.
Nun folgte die Implementierung der Anbindung an einen cloud-basierten Kommunikationsdienst, der zur Ruf- und Videoverteilung an
Apps über das Internet dient.
Als nächstes folgte die Erstellung der Software für eine neue Innenstation. Die Anbindung der Innenstation, die via WLAN ans lokale Netz angeschlossen wird, an den Cloud-Dienst, wurde ebenso umgesetzt. Die Inbetriebnahme des Geräts erfolgt über Bluetooth Low Energy (Bluetooth LE, BLE) und einer GATT-API. Hierfür wurde zum einen auf Geräteseite BlueZ eingesetzt (D-Bus API, Management API) und zum anderen eine Android Test-App unter Android Studio mit Kotlin entwickelt. Wichtiger Fokus war eine sichere Inbetriebnahme mit zusätzlicher interner Verschlüsselung auf GATT-Ebene.
Ein weiteres Projekt war die Entwicklung einer IP-Innenstation, die es in 2 Varianten gibt (mit und ohne Bildschirm). Die Oberflächen wurde mit Qt 5 erstellt. In der Business-Logik war die freikonfigurierbare I/O-Logik ein Highlight. Die Anbindung an den Server erfolgte via DHCP, TFTP, REST und MQTT.
Für die nächste Server Generation wurde ein Prototyp erstellt, in welchem die Microservices in Docker-Containern laufen. Ebenso wurden hierfür RTSP-Server. und -Client-Komponenten entwickelt.
Projektmetrik:
Laufzeit: >5 Jahre
Umfang: >50 Personenjahre
Position: Consultant, Architekt & Entwickler
Teamgröße: 10+
Technologien:
Sprachen
- C++ (C++11, C++14, C++17)
- C
- Java
- Python
- Kotlin
- SQL
- Linux-Shell
Bibliotheken/Frameworks/API
- STL/C++-Standardbibliothek
- googletest
- Linux Programming Interface
- Boost
- rapidjson
- libcurl
- OTL
- paho.mqtt.c
- Mosquitto
- BlueZ
- CivetWeb
- gstreamer
Tools
- Eclipse CDT
- Visual Studio 2015
- IDEA IntelliJ
- MySQL Workbench
- Subversion
- git
- Bitbucket
- valgrind
- Tera Term
- putty
- Confluence
- Jira
- Postman
- mqtt-spy
- PhonerLite
- VLC
- curl
- Docker
Sonstiges
- SCons
- gcc
- gdb (Debugging und Remote Debugging)
- Clang
- PTXdist
Besonderheiten
- Multithreading
- Netzwerk (TCP/IP, UDP, Sockets)
- RTP
- RTSP
- H.264, MJPEG
- REST
- TLS
- HTTP, HTTPS
- MQTT
- Scrum
- IoT/IIoT
- JSON
- Bluetooth/Bluetooth LE, GATT
- Microservices
- D-Bus
- WLAN
- TFTP
Plattform
- Zielplattform: Embedded Linux. Windows (für Client-Software)
- Entwicklungsplattform: Debian Linux, Fedora Linux, Windows (für Client-Software)