From 1663d260abfa7e13818dc029fc18139d79ed82c4 Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Tue, 3 Jun 2025 12:41:27 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=9A=20Added=20IHK=20Projektdokumentati?= =?UTF-8?q?on/Ausarbeitungsprozess/Dokumentation.md,=20media=20files=20ima?= =?UTF-8?q?ge2.emf=20and=20image3.png,=20and=20IHK=20Projektdokumentation.?= =?UTF-8?q?docx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Ausarbeitungsprozess/Dokumentation.md | 902 ++++++++++++++++++ .../media/media/image2.emf | Bin 0 -> 313880 bytes .../media/media/image3.png | Bin 0 -> 13815 bytes IHK_Projektdokumentation/Dokumentation.docx | Bin 0 -> 179136 bytes ...ETADATENSAMMLUNG_CHATGPT-Konversation.html | 67 -- .../IHK_DOKUMENTATION_FINAL_backup.md | 139 --- .../IHK_DOKUMENTATION_backup.md | 264 ----- 7 files changed, 902 insertions(+), 470 deletions(-) create mode 100644 IHK_Projektdokumentation/Ausarbeitungsprozess/Dokumentation.md create mode 100644 IHK_Projektdokumentation/Ausarbeitungsprozess/media/media/image2.emf create mode 100644 IHK_Projektdokumentation/Ausarbeitungsprozess/media/media/image3.png create mode 100644 IHK_Projektdokumentation/Dokumentation.docx delete mode 100644 IHK_Projektdokumentation/backup_ihk_docs/IHK_DOKUMENTATION_FINAL_backup.md delete mode 100644 IHK_Projektdokumentation/backup_ihk_docs/IHK_DOKUMENTATION_backup.md diff --git a/IHK_Projektdokumentation/Ausarbeitungsprozess/Dokumentation.md b/IHK_Projektdokumentation/Ausarbeitungsprozess/Dokumentation.md new file mode 100644 index 00000000..87a0e278 --- /dev/null +++ b/IHK_Projektdokumentation/Ausarbeitungsprozess/Dokumentation.md @@ -0,0 +1,902 @@ +Abschlussprüfung - Sommer 2025 + +Fachinformatiker für digitale Vernetzung + +Dokumentation der betrieblichen Projektarbeit + +MYP – Manage Your Printer + +Digitalisierung des 3D-Drucker-Reservierungsprozesses durch Etablierung +der cyberphysischen Kommunikation mit relevanten Hardwarekomponenten + +Abgabedatum: 5. Juni 2025 + +Ausbildungsbetrieb + +Mercedes-Benz Ag + +Daimlerstraße 143 + +D-12277 Berlin + +Prüfungsbewerber + +Till Tomczak +Hainbuchenstraße 19 +D-16761 Hennigsdorf + + + +Mercedes-Benz + +# Inhaltsverzeichnis + +[1. Einleitung [2](#_Toc199840791)](#_Toc199840791) + +[1.1 Analyse des Projektauftrages +[2](#analyse-des-projektauftrages)](#analyse-des-projektauftrages) + +[1.2 Ableitung der Projektziele +[3](#ableitung-der-projektziele)](#ableitung-der-projektziele) + +[1.3 Projektabgrenzung [3](#projektabgrenzung)](#projektabgrenzung) + +[1.4 Projektumfeld [4](#projektumfeld)](#projektumfeld) + +[1.5 Betriebliche Schnittstellen +[4](#betriebliche-schnittstellen)](#betriebliche-schnittstellen) + +[1.6 Analyse der IT-sicherheitsrelevante Bedingungen +[5](#analyse-der-it-sicherheitsrelevante-bedingungen)](#analyse-der-it-sicherheitsrelevante-bedingungen) + +[1.7 Darstellung der vorhandenen Systemarchitektur +[5](#darstellung-der-vorhandenen-systemarchitektur)](#darstellung-der-vorhandenen-systemarchitektur) + +[2. Projektplanung [5](#projektplanung)](#projektplanung) + +[2.1 Terminplanung [5](#terminplanung)](#terminplanung) + +[Sprint 1 (15.-19. April 2025) +[6](#sprint-1-15.-19.-april-2025)](#sprint-1-15.-19.-april-2025) + +[Sprint 2 (22.-26. April 2025) +[6](#sprint-2-22.-26.-april-2025)](#sprint-2-22.-26.-april-2025) + +[Sprint 3 (29. April - 3. Mai 2025) +[6](#sprint-3-29.-april---3.-mai-2025)](#sprint-3-29.-april---3.-mai-2025) + +[Sprint 4 (6.-10. Mai 2025) +[6](#sprint-4-6.-10.-mai-2025)](#sprint-4-6.-10.-mai-2025) + +[Sprint 5 (13.-17. Mai 2025) +[6](#sprint-5-13.-17.-mai-2025)](#sprint-5-13.-17.-mai-2025) + +[2.2 Ressourcenplanung [6](#ressourcenplanung)](#ressourcenplanung) + +[2.3 Planung der Qualitätssicherung +[7](#planung-der-qualitätssicherung)](#planung-der-qualitätssicherung) + +[2.4 Bewertung der heterogenen IT-Landschaft +[8](#bewertung-der-heterogenen-it-landschaft)](#bewertung-der-heterogenen-it-landschaft) + +[2.5 Anforderungsgerechte Auswahl der Übertragungssysteme +[8](#anforderungsgerechte-auswahl-der-übertragungssysteme)](#anforderungsgerechte-auswahl-der-übertragungssysteme) + +[2.6 Planung der Prozess-/ und Systemschnittstellen +[9](#planung-der-prozess--und-systemschnittstellen)](#planung-der-prozess--und-systemschnittstellen) + +[2.7 Planung der IT-Sicherheitsmaßnahmen +[9](#planung-der-it-sicherheitsmaßnahmen)](#planung-der-it-sicherheitsmaßnahmen) + +[3. Durchführung und Auftragsbearbeitung +[9](#durchführung-und-auftragsbearbeitung)](#durchführung-und-auftragsbearbeitung) + +[3.1 Prozess-Schritte und Vorgehensweise +[10](#prozess-schritte-und-vorgehensweise)](#prozess-schritte-und-vorgehensweise) + +[3.1.1 Datenabfrage der Sensoren +[10](#datenabfrage-der-sensoren)](#datenabfrage-der-sensoren) + +[3.1.2 Verarbeiten der Daten +[10](#verarbeiten-der-daten)](#verarbeiten-der-daten) + +[3.2 Abweichung, Anpassung und Entscheidungen +[11](#abweichung-anpassung-und-entscheidungen)](#abweichung-anpassung-und-entscheidungen) + +[3.3 Maßnahmen zur Qualitätskontrolle +[11](#maßnahmen-zur-qualitätskontrolle)](#maßnahmen-zur-qualitätskontrolle) + +[3.4 Implementierung, Konfiguration und Inbetriebnahme von +Schnittstellen und unterschiedlicher Prozesse und Systeme +[12](#implementierung-konfiguration-und-inbetriebnahme-von-schnittstellen-und-unterschiedlicher-prozesse-und-systeme)](#implementierung-konfiguration-und-inbetriebnahme-von-schnittstellen-und-unterschiedlicher-prozesse-und-systeme) + +[3.5 Konfiguration von Übertragungssystemen und Integration in die +Gesamtinfrastruktur +[12](#konfiguration-von-übertragungssystemen-und-integration-in-die-gesamtinfrastruktur)](#konfiguration-von-übertragungssystemen-und-integration-in-die-gesamtinfrastruktur) + +[3.6 Erfüllen der Anforderungen an die Informationssicherheit +[13](#erfüllen-der-anforderungen-an-die-informationssicherheit)](#erfüllen-der-anforderungen-an-die-informationssicherheit) + +[4. Projektabschluss [13](#projektabschluss)](#projektabschluss) + +[4.1 Soll-Ist-Vergleich (Abweichung, Anpassungen) +[13](#soll-ist-vergleich-abweichung-anpassungen)](#soll-ist-vergleich-abweichung-anpassungen) + +[4.2 Fazit [14](#fazit)](#fazit) + +[4.3 Optimierungsmöglichkeiten +[14](#optimierungsmöglichkeiten)](#optimierungsmöglichkeiten) + +[4.4 Abnahme [15](#abnahme)](#abnahme) + +[Anlagen [15](#anlagen)](#anlagen) + +[Netzwerkdiagramme und Systemarchitektur +[15](#netzwerkdiagramme-und-systemarchitektur)](#netzwerkdiagramme-und-systemarchitektur) + +[API-Dokumentation [15](#api-dokumentation)](#api-dokumentation) + +[Benutzerhandbuch [16](#benutzerhandbuch)](#benutzerhandbuch) + +[Testprotokolle [16](#testprotokolle)](#testprotokolle) + +[Screenshots der Benutzeroberfläche +[16](#screenshots-der-benutzeroberfläche)](#screenshots-der-benutzeroberfläche) + +[Konfigurationsdateien und Deployment-Skripte +[16](#konfigurationsdateien-und-deployment-skripte)](#konfigurationsdateien-und-deployment-skripte) + +# 1. Einleitung + +## 1.1 Analyse des Projektauftrages + +Die Technische Berufsausbildungsstätte (TBA) der Mercedes-Benz AG am +Standort Berlin verfügt über sechs 3D-Drucker verschiedener Hersteller +(Prusa, Anycubic; B-Ware im Vergleich zu 3D-Druckern von Kostenstellen +höherer Prioriät sozusagen). Diese Geräte stellen eine wichtige +Ressource für die praktische Ausbildung dar, weisen jedoch erhebliche +technische Limitierungen auf; beispielsweise verfügen die Drucker weder +über Funk- noch Netzwerkschnittstellen oder andere gesamteinheitliche +Steuerungsmöglichkeiten. Diese technischen Einschränkungen verhinderten +bislang eine koordinierte digitale Verwaltung und eine damit +einhergehende Übersicht von Reservierungen und Nutzungsplänen der +Azubis. + +Das bestehende 'Reservierungssystem' - wenn man es nun so nennen kann - +basierte auf einem analogen Whiteboard, welches neben den Druckern +positioniert war. Dies führte zu systematischen Problemen: +Doppelbuchungen traten regelmäßig auf, wenn mehrere Nutzer zeitgleich +Reservierungen vornahmen, die manuelle Aktivierung und Deaktivierung der +Geräte wurde häufig versäumt - was zu unnötigem Energieverbrauch und +erhöhtem Verschleiß führte - und eine verlässliche Dokumentation der +tatsächlichen Nutzungszeiten existierte nicht, wodurch weder +aussagekräftige Betätigungs- und Verantwortungszuordnung (bspw. für +Aufräumarbeiten), noch eine verursachungsgerechte Kostenzuordnung +möglich waren. + +Ein erstmaliger Lösungsansatz durch den ehemaligen Auszubildenden Torben +Haack hatte einen vielversprechenden Frontend-Prototyp auf Basis von +Next.js hervorgebracht. Der Prototyp verfügte über eine moderne +Benutzeroberfläche und gute Analysefunktionen, allerdings jedoch fehlte +ganz fundamental die essentielle Backend-Funktionalität; ohne dies blieb +die auf Prototypen-basierende Projektarbeit des Torben Haacks in der +praktischen Anwendung ohne jegliche Funktion. Ich sah für mich also die +Chance, die Idee hinter dem Prototypen aufzugreifen und mich ihrer im +Rahmen meiner hier dargelegten Projektarbeit anzunehmen, da ich sofort +mehrere Möglichkeiten zur Einbringung meiner Fachrichtung identifizieren +konnte und ich keine notwendige Obligation - wie bei anderen +Projektmöglichkeiten die sich mir boten - verspürte, sondern einen +Anflug von Ideen, Tatendrang und intrinsischer Motivation; sprich: es +kitzelte meine Leidenschaft. + +## 1.2 Ableitung der Projektziele + +Nach erfolgter Zulassung des Abschlussprojekts durch die IHK +kristallisierten sich die Projektziele in ihrer ganzen Komplexität +heraus. Das zu entwickelnde System sollte unter dem prägnanten Namen +"MYP - Manage Your Printer" nicht nur die digitale Verwaltung der +Reservierungen ermöglichen, sondern – und hier liegt die besondere +Herausforderung für einen Fachinformatiker der digitalen Vernetzung – +auch die automatisierte Steuerung der physischen Geräte realisieren. + +Die zentrale technische Herausforderung bestand in der Überbrückung der +technischen Limitierungen der vorhandenen 3D-Drucker. Da eine direkte +Kommunikation mit den Geräten aufgrund fehlender Schnittstellen nicht +möglich war, musste ein alternativer, kreativer Ansatz zur +Hardware-Steuerung entwickelt werden. Gleichzeitig waren die strengen +Sicherheitsrichtlinien der Mercedes-Benz AG zu berücksichtigen, die +keine direkten, geschweige denn permanenten Internetverbindungen in der +Produktionsumgebung gestatten – eine Anforderung, die das Projekt +zusätzlich verkomplizierte. + +Ein weiteres, nicht zu unterschätzendes Projektziel war die +Gewährleistung der Herstellerunabhängigkeit. Die heterogene und +schnittstellenarme Druckerlandschaft der sechs 3D-Drucker erforderte +eine universell einsetzbare Lösung, die sich zugleich auch leicht an +zukünftige Upgrades – sowohl der 3D-Drucker als auch der entstehenden +Lösung selbst – anpassen lassen würde. Das System sollte zudem eine +rudimentäre, aber effektive Rechteverwaltung implementieren, die +zwischen administrativen Funktionen und regulären Nutzerrechten +differenziert. + +## 1.3 Projektabgrenzung + +Der Projektumfang wurde – durchaus pragmatisch – auf die praktische +Umsetzung einer funktionsfähigen Lösung fokussiert. Eine umfassende +Daten- und Prozessanalyse wurde bewusst zugunsten der technischen +Realisierung zurückgestellt; diese Priorisierung ermöglichte die +Fertigstellung eines produktiv einsetzbaren Systems innerhalb des knapp +bemessenen Zeitrahmens von fünf Wochen. + +Eine direkte Kommunikation mit den 3D-Druckern zur Übertragung von +Druckdaten oder zur Statusüberwachung wurde kategorisch aus dem +Projektumfang ausgeschlossen. Die fehlenden technischen Schnittstellen +der vorhandenen Geräte hätten umfangreiche Hardware-Modifikationen +erfordert, die weder zeitlich noch wirtschaftlich vertretbar gewesen +wären – ganz zu schweigen von den Garantieverlusten, die solche +Eingriffe nach sich gezogen hätten. + +Ebenfalls nicht Teil des Projekts war die Integration in übergeordnete +ERP-Systeme oder das unternehmensweite Intranet. Diese Anbindungen +hätten zusätzliche Genehmigungsprozesse und Sicherheitsprüfungen +erfordert, die den Projektrahmen bei weitem überschritten hätten. +Stattdessen wurde eine autarke Lösung entwickelt, die alle +erforderlichen Funktionen lokal bereitstellt – ein Ansatz, der sich im +Nachhinein als goldrichtig erweisen sollte. + +## 1.4 Projektumfeld + +Das Projekt wurde im Rahmen meiner Ausbildung zum Fachinformatiker für +digitale Vernetzung bei der Mercedes-Benz AG durchgeführt. Die +Technische Berufsausbildungsstätte bot dabei optimale Voraussetzungen +durch die vorhandene Infrastruktur und die – wenn auch manchmal +zögerliche – fachliche Unterstützung der Ausbildungsleitung. + +Die Zusammenarbeit mit dem Entwickler des Frontend-Prototyps, Torben +Haack, erfolgte in Form einer sequenziellen Weiterentwicklung. Da Herr +Haack seine Ausbildung bereits abgeschlossen hatte und ich erst nach +offizieller IHK-Zulassung mit der Projektarbeit beginnen durfte, konnte +ich auf seinen Vorarbeiten aufbauen und diese zu einer Gesamtlösung +erweitern – ein Umstand, der sich als Segen und Fluch zugleich erweisen +sollte. + +Die organisatorischen Rahmenbedingungen wurden maßgeblich durch die +Sicherheitsrichtlinien und IT-Governance der Mercedes-Benz AG geprägt. +Jede technische Entscheidung musste die Vorgaben bezüglich +Netzwerksicherheit, Datenschutz und Compliance berücksichtigen. Die +Beantragung notwendiger Administratorrechte und die Genehmigung +selbstsignierter SSL-Zertifikate erforderten umfangreiche +Abstimmungsprozesse mit der IT-Abteilung – Prozesse, die sich teilweise +über Wochen hinzogen und meine Geduld auf eine harte Probe stellten. + +## 1.5 Betriebliche Schnittstellen + +Die Analyse der betrieblichen Schnittstellen offenbarte ein komplexes +Geflecht von Abhängigkeiten und Anforderungen. Primär musste das System +mit der bestehenden Netzwerkinfrastruktur der TBA harmonieren, ohne +dabei Sicherheitsrichtlinien zu verletzen. Die Schnittstelle zur +IT-Abteilung erwies sich als besonders kritisch, da jede +Netzwerkkonfiguration und jeder Port-Freischaltung einer expliziten +Genehmigung bedurfte. + +Die Benutzerschnittstelle musste so gestaltet werden, dass sowohl +technisch versierte Auszubildende als auch weniger IT-affine Nutzer das +System intuitiv bedienen können. Dies erforderte eine Balance zwischen +Funktionsumfang und Benutzerfreundlichkeit – eine Balance, die nicht +immer leicht zu finden war. + +Besonders herausfordernd gestaltete sich die Schnittstelle zu den +Smart-Plugs. Die ursprüngliche Annahme, dass sich die TAPO-Steckdosen +des chinesischen Herstellers TP-Link problemlos integrieren lassen +würden, erwies sich als naiv. Die proprietäre API der Geräte war +undokumentiert und erforderte erheblichen Reverse-Engineering-Aufwand – +aber dazu später mehr. + +## 1.6 Analyse der IT-sicherheitsrelevante Bedingungen + +Die Sicherheitsanalyse offenbarte multiple Herausforderungen, die es zu +bewältigen galt. Das System musste in einem isolierten Netzwerksegment +betrieben werden, ohne dabei die Funktionalität einzuschränken. Die +Anforderung, keine permanente Internetverbindung zu etablieren, schloss +Cloud-basierte Lösungen kategorisch aus – ein Umstand, der die Auswahl +geeigneter Smart-Plugs erheblich einschränkte. + +Die Authentifizierung und Autorisierung musste robust implementiert +werden, um unbefugten Zugriff zu verhindern. Gleichzeitig durfte die +Sicherheit nicht zu Lasten der Benutzerfreundlichkeit gehen – ein +klassisches Dilemma der IT-Sicherheit. Die Entscheidung für +bcrypt-basiertes Password-Hashing mit angemessenem Cost-Faktor stellte +einen vernünftigen Kompromiss dar. + +Besondere Aufmerksamkeit erforderte die Absicherung der API-Endpunkte. +Jeder Endpunkt musste gegen gängige Angriffsvektoren wie SQL-Injection, +Cross-Site-Scripting und CSRF-Attacken geschützt werden. Die +Implementierung eines Rate-Limiting-Mechanismus verhindert zudem +Brute-Force-Angriffe auf die Authentifizierungsschnittstelle. + +## 1.7 Darstellung der vorhandenen Systemarchitektur + +Die vorgefundene Systemarchitektur – wenn man sie denn so nennen möchte +– bestand aus isolierten Komponenten ohne jegliche Integration. Die +3D-Drucker operierten als Insellösungen, verbunden lediglich durch ihre +physische Nähe und das gemeinsame Whiteboard. Das von Torben Haack +entwickelte Frontend existierte als Docker-Container auf einem +Entwicklungsserver, ohne Anbindung an reale Daten oder Funktionen. + +Die Netzwerkinfrastruktur der TBA basierte auf einem segmentierten +Ansatz mit verschiedenen VLANs für unterschiedliche Geräteklassen. Die +3D-Drucker waren – mangels Netzwerkfähigkeit – nicht in diese Struktur +integriert. Der bereitgestellte Raspberry Pi 4 (später aufgerüstet auf +einen Pi 5) sollte als zentrale Plattform für das MYP-System dienen. + +Die Analyse ergab, dass eine grundlegende Neukonzeption der Architektur +erforderlich war. Die Lösung musste die isolierten Komponenten zu einem +kohärenten System verbinden, ohne dabei die bestehenden +Sicherheitsrichtlinien zu verletzen. Der gewählte Ansatz – die Steuerung +über Smart-Plugs – stellte einen eleganten Kompromiss zwischen +technischer Machbarkeit und praktischem Nutzen dar. + +# 2. Projektplanung + +## 2.1 Terminplanung + +Die Projektplanung folgte einem agilen Ansatz nach Scrum-Prinzipien – +eine Entscheidung, die sich angesichts der zahlreichen Unwägbarkeiten +als goldrichtig erweisen sollte. Die Gesamtprojektdauer von fünf Wochen +(15. April bis 20. Mai 2025) wurde in fünf einwöchige Sprints +unterteilt, wobei jeder Sprint seine eigenen Herausforderungen und +Überraschungen bereithielt. + +### Sprint 1 (15.-19. April 2025) + +Der erste Sprint widmete sich der Analyse des bestehenden Prototyps und +der Definition der Erweiterungspunkte. Die Evaluierung der +Frontend-Codebasis offenbarte eine solide, wenn auch überkomplexe +Struktur. Die Spezifikation der erforderlichen API-Endpunkte gestaltete +sich umfangreicher als erwartet – über 100 Endpunkte wurden +identifiziert. Der kritische Meilenstein dieses Sprints war die +erfolgreiche Etablierung der Kommunikation mit den Smart-Plugs über die +PyP100-Bibliothek, was zunächst scheiterte. + +### Sprint 2 (22.-26. April 2025) + +Im zweiten Sprint lag der Fokus auf dem Aufbau der +Backend-Infrastruktur. Die Beantragung und Erlangung der erforderlichen +Administratorrechte erwies sich als kafkaeske Odyssee durch die +Bürokratie der Mercedes-Benz AG. Parallel dazu begannen die ersten +Experimente mit Wireshark, um das Kommunikationsprotokoll der +Smart-Plugs zu entschlüsseln – eine Notwendigkeit, die sich aus der +mangelhaften Dokumentation der PyP100-Bibliothek ergab. + +### Sprint 3 (29. April - 3. Mai 2025) + +Der dritte Sprint sollte die Integration von Frontend und Backend +realisieren. Stattdessen wurde er zu einer Woche der technischen +Katastrophen: Die Verbindung zwischen den Komponenten scheiterte +wiederholt, die genehmigten SSL-Zertifikate gingen durch einen +unglücklichen Neuinstallationsprozess verloren, und die Einarbeitung in +die unternehmensspezifischen Implementierungen von GitHub OAuth und npm +verschlang wertvolle Zeit. + +### Sprint 4 (6.-10. Mai 2025) + +Ursprünglich für Optimierungen vorgesehen, mutierte dieser Sprint zur +Rettungsmission. Der Zeitdruck erzwang pragmatische Entscheidungen und +die Konzentration auf essenzielle Funktionen. In marathonartigen +Coding-Sessions wurde die Grundfunktionalität implementiert – nicht +schön, aber funktional. + +### Sprint 5 (13.-17. Mai 2025) + +Der finale Sprint diente der Fehlerbehebung und Systemstabilisierung. +Die ursprünglich geplanten Schulungen fielen dem Zeitdruck zum Opfer. +Stattdessen wurde fieberhaft an kritischen Bugfixes gearbeitet und die +Projektdokumentation erstellt – letztere teilweise in nächtlichen +Schreibsessions. + +## 2.2 Ressourcenplanung + +Die Ressourcenplanung gestaltete sich als Balanceakt zwischen +technischen Anforderungen und budgetären Beschränkungen. Die +Hardware-Ausstattung wurde sorgfältig, aber auch pragmatisch ausgewählt. + +Als zentrale Serverplattform diente zunächst ein Raspberry Pi 4 mit 4 GB +RAM – eine Entscheidung, die sich schnell als Fehlkalkulation +herausstellte. Performance-Tests zeigten, dass das ressourcenhungrige +Next.js-Frontend die kleine Platine an ihre Grenzen brachte. Der +kurzfristige Wechsel auf einen Raspberry Pi 5 mit 8 GB RAM löste die +Performance-Probleme, verursachte aber zusätzliche Kosten und +Zeitverzug. + +Die sechs TP-Link Tapo P110 Smart-Plugs bildeten das Herzstück der +Hardware-Lösung. Jedes Gerät erhielt eine statische IP-Adresse im +Bereich 192.168.0.151 bis 192.168.0.156 – eine scheinbar triviale +Konfiguration, die sich später als entscheidend für die Systemstabilität +erweisen sollte. Die ursprüngliche Annahme, dass sich diese Geräte +problemlos integrieren lassen würden, erwies sich als optimistisch. Die +proprietäre API erforderte erheblichen Reverse-Engineering-Aufwand +mittels Wireshark. + +Zur professionellen Unterbringung der Hardware wurde ein +19-Zoll-Serverschrank beschafft. Die internen Beschaffungsprozesse der +Mercedes-Benz AG erwiesen sich jedoch als so langwierig, dass ergänzende +Komponenten wie Lüftereinheiten und Kabelmanagement-Systeme aus eigener +Tasche finanziert wurden – eine Investition in die professionelle +Präsentation des Projekts. + +Die Software-Architektur basierte vollständig auf +Open-Source-Technologien: Python 3.11 als Programmiersprache, Flask 2.3 +als Web-Framework, SQLAlchemy 2.0 für die Datenbankabstraktion und +SQLite als Datenbanksystem. Diese Technologieauswahl gewährleistete +nicht nur Unabhängigkeit von proprietären Lösungen, sondern erfüllte +auch die strikte Offline-Anforderung des Projekts. + +## 2.3 Planung der Qualitätssicherung + +Das Qualitätssicherungskonzept orientierte sich am V-Modell – eine +klassische, aber bewährte Herangehensweise. Für jede Entwicklungsphase +wurden korrespondierende Testaktivitäten definiert, wobei die Realität +diese saubere Trennung oft genug konterkarierte. + +Auf Unit-Test-Ebene wurden alle kritischen Komponenten isoliert +getestet. Die Datenbankoperationen, API-Eingabevalidierung und +Kernfunktionen der Reservierungsverwaltung durchliefen umfangreiche +Testszenarien. Besondere Aufmerksamkeit galt der +Smart-Plug-Kommunikation, für die spezielle Testfälle entwickelt wurden +– einschließlich simulierter Netzwerkausfälle und Timeout-Situationen. + +Die Integrationstests gestalteten sich komplexer als erwartet. Das +Zusammenspiel zwischen Backend und Smart-Plugs erwies sich als +fehleranfällig, insbesondere bei gleichzeitigen Zugriffen. Die +systematischen Tests mit verschiedenen Eingabedaten – einschließlich +bewusst invalider und potenziell schädlicher Inputs – deckten mehrere +Sicherheitslücken auf, die nachträglich geschlossen werden mussten. + +Systemtests bildeten komplette Anwendungsszenarien ab. Ein typischer +Testfall umfasste die Benutzeranmeldung, Reservierungserstellung, +automatische Druckeraktivierung zur geplanten Zeit und die anschließende +Deaktivierung. Die zeitliche Präzision der Schaltungen – kritisch für +die Benutzerzufriedenheit – wurde dabei besonders überwacht. + +Performance-Tests auf der Zielplattform offenbarten die bereits +erwähnten Limitierungen des Raspberry Pi 4. Der Wechsel auf den Pi 5 +löste diese Probleme, erforderte aber eine Wiederholung aller Tests. Die +finale Konfiguration bewältigte selbst simultane Zugriffe mehrerer +Nutzer und parallele Smart-Plug-Operationen ohne nennenswerte Einbußen. + +## 2.4 Bewertung der heterogenen IT-Landschaft + +Die IT-Landschaft der TBA präsentierte sich als bunter Flickenteppich +verschiedenster Technologien und Standards. Die 3D-Drucker stammten von +unterschiedlichen Herstellern mit inkompatiblen Steuerungssystemen. Das +Netzwerk war in multiple VLANs segmentiert, wobei die Dokumentation +dieser Struktur bestenfalls als lückenhaft bezeichnet werden konnte. + +Die Herausforderung bestand darin, eine einheitliche Lösung für diese +heterogene Umgebung zu entwickeln. Der Ansatz über Smart-Plugs erwies +sich hier als Glücksgriff – er abstrahierte die Unterschiede zwischen +den Druckern auf die simpelste mögliche Ebene: Strom an oder aus. Diese +radikale Vereinfachung ermöglichte eine universelle Lösung, die +unabhängig vom Druckermodell funktionierte. + +Die Integration in die bestehende Netzwerkinfrastruktur erforderte +diplomatisches Geschick. Die IT-Abteilung bestand auf strikter +Segmentierung, was die Kommunikation zwischen Komponenten +verkomplizierte. Die Lösung – ein dediziertes IoT-Subnetz für das +MYP-System – stellte einen akzeptablen Kompromiss dar. + +## 2.5 Anforderungsgerechte Auswahl der Übertragungssysteme + +Die Auswahl der Übertragungssysteme wurde maßgeblich durch die +Sicherheitsanforderungen bestimmt. Cloud-basierte Lösungen schieden +kategorisch aus, was die Optionen erheblich einschränkte. Die +Entscheidung für lokale HTTP/HTTPS-Kommunikation mit selbstsignierten +Zertifikaten war pragmatisch, aber effektiv. + +Die Kommunikation mit den Smart-Plugs erfolgte über das proprietäre +TP-Link-Protokoll, das auf HTTP basiert. Die anfänglichen Versuche, die +offizielle Cloud-API zu nutzen, scheiterten an den +Sicherheitsrichtlinien. Die Entdeckung, dass die Geräte auch eine lokale +API anboten, war ein Durchbruch – allerdings einer, der erheblichen +Reverse-Engineering-Aufwand erforderte. + +Hier kam Wireshark ins Spiel. Zusammen mit der TAPO-App analysierte ich +den Netzwerkverkehr, um das Kommunikationsprotokoll zu entschlüsseln. +Die Erkenntnis, dass ein Session-Key erforderlich war, der sich bei +jeder Anmeldung änderte, verkomplizierte die Integration erheblich. +Zunächst versuchte ich, diesen Key manuell abzufangen und in meine +Anwendung zu integrieren – ein Ansatz, der funktionierte, aber +offensichtlich nicht praxistauglich war. + +Nach tagelangen Experimenten und zahllosen Fehlversuchen stieß ich auf +ein alternatives Python-Modul, das die lokale Kommunikation mit den +TAPO-Geräten ermöglichte. Dieses Modul – versteckt in den Tiefen von +GitHub – löste die Session-Key-Problematik elegant und ermöglichte eine +stabile Integration. + +## 2.6 Planung der Prozess-/ und Systemschnittstellen + +Die Schnittstellenplanung erforderte eine sorgfältige Balance zwischen +Funktionalität und Sicherheit. Die REST-API wurde nach modernen +Standards entworfen, mit klarer Trennung zwischen öffentlichen und +authentifizierten Endpunkten. Über 100 Endpunkte wurden spezifiziert – +eine Zahl, die zunächst übertrieben erschien, sich aber als notwendig +erwies. + +Die Schnittstelle zwischen Frontend und Backend basierte auf +JSON-formatierter Kommunikation über HTTPS. Die Implementierung von +CORS-Policies gestaltete sich komplexer als erwartet, da die +Sicherheitsrichtlinien strikte Einschränkungen vorgaben. Die Lösung – +eine Whitelist-basierte CORS-Konfiguration – erfüllte die +Sicherheitsanforderungen ohne die Funktionalität einzuschränken. + +Besondere Aufmerksamkeit erforderte die Scheduler-Schnittstelle. Der als +eigenständiger Thread implementierte Scheduler musste nahtlos mit der +Hauptanwendung kommunizieren, ohne dabei Race Conditions oder Deadlocks +zu verursachen. Die Verwendung von Thread-sicheren Queues und explizitem +Locking löste diese Herausforderung. + +## 2.7 Planung der IT-Sicherheitsmaßnahmen + +Die Sicherheitsplanung folgte dem Prinzip "Security by Design" – ein +Ansatz, der sich angesichts der sensiblen Umgebung als unerlässlich +erwies. Jede Komponente wurde von Anfang an mit Sicherheit im Hinterkopf +entwickelt. + +Die Authentifizierung basierte auf bcrypt mit einem Cost-Faktor von 12 – +ein Kompromiss zwischen Sicherheit und Performance auf dem Raspberry Pi. +Session-Management wurde über Flask-Login realisiert, mit +konfigurierbaren Timeout-Werten und sicheren Session-Cookies. Die +Implementierung einer Brute-Force-Protection mit exponentieller +Backoff-Strategie verhinderte automatisierte Angriffe. + +Auf Netzwerkebene wurden restriktive Firewall-Regeln implementiert. Nur +essenzielle Ports wurden geöffnet, ausgehende Verbindungen auf die +IP-Adressen der Smart-Plugs beschränkt. Die Verwendung von iptables +ermöglichte granulare Kontrolle über den Netzwerkverkehr. + +Die API-Sicherheit umfasste Input-Validation, Output-Encoding und +CSRF-Protection. Jeder Endpunkt wurde gegen die OWASP Top 10 +abgesichert. Ein selbstentwickeltes Intrusion Detection System +überwachte verdächtige Aktivitäten und sperrte bei Bedarf IP-Adressen +temporär. + +# 3. Durchführung und Auftragsbearbeitung + +In diesem Kapitel wird die konkrete Umsetzung beschrieben. + +## 3.1 Prozess-Schritte und Vorgehensweise + +Die Durchführung des Projekts glich einer technischen Odyssee, gespickt +mit unerwarteten Wendungen und kreativen Lösungsansätzen. Die +ursprünglich geplante lineare Vorgehensweise wich schnell einer +iterativen, problemgetriebenen Herangehensweise. + +### 3.1.1 Datenabfrage der Sensoren + +Die "Sensoren" in diesem Kontext waren die Smart-Plugs – eine +euphemistische Bezeichnung für Geräte, die sich als erstaunlich +widerspenstig erwiesen. Die initiale Annahme, dass die PyP100-Bibliothek +out-of-the-box funktionieren würde, zerschlug sich an der Realität der +proprietären TP-Link-Implementation. + +Der erste Ansatz – die Nutzung der dokumentierten Cloud-API – scheiterte +an den Sicherheitsrichtlinien. Der zweite Ansatz – die direkte lokale +Kommunikation – scheiterte an der fehlenden Dokumentation. Erst der +dritte Ansatz – Reverse Engineering mittels Wireshark – führte zum +Durchbruch. + +Die Wireshark-Analyse offenbarte das komplexe +Authentifizierungsprotokoll der TAPO-Geräte. Jede Kommunikation +erforderte einen verschlüsselten Handshake, gefolgt von einem +Session-Token, der für alle weiteren Operationen benötigt wurde. Die +Verschlüsselung basierte auf einer Kombination aus RSA und AES – +durchaus respektabel für Consumer-Hardware. + +Die Implementierung der Datenabfrage erfolgte schließlich über eine +selbstentwickelte Wrapper-Klasse, die die Komplexität der Kommunikation +kapselte. Retry-Mechanismen mit exponentieller Backoff-Strategie sorgten +für Robustheit bei Netzwerkproblemen. Die Abfrage umfasste nicht nur den +Schaltzustand, sondern auch Metadaten wie Energieverbrauch und +Signalstärke – Informationen, die sich später als wertvoll für das +Monitoring erwiesen. + +### 3.1.2 Verarbeiten der Daten + +Die Datenverarbeitung folgte einem ereignisgesteuerten Ansatz. Der +Scheduler-Thread prüfte im Minutentakt die Datenbank auf anstehende +Aktionen und triggerte entsprechende Smart-Plug-Operationen. Die +Herausforderung bestand darin, die Asynchronität der +Hardware-Operationen mit der Synchronität der Datenbankzugriffe zu +vereinen. + +Die Lösung war ein Queue-basiertes System, das Kommandos pufferte und +sequenziell abarbeitete. Dies verhinderte Race Conditions bei simultanen +Zugriffen und gewährleistete die Konsistenz der Systemzustände. Jede +Operation wurde in einer Transaktion gekapselt, mit Rollback-Mechanismen +bei Fehlern. + +Die Verarbeitung der Energiedaten ermöglichte interessante Einblicke in +die Nutzungsmuster. Anomalien – wie ungewöhnlich hoher Stromverbrauch – +konnten erkannt und gemeldet werden. Diese Funktion, ursprünglich nicht +geplant, erwies sich als wertvolles Feature für die präventive Wartung. + +## 3.2 Abweichung, Anpassung und Entscheidungen + +Die Projektdurchführung war geprägt von kontinuierlichen Anpassungen an +die Realität. Die größte Abweichung vom ursprünglichen Plan war der +Wechsel der Systemarchitektur von einer verteilten zu einer +konsolidierten Lösung. + +Ursprünglich war geplant, dass ich nur die API entwickle und diese mit +Torbens Frontend auf einem separaten Raspberry Pi verknüpfe. Diese +Architektur erwies sich als zu komplex – die unterschiedlichen +Technologie-Stacks (Next.js vs. Python/Flask) und die +Netzwerksegmentierung machten die Integration zum Albtraum. Die +Entscheidung, beide Komponenten auf einem einzigen Raspberry Pi zu +konsolidieren, vereinfachte nicht nur die Architektur, sondern +reduzierte auch Kosten und Stromverbrauch. + +Der versehentliche Verlust der SSL-Zertifikate während einer +Neuinstallation – ein Moment des Schreckens – führte zur Implementierung +eines robusten Backup-Systems. Die Lektion war schmerzhaft, aber +lehrreich: Kritische Konfigurationsdateien werden nun dreifach +gesichert. + +Die Entscheidung, von der komplexen PyP100-Integration zu einem +alternativen Modul zu wechseln, fiel nach tagelangen frustrierenden +Debugging-Sessions. Der Stolz, es "richtig" machen zu wollen, wich dem +Pragmatismus, eine funktionierende Lösung zu liefern. Das gefundene +Alternative Modul – ironischerweise simpler und stabiler – rettete das +Projekt. + +## 3.3 Maßnahmen zur Qualitätskontrolle + +Die Qualitätskontrolle erfolgte kontinuierlich und vielschichtig. +Automatisierte Tests liefen bei jedem Commit, manuelle Tests ergänzten +diese bei kritischen Funktionen. Die Herausforderung bestand darin, die +Hardware-abhängigen Komponenten testbar zu machen. + +Mock-Objekte simulierten die Smart-Plugs für Unit-Tests. Diese Mocks +replizierten das Verhalten der echten Hardware, einschließlich typischer +Fehlerszenarien wie Timeouts oder Verbindungsabbrüche. Die Test-Coverage +erreichte respektable 85% – die fehlenden 15% waren hauptsächlich +UI-Code und Error-Handler. + +Integrationstests mit echter Hardware deckten Probleme auf, die in der +Simulation nicht auftraten. Timing-Issues bei simultanen Zugriffen, +Memory-Leaks bei lang laufenden Operationen, Race Conditions im +Scheduler – all diese Probleme wurden iterativ identifiziert und +behoben. + +Die Implementierung eines Logging-Systems erwies sich als unschätzbar +wertvoll. Jede Operation, jeder Fehler, jede Anomalie wurde +protokolliert. Die Log-Analyse wurde zum wichtigsten Debugging-Tool, +insbesondere bei sporadisch auftretenden Problemen. + +## 3.4 Implementierung, Konfiguration und Inbetriebnahme von Schnittstellen und unterschiedlicher Prozesse und Systeme + +Die Implementierung der verschiedenen Schnittstellen erfolgte modular +und iterativ. Die REST-API wurde Blueprint-basiert strukturiert, was +eine klare Trennung der Funktionsbereiche ermöglichte. Authentication, +User Management, Printer Management und Job Management erhielten jeweils +eigene Blueprints. + +Die Smart-Plug-Schnittstelle durchlief mehrere Iterationen. Die finale +Implementation kapselte die gesamte Kommunikationslogik in einer +einzigen Klasse, die eine simple API bot: turn_on(), turn_off(), +get_status(). Diese Abstraktion verbarg die Komplexität des +darunterliegenden Protokolls und ermöglichte einfache Erweiterungen. + +Die Datenbank-Schnittstelle nutzte SQLAlchemy's ORM-Funktionalität. Die +Definition der Models erfolgte deklarativ, Migrationen wurden über +Alembic verwaltet. Die Entscheidung für SQLite als Datenbank war +pragmatisch – keine zusätzlichen Services, keine Konfiguration, perfekt +für die Offline-Anforderung. + +Der Scheduler wurde als eigenständiger Thread implementiert, der beim +Anwendungsstart initialisiert wurde. Die Kommunikation mit dem +Hauptthread erfolgte über thread-sichere Queues. Diese Architektur +ermöglichte asynchrone Hardware-Operationen ohne Blockierung der +Web-Requests. + +## 3.5 Konfiguration von Übertragungssystemen und Integration in die Gesamtinfrastruktur + +Die Integration in die Mercedes-Benz-Infrastruktur erforderte zahlreiche +Kompromisse und kreative Lösungen. Das dedizierte IoT-Subnetz wurde +speziell für das MYP-System eingerichtet, mit restriktiven +Firewall-Regeln und ohne Internet-Zugang. + +Die Netzwerkkonfiguration erfolgte in enger Abstimmung mit der +IT-Abteilung. Jede Änderung erforderte ein Change-Request, jede +Port-Öffnung eine Security-Review. Der bürokratische Overhead war +erheblich, aber notwendig für die Compliance. + +Die SSL-Konfiguration mit selbstsignierten Zertifikaten war ein +notwendiges Übel. Ohne Internet-Zugang war Let's Encrypt keine Option. +Die Zertifikate wurden mit allen relevanten SANs (Subject Alternative +Names) generiert, um Kompatibilitätsprobleme zu vermeiden. Die +Browser-Warnungen wurden durch eine dokumentierte Prozedur zur +Zertifikats-Installation umgangen. + +Die Integration der Smart-Plugs erforderte statische IP-Adressen – +DHCP-Reservierungen waren in der Netzwerk-Policy nicht vorgesehen. Die +manuelle Konfiguration jedes Geräts war mühsam, gewährleistete aber +stabile Verbindungen. + +## 3.6 Erfüllen der Anforderungen an die Informationssicherheit + +Die Informationssicherheit wurde von Anfang an als kritischer +Erfolgsfaktor behandelt. Jede Designentscheidung wurde durch die +Sicherheitsbrille betrachtet, jede Implementierung auf Schwachstellen +geprüft. + +Die Authentifizierung implementierte moderne Best Practices: +bcrypt-Hashing, sichere Session-Verwaltung, CSRF-Protection. Die +API-Endpunkte wurden systematisch gegen die OWASP Top 10 abgesichert. +Input-Validation erfolgte auf mehreren Ebenen – Client-seitig für UX, +Server-seitig für Sicherheit. + +Die Implementierung eines Rate-Limiters verhinderte +Brute-Force-Angriffe. Nach fünf fehlgeschlagenen Login-Versuchen wurde +die IP-Adresse für 30 Minuten gesperrt – lang genug, um Angriffe +unwirtschaftlich zu machen, kurz genug, um legitime Nutzer nicht +übermäßig zu frustrieren. + +DSGVO-Compliance wurde durch Privacy-by-Design erreicht. +Personenbezogene Daten wurden minimiert, Löschfristen implementiert, +Datenexport-Funktionen bereitgestellt. Die Logging-Funktionalität +anonymisierte IP-Adressen nach 30 Tagen automatisch. + +# 4. Projektabschluss + +Dieses Kapitel beschreibt das Ergebnis, die Bewertung sowie das Fazit. + +## 4.1 Soll-Ist-Vergleich (Abweichung, Anpassungen) + +Der Vergleich zwischen geplanten und erreichten Zielen offenbart ein +gemischtes, aber letztendlich positives Bild. Die Kernfunktionalität – +digitale Reservierungsverwaltung mit automatischer Hardware-Steuerung – +wurde vollständig implementiert und übertraf in einigen Aspekten sogar +die ursprünglichen Anforderungen. + +#### Erfolgreich umgesetzte Anforderungen: + +- Vollständige Digitalisierung des Reservierungsprozesses + +- Automatische Steuerung der 3D-Drucker via Smart-Plugs + +- Robuste Benutzerauthentifizierung und -autorisierung + +- Umfassende REST-API mit über 100 Endpunkten + +- Offline-fähige Architektur ohne Cloud-Abhängigkeiten + +- DSGVO-konforme Datenhaltung + +- Energiemonitoring und Nutzungsstatistiken + +#### Abweichungen vom ursprünglichen Plan: + +- Konsolidierung auf einen statt zwei Raspberry Pis + +- Wechsel von PyP100 zu alternativem Kommunikationsmodul + +- Verzicht auf Touch-Display zugunsten konventioneller Eingabe + +- Verschiebung der Benutzerschulungen auf Nach-Projektphase + +Die größte positive Überraschung war die erfolgreiche Integration des +Energiemonitorings. Diese ursprünglich nicht geplante Funktion +ermöglicht detaillierte Einblicke in Nutzungsmuster und Energieverbrauch +– wertvolle Daten für die Optimierung des Druckerbetriebs. + +Die technischen Herausforderungen – insbesondere die +Smart-Plug-Integration – erforderten mehr Zeit als geplant. Die +investierte Mühe zahlte sich jedoch aus: Die finale Lösung ist robuster +und wartungsfreundlicher als eine Quick-and-Dirty-Implementation gewesen +wäre. + +## 4.2 Fazit + +Das MYP-Projekt demonstriert eindrucksvoll, wie durch kreative Ansätze +und technisches Geschick aus scheinbar unüberwindbaren Hindernissen +elegante Lösungen entstehen können. Die Transformation eines analogen +Whiteboards in ein modernes cyber-physisches System mag auf den ersten +Blick trivial erscheinen – die Umsetzung offenbarte jedoch die volle +Komplexität vernetzter Systeme. + +Die Entscheidung, die fehlenden Schnittstellen der 3D-Drucker durch +Smart-Plugs zu überbrücken, erwies sich als Glücksgriff. Diese +Abstraktion auf die grundlegendste Ebene – Stromversorgung – ermöglichte +eine universelle Lösung, die unabhängig von Druckermodell oder +Hersteller funktioniert. Ein klassisches Beispiel für das KISS-Prinzip +(Keep It Simple, Stupid) in Aktion. + +Die technische Exzellenz des Systems zeigt sich in den Details: Über +9.000 Zeilen sauber strukturierter Python-Code, eine umfassende +REST-API, robuste Fehlerbehandlung, durchdachte Sicherheitsarchitektur. +Doch der wahre Erfolg liegt in der Praxistauglichkeit – das System läuft +stabil, wird aktiv genutzt und hat das manuelle Chaos endgültig beendet. + +Persönlich war das Projekt eine Achterbahnfahrt der Emotionen. Von der +anfänglichen Euphorie über die frustrierenden Debugging-Sessions bis zum +finalen Triumph – jede Phase bot Lernerfahrungen. Die Fähigkeit, unter +Zeitdruck pragmatische Entscheidungen zu treffen, ohne dabei die +Qualität zu kompromittieren, war die wichtigste erworbene Kompetenz. + +## 4.3 Optimierungsmöglichkeiten + +Das MYP-System bietet eine solide Basis für zukünftige Erweiterungen. +Die modulare Architektur und umfassende API ermöglichen die Integration +zusätzlicher Funktionalitäten ohne grundlegende Systemänderungen. + +Kurzfristig ist die Anbindung an das Active Directory der Mercedes-Benz +AG geplant. Die vorbereiteten Schnittstellen ermöglichen eine nahtlose +Integration, sobald die erforderlichen Genehmigungen vorliegen. Diese +Erweiterung würde die Benutzerverwaltung erheblich vereinfachen. + +Mittelfristig könnte bei Verfügbarkeit modernerer 3D-Drucker eine +direkte Geräteintegration realisiert werden. Die Einbindung von +OctoPrint oder vergleichbaren Systemen würde erweiterte Funktionen wie +Druckfortschrittsüberwachung und Remote-Dateiverwaltung ermöglichen. + +Langfristig bietet sich die Erweiterung zu einer umfassenden +Maker-Space-Management-Lösung an. Die grundlegende Architektur +unterstützt die Integration weiterer Gerätetypen wie Lasercutter oder +CNC-Fräsen. Machine-Learning-Algorithmen könnten perspektivisch für +Auslastungsprognosen und Optimierungsvorschläge implementiert werden. + +## 4.4 Abnahme + +Die formale Projektabnahme erfolgte am 2. Juni 2025 durch die +Ausbildungsleitung der TBA. Die Präsentation umfasste eine +Live-Demonstration aller Kernfunktionen sowie eine technische +Deep-Dive-Session für interessierte Kollegen. + +Die Live-Demonstration verlief – trotz Murphy's Law – reibungslos. Die +automatische Aktivierung eines 3D-Druckers zur reservierten Zeit löste +sichtbare Begeisterung aus. Die anschließende Erläuterung der +technischen Herausforderungen und deren Lösungen unterstrich die +Komplexität des scheinbar simplen Systems. + +Besonders positiv wurde die Wirtschaftlichkeit der Lösung bewertet. Mit +Gesamtkosten unter 600 Euro (inklusive privat finanzierter Komponenten) +liegt das System weit unter kommerziellen Alternativen. Die Einsparungen +durch automatisierte Abschaltung und optimierte Nutzung amortisieren die +Investition binnen weniger Monate. + +Die Rückmeldungen der ersten Nutzer bestätigten die Praxistauglichkeit. +Die intuitive Bedienung, die zuverlässige Funktion und die Eliminierung +von Reservierungskonflikten wurden besonders gelobt. Kritikpunkte – +hauptsächlich bezüglich kleiner UX-Details – wurden dokumentiert und +fließen in zukünftige Updates ein. + +Mit der erfolgreichen Abnahme und Inbetriebnahme schließt das Projekt +formal ab. Das MYP-System ist jedoch kein statisches Produkt, sondern +der Beginn einer kontinuierlichen Evolution. Die geschaffene Basis +ermöglicht iterative Verbesserungen und Erweiterungen – ganz im Sinne +moderner Software-Entwicklung. + +Die Transformation der 3D-Drucker-Verwaltung von analog zu digital, von +chaotisch zu strukturiert, von manuell zu automatisiert ist vollbracht. +Was als technische Herausforderung begann, endete als Erfolgsgeschichte +– ein Beweis dafür, dass mit Kreativität, Durchhaltevermögen und einer +Prise technischer Finesse auch scheinbar unlösbare Probleme gemeistert +werden können. + +# Anlagen + +## Netzwerkdiagramme und Systemarchitektur + +## API-Dokumentation + +## Benutzerhandbuch + +## Testprotokolle + +## Screenshots der Benutzeroberfläche + +## Konfigurationsdateien und Deployment-Skripte diff --git a/IHK_Projektdokumentation/Ausarbeitungsprozess/media/media/image2.emf b/IHK_Projektdokumentation/Ausarbeitungsprozess/media/media/image2.emf new file mode 100644 index 0000000000000000000000000000000000000000..114912a0a634379e5ffc9db5b157056511fec1aa GIT binary patch literal 313880 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 literal 0 HcmV?d00001 diff --git a/IHK_Projektdokumentation/Ausarbeitungsprozess/media/media/image3.png b/IHK_Projektdokumentation/Ausarbeitungsprozess/media/media/image3.png new file mode 100644 index 0000000000000000000000000000000000000000..b1b8d933c9be66c4a7a19c8c621b254a652e5219 GIT binary patch literal 13815 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 literal 0 HcmV?d00001 diff --git a/IHK_Projektdokumentation/Dokumentation.docx b/IHK_Projektdokumentation/Dokumentation.docx new file mode 100644 index 0000000000000000000000000000000000000000..e99c3581555345ea93b9113b0bc5dc0b68e505d8 GIT binary patch literal 179136 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 z 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 z zaWBI7Voyz4nIet$XH$jgAy`G70FHn>Hec$*AT>!L8Kg=VVVciID08@t82mn<&f5(` zl(n!9QBk~24CidGTRjxs<_J7yT{?4^*AJpVeW;@ITEwS9es)KA zBe^TH1~+2mFc|TV^_cj`*r?X^!lNu(W2)2$B$I5MIz|v+^r?uZc#qW`Ch|XVF#*+* zzU`5fPndMRzn6P`Q6J)y=Qw%PptP`F;AxX64V|k`;*-+aRBFw@M&mt;g7g%tKF}nV zB%z*vmaJYop-I>fJ&U0iasKJodgk}$i4P{}9q$hnvd!$u|LnzkT^0I)^t5V^{Zb)x ziEs$xI&(THhzSk{kGZuz6zwD6x$bBH9O%9z8w1}0>z1kWJ|?O>qt5?r@A~&X8eOx? z?D<<#1pJqW5CovHozdT{tMo>8j(@{9K|Tl|MIOL+l>fiCpv3i}M&1-)NszS_R;8!Z`9 zxMqWdl+e9S^gghMx2~eTU+7Kdb*vLZ?`0eo zx$l6(6F^{4_Oc5imtHg968RvjBv(Hwnjt%9-9BadGN_tkvRyFQ@G36o;(V}a*F5oiADM1 zQF?rb(u#W6{LBvUtSPMrGO9G*ucq!rQ@IiMZg1H|h^#^OIyaljK=gn=lp zaFnbky+_rRHY<#C2(^gH9}3YTXBhPBs9J!s%UxL3hDSG8kL_^!)BfVQ^ATDz$-0>T zBBRZ=ydMnR+hNSz0bSS{0ol`bnvar7wVd)yL8p^cKEVhkZ)TE6t_|JuPB=cnV0dqM5~EJ9?J+DBeusk z`IwggP4Xv~W1o?9+a##i&8aA6jjxyhD*Lzn(mE|p2y9(9f(Q1`9hO>F zE!Z&mMFUXao9e!nBDaAf;kv32IZJZ0mqsG`9^b^GMh^bl16TjbfM$+N_WamGeN>&+ zHR;GrGv2}D%^)TuL~Ow+_&Ul?!iXqqIBYu_Kdy>>Sq zy)3BL)tdqyQ66XJY?r^@W{7fQn0PKCa5*;;K1;&+zwiFP4>LWpQFu+?W5~s~Gb-}G zwwu2@JpEVG`K!_VeQQk8wOVID3AqA)gBN=$CtaD=}M806!H0nmRpTitJihv$ON{?|G#aUBv6^+=k&AtB0v zjv|I=fOKVj`_Y4~O{;m+?G?W6)}y{SJI#jujHr8AA63*7er>FgLQF5AEOPuhPZ^|1 zr7B2aMU@5WVfxu=_;SM@t^^^WfMzVZC;Xm{r4^z8e-n-t%O$NNV6KfU_& z9ZjsA{^{FC_t)uv&9MFs{HW==h;K(Ku$_;ctzL7xtPO=R#1d&rXKpFDb}Vs88KZFx zON;I9qhf036N>P!H^q*wU{PJhh7$9VZ75O4;43UL)RjZR2H0ntVDdQ5H8k9yk&h?kpXx5A%MT-;?Km zM}bZXInnf!J)X`T_Ouap z-B`#J#m6hK1eM1<3-j~pn_if9;!i|6uPAUuIau(l;?=(SPRlxdOP+@H`GpK3>_)u7 zGF^8D@|2oX7E6-k*?~q=&3JQbA1_? z6W9ac9-zfdWM9L12KP|@13JKh&a#=yKA~NlBctNEQm#yK6kt6D9`&>Gw7hk(p7&+G z?|=XAD9FS{L9CSn05Jb%jQ&sj)J%WzQzvyo@+4V(@%yezX%%LK?G1!uQAJ1yK_}<; z@tRf|MUQG}HbgzrSP%~<5Y5s=`P9b*k#Nnytfmr^*PCsBF8jdqX5V@DY;T`!pFQx% zF(0+poZY>2rcS%)&Tl$_kuO1oLkl7_J}!*zhafaYKnU_622lT|j*jw`zBWpJlk78r zSR)R6j~yo09Ea{~J&b_+jEK+dN3}bXew;!4eg(|iwp^Qrel2@rOY_}BY5np~g7q8a zZzh~K79TrY`(*pu_4!brw6yk?)85}dhsE*J=L+Bs9JF&5pHFFf#u9^odm*w;fXVy7w_xlPuiR6J<7{y4QaDsD9OpN;h|bZdgl( zSu$uucAE@Eiu;yhW$ZpTT&|{xK9DTm5!F0z2gboS%n66LHgm{4WfX;eiJ=J;Gtl_} zD@(oMfPYT2fqH;)*=N4_FMTW5qv-bQafi0e&^+VgTEavFMDVT~NPGD!6Vp88n{)FO ze7HbIF@n4XK30kno2?S!ida^V$@XSE_I2A5E4F-4z6y1|n3($A?{RY?WcgL^Ld#G(F~(wTfQ{d@rx=pAML_%kL=LMAM;8Z}vu{mEBmc zFJbP!?NzC7Sn^(Wo9K;y3708qoP5)@Pp$3;y`gdEg__uqPDCL zY(nl&KukPIR-7XFj$0_4DHZyLE?5M?8Sn)|Z9-j%Ys}+H$SFQQ2izwoHDQ{~)qL1zPXh4)WC1*1sO-$J*ip>u|J=c^bI1$~+SP}(UEPkpR z$jS}@Ued7WL1<}Pt5p$(c`G~#p~rBqnU>`jjjk}W0YnytN1AdfsM{XLw98KiU;p{h z^NR>6E{2#sjDhmQ=TK^jj{RUb$A-ro%f3WwL%st+W~GfEoo(WCO$HZq)^l5ibs}J} zDDAD)VK}mT4c63y$jI&Cgq*xkt=QL1dim^#c`Seyrl#+G0rk*~TD=(3KJ-ZA+AP|) zC|uXPGioBa@-~*W4Zc!nJo-lJHRKqdj%hY$dsb%@IWkfLbb?mtnLLx}0c_`#QmvJy zok)VZUg-Q#J;O*=zp(4-x7k6_Xf`L=s0fJ&SocY(AFqnWs|~d#rFQPfhDmF^%JzrO z;<5&p6S!M~vYv}#Jfmjb+8t_nZhk3~9#sne#+)$DL5uQWTk8xQ05WMKg?=r9BY>Y7 zDv0M+0q-OD3gA*>xIX!6-9TAjwn4A6njqh{@EefuA(i&%DuPSp;;Sgj&^U zqK$uo9h;agGormQ3kCf0LD}zUm&LuICXZMeSG{yRx{5p2r}Ih!IK&F!JtxP1{^H#h zfp(}#&on&r8(}^z>-8bClu(OlnTebp5it2C=Z#u@AT8fuV5i~;)=ab%=3o)9%3xO~ ze!x6y)`|6GZ7txq%0}X`REkQcL#(gmd-4dFH~dzX7Ov^}hq>{H;>}MkIP!~}^3rWvu!e9FeTcu~GMF~%%bjw3_0#al&{^1lyE*~2GJiuDyd)R-mcCh)2 zp(nPZHKy@kLti6>)3=Q)0T?95}dAwJ91Ep2lrR$!M)urapY>W8MfXawT^&`H7p5E#-HZ5*g`ptK)E8_b{WYt~L; za?;@3bNY{{YyXa_Y#3*mgkQ@Qs3SGEloNdX%GILB|`BMAog>=~!9EWq|JJcu5&;@92Ule$pMiBP&oZz;3Np zMi|~m)WC?pkW)OeFg|yW*M7q%7DKlyi1rh@)XZICRKA^6k=FOA5ds z_9=|=($v=Hlixm*r)$@i$99ax4pX_rU2Yj-io;>{BfL&ScGkA1)?OPBs4)fmil0&X zJ>G=#&M8&&QJRcs9Lj-EgjZ1Krx4RlkPra@?3wE>;?OXu^)6y&-kj)2e?@9BxdlS= zv9NWDY!<81%|Qjc04ArxUF_*)pHZ`NuS}OND~Z=~pAkS#udTPT-bQ<9`JoCy~)*C5tJ9z^QkRJD~n+#5l7gndR=V`p(``B6@8yUq| zMg*1VIW8v|7tCB+8}%oy(@xn>0j=llAi?)ccKgVK7QgFO>Jjuj<#*(`;IP5;`@#2@ zuE+wfGo4}m$T;Yg=D0;9llZ5I)>Qzmyo8KY!}&09mkph2JJa*}8Oo+>Zz=-^niB!R zvz_aiy}mfjprn*Do!32gNy9}i!HXDTojU&zx39#t@D9K->wH4iJ1TQB(o#yp-?a8L zDb=jYlpD;9j5jUodqLV;Tn4){$cPEMDTALi+C92uD-995ohmqGC4RJUop@BK{dG>8 zTF{$d9+NlV)<@*%=xgLQaI(kfhli{npU)lD#6G|1dD+crnt3ZNe(YV9i#sk?SSOZ? z<*47yu-QYSVzIo5B0I{R?PnPZlG!|Jp>feQHcz+cSy5K62T9Sb>ewNM1 z2ULC&`l_q&uV(fMOLAs1oSg6F_dFL>R#r-w&1Q|EJ<*xdR#jEGxH&nkH)j7)wdb%m zu+3Nm#)UWvKq}w5i)8$<83A~}j${pAdGfwKNLe;m_!5%$67qVtoFzah>mCgY-x0~2 zp{1?;R$Z!1nYba&pK+W%ch*i#Y|EcP|54%7vwd&QBpk?Ck7C}*yQ~NSm@5qfP>D`J zhl&e0x!4M7>hbzqTE*LNGE)BZLRh7&86yAyqbw|bG(u4tTgvg;SUTr)HzT{Iy$;t$P7T= zs%j7NDZa%O$D>owxDk>##-|GD6BplS%=A2#)H&W35fwO)$swLGu4 z$BQ#yU|<)5x;v}q4dRsiRmLS%qko48@Xm99fWcF~^W{>AP5h2`bx*yw24 zs3`aQz``JMQqtL8Bs$&v-Y(&f?-#4TSSz&_s^x)Eh)|AJX)kXS3MxvoLEOfwS1YJE zXv_^*dclq&PfK_(r_vc??Maf#R_8N7zZtpuI_Gi5!r|REb?TU%567Md8d?n;9vn>Y zptA%oS9zrmL@$}JM5P>pwvwsO)c1#H!CV8_c`WP$u(E$-%Ca&h z&fWJ22fZDek@uIWlnZ+bo9otgiAvT8j(w&qE!l8gQB+kU%CmYueO#!gREf@#Q$m$<(+|zLNQ{zbm!?WvC6B^q$jR>RugCh*LZ%MsMF*ccwv*ob(9pK} z`qca3y3i^4j6b-{%IEsNDpcHKQ{3%3(<+j%hzdHlY zheOn(eEk_r_N6R8ga zzBmgob~wBs;dcB@LBK!|S9Yae9|HiFt_%LrEP`$PIAjl0e*PF#+D{2&%#Nz6Hy8nm zyF{ll_V$4$Ge@iY&AYAgbh(P0n2?~PEcLE@vC~VRRF`1EP|W4}tnDM!|8sc}-%phn zsyo*IwwYeEL;nc|2O`^frknzr+}P;PwGk$*&p(ZxEU-wWyM0Qg13W0X)QzmU^HWF7!6WzbK4sv|Fi zQyjzL^7d5>W zcXQ^27US1E4G+Ce<*bL>Zhyq>+WaG5y}>K8$zt-n<_LOyh%qv%Cn6%_tW}8-%FuHL z0nxeWt$3y;to1dL$oCRh<-rl^R1zE|cZiJIh@$H1)+O=&AGAD^G>S*68|5>+Dl>fd z165tm_=ITd`E1$nPcf(61@F+|kfAkr&u#UZ&~I_>w616if+W;xY43}ClIBcqCtSuZz}4SA}!wO6H^xxji73xj50 z9^vuQ5l|j>U+{XyIf=x8dY+^d`tkz$#B=x+?M>O?MUv~$^b^y6sE~&~A~-|_vp;;B zbSOe{ji|X}-I7Da-lJ{+!1&ko?6VmAU4-$Z&05MjQAM)+O6LHk~Xf&iOi+ zgv#3qH>v1(dAqo%sUzp-jdB(Nq=JBu8v-`+aa-c zD4eKEffDp!JKrFa%cX@Mlv`P})s;Z|`A0p#t|7tk z>mwSg(yacVkkVfT+>~<S+3j%#C3985xr|laY8m(Gjf}szhX4q zj~)aO`r*sL#`(z{eS|P??a}>0h#>bKpg~Dn#yGb1v~ISf2ifQ)heGI955Zg`a0Fri zLL;e~6gdBqqeD49dNa;gfS{+lx==5Po$ViVHaiNj4lLNSw4Xp1h& z?FA46Bx-Ix>)4bmfs>ilaQ)+HJLZF#`337MdBo329}o=-PY(%e4c3=FKz=hNo5l#jFtAht>RGLOQO#N~NJ z!GEjk9K$48+HT#pZQHhOdz#a>ZEMc^pQ<}>%3<|U|RsMzb0N^5oEfjyX->wtfKJxe-v ze<6dT^*XPJ9+sde@LYa@X)pYC7R`RlJOb2q?fKZiXrg84w9eqS&YW83Lmiol&KreY zNv(Kvcue=lk9Y|k|KjUwPVZ9)>0G`KIO>T)m7G{eEy1)4E`;kVha7(3+6Bckd7aOm zI~J|EIHJ9gu1;U|u-piBHMNMn_(q%6gWCQA&4!LpRu-t$POoJq4h94|?zW7!3_84p zh(Z^D?^^Ssj@aQ8uk=4<^UJ(hF5b;ESocMWH0mj^$<;e`Iq@}i__?=d_}SHuPPY}& zUGUY|=ILEPDN#m9_EX3Jkr1*nGTJ*F_D5^Kc4qxjjj6H@a?dd)m%V8DtlJNxTAEa) z%a#&cfMZ!nXPSq{chPLx@eoy2MWy@5uWD=CVH=-|vAus6=zbUbEc004@e6s6fHMDg4GT(&i%=&0*RKUy zb9wx*XM8)NMq{X+Tps$n=Q*TZ#6!f#DiXaKV<87IRZ%9PLH;qCEqI-y1s+PZ@`vr* z&+H8HW~3Q}Z*UG#5U%`q%a^Av>ApJz!1p)XPPr@xzSBBOf%;oN7XSl`V~|Izfbt4o z!#b?yD0AYbbkZ0wS?Abx9p-LBvws!1D*_qigt)3C+-b{xQuga{pn}q(MOqcB(fajU zFUx^mcogvMTY21eNx=01Z_BA(?gUgRRyV(N)p?v7w0d;;5$0FJ#tyR*1LB$#L{zyUIsB0&Q!yju*_wS2>xu9FU05JEN?S0p zYKJWihYLP$7}Qi$TEJXkRU)E8&CML93c>)H_lJR#WM*iXR>dDcv!(F8q|!ow4b&wV zn{xynOk84jqOPZU;LJlfxtwYfASPf`95}i1waik+yS>RUV-J>BOr1#IC_ndM2fE;4 zDrC3P-r}zLZ}$imx|!lA_qcA5i)Ydv5+Q4O*n^No=7jUiq8kW}qU~CQSO#6r#ibs3 zc&NRc&&qvLrm9lL_(OId)Tu?8{9`^E>~D*21ZdlS)(Tbl+D8(x@k&~9MPkVHw%Q?m zH+~33|qf8>#Z|Yin!6WtMEcd=V38J`Eu=RMf$JvR#*kHv{90 z)AAW+1GUc@toOukuz0_aDS#^bAZCShc&~KXCyzXVe%r7UOgY8GSW+7{;*tVNTaf(z zIS-%aclfD}YzLrmY^h{Q)h3Qc3r1wLpTKQfSA()@+jPrTRI!cJoFP$<2S4Cz8Tx23 zvU>0q&X!GEckcZ4OQqBtD5nI(G?)B0NGO0R`>x{2HPs>}M&yrmdk&xd+U zJ29yC(2Gn~hN&NsF-=oli`6~0BjAv|FUHLs$-&Cp=O6@wKgvO<`Mr?Ek07~Y`5o&7 zbg@MB!=s_I4f{;XxZB{fQzuY<$H?!Za^_*awN`)-DRM#L4 zW(JE6+lw8Z5BX!6+#4=*;9I@6mUGiq$OXg*fHWrYG}6|4GUyAbhVgEv@GR4XxXaO_ zI++}W<;N%q@YaYY*DRDRAInttyl}#3*UvsV#g2Vf+qVuC+E$+@DwcfdM}oZku?(mK zw3?agJ3QY9=CpMvZik9hl5(l3~nt^|E9u!^=wsviCUT8 zHc|2?u6>to16;YkVl`-0Irc}6O5|;uFsLYvK9(hbAAxz;4n|Rhnn_wbYZfc<{6SgB z%5&52y~PS`wh1Vxf?LwXPcF?Ozb7mK9?gG?eBXKlMcNZ-2D(v|oPz;WTuV!6Mm<4b zWsHGHW_&tw<-AMFXG2*S1{tZTTy9bu$Y)br6nXctVS+LPh@Py?XuCZrrE=1w5Z}Bt z>u$y>!h?EeMNF;dw6~NZDCg<1_0CIJ^T_#e@qX!gox6S}7-u#sJ87aV-G-STGU+Ee zE6eo>I%QqVt=kl*v?^_z*D13j{oOEThbQBHQkQSn&h*paxE)PX9Cv~PDP5jkNrT}Rul+<6>aCaa7^qr&kq2FvYYMDX}Y@V=MUnJWi!y)2T zw0l(4u04k|#O|_jeCNS~j+-s6kQdIy$CcgN9JQW=C46(aZhtlBv5;1ZvT09T5MV3m za%Xv=7-0&sdvTX~MQKueg&*BwT<2k$paQ|Q|B=$r9=;yk)HKuzob{48JYXal8nt>L z(G^y))C&!3yFJjfhEk8okhLxvnPEov>9#)JuMf@C>9~DIJ4!alw{h>UpJ-;!bu|Ot z^h>&?sEm9sZl)%jRYRF;YKNUet2QP{+g@r1?m6X0<8RGFy9r6E9BLWHC5X7(-@T2b zvZ(gNqxpUHl*QaPzm|t^U%ySE#1f1DjALwHxx!@&Nz;h%2KJ;-sQ?i`mn6mwI|qAj z5k$I_)pGKt`gQdnR{9p^*lZP=r;#T4{P+x#eK(4qPLNkgz_{CXXQ)5JrwCnU&9nB} z!bz6?L0ae6y0C3`>=?&>Oi1z>jqeuOzo=oKR?nOf2w$bn)Uw^U5zKHi2jE0gcOo^= zCv#A?|AY(jwb;YJ|4M5)&aJf>9JlwQWU?EDUydKK`gmK0sGw95nziAEkNq}he5 z5|T)fDD#Yg)TLy)dpqA*l31nm36V`<^)*T7BPV28*hLGj2T=3&! zK*7f=2o4vS%;60h18unGX`28H@?UT~ZC$;0?#W8CStjF(S|UrU*D2sw*9Pe#%~0vA zE#%&c%kgf}Pt7qzTri;Eg&TQExTo1*_vhS(w;5Ws@;NlU-!6HU$fNBH=BKB%fmhN{ z9ciL?RG(R}UeFLH<}Olp0)-(l3yIlUI9DNPf)8LmVyyqUa3k{b2ILtrE4* zd{AmbOd%5tM3b<};)7sp6m!RiCTdiE$z-0&2Kv3R`E%m<;$9TiYB<&)A|=NclQ4td zlLY051PDe*B2vet`7dSU)~j!|>ohV{(|){2#ZHo)BShxG!uSPh4$;6f)P+`~Fa|wu z$KLSn+gxp5H*r7xEZn~Zc%vDAuWbb)0tpxO#0fCx6J9qRL#^fIPIA{^#@1+8+#HoB zL@?rdH*YNk?GaZI&Vz989^B;$u^$r)l#qfa?A`g+Pxbm{0cyX`m(zS_5AOu(guQ9# zMj{WC8Ox)%M17NSpn=RJ2wb_g#~A3Q34z}oX{vZ<0U?i9s9O%B>zR%2qbhEW@1e9X0%6#FjsM$0hG7lM&}MjVATyP_*?9Pc13-Ut zIDyL99UQOKq6NrMydFU0{ki~PWqj*8FYKZ`a*Xl0TN(pOmSZbzttY$!+^DxzRN(;E z$AoMBw-zFk|5E_5ilAeT^P^L3cOXe}rF^gAS~(ZtcUigNpPDs@S&ZVb7HK(sZ!PfR zka_IE**7(O;ni-%y4E{)J)ZOf)#^jXG{!toHr(jp7dGgLr*%PDnKCVzGvYTIV5LZUSS6dV5L4vV9V$tcJJ_ z8f_^l9X{Dgo4Rsta-IX9x4rbl_H}YlcoK}%o_!C?P3+^43OE_pgX5)Jw~2R#j4z4unnlzJxVX{ zjrA0SRP+PfUV-5`5$ud~dC_d32z1I1f`GC#2hNz}mxe+1MqyOMy;3__62x?Dy!9V- z3xu}MaX<`(?wxl+w0WRh_CdKslLA;Vaz3P{WdJ9_2hp*&suhLKxdU$!FUwSuVmr9$y}M#KuC(@ZDYIS?D>+lTWw{a9%l~ z%cN|sV98_vq-@a)94z~_KJA7REkr?4p@v0ymISU%wG(y~{nj&M>-)=^9C5WR| za9&#Q_Oa*2m$+2uqnk;#0Kiog3j+ z*?(><(u+3iOKXaT7!LzgjGru3hy?JMtEdo6PTnxWBdnJpJM!|Vuufz#gz-bgJn?pK z?E8O8CliKmuBdHHcdpf9*gG@w2IY`#lGzu-X_(?A6Xx)L=dp0c(qYsrS|^x&wBL#2 z<5ll=l)3nLUbZyCvQOXJ`wcJ;AK=gG#t44{@K#ZO%hV@Su1b+2N5$-|SeDT!+)3#u zNJFvQ9}(k>i@8z4Gca<+^lR#{o;7o0(Uw!m_k->VtU)jCBbXZbN2s6ib7_d=r-`PV zRJV(Jm^sVN`RWX|BI!YHgWKw$WtG}M@{T&PDc}$s+*uOnbauRtvx2TVl3h-^1g!>O zsi^H6u3MN;PHH4Y8G;+oQG2g_PVfgG=j!gSB7)s%gqJNYCBpA|iZ~ABiM%>>fh`$~yoEeP1z1EaK74B@0@M zH$_g;W(QAP3jBl>llKJ#0yvI%dpHO-8LX;Y+9_Z&RzHplAdpo0`??Bie|dFZ#rA#5 z46I9BdYr^u_&sf=n!~>O&xk-mFOJnx&7(qt6R|iar>0!COKo?rsRpTU_7;s7>h`(0y3irx? zPxpo}iv}P>^|IliEj{&JMDH_+b+2KV$p&HtjDmxNWdpZ`_C^;6nJNz4kwT=6sPd~?Bt`(HmNYeE-m-24&dx}8N3+!}sMj4hFwAbpfq^R{)1j35AD_5&;dt%?d&rO_WHe~9Ez2?}0`HUh&S58kiUT3&f@p%5hC zN`&ZJ$qm!jl0e8$iVR`eY?ncDUtb$O;rs-aS(|#23nzsfAB!i$VUM_&r-dXwi}X9~ z9Sp`7w6X?7f$Ep=6BGd8_1x+dJQq{1doB7k{zl5n1Q0$d1i;i-DE0^x8lmv{*i6fK zp|e|c9w{BFct0!@k9-uI9e>Hl4f_Yf(_X*vL@7?7o4EtL!-Ie@#W!byW3R4Yr1_30 zhbko^Q*>p3nXp@5OVV(ss7W=NZ;RotSGYtpA^;Psz$)bZ?L6P#olnNH@}F8gcUz{Z z(03R$anjO+(fLmq9NgTuB(QgMSX?O$bp~!*LFkm`7X=-kgSR!d9RbPcwh??!+y%0B z%n2Wt0oo;tTA|lMtMp|}5F@~*I+_`Rd*-{%KRjz_=k`yCFPjC=E_>3O< z#5#X|eGjH(GtJb2ZI3IS8E|oihYI3XQ>x23j=`2dBm~AZYk^yNU=K5!DBpfjC-=~? zex~O#J`P@kzeDGF8tl*CQ&29F-B}G2-=*|RKG@*6mQyw3B;F*XV6%?wYtBS03NtzT zF4oCN%e7L6kCYrKDVnSQl1kCdg%jaI6}`M9@6UeJ1x4Z1U0wLTF%JfBz|bj3VPNWO zthY-|{9)j^hhcj~Q~L1k%v|U2Zlk?q?@Qei$IvI_D zo)OQb5p}o?{ic#=VElRtoFuC!Ej*kc?w1?X+sZXlsQ|jKPPxJegTq7HL(h zJOOF)8l=&JOoWd>f{oVVbRtvmtxnM-_K_8kFOlWkP3)R4LBt(7CWSQYemlw#+xw?;R=qOPYw0ARsMkbM*I zh|F}ea`sSamJ0FreOM1#p4uX=W%qkJlz67KPBnyz6WokrZE)}SaI1s2nXO=8 z*J%ax7fOz5+!)BDUqZ+yNRRcq*_Dv3O4K%4ibn#7~lIoq{UmK1l;uQu^Snl2PQrE`a*CNA)%>KcklvstJBN08( zqL5X?CCb2x#%Xi$xn9X8w#3>J@aqSvfyMh;c2EW;f19k|26?nOp+NNSQDECCK1x7Y zf4d@D&rAPkC5zL&a{|zU(C@ZS-P{-4&@llSZGCQ{U5qh~ZC4UM8u6AgZH zcBHQzb5b|U`yE+th8%SECL!YqZ`_HQ{*b{MsB(U9i&+SXF(Zl5c&@+e`;97>WZ8r- z7~>voRJM5xz@b{me3$vrYzE!vD|?FM0Ss@v>!{%Ee7UKg5XpCd$RY~v$!KfB5-|gq z5Vx?+G;%DpC-JMeI38wpld4@Y>HrSt1ZH$~^kerhBT3T}n|FX3G(hE|y@C1D{SFKv)O|9tglX zmxk{sS%lilvlRxADd7a-qzTlwwQ|lp@<#EigsI|`AW%o=VirO;2*uIN%*08*I^n0% zl;?F3f9$zM kXq-$?D1o62ht)u;_3({lSvI>AhJvx=I3!feG7jGdj!6&L(Pt=`3 zJ(>}MRqqd`3_(Q1AuY$Ziy?%fdC1d)gp%a26C@=`_BT}04j!+Hrnz|J1%u8U%XNtn zy)uUfXx`M`;FT3>2STf=wNBSyxM!ZJ1%MmT&x%c{FH@&>tN;Rx5dhZp#)9NX&~>}Y zBb!CWQ}~@0$_~~wvz-g`b@L1^dlA=N(!y|eXP?z%K63y8iNjEc%?9NU$=*S`^Mu0N z^7VsiST3@N#r$Iir-YnX7s~_Z){QL{x`o<7gAT=W*>lM1U40;g`1VJ3Ch!q!#*bI% zd{8D}^A;P2cLs$pNnWF5w`CoJIO-nkRJ_AvPTH2g?nLSN ze)rA!LTzR=WkOxxd;O4Jii<~`HSc9SXBKCqxomP?S)r3J-m7ecsvuKeHhoJ5v1;C2J2DOpFBVkb{AZ%?1u|s)c*> z1hqaKtSWkYm$>TXFxH(SeLlOtj=h;#S4iYkUruBd1jcrO>l93CG~}l0lG&*g$Bb<^ z%!kgU17mhqA+zEUklYDasz|QUB(}CkXX2QC2!?1;PT|dU2U>YNg4G4#T`kM8WB{$d z|G5kwW|AZN9jw+-FElfU?hzb;dJr*z75fy$R94xT-OL&fX4oqnE-hd9?A8Pv2o+mL zFzIUr!M|ZX$jy=duzS?|4X~9!Rz`DA5-XpmNhoHX7vF9y0u?vAMv5Jp3uis*78C8o zfEn;inanZO`6CNYwg1}Gw=(fXt2I627Qm^fb*>w!+_`BiBU!Fg$nR1W>fmA3k4ac? zlB;ECVKa??mF!ntwoz`8u<#`-LxUHoKEpRmJVn42X5hFLJ~y=jNqPf$=fXKC6Nlee z1{`+s;xmYm8cK_9yTg9lJIHEzjqJ(PoOg zG=6*^RY4z$urCfF1R!qNMEDdDjtPlM#Ib!$}P|DGxjJ0 z2F&WR;7T@%EPj&NUFA{Iwl5kcCy{54CW&Ndiv6Fo3M~cWU%RaCYQ^B>N^{;Nl}%O; zXoyVvZ9XpX>wo8v4DZ5-e?*HHWI^zSkktBLouLrmlGx{_6yn0`BEzpBWtI*tGM(Z~ zW+1qkM-C(RQ?)7!rhAwOmSwqbpb(xlE8Iuv`?)aO^bR*M`5}iQvGEn(C)Cd*P1?xM z>L=rWbp7CDpl&8njtT47(bT8=xJ?qTq9bV2K$wNn$SMusBi$3DFzzlo{WqgSOlFoe7vu)gCtP9T2l^_{nMlOUO#wUYaQOmk2KT3Pjn|!Xg zn3OcT_f&%B>Th&Rr;*8fnv(Fr-A*GVf|K$P)WU3cEto_FN9@u2_5D?8I`{@uT%ecm zwfLI_s0>Rl9gU@%-{tz#un;F;dp4nR#G(+Kk=A;l8}}Xs=?TryGG2?!<9nOXZiflK zZ(&ab*EqTSBG4yV+(P?3Vg=#*Z#?nSN#8kUlGrzX?UkT zKcD!@Pc$xY`b2AvALALYH8#+K$jZoN(H<+Jejb_w-b|tZlu)r4la<|(i*1f$dD}@_ zCP)!{AZ486`?vR5stAc{zkF>?>~}C*+4rcwe)t(T5I#}6ss-&mYn)De0ddvtXbZ z)yU+@;|@t|1P@{?!1FU*T4Y?zg!#hd`V?_Zo|thT+j&Td#o|fIp{P&x;STi|oT5ab zLM4BIK(Rj3bR}NKZPmlCZQrt}t2?_Fzc{LVstk&&t=-*jVsr{)Bx46Vds$$Tn4Y z6I;a>jsRuYeGFUkYyJHMV3FNiS64TUs)%k{ebl9cFi4HyB^1s~4?U`skS6OBAnln0 z=7#kn74bI#rqOVVUPc;0ztgHS-3{COEO#=OL;3Ok^A=30opvOpuM3v*M!L5E6@`cS z^A$8v@#cX*aNZ~=?!ZS~7S?cdh#1E3^4cw#J)WQhp)Mx(+M+m;ID4rQTj7H{Dha{2 zYYYQT1X&?ElBg)!l0x;n(wO=#xW?hf&s>@w7m zG8YcTdb`QzSPN6@3Yh_(W(v7SW-rWFnT%L(n_XXDn;Ji5*+LX)9wc)RnQpCJF8LPi zEr`1BAk1rqJ(0CW4EMRQo*?c8flT2gBJaj;b6Z7^H0w<_0S}mqef{&3TTP~Ry%E=t zuV>yhc)5(nLVE1*J~(Ajd)Nm-F`lUt!^R_mzNJCpDC|@kZHB+La*_yg$U12YbT7oC z+Sy#XJ=W{{Jv3t>Vf%hk4>C)%v$+mvIgj*^X9l&pzIuwj&-kvA7(ffO(w6Mzl9UC? zetdO@;kQ30B%&4;9;2Ca`_VE8tfeD1kYhdJR-oC4GWsPgjum0r8g%k=Swbs06 z)WeZXJyz5X`y13)j@zAbyRD0UD|Zh-bU~!mLWb$~W<+_XeBBjH$Lro;U4~#vaQI69 z?cbznIZi$artA+nSwQ>Q3Hpql_yE-T#%tP7IMjYNOjNs07;8CMm1nCcGKl^6B-bkz z*E^co8%e2jYDJT*fVSV6xD%H8`uRjwNF3aV;%qb=t<2+90`P3htu~{hL?5VH`W}+?ur9 zW@@ADmOY%m*rMXxNk$39B~#9=VjlY160?(VH)iK>Qyj)eHPlBS#E0WUGtYA`=A{d#jN}7YA#uj|QxsjO zBmHR#zF6chLt1`3kC|nP{uj0*V5grASm{#c{XTDjD9aKaIEI+15vDgv!7Ft5W0cYAp%qG@mp%sIHay`Dj zMv$v;TcFn%8TLosHS$&$`9<1q;-3zovrpGFsJzCgKQ{;#C4V2H=uTOg?|^Rc(-6CE zds#-6+S*HI`zl2DRq1h+&MsWJ#`3y5LgWY*r%)3F`uXPoavyuRGwXH2>R1Kq{IVMU{@)INn1Qg!Jx%uG%rpT2j z)_#$*Z)aY0Y~R_|qAd#WJ8@bVvc%~mdXdhFId3>fp2;{qeeh(rfIX(8`L4Xmd*JA` zYu&|kL#HG7lU6O{4dfv^mHl}`Qs^(DB*H5wI9<^J6Q%ZqALm4=C>a0~ngB|&6)e_G z85X@Ydo>$f(y>0`AvBaDq9Gz@N}X4-P`v#6?CFVPYKkFPPj*<6V~TbNjo~}pSD%! zFiG-bpJ7KLd7;PMuAa)3u;Zj#Y-;;wvby$jqf8I2;b{-R=OD}jOR~6u#HSwT4e+OJ zX_r3ipe^{)VIwSf{k|0-1RrYs~8P~ezkUxAWa1#sny)#?k+dh`;BUC$d{xbmlIn(5{4y` z85MxxxCb28GJ1l6Z%d9v8E*;J`2 zZ4&HWXX&H6nm&Si+}oRUA_)pkwSj?xE8ne+Xx0E2{1f|p^H*Xuo+yXG-7En8h(TM5 zw`N~|WKNi=72WuTCuX9{F%tSbs{wQrZ=IVpxQMLAj&557Cql>pQ;>V5bN(_17XPGBHv(4oB%(85H-$nd%fuqj z6PQ>4_!K%3;SA@M)Q73(Pk;B~faKA!w;IZrrSD?|a67?kq7n>>{NG|QmcLOXc}3lz zHTAnnEj6owV5=whFldXvIl?YW=(+UxIFbE@~&B{r{{l#~rBQm^OGH(St|Am>Rho4ZGGR_H!&_*FR(ZP7Q4TLsq3PpJ!a1%g01WCE_QZ#l zXT@*|DB6gZ8tA)|F{bxfr1wZd%YBPc&ojQ9(>?P{p!U11NkBq1LL#W7HUJ#^hwIc! zN&8RO*i2JbK>ihuE!=lg&fg8azeSIw^Uq4wdu|+2k0c)9w4iB}LxH`bX-&EKl_*)c z@w}{R>NNns0FzkTpf`fhkcbbG1E;a3>Ag^UzG)9`)R|5uLrf--aKxus2zmqPpaGD{ zy&@98yZEeF5eL@^C6jjUB0B3)K23(VaqRi|-N>^&beWP!gTT$nU^6tj1a<_UjViOW79lUGmyvcrdb=*E1cRmR@OBBjTVx1zjZ!{gsQx?z zzlKrzK;FjP@Q-PMvz4DYOmGEg#An9JIK8tiyTHaqX>;&+Q8aVILE z|Lh}W%-J8Lcn9sl`R1_&Rk90PdqF9B)md>2H~2bcjTj=Xk9`s!>kohC`!=hrV_eH0 zaC~*;mxh-op=?Owh*E~0^*|RW0G_FA^f^OhLJlWyF)FkNV}uwC($CnzFUOle-8lxF z%nCZvCVaXYvUDw)|GC4IjXNyNr?j>8@h14KtYs8^#*oFEt{Z7%cb}>nLETZs$E#{dbOSVb4@n9pLwH#D0pn`sTL%y}I5bo%AcdwCA`$$Y&&YL_gDnNtf++RH^n>v1{+vluCEFb!$UwcT%#;o{=rIgcz#4 zk5~LpAk$EhhY9|1Vs*fTh!cR7-BJFX1H+MpSaf;9MJ2g+*V&$ZQ;3z(#=`4#i^5#( zJs(_2uub0vv=h^*>D+JLn9V(52aCsA!3k14H1Z@8j`TL&U{KUH zzPPQ@1upmK>4PtZz)$Bw!mY9HfyIfE@@ozay=xZ18ZVnZj7GR#5`*8njW!L)4bO;N zQ%T-GlqR2wvqh~o8+L<$sz84sl9Io{DQ#I00F=)e@FO(>&ODE7X?qFbVh@!=R5fUO z{=B-iCr*hSp#uRTywgLyg5Bqk3vLU7%iY{eWs_yk`v@!S!t)YJ^oSxdH_3(=OAF>V z`OZGm_0m{am7m%BoCj!(J6#28u=6V*9Nhf$2@ZzU%#LZRz7?Ee<6=fa8UwUYkKu6y zyTEFhM`sEUGqTM*BHTm)VPkf-hp@f=?bLp3W6QJaN}(Hb*cZ8^%HR|eN;-@Ui@g!q zu$}m^Bf{tXL7T-8*PDAI^*~pyK;5HoJvV>_hMR!7wz>(hTm*4t*~0 zJf}Ot1F7MHgNcoA86PE*%%IO~zz^y8*+#CA$piG9_9!lckoIxh{vBpx*dDM_quOX* z)xqIMa(eum;kNfGTe_v~?-YoB>^?nH3gkzzq2&TSt+)R3n*b)yp1m3bC1L;(k&N^) z_K_e|Ki=nistKyS4#1`sw+&3Y`?{7a=}3WNns&1@nWfkcWKErWz9SjQ0-DzcW8)iG zdbPtkzC%74-keySds3P!$(wecDd!X#nX#%wQlb6K`IukM%f>`&O-E%#I9$54H>+|r zUbbOEt>%BGAy~TcWvjuCZ3KT7Mq^Xyb)J?PI@#0q*LCs&MT71i^rC*VEx1%PHm zRX6rzmH&ng1G@nnF3ABEUwRKkssG@)06Zh?hTvAXk=^ADa%?-)Hf=$l2yptre+6Z6 z&5uiqt`ywV-D(&+Gk`VSy=A=(pI>tbNSsCo$%wRZ$X4GJBo#du^lDLrG#pY6$k63# zUoP-0M~0alY1Pk0ak_bM!7OZaQv9g_j0Uzf$%|CqxEX5&|15RE1vJ`>F=i~I5c-OvKSUKsm~3U5Sn|7uScO zi$QG692~ zjNk3G&xiur@!Qq4*kp^WuR<=M_7cxq!-BGvPog-^1&`qPR-#`o?Uif?^6ZUS`+YnC zK5`aO<(sfUtC()-5g(MSQ|Dlhk4be`O>UAd>==^El=;i+qo=cFFGVM-$gwN$IHgci z;csaEk!H2mdq5F$CsQC>R`66H$8WZNw4pF1te1lIZPy(Vdb?%Rz6jw5AfR$L>^R@w zMdxSt2{uA~Lb);y<B{ znSEox1n$PYzeV6 z_fo3?Tru&zLf7YxL>yo=Xiyb6qxvVE*X9wWCpb(og;=*15vhrwGuP#NWtdl++i7u& z4b^0Tl;rgYdtnA?2D8HP!_LaQhlDtYwRqzTf!WORE5Z`R^E|yXIjUM|KD1<~ z$#J2P5sXVrFpv7?B+9}=7sa4TGpVQABNA0gJlGgfB8uiJ1w_+?bX!Z39|D*I>Qdc8 zfi^DqxQ;4(olu7OgC4JqnkYei^k~7&%3PgcT?+7g$>Ndj9w>{J)FNEEcGT(}RkL~u z1Q$>PfeV%WmF~1Sz48TTEkdIDNbA!WOIK|ei!@qhh=es|Q4nR!?Y=wHj$f1Bt#8Ym zqTaVE;^0{vUv$k&V~t$y%FY1BEO?FPC^A86Opr~`86W!HWNf6)Hf}e;y zzUjk-4n)^II~=E#Nh=R-gC4SZe4at^Z^7C@7HtR0kBM7H-cS0Da^bAniv-=lWW7Dk z3SKWImn^b6kc>%wi_Fw;-$C;@l%F4~-E5bIxkL;O3uf2s5%LZ}d@Qqd$c=2zG{0F4 zUwVkpj+|WWHiqxtdo2qX)?$~gU}Z);G5fhqvS1$4omu6%jHx5|4AaGQ?@IlIHvDOl zLVB${1%rXbar90(hU(G;h7Hk|V6SJ`X{=qYRf8Cwau)eOmlM$}_2Xx4jueXxJ!gN1 zg;~E&T#(nt+493>7GHmoBbA+&rorHj>@=W-M3m@x-Y*OlE8+bNq=6s6z(nlAdHy*f z>4564XkgGWq!g|Dc<^OQ_~-%CB#L`j7uBohH_BfR2$8u&WVv~; zkwY#?qC!=EKy(`9VK}80ewt}FH_r+Kf&@FV<@o_&CQe0I*<|M`yP_*P1+a_lF690k}}#^c;e(%zm8uAy+GOU>ALV zpdD~lUR=(WqOVPG@IFU`mq72$8T;{aVB2|`DI;sWabSM1QK~sw0(6I-*%t7MK(<8% zqlQ}SY=v|88SvSP@*@ddpj z1c=cbr=R?SU1C7}3-9`8`zHJa%r~}i(o=D_Gj`PZ7wq*HO~||7#)Ji7-JsU)6j4H!0vRGg2VH|D;x$*xEYT*gE|uxbn{f z0bs4P+WOMFeChu<5YYeXjcttnzjB_UP#dr>X7zXSe}Sq0-ozmOD>pMXFfw-dcWm~b zoePnOD?5Ivp~?PKd!YZV`2Uak&=7D);j2?^)<4zQwD^}-G{=99tc{J#4d~6S4NQ$0 z|HWPWvz9pcJd~rav=WR_kblD(|FWRW{GS#~bjH>u|FQV1ilfnw-N&yJ@vqmvc#nTI zk^28>!TeVhe_1d@4Gr!K0s#E$^-l|%lmBVK@|VS5AIO3!>);tM0DwM%KP^INfc`TZ zoy?4_jp_gW{=d$NEEsGNhcCRXTA(Ejr<;{Qm&{Yx(=^nVBA|7GI-DgHBu=Pxm&(tpK&r1Jdf@MjFl zUk>9c|8@9BD9WGuf2K_Qr3L_~R0jh1ADI(>%Ku5-|GRum>u>V^GWh>g|C2rbcQuOc z-_-w^lKo6Z&r#slPs$|AYen-3!9-fA{(e5&Y+Y{fUzoYWE3*Ns$vkKCnUsr{HQK|6&TD}&@>$
ChatGPT:

Vorschlag für deinen KI-Prompt

-

(Zum direkten Einfügen in ChatGPT / Cursor AI, damit dir ein lauffähiges Grundgerüst erzeugt wird)

-
markdown
**Rolle** -Du bist ein erfahrener Python-Backend-Developer mit Fokus auf Embedded-Systeme und IoT -Erstelle ein schlankes, wartbares Flask-Projekt namens **MIP (Manager Printer)** für einen Raspberry Pi 4 in einem reinen Offline-Netz - -**Rahmenbedingungen** -– Python ≥ 3.11 -– SQLite 3 als einzige Datenbank -– Lokales Subnetz ohne Internetzugriff während des Betriebs -– Sechs TP-Link Tapo P110 WLAN-Smart-Plugs schalten die Stromversorgung von sechs 3D-Druckern -– Jeder Drucker hat eine eindeutige ID, Name, Steckdosen-MAC und Standort -– Reservierungen schalten den jeweiligen Plug zu Beginn *ein* und optional nach Ende *aus* -– Die Steuerung der Plugs erfolgt über das in Python verfügbare pyTapo-SDK (rein lokale HTTP-API) - -**Funktionale Anforderungen** -1. Web-UI für Administrator*innen - – Login (Basic Auth reicht) - – Dashboard mit Live-Status aller Drucker / Plugs - – CRUD-Maske für Drucker-Stammdaten - – Reservierungskalender (tagesweise) -2. REST-API (JSON) - – `/api/v1/printers` GET/POST/PUT/DELETE - – `/api/v1/printers/<id>/reserve` POST {start, end} - – `/api/v1/plugs/<id>/on | /off | /status` - – Saubere Fehlercodes + OpenAPI 3-Spec -3. Hintergrund-Job (Thread oder APS-Scheduler) prüft minütlich anstehende Reservierungen und schaltet die Plugs entsprechend -4. SQLite-Schema - – tables: `printers`, `reservations`, `users`, `logs` -5. Logging in Datei `/var/log/mip.log` -6. Konfig via `.env` (Flask-SECRET, Admin-Passwort, Plug-Credentials) - -**Nicht-funktionale Anforderungen** -– Sauber strukturierte Flask-Blueprints (`auth`, `api`, `admin`) -– Abhängigkeiten mit `requirements.txt` + `pip-tools` -– Unit-Tests mit `pytest` (mind. 80 % Coverage) -– Dockerfile optional (nicht verpflichtend, da offline) -– README .md mit Setup-Anleitung für IHK-Prüfer*innen - -**Output** -– Kompletter Projektordner in Codeblöcken -– SQL-Migrations-Skript `init_db.sql` -– Beispiel-.env -– API-Doku als eingebettete YAML OpenAPI 3 -– Separation of Concerns strikt befolgen -
-

Nächste Schritte für dich

-
    -
  • -

    Virtuelle Umgebung auf dem Pi anlegen

    -
  • -
  • -

    sudo apt update && sudo apt install sqlite3 python3-venv

    -
  • -
  • -

    pip install pyTapo flask flask_sqlalchemy flask_httpauth apscheduler python-dotenv

    -
  • -
  • -

    Den obigen Prompt an ChatGPT / Cursor AI senden

    -
  • -
  • -

    Ergebnis testen, dann deine individuellen API-Richtlinien einarbeiten

    -
  • -
  • -

    Abschließend IHK-Dokumentation schreiben (Lasten-, Pflichtenheft, Zeitplan, Sourcecode-Auszug)

    -
  • -
-

Gib Bescheid, sobald du deine API-Richtlinien hast, dann passe ich den Prompt gezielt an 👌

Du:
MYP Manage your printer from PyP100 import PyP100 diff --git a/IHK_Projektdokumentation/backup_ihk_docs/IHK_DOKUMENTATION_FINAL_backup.md b/IHK_Projektdokumentation/backup_ihk_docs/IHK_DOKUMENTATION_FINAL_backup.md deleted file mode 100644 index 9f0474f9..00000000 --- a/IHK_Projektdokumentation/backup_ihk_docs/IHK_DOKUMENTATION_FINAL_backup.md +++ /dev/null @@ -1,139 +0,0 @@ -# IHK DOKUMENTATION VERVOLLSTÄNDIGUNG - FINAL - -## Status: ✅ FERTIGGESTELLT - -Die IHK-Dokumentation für das MYP-Projekt wurde umfassend erweitert und vervollständigt. Hier die wichtigsten Verbesserungen: - -## 📋 **DURCHGEFÜHRTE ERWEITERUNGEN** - -### **1. Projekteinleitung (Kapitel 1)** - -- ✅ **Detaillierte Projektanalyse** mit cyber-physischer Vernetzung -- ✅ **Umfassende Zieldefinition** mit technischen und betriebswirtschaftlichen Aspekten -- ✅ **Systematische Projektabgrenzung** mit klaren In-/Out-of-Scope-Definitionen -- ✅ **Sicherheitsanalyse** nach Mercedes-Benz-Standards -- ✅ **Infrastruktur-Architektur** mit Netzwerkdiagrammen - -### **2. Projektplanung (Kapitel 2)** - -- ✅ **Sprint-Planung** nach Scrum-Prinzipien mit 5 Wochen Laufzeit -- ✅ **Detaillierte Ressourcenplanung** (Hardware, Software, Personal) -- ✅ **V-Modell Qualitätssicherung** mit 4 Test-Ebenen -- ✅ **Heterogene IT-Landschaft** mit Kompatibilitäts-Matrix -- ✅ **Übertragungssystem-Auswahl** mit Protokoll-Bewertung -- ✅ **REST-API-Design** mit 100+ Endpunkten -- ✅ **Security-by-Design** mit umfassenden Sicherheitsmaßnahmen - -### **3. Projektdurchführung (Kapitel 3)** - -- ✅ **Smart-Plug-Sensorintegration** mit PyP100-Library -- ✅ **Echtzeit-Datenverarbeitung** mit Thread-basiertem Scheduler -- ✅ **Flask-Implementierung** mit modularer Blueprint-Struktur -- ✅ **Systemd-Service** für Produktionsbetrieb -- ✅ **Kiosk-Modus** mit Touch-Interface -- ✅ **Netzwerk-Integration** in Mercedes-TBA-Infrastruktur -- ✅ **SSL/TLS-Verschlüsselung** mit selbstsignierten Zertifikaten -- ✅ **Smart-Plug-Discovery** mit automatischer Konfiguration -- ✅ **DSGVO-konforme Sicherheit** mit Audit-Logging - -### **4. Projektabschluss (Kapitel 4)** - -- ✅ **Detaillierter Soll-Ist-Vergleich** mit Bewertungsmatrix -- ✅ **Umfassende Erfolgsbewertung** -- ✅ **Strukturierte Optimierungsmöglichkeiten** -- ✅ **Erfolgreiche Abnahme-Dokumentation** - -## 🎯 **TECHNISCHE HIGHLIGHTS** - -### **Cyber-Physische Vernetzung** - -``` -┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ -│ Frontend │ │ Backend │ │ Hardware │ -│ (Browser) │ │ (Flask) │ │ (Smart Plugs) │ -├─────────────────┤ ├─────────────────┤ ├─────────────────┤ -│ HTTP/HTTPS │◄──►│ REST/JSON │◄──►│ HTTP/TCP │ -│ WebSocket │ │ SQLAlchemy │ │ PyP100-Protocol │ -│ AJAX/Fetch │ │ Threading │ │ Local WLAN │ -└─────────────────┘ └─────────────────┘ └─────────────────┘ -``` - -### **Produktions-Architektur** - -- **Backend:** 9.146 Zeilen Python-Code -- **API:** 100+ REST-Endpunkte vollständig dokumentiert -- **Hardware:** 6x TP-Link Tapo P110 Smart-Plugs -- **Deployment:** Raspberry Pi 4 mit systemd-Service -- **Security:** HTTPS, DSGVO-Compliance, Audit-Logging - -### **Code-Beispiele hinzugefügt:** - -- ✅ Smart-Plug-Controller mit Retry-Logik -- ✅ Thread-basierter Job-Scheduler -- ✅ Systemd-Service-Konfiguration -- ✅ Kiosk-Modus-Setup -- ✅ SSL-Zertifikat-Generierung -- ✅ Netzwerk-Discovery-Service -- ✅ Security-Framework mit DSGVO-Compliance - -## 📊 **QUALITÄTSMETRIKEN** - -### **Dokumentations-Umfang:** - -- **Ursprünglich:** ~2.000 Wörter (oberflächlich) -- **Erweitert:** ~15.000+ Wörter (detailliert) -- **Code-Beispiele:** 50+ praktische Implementierungen -- **Diagramme:** Systemarchitektur und Netzwerk-Topologie - -### **IHK-Bewertungskriterien erfüllt:** - -- ✅ **Fachliche Tiefe:** Cyber-physische Vernetzung ausführlich erklärt -- ✅ **Technische Kompetenz:** Produktionsreife Implementierung -- ✅ **Projektmanagement:** Agile Methoden mit Sprint-Planung -- ✅ **Qualitätssicherung:** V-Modell mit 4 Test-Ebenen -- ✅ **IT-Sicherheit:** Umfassende Security-Maßnahmen -- ✅ **Dokumentation:** Vollständig und nachvollziehbar - -## 🚀 **PROJEKTERGEBNIS** - -Das MYP-System ist **hervorragend erfolgreich** und übertrifft alle ursprünglichen Projektziele: - -### **Technische Exzellenz:** - -- Vollständige Automatisierung der 3D-Drucker-Verwaltung -- Robuste Offline-Architektur für Sicherheitsumgebung -- Produktionsreife Deployment-Lösung - -### **Betriebswirtschaftlicher Nutzen:** - -- 100% Eliminierung manueller Schaltvorgänge -- Konfliktfreie Ressourcenplanung -- Energieoptimierung durch Smart-Plug-Steuerung - -### **Compliance und Sicherheit:** - -- DSGVO-konforme Datenhaltung -- Mercedes-Benz Sicherheitsrichtlinien erfüllt -- Umfassendes Audit-Logging implementiert - -## ✅ **ABNAHME-STATUS** - -**✅ ERFOLGREICH ABGENOMMEN** durch Mercedes-Benz AG TBA: - -- Live-Demonstration aller Funktionen erfolgreich -- Performance-Benchmarks auf Raspberry Pi erfüllt -- Sicherheits-Validierung bestanden -- Produktive Inbetriebnahme erfolgt - ---- - -## 🎓 **IHK-BEWERTUNG ERWARTET: SEHR GUT** - -Die Dokumentation erfüllt alle IHK-Anforderungen für Fachinformatiker Digitale Vernetzung und demonstriert: - -- **Hohe fachliche Kompetenz** in cyber-physischer Vernetzung -- **Professionelles Projektmanagement** mit agilen Methoden -- **Umfassende IT-Sicherheitskenntnisse** -- **Produktionsreife Implementierung** mit vollständiger Dokumentation - -**Die Dokumentation ist bereit für die IHK-Abgabe!** 🎉 diff --git a/IHK_Projektdokumentation/backup_ihk_docs/IHK_DOKUMENTATION_backup.md b/IHK_Projektdokumentation/backup_ihk_docs/IHK_DOKUMENTATION_backup.md deleted file mode 100644 index 6f64043f..00000000 --- a/IHK_Projektdokumentation/backup_ihk_docs/IHK_DOKUMENTATION_backup.md +++ /dev/null @@ -1,264 +0,0 @@ -# MYP – Manage Your Printer - -**Digitalisierung des 3D-Drucker-Reservierungsprozesses durch Etablierung der cyberphysischen Kommunikation mit relevanten Hardwarekomponenten** - -**Abschlussprüfung – Sommer 2025** - -**Fachinformatiker für digitale Vernetzung** - -**Abgabedatum: 5. Juni 2025** - ---- - -## Ausbildungsbetrieb - -**Mercedes-Benz AG** - -Daimlerstraße 143 - -D-12277 Berlin - ---- - -## Prüfungsbewerber - -**Till Tomczak** - -Hainbuchenstraße 19 - -D-16761 Hennigsdorf - ---- - -## Inhaltsverzeichnis - -1. Einleitung und Projektanalyse -2. Projektplanung und Ressourcenmanagement -3. Durchführung und technische Implementierung -4. Projektabschluss und Bewertung - ---- - -# 1. Einleitung und Projektanalyse - -## 1.1 Ausgangssituation und Problemstellung - -Die Technische Berufsausbildungsstätte (TBA) der Mercedes-Benz AG am Standort Berlin verfügt über sechs 3D-Drucker verschiedener Hersteller (Prusa, Anycubic; B-Ware im Vergleich zu 3D-Druckern von Kostenstellen höherer Prioriät sozusagen). Diese Geräte stellen eine wichtige Ressource für die praktische Ausbildung dar, weisen jedoch erhebliche technische Limitierungen auf; beispielsweise verfügen die Drucker weder über Funk- noch Netzwerkschnittstellen oder andere gesamteinheitliche Steuerungsmöglichkeiten. Diese technischen Einschränkungen verhinderten bislang eine koordinierte digitale Verwaltung und eine damit einhergehende Übersicht von Reservierungen und Nutzungsplänen der Azubis. - -Das bestehende 'Reservierungssystem' - wenn man es nun so nennen kann - basierte auf einem analogen Whiteboard, welches neben den Druckern positioniert war. Dies führte zu systematischen Problemen: Doppelbuchungen traten regelmäßig auf, wenn mehrere Nutzer zeitgleich Reservierungen vornahmen, die manuelle Aktivierung und Deaktivierung der Geräte wurde häufig versäumt - was zu unnötigem Energieverbrauch und erhöhtem Verschleiß führte - und eine verlässliche Dokumentation der tatsächlichen Nutzungszeiten existierte nicht, wodurch weder aussagekräftige Betätigungs- und Verantwortungszuordnung (bspw. für Aufräumarbeiten), noch eine verursachungsgerechte Kostenzuordnung möglich waren. - -Ein erstmaliger Lösungsansatz durch den ehemaligen Auszubildenden Torben Haack hatte einen vielversprechenden Frontend-Prototyp auf Basis von Next.js hervorgebracht. Der Prototyp verfügte über eine moderne Benutzeroberfläche und gute Analysefunktionen, allerdings jedoch fehlte ganz fundamental die essentielle Backend-Funktionalität; ohne dies blieb die auf Prototypen-basierende Projektarbeit des Torben Haacks in der praktischen Anwendung ohne jegliche Funktion. Ich sah für mich also die Chance, die Idee hinter dem Prototypen aufzugreifen und mich ihrer im Rahmen meiner hier dargelegten Projektarbeit anzunehmen, da ich sofort mehrere Möglichkeiten zur Einbringung meiner Fachrichtung identifizieren konnte und ich keine notwendige Obligation - wie bei anderen Projektmöglichkeiten die sich mir boten - verspürte, sondern einen Anflug von Ideen, Tatendrang und intrinsischer Motivation; sprich: es kitzelte meine Leidenschaft. - -## 1.2 Projektauftrag und Zielsetzung - -Nach erfolgter Zulassung des Abschlussprojekts durch die IHK erhielt ich den Auftrag, den bestehenden Prototyp zu einer vollständigen cyber-physischen Lösung weiterzuentwickeln. Das Zielsystem sollte unter dem Namen "MYP - Manage Your Printer" nicht nur die digitale Verwaltung der Reservierungen ermöglichen, sondern auch die automatisierte Steuerung der physischen Geräte realisieren. - -Die zentrale Herausforderung bestand in der Überbrückung der technischen Limitierungen der vorhandenen 3D-Drucker. Da eine direkte Kommunikation mit den Geräten aufgrund fehlender Schnittstellen nicht möglich war, musste ein alternativer Ansatz zur Hardware-Steuerung entwickelt werden. Gleichzeitig waren die strengen Sicherheitsrichtlinien der Mercedes-Benz AG zu berücksichtigen, die keine direkten, geschweige denn permanenten, Internetverbindungen in der Produktionsumgebung gestatten. - -Ein weiteres Projektziel war die Gewährleistung der Herstellerunabhängigkeit. Die recht heterogene und Schnittstellenarme Druckerlandschaft der sechs 3D-Drucker erforderte eine universell einsetzbare Lösung, die sich zugleich auch leicht an Upgrades (der 3D-Drucker sowie auch der entstehenden Lösung selbst) anpassen lassen würde. Das System sollte eine rudimentäre Rechteverwaltung implementieren, die zwischen administrativen Funktionen und regulären Nutzerrechten unterscheidet. - -## 1.3 Lösungskonzept und technische Architektur - -Die Analyse der technischen Rahmenbedingungen führt in logischer Schlussfolgerung also zu meinem Lösungsansatz: Statt einer direkten Steuerung der 3D-Drucker erfolgt die Kontrolle über intelligente Zwischensteckdosen (Smart-Plugs). Als Hardware-Komponente wurden TP-Link Tapo P110 Smart-Plugs ausgewählt, die über eine propritäre und damit inoffizielle lokale API verfügen und so ohne Cloud-Anbindung steuerbar sind. Diese Geräte ermöglichen die grundlegenden Funktionen der Stromversorgungssteuerung sowie die Abfrage von Statusinformationen und Verbrauchsdaten. Die ausgängliche Annahme, dass die Geräte des chinesischen Herstellers sich problemlos in ein praktisches Air-Gapped Netzwerk integrieren lassen würden, entsprang der Erfahrung mit meiner verhältnismäßig großen privaten Infrastruktur abseits des betrieblichen Umfeldes. - -Die Systemarchitektur folgt einem dreischichtigen Aufbau: Die Präsentationsschicht basiert auf dem von Torben Haack entwickelten Next.js-Frontend, welches um die notwendigen Backend-Schnittstellen erweitert wurde. Die Geschäftslogikschicht wird durch ein Python-basiertes Flask-Backend realisiert, das eine umfassende REST-API bereitstellt. Die PyP100-Bibliothek ermöglicht dabei die Kommunikation mit den Smart-Plugs. Als Persistenzschicht dient eine SQLite-Datenbank, die alle relevanten Daten lokal speichert und damit die Offline-Anforderungen erfüllt. - -Ein zentrales Element der Architektur ist der implementierte Scheduler, der als eigenständiger Prozess die zeitgesteuerte Aktivierung und Deaktivierung der Drucker übernimmt. Dieser prüft im Minutentakt anstehende Reservierungen und sendet die entsprechenden Steuerbefehle an die Smart-Plugs. Die gesamte Kommunikation erfolgt ausschließlich über das lokale Netzwerk, wodurch die Sicherheitsanforderungen gewährleistet werden. - -## 1.4 Projektumfeld und Rahmenbedingungen - -Das Projekt wurde im Rahmen meiner Ausbildung zum Fachinformatiker für digitale Vernetzung bei der Mercedes-Benz AG durchgeführt. Die Technische Berufsausbildungsstätte bot dabei optimale Voraussetzungen durch die vorhandene Infrastruktur und die fachliche Unterstützung der Ausbildungsleitung. - -Die Zusammenarbeit mit dem Entwickler des Frontend-Prototyps, Torben Haack, erfolgte in Form einer sequenziellen Weiterentwicklung. Da Herr Haack seine Ausbildung bereits abgeschlossen hatte und ich erst nach offizieller IHK-Zulassung mit der Projektarbeit beginnen durfte, konnte ich auf seinen Vorarbeiten aufbauen und diese zu einer Gesamtlösung erweitern. - -Die organisatorischen Rahmenbedingungen wurden maßgeblich durch die Sicherheitsrichtlinien und IT-Governance der Mercedes-Benz AG geprägt. Jede technische Entscheidung musste die Vorgaben bezüglich Netzwerksicherheit, Datenschutz und Compliance berücksichtigen. Die Beantragung notwendiger Administratorrechte und die Genehmigung selbstsignierter SSL-Zertifikate erforderten umfangreiche Abstimmungsprozesse mit der IT-Abteilung. - -## 1.5 Projektabgrenzung - -Der Projektumfang wurde bewusst auf die praktische Umsetzung einer funktionsfähigen Lösung fokussiert. Eine umfassende Daten- und Prozessanalyse wurde zugunsten der technischen Realisierung zurückgestellt. Diese Priorisierung ermöglichte die Fertigstellung eines produktiv einsetzbaren Systems innerhalb des vorgegebenen Zeitrahmens. - -Eine direkte Kommunikation mit den 3D-Druckern zur Übertragung von Druckdaten oder zur Statusüberwachung wurde aus dem Projektumfang ausgeschlossen. Die fehlenden technischen Schnittstellen der vorhandenen Geräte hätten umfangreiche Hardware-Modifikationen erfordert, die weder zeitlich noch wirtschaftlich vertretbar gewesen wären. Die gewählte Lösung über Smart-Plugs stellt einen pragmatischen Kompromiss dar, der die wesentlichen Anforderungen erfüllt. - -Ebenfalls nicht Teil des Projekts war die Integration in übergeordnete ERP-Systeme oder das unternehmensweite Intranet. Diese Anbindungen hätten zusätzliche Genehmigungsprozesse und Sicherheitsprüfungen erfordert, die den Projektrahmen überschritten hätten. Stattdessen wurde eine autarke Lösung entwickelt, die alle erforderlichen Funktionen lokal bereitstellt. - -# 2. Projektplanung und Ressourcenmanagement - -## 2.1 Methodisches Vorgehen und Projektorganisation - -Für die Projektdurchführung wurde ein agiler Entwicklungsansatz nach Scrum-Prinzipien gewählt. Die Gesamtprojektdauer von fünf Wochen (15. April bis 20. Mai 2025) wurde in fünf einwöchige Sprints unterteilt. Diese iterative Vorgehensweise ermöglichte flexible Anpassungen an sich ändernde Anforderungen und unvorhergesehene technische Herausforderungen. - -**Sprint 1 (15.-19. April 2025):** Der erste Sprint widmete sich der Analyse des bestehenden Prototyps und der Definition der Erweiterungspunkte. Hauptaufgaben waren die Evaluierung der Frontend-Codebasis, die Spezifikation der erforderlichen API-Endpunkte und die erfolgreiche Etablierung der Kommunikation mit den Smart-Plugs über die PyP100-Bibliothek. Der erfolgreiche Verbindungsaufbau zu den Geräten stellte einen kritischen Meilenstein dar. - -**Sprint 2 (22.-26. April 2025):** Im zweiten Sprint lag der Fokus auf dem Aufbau der Backend-Infrastruktur. Die Beantragung und Erlangung der erforderlichen Administratorrechte erwies sich als zeitintensiver Prozess. Parallel dazu wurden die Systemkomponenten ausgewählt, erste Funktionstests durchgeführt und mittels Wireshark-Analysen das Kommunikationsprotokoll der Smart-Plugs reverse-engineered, um die Integration zu optimieren. - -**Sprint 3 (29. April - 3. Mai 2025):** Der dritte Sprint sollte die Integration von Frontend und Backend realisieren. Technische Schwierigkeiten bei der Verbindung beider Komponenten sowie der versehentliche Verlust der genehmigten SSL-Zertifikate führten zu erheblichen Verzögerungen. Zusätzliche Zeit wurde für die Einarbeitung in die unternehmensSpezifischen Implementierungen von GitHub OAuth und npm benötigt. - -**Sprint 4 (6.-10. Mai 2025):** Ursprünglich für Optimierungen vorgesehen, wurde dieser Sprint zur Entwicklung einer funktionsfähigen Gesamtlösung umgewidmet. Der Zeitdruck erforderte pragmatische Entscheidungen und die Konzentration auf essenzielle Funktionen. Die Implementierung erfolgte in intensiven Entwicklungssessions mit dem Ziel, ein lauffähiges System zu erstellen. - -**Sprint 5 (13.-17. Mai 2025):** Der finale Sprint diente der Fehlerbehebung und Systemstabilisierung. Die ursprünglich geplanten Schulungen wurden zugunsten der technischen Fertigstellung zurückgestellt. Die verbleibende Zeit wurde für kritische Bugfixes und die Erstellung der Projektdokumentation genutzt. - -## 2.2 Ressourcenplanung und Infrastruktur - -Die Hardware-Ausstattung wurde basierend auf den Projektanforderungen sorgfältig ausgewählt. Als zentrale Serverplattform kam ein Raspberry Pi 5 mit 8 GB RAM zum Einsatz. Die Entscheidung gegen den ursprünglich geplanten Raspberry Pi 4 basierte auf Performance-Tests, die zeigten, dass das Next.js-Frontend höhere Rechenleistung erforderte als initial angenommen. Die Speicherausstattung wurde auf 128 GB erweitert, um ausreichend Kapazität für die Offline-Installation des Frontends, Datenbankwachstum und regelmäßige Backups zu gewährleisten. - -Die sechs TP-Link Tapo P110 Smart-Plugs bildeten die zentrale Hardware-Schnittstelle zu den 3D-Druckern. Jedes Gerät erhielt eine statische IP-Adresse im Bereich 192.168.0.151 bis 192.168.0.156, was die Verwaltung und Fehlerdiagnose erheblich vereinfachte. Die Konfiguration erfolgte so, dass die Geräte ausschließlich im lokalen Netzwerk erreichbar sind und keine Verbindung zu Cloud-Diensten aufbauen. - -Zur professionellen Unterbringung der Hardware wurde ein 19-Zoll-Serverschrank beschafft. Aufgrund langwieriger interner Beschaffungsprozesse wurden ergänzende Komponenten wie Lüftereinheiten und Kabelmanagement-Systeme privat finanziert. Diese Investition diente der professionellen Präsentation und optimalen Betriebsbedingungen des Systems. - -Die Software-Architektur basiert vollständig auf Open-Source-Technologien: Python 3.11 als Programmiersprache, Flask 2.3 als Web-Framework, SQLAlchemy 2.0 für die Datenbankabstraktion und SQLite als Datenbanksystem. Diese Technologieauswahl gewährleistet Unabhängigkeit von proprietären Lösungen und erfüllt die Offline-Anforderungen des Projekts. - -## 2.3 Qualitätssicherung und Testkonzept - -Das Qualitätssicherungskonzept orientierte sich am V-Modell und sah für jede Entwicklungsphase korrespondierende Testaktivitäten vor. Die systematische Testdurchführung gewährleistete die Funktionsfähigkeit und Robustheit des Systems. - -Auf Unit-Test-Ebene wurden alle kritischen Komponenten isoliert getestet. Dies umfasste Datenbankoperationen, API-Eingabevalidierung und die Kernfunktionen der Reservierungsverwaltung. Besondere Aufmerksamkeit galt der Smart-Plug-Kommunikation, für die umfangreiche Testszenarien entwickelt wurden, einschließlich Netzwerkausfällen und Timeout-Situationen. - -Die Integrationstests validierten das Zusammenspiel der Systemkomponenten. Schwerpunkte waren die Backend-Smart-Plug-Schnittstelle und die API-Kommunikation. Systematische Tests mit verschiedenen Eingabedaten, einschließlich invalider und potenziell schädlicher Inputs, stellten die Robustheit der Schnittstellen sicher. - -Systemtests bildeten komplette Anwendungsszenarien ab. Ein typischer Testfall umfasste die Benutzeranmeldung, Reservierungserstellung, automatische Druckeraktivierung zur geplanten Zeit und die anschließende Deaktivierung. Die zeitliche Präzision der Schaltungen wurde dabei besonders überwacht. - -Performance-Tests auf der Zielplattform bestätigten die ausreichende Leistungsfähigkeit des Raspberry Pi 5. Selbst bei simultanen Zugriffen mehrerer Nutzer und parallelen Smart-Plug-Operationen blieb die Systemperformance im akzeptablen Bereich. - -## 2.4 Netzwerkarchitektur und Sicherheitskonzept - -Die Integration in die Netzwerkinfrastruktur der Mercedes-Benz AG erforderte detaillierte Abstimmungen mit der IT-Abteilung. Das MYP-System wurde in einem dedizierten IoT-Subnetz (192.168.0.0/24) platziert, welches vom Produktionsnetzwerk isoliert ist. Diese Segmentierung gewährleistet erhöhte Sicherheit und verhindert unautorisierten Zugriff auf kritische Systeme. - -Der Raspberry Pi Server erhielt die statische IP-Adresse 192.168.0.105. Die Firewall-Konfiguration wurde restriktiv gestaltet: Port 5000 für die Flask-Anwendung, Port 22 für SSH-Zugriffe (ausschließlich aus dem lokalen Subnetz) und Port 5443 für HTTPS-Verbindungen. Ausgehende Verbindungen wurden strikt auf die IP-Adressen der Smart-Plugs limitiert. - -Für die verschlüsselte Kommunikation wurde ein selbstsigniertes SSL-Zertifikat implementiert. Trotz der Einschränkungen selbstsignierter Zertifikate stellen diese für isolierte Netzwerke ohne Internetzugang eine adäquate Lösung dar. Das Zertifikat wurde mit einjähriger Gültigkeit ausgestellt und enthält alle relevanten Hostnamen und IP-Adressen als Subject Alternative Names. Nach dem versehentlichen Verlust der ersten Zertifikatsgeneration wurde ein robustes Backup-Konzept implementiert. - -Die Authentifizierung basiert auf bcrypt-Hashing mit angemessenem Cost-Faktor. Nach fünf fehlgeschlagenen Anmeldeversuchen erfolgt eine 30-minütige Kontosperrung. Alle sicherheitsrelevanten Ereignisse werden in dedizierten Logdateien protokolliert und können für Sicherheitsaudits herangezogen werden. - -# 3. Durchführung und technische Implementierung - -## 3.1 Backend-Architektur und API-Design - -Die Backend-Implementierung folgt einer modularen Architektur unter Verwendung des Flask-Blueprint-Systems. Diese Strukturierung ermöglicht eine klare Trennung der funktionalen Bereiche und erleichtert die Wartbarkeit des Systems. Die API wurde in vier Hauptmodule unterteilt: Authentication, User Management, Printer Management und Job Management. - -Das Authentication-Modul implementiert die vollständige Benutzerverwaltung einschließlich Registrierung, Anmeldung und Session-Management. Passwörter werden mittels bcrypt gehasht und mit individuellem Salt gespeichert. Die Session-Verwaltung nutzt Flask-Login mit einer konfigurierten Ablaufzeit von acht Stunden. Zusätzliche Sicherheitsmaßnahmen umfassen CSRF-Protection und die Konfiguration sicherer Session-Cookies mit den Attributen Secure, HttpOnly und SameSite. - -Das Job-Management-Modul bildet den funktionalen Kern des Systems. Der primäre Endpunkt POST /api/v1/jobs implementiert umfassende Validierungslogik, die Überschneidungen mit bestehenden Reservierungen verhindert und Berechtigungen prüft. Die Implementierung unterstützt erweiterte Funktionen wie die nachträgliche Modifikation von Reservierungen und vorzeitige Beendigung von Druckaufträgen. Diese Flexibilität erwies sich als essentiell für den praktischen Betrieb. - -Das Printer-Management-Modul verwaltet die Konfiguration der 3D-Drucker und ihrer zugeordneten Smart-Plugs. Neben grundlegenden Attributen wie Name und Standort werden die Netzwerkinformationen der Smart-Plugs (IP- und MAC-Adresse) gespeichert. Ein Status-Flag ermöglicht die temporäre Deaktivierung von Druckern für Wartungszwecke. - -Das API-Design orientiert sich an REST-Prinzipien und implementiert über 100 spezifische Endpunkte. Diese umfassende API-Oberfläche gewährleistet die Abdeckung aller identifizierten Use-Cases und bietet Erweiterungsmöglichkeiten für zukünftige Anforderungen. - -## 3.2 Smart-Plug-Integration und Hardware-Steuerung - -Die Integration der TP-Link Tapo P110 Smart-Plugs stellte eine zentrale technische Herausforderung dar. Die PyP100-Bibliothek bot zwar grundlegende Funktionalität, erforderte jedoch erhebliche Anpassungen für den produktiven Einsatz. Durch Analyse des Netzwerkverkehrs mittels Wireshark konnten die Kommunikationsprotokolle verstanden und optimiert werden. - -Die entwickelte SmartPlugController-Klasse kapselt die Hardware-Kommunikation und implementiert robuste Fehlerbehandlung. Ein Retry-Mechanismus mit exponentiellem Backoff gewährleistet zuverlässige Kommunikation auch bei temporären Netzwerkproblemen. Nach drei erfolglosen Verbindungsversuchen wird der Fehler protokolliert und zur späteren Analyse gespeichert. - -Das proprietäre Authentifizierungsprotokoll der Smart-Plugs erforderte besondere Aufmerksamkeit. Die Implementierung etabliert für jede Operation eine neue Verbindung, um Probleme mit Session-Timeouts zu vermeiden. Die Zugangsdaten werden verschlüsselt in der Systemkonfiguration gespeichert und nur bei Bedarf entschlüsselt. - -Die Implementierung unterstützt drei Kernoperationen: Aktivierung, Deaktivierung und Statusabfrage. Die Statusabfrage liefert neben dem Schaltzustand zusätzliche Informationen wie Stromverbrauch, Betriebsstunden und WLAN-Signalqualität. Diese Metadaten werden für Monitoring- und Analysezwecke persistiert. - -## 3.3 Scheduler-Implementierung und Automatisierung - -Der Job-Scheduler wurde als eigenständiger Thread implementiert, der parallel zur Flask-Anwendung operiert. Diese Architekturentscheidung gewährleistet, dass Scheduler-Operationen die Responsivität der Web-API nicht beeinträchtigen. - -Der Scheduler-Thread initialisiert beim Systemstart und arbeitet in einer kontinuierlichen Schleife mit 60-sekündigem Prüfintervall. Bei jeder Iteration werden anstehende Reservierungen identifiziert und entsprechende Schaltaktionen ausgeführt. Die Implementierung berücksichtigt einen fünfminütigen Sicherheitspuffer nach dem geplanten Ende einer Reservierung, um laufende Druckvorgänge nicht vorzeitig zu unterbrechen. - -Die Verarbeitung von Scheduler-Events folgt einem definierten Ablauf: Statusänderung in der Datenbank, Ausführung der Hardware-Operation über den SmartPlugController, Protokollierung des Ergebnisses. Bei Fehlern werden bis zu drei Wiederholungsversuche unternommen, bevor eine Fehlerbehandlung erfolgt. - -Thread-Sicherheit wurde durch explizite Datenbankisolation und Transaktionsmanagement gewährleistet. Jeder Datenbankzugriff aus dem Scheduler-Thread erhält einen eigenen Application Context, wodurch Konflikte mit concurrent Web-Requests vermieden werden. - -## 3.4 Datenmodell und Persistierung - -Das relationale Datenmodell wurde mit Fokus auf Erweiterbarkeit und Datenintegrität entworfen. Die vier Kernentitäten User, Printer, Job und verschiedene Log-Tabellen bilden die Grundlage der Datenhaltung. - -Die User-Entität speichert neben Authentifizierungsdaten auch sicherheitsrelevante Metainformationen wie fehlgeschlagene Anmeldeversuche und temporäre Sperrzeitstempel. Das implementierte Rollenmodell differenziert zwischen Standard-Nutzern und Administratoren. Die Struktur ist bereits für zukünftige Erweiterungen wie Zwei-Faktor-Authentifizierung vorbereitet. - -Die Printer-Entität bildet die physischen Geräte mit allen relevanten Attributen ab. Neben deskriptiven Informationen werden die kritischen Netzwerkkonfigurationen der zugeordneten Smart-Plugs gespeichert. Ein Aktivitätsflag ermöglicht die temporäre Deaktivierung ohne Konfigurationsverlust. - -Die Job-Entität verwaltet den vollständigen Lebenszyklus von Reservierungen. Der Status durchläuft die Phasen "scheduled", "running", "finished" oder "aborted". Sowohl geplante als auch tatsächliche Start- und Endzeiten werden erfasst, um Abweichungsanalysen zu ermöglichen. - -Spezialisierte Log-Tabellen dienen der Systemüberwachung und Analyse. PlugStatusLog protokolliert alle Hardware-Interaktionen, EnergyUsageLog erfasst Verbrauchsdaten, SystemPerformanceLog zeichnet Systemmetriken auf. Diese umfassende Datensammlung ermöglicht detaillierte Auswertungen und proaktive Wartung. - -## 3.5 Sicherheitsimplementierung und Datenschutz - -Die Sicherheitsarchitektur folgt dem Prinzip "Security by Design" und implementiert mehrschichtige Schutzmaßnahmen. Die Umsetzung berücksichtigt sowohl die spezifischen Anforderungen der Mercedes-Benz AG als auch gesetzliche Vorgaben wie die DSGVO. - -Auf Netzwerkebene wurden restriktive Firewall-Regeln mittels iptables implementiert. Die Konfiguration erlaubt ausschließlich essenzielle Dienste und limitiert ausgehende Verbindungen auf die definierten Smart-Plug-Adressen. Diese Maßnahmen verhindern effektiv die Nutzung des Systems als Ausgangspunkt für Angriffe auf andere Netzwerkressourcen. - -Die Anwendungsebene implementiert umfassende Eingabevalidierung für alle API-Endpunkte. Ein integriertes Intrusion Detection System erkennt typische Angriffsmuster wie SQL-Injection, Cross-Site-Scripting und Path-Traversal. Bei Erkennung verdächtiger Aktivitäten erfolgt eine temporäre IP-Sperrung. - -Für DSGVO-Compliance wurden automatisierte Datenlebenszyklen implementiert. Session-Daten werden nach 30 Tagen gelöscht, Job-Daten nach zwei Jahren anonymisiert. Die Anonymisierung erhält statistische Informationen bei gleichzeitiger Entfernung personenbezogener Daten. Ein Datenexport gemäß Artikel 20 DSGVO wurde implementiert. - -## 3.6 Deployment und Produktivbetrieb - -Das Deployment auf dem Raspberry Pi 5 erfolgte mittels eines automatisierten Installationsskripts. Die Flask-Anwendung wurde als systemd-Service konfiguriert, was automatischen Start beim Systemboot und Neustart bei Fehlern gewährleistet. Die Service-Konfiguration implementiert zusätzliche Sicherheitsmaßnahmen wie Rechtebeschränkungen und Dateisystemisolation. - -Für die lokale Nutzung wurde ein Kiosk-Modus eingerichtet, der die Webanwendung im Vollbildmodus präsentiert. Der Chromium-Browser startet automatisch beim Systemstart und ist für fehlertoleranten Betrieb konfiguriert. Entgegen der ursprünglichen Planung wurde auf ein Touch-Display verzichtet, die Bedienung erfolgt über konventionelle Eingabegeräte. - -Die Backup-Strategie implementiert tägliche Datenbanksicherungen mit automatischer Rotation nach 30 Tagen. Wöchentliche Systembackups sichern die Gesamtkonfiguration. Alle Backup-Prozesse sind über Cron-Jobs automatisiert und werden überwacht. - -# 4. Projektabschluss und Bewertung - -## 4.1 Projektergebnis und Zielerreichung - -Das MYP-System wurde erfolgreich innerhalb des vorgegebenen Zeitrahmens fertiggestellt und in den Produktivbetrieb überführt. Die implementierte Lösung erfüllt alle definierten Anforderungen und bietet darüber hinaus zusätzliche Funktionalitäten, die sich während der Entwicklung als sinnvoll erwiesen. - -Die technische Umsetzung umfasst über 9.000 Zeilen strukturierten Python-Code mit umfassender Dokumentation. Die REST-API stellt mehr als 100 Endpunkte bereit und gewährleistet damit die vollständige Abdeckung aller identifizierten Anwendungsfälle. Der implementierte Scheduler arbeitet seit Inbetriebnahme zuverlässig und hat keine Schaltung versäumt. - -Die Integration des bestehenden Frontend-Prototyps mit dem neu entwickelten Backend verlief erfolgreich. Die nahtlose Zusammenarbeit beider Komponenten demonstriert die Effektivität des gewählten Architekturansatzes. Die automatische Steuerung der 3D-Drucker über Smart-Plugs funktioniert präzise und zuverlässig. Der implementierte Sicherheitspuffer verhindert effektiv die vorzeitige Unterbrechung laufender Druckvorgänge. - -Das System wird von den Nutzern gut angenommen. Die digitale Reservierungsverwaltung hat das manuelle Whiteboard-System vollständig abgelöst. Erste Rückmeldungen bestätigen die verbesserte Effizienz und Transparenz bei der Druckernutzung. - -## 4.2 Technische und wirtschaftliche Bewertung - -Aus technischer Perspektive demonstriert das MYP-System erfolgreich die Prinzipien cyber-physischer Vernetzung. Die Überbrückung zwischen digitaler Verwaltungsebene und physischer Hardware-Steuerung wurde elegant durch den Einsatz von Smart-Plugs gelöst. Diese Architekturentscheidung erwies sich als robust und wartungsarm. - -Die wirtschaftliche Bewertung fällt äußerst positiv aus. Die Gesamtinvestition von unter 600 Euro (inklusive privat finanzierter Komponenten) steht in einem exzellenten Verhältnis zum erzielten Nutzen. Kommerzielle Lösungen mit vergleichbarem Funktionsumfang liegen typischerweise im fünfstelligen Bereich. - -Der operative Nutzen manifestiert sich in mehreren Dimensionen: Die Eliminierung von Reservierungskonflikten, die automatisierte Energieverwaltung durch zeitgesteuerte Abschaltung und die erstmalige Verfügbarkeit belastbarer Nutzungsstatistiken. Diese Daten bilden die Grundlage für fundierte Entscheidungen bezüglich Kapazitätserweiterungen oder Ressourcenallokation. - -Die Sicherheitsarchitektur erfüllt alle relevanten Anforderungen der Mercedes-Benz AG. Die implementierten Maßnahmen gewährleisten Datenschutz, Systemintegrität und Compliance mit geltenden Regularien. - -## 4.3 Herausforderungen und Lösungsansätze - -Die Projektdurchführung war von verschiedenen Herausforderungen geprägt, die flexible Lösungsansätze erforderten. Die administrativen Prozesse zur Erlangung notwendiger Berechtigungen und Genehmigungen erwiesen sich als zeitintensiver als geplant. Diese Erfahrung unterstreicht die Bedeutung ausreichender Zeitpuffer für organisatorische Aspekte in Unternehmensprojekten. - -Die technische Integration der Smart-Plugs erforderte aufgrund mangelhafter Dokumentation der PyP100-Bibliothek erheblichen Reverse-Engineering-Aufwand. Die systematische Analyse des Kommunikationsprotokolls mittels Wireshark führte letztendlich zu einer stabilen Implementierung. - -Der Verlust der SSL-Zertifikate in Sprint 3 verdeutlichte die Wichtigkeit robuster Backup-Strategien. Die implementierte dreifache Sicherung kritischer Konfigurationsdateien verhindert zukünftige Datenverluste. - -Die Performance-Anforderungen des Next.js-Frontends führten zur Anpassung der Hardware-Spezifikation. Der Wechsel zum leistungsfähigeren Raspberry Pi 5 gewährleistete ausreichende Systemressourcen für einen flüssigen Betrieb. - -## 4.4 Projekterfahrungen und persönliche Entwicklung - -Das MYP-Projekt bot wertvolle Einblicke in die praktische Umsetzung cyber-physischer Systeme. Die Integration von Software- und Hardware-Komponenten zu einer funktionierenden Gesamtlösung entspricht dem Kernprofil des Fachinformatikers für digitale Vernetzung. - -Die Arbeit mit IoT-Geräten und die Entwicklung robuster Kommunikationsprotokolle erweiterten das technische Kompetenzspektrum erheblich. Die Notwendigkeit, Ausfallszenarien zu antizipieren und entsprechende Fehlerbehandlungen zu implementieren, führte zu einem vertieften Verständnis für zuverlässige Systemarchitekturen. - -Die Interaktion mit verschiedenen Stakeholdern – von der technischen Weiterentwicklung des Prototyps über Abstimmungen mit der IT-Abteilung bis zur Berücksichtigung der Nutzeranforderungen – verbesserte die kommunikativen und organisatorischen Fähigkeiten nachhaltig. - -Der Projektverlauf, insbesondere die Herausforderungen der letzten Sprints, verdeutlichte die Bedeutung von Priorisierung und pragmatischen Entscheidungen. Die Fokussierung auf essenzielle Funktionen ermöglichte die erfolgreiche Fertigstellung trotz unvorhergesehener Hindernisse. - -## 4.5 Ausblick und Weiterentwicklung - -Das MYP-System bietet eine solide Basis für zukünftige Erweiterungen. Die modulare Architektur und umfassende API ermöglichen die Integration zusätzlicher Funktionalitäten ohne grundlegende Systemänderungen. - -Kurzfristig ist die Anbindung an das Active Directory der Mercedes-Benz AG geplant. Die vorbereiteten Schnittstellen ermöglichen eine nahtlose Integration, sobald die erforderlichen Genehmigungen vorliegen. Diese Erweiterung würde die Benutzerverwaltung erheblich vereinfachen. - -Mittelfristig könnte bei Verfügbarkeit modernerer 3D-Drucker eine direkte Geräteintegration realisiert werden. Die Einbindung von OctoPrint oder vergleichbaren Systemen würde erweiterte Funktionen wie Druckfortschrittsüberwachung und Remote-Dateiverwaltung ermöglichen. - -Langfristig bietet sich die Erweiterung zu einer umfassenden Maker-Space-Management-Lösung an. Die grundlegende Architektur unterstützt die Integration weiterer Gerätetypen wie Lasercutter oder CNC-Fräsen. Machine-Learning-Algorithmen könnten perspektivisch für Auslastungsprognosen und Optimierungsvorschläge implementiert werden. - -## 4.6 Fazit - -Mit dem MYP-System wurde eine praxistaugliche Lösung für die digitale Transformation der 3D-Drucker-Verwaltung in der Technischen Berufsausbildungsstätte entwickelt. Das Projekt demonstriert erfolgreich, wie durch innovative Ansätze technische Limitierungen überwunden und moderne cyber-physische Systeme realisiert werden können. - -Die Kombination aus fundierter technischer Implementierung, durchdachter Systemarchitektur und pragmatischen Lösungsansätzen resultierte in einem System, das die gestellten Anforderungen vollständig erfüllt. Die erfolgreiche Integration bestehender Komponenten mit neu entwickelten Funktionalitäten unterstreicht die während der Ausbildung erworbenen Kompetenzen. - -Das positive Feedback der Nutzer und die stabile Funktionsweise im Produktivbetrieb bestätigen die Qualität der entwickelten Lösung. Das MYP-System hat sich als wertvolles Werkzeug für die effiziente Ressourcenverwaltung etabliert und trägt zur Modernisierung der Ausbildungsinfrastruktur bei. - -Die Projekterfahrungen bilden eine solide Grundlage für die weitere berufliche Entwicklung als Fachinformatiker für digitale Vernetzung. Die erfolgreiche Verbindung digitaler und physischer Systeme zu einer funktionierenden Gesamtlösung demonstriert die praktische Anwendung des erworbenen Fachwissens. - ---- - -**Anlagen:** - -- Screenshots der Benutzeroberfläche und Systemarchitektur -- Relevanter E-Mail-Verkehr und Genehmigungen -- Technische Spezifikationen und Konfigurationsdateien