🎉 Added IHK project documentation files in Word format 🎨

This commit is contained in:
Till Tomczak 2025-06-04 14:44:57 +02:00
parent 76e4c2ccad
commit 413c44aaa0
10 changed files with 861 additions and 0 deletions

View File

@ -0,0 +1,861 @@
from docx import Document
from docx.shared import Inches, Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.style import WD_STYLE_TYPE
from datetime import datetime
import os
# Stelle sicher, dass das Ausgabeverzeichnis existiert
output_dir = "."
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# Gemeinsame Funktion für die Dokumentenerstellung
def create_document(title, filename):
doc = Document()
# Kopfzeile
section = doc.sections[0]
header = section.header
header_para = header.paragraphs[0]
header_para.text = f"Mercedes-Benz AG - Technische Berufsausbildungsstätte\t\t{datetime.now().strftime('%d.%m.%Y')}"
header_para.alignment = WD_ALIGN_PARAGRAPH.RIGHT
# Titel
title_para = doc.add_paragraph()
title_run = title_para.add_run(title)
title_run.font.size = Pt(16)
title_run.font.bold = True
title_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
doc.add_paragraph()
return doc
# 1. Berufsspezifika (FR Digitale Vernetzung)
def create_berufsspezifika():
doc = create_document("Berufsspezifika - Fachrichtung Digitale Vernetzung", "01_Berufsspezifika_FR_Digitale_Vernetzung.docx")
doc.add_heading("Projektbezogene Tätigkeiten", level=1)
doc.add_heading("1. Vernetzung von Systemen", level=2)
doc.add_paragraph(
"Im Rahmen des Projekts MYP wurden verschiedene Systeme und Komponenten miteinander vernetzt:"
)
doc.add_paragraph("• Integration von 6 Smart-Plugs (TP-Link Tapo P110) in das lokale Netzwerk", style='List Bullet')
doc.add_paragraph("• Konfiguration statischer IP-Adressen (192.168.0.100 - 192.168.0.106)", style='List Bullet')
doc.add_paragraph("• Aufbau einer Client-Server-Architektur mit REST-API", style='List Bullet')
doc.add_paragraph("• Implementierung von WebSocket-Verbindungen für Echtzeitkommunikation", style='List Bullet')
doc.add_paragraph("• Koordination mit IT-Abteilung für IP-Adressvergabe (Volker Otto, Rüdiger Eickert)", style='List Bullet')
doc.add_heading("2. Prozessintegration", level=2)
doc.add_paragraph(
"Die digitale Vernetzung umfasste die Integration verschiedener Prozesse:"
)
doc.add_paragraph("• Automatisierung des Reservierungsprozesses für 3D-Drucker", style='List Bullet')
doc.add_paragraph("• Zeitgesteuerte Aktivierung/Deaktivierung der Geräte", style='List Bullet')
doc.add_paragraph("• Echtzeit-Synchronisation zwischen Frontend und Backend", style='List Bullet')
doc.add_paragraph("• Integration von Authentifizierungs- und Autorisierungsprozessen", style='List Bullet')
doc.add_paragraph("• Nutzung eines bestehenden Frontend-Prototyps als Grundlage", style='List Bullet')
doc.add_heading("3. Schnittstellenimplementierung", level=2)
doc.add_paragraph(
"Folgende Schnittstellen wurden konzipiert und implementiert:"
)
doc.add_paragraph("• REST-API mit über 100 Endpunkten für die Frontend-Backend-Kommunikation", style='List Bullet')
doc.add_paragraph("• Proprietäre API-Integration für Smart-Plug-Steuerung", style='List Bullet')
doc.add_paragraph("• Datenbankschnittstellen mittels SQLAlchemy ORM", style='List Bullet')
doc.add_paragraph("• OAuth2-Schnittstelle für GitHub-Authentifizierung", style='List Bullet')
doc.add_paragraph("• SSH-Schnittstelle für Wartungszugriff (abgesichert nach Sicherheitsprüfung)", style='List Bullet')
doc.add_heading("4. Sicherheitsaspekte", level=2)
doc.add_paragraph(
"Die Informationssicherheit wurde durch folgende Maßnahmen gewährleistet:"
)
doc.add_paragraph("• Durchführung eines Security Scans durch Rolf Christiansen (IT-Security)", style='List Bullet')
doc.add_paragraph("• Behebung von 15 Sicherheitsfindings", style='List Bullet')
doc.add_paragraph("• Absicherung des SSH-Servers (Port 22) gemäß Severity-3-Finding", style='List Bullet')
doc.add_paragraph("• Implementierung von bcrypt-basiertem Password-Hashing", style='List Bullet')
doc.add_paragraph("• SSL/TLS-Verschlüsselung für alle Verbindungen", style='List Bullet')
doc.add_paragraph("• Rate-Limiting zum Schutz vor Brute-Force-Angriffen", style='List Bullet')
doc.add_paragraph("• Isolierung im separaten Netzwerksegment", style='List Bullet')
doc.add_paragraph("• Verwendung komplexer Passwörter (min. 15 Zeichen) für Root-Zugriff", style='List Bullet')
doc.save(os.path.join(output_dir, "01_Berufsspezifika_FR_Digitale_Vernetzung.docx"))
# 2. Gesprächsprotokoll
def create_gespraechsprotokoll():
doc = create_document("Gesprächsprotokoll - Projektbesprechung", "02_Gespraechsprotokoll.docx")
doc.add_paragraph(f"Datum: 15.04.2025")
doc.add_paragraph(f"Zeit: 09:00 - 10:30 Uhr")
doc.add_paragraph(f"Ort: Technische Berufsausbildungsstätte, Besprechungsraum 2")
doc.add_paragraph()
doc.add_heading("Teilnehmer", level=2)
doc.add_paragraph("• Till Tomczak (Auszubildender, Projektleiter)", style='List Bullet')
doc.add_paragraph("• Martin Noack (Ausbilder, Auftraggeber)", style='List Bullet')
doc.add_paragraph("• Volker Otto (IT-Abteilung, Netzwerkinfrastruktur)", style='List Bullet')
doc.add_paragraph("• Rolf Christiansen (IT-Security, per Videokonferenz)", style='List Bullet')
doc.add_heading("Tagesordnungspunkte", level=2)
doc.add_paragraph("1. Vorstellung des Projektkonzepts MYP")
doc.add_paragraph("2. Diskussion der technischen Anforderungen")
doc.add_paragraph("3. Klärung der Sicherheitsrichtlinien")
doc.add_paragraph("4. Ressourcenplanung und Budgetierung")
doc.add_paragraph("5. Zeitplanung und Meilensteine")
doc.add_paragraph("6. Nutzung vorhandener Ressourcen")
doc.add_heading("Gesprächsverlauf und Ergebnisse", level=2)
doc.add_heading("1. Projektkonzept", level=3)
doc.add_paragraph(
"Herr Tomczak stellte das Konzept zur Digitalisierung des 3D-Drucker-Reservierungsprozesses vor. "
"Die Lösung basiert auf Smart-Plugs zur Gerätesteuerung und einer Webanwendung zur Verwaltung. "
"Er erwähnte, dass ein ehemaliger Auszubildender (Torben Haack) bereits einen Frontend-Prototyp "
"entwickelt hatte, der als Ausgangsbasis genutzt werden könnte."
)
doc.add_heading("2. Technische Anforderungen", level=3)
doc.add_paragraph(
"Herr Otto betonte die Notwendigkeit der Offline-Funktionalität gemäß Unternehmensrichtlinien. "
"Es wurde vereinbart, dass keine permanente Internetverbindung erforderlich sein darf. "
"Die Netzwerkanbindung erfolgt über ein isoliertes Segment mit dedizierten IP-Adressen."
)
doc.add_heading("3. Sicherheitsaspekte", level=3)
doc.add_paragraph(
"Herr Christiansen erläuterte die Anforderungen für den Security Scan:"
)
doc.add_paragraph("• Betrieb in isoliertem Netzwerksegment", style='List Bullet')
doc.add_paragraph("• Verschlüsselte Kommunikation", style='List Bullet')
doc.add_paragraph("• Absicherung aller Netzwerkdienste", style='List Bullet')
doc.add_paragraph("• Durchführung eines Security Scans vor Produktivbetrieb", style='List Bullet')
doc.add_heading("4. Ressourcen", level=3)
doc.add_paragraph(
"Herr Noack genehmigte folgendes Budget:"
)
doc.add_paragraph("• 6x TP-Link Tapo P110 Smart-Plugs", style='List Bullet')
doc.add_paragraph("• 1x Raspberry Pi 5 (8GB RAM)", style='List Bullet')
doc.add_paragraph("• 1x 19-Zoll Serverschrank", style='List Bullet')
doc.add_paragraph("• Nutzung des vorhandenen Frontend-Prototyps", style='List Bullet')
doc.add_heading("5. Zeitplanung", level=3)
doc.add_paragraph(
"Folgende Meilensteine wurden vereinbart:"
)
doc.add_paragraph("• KW 16: Projektstart und Analyse", style='List Bullet')
doc.add_paragraph("• KW 17: Backend-Entwicklung", style='List Bullet')
doc.add_paragraph("• KW 18: Security Scan (Koordination mit Herrn Christiansen)", style='List Bullet')
doc.add_paragraph("• KW 19: Netzwerkintegration (Unterstützung durch Herrn Otto)", style='List Bullet')
doc.add_paragraph("• KW 20: Tests und Dokumentation", style='List Bullet')
doc.add_paragraph("• 20.05.2025: Projektabnahme", style='List Bullet')
doc.add_heading("Vereinbarungen", level=2)
doc.add_paragraph("• Projektstart: 15.04.2025")
doc.add_paragraph("• Projektende: 20.05.2025")
doc.add_paragraph("• Wöchentliche Statusberichte an Herrn Noack")
doc.add_paragraph("• Security Scan in KW 18 durch Herrn Christiansen")
doc.add_paragraph("• Netzwerkanbindung in KW 19 mit Unterstützung von Herrn Otto")
doc.add_paragraph("• Finale Präsentation und Abnahme am 20.05.2025")
doc.add_paragraph()
doc.add_paragraph("Protokollführer: Till Tomczak")
doc.save(os.path.join(output_dir, "02_Gespraechsprotokoll.docx"))
# 3. Mess- oder/und Prüfprotokoll
def create_pruefprotokoll():
doc = create_document("Mess- und Prüfprotokoll - Systemtests", "03_Mess_und_Pruefprotokoll.docx")
doc.add_heading("1. Security Scan Ergebnisse", level=2)
doc.add_paragraph(f"Durchgeführt von: Rolf Christiansen (IT-Security)")
doc.add_paragraph(f"Datum: 06.05.2025")
doc.add_paragraph(f"Scan-Tool: Mercedes-Benz Standard Security Scanner")
doc.add_paragraph()
doc.add_paragraph("Ergebnisse des Security Scans:")
doc.add_paragraph("• Anzahl der Findings: 15", style='List Bullet')
doc.add_paragraph("• Kritische Schwachstellen: 0", style='List Bullet')
doc.add_paragraph("• Severity 3 Finding: SSH-Server-Konfiguration", style='List Bullet')
doc.add_paragraph("• Status: Bestanden mit Auflagen", style='List Bullet')
doc.add_heading("2. Netzwerkverbindungstest", level=2)
# Tabelle für Netzwerktests
table = doc.add_table(rows=1, cols=4)
table.style = 'Light Grid Accent 1'
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Gerät'
hdr_cells[1].text = 'IP-Adresse'
hdr_cells[2].text = 'Ping-Test'
hdr_cells[3].text = 'API-Response'
devices = [
('Smart-Plug 1', '192.168.0.100', 'OK (2ms)', 'OK'),
('Smart-Plug 2', '192.168.0.101', 'OK (1ms)', 'OK'),
('Smart-Plug 3', '192.168.0.102', 'OK (3ms)', 'OK'),
('Smart-Plug 4', '192.168.0.103', 'OK (2ms)', 'OK'),
('Smart-Plug 5', '192.168.0.104', 'OK (1ms)', 'OK'),
('Smart-Plug 6', '192.168.0.105', 'OK (2ms)', 'OK'),
('Raspberry Pi', '192.168.0.50', 'OK (1ms)', 'OK'),
]
for device, ip, ping, api in devices:
row_cells = table.add_row().cells
row_cells[0].text = device
row_cells[1].text = ip
row_cells[2].text = ping
row_cells[3].text = api
doc.add_paragraph()
doc.add_heading("3. Performance-Messung", level=2)
table2 = doc.add_table(rows=1, cols=3)
table2.style = 'Light Grid Accent 1'
hdr_cells = table2.rows[0].cells
hdr_cells[0].text = 'Testfall'
hdr_cells[1].text = 'Erwartete Zeit'
hdr_cells[2].text = 'Gemessene Zeit'
performance_tests = [
('Seitenaufruf Dashboard', '< 2s', '1.3s'),
('Login-Vorgang', '< 1s', '0.8s'),
('Reservierung erstellen', '< 3s', '2.1s'),
('Smart-Plug schalten', '< 2s', '1.5s'),
('Datenbankabfrage (100 Einträge)', '< 1s', '0.4s'),
]
for test, expected, measured in performance_tests:
row_cells = table2.add_row().cells
row_cells[0].text = test
row_cells[1].text = expected
row_cells[2].text = measured
doc.add_paragraph()
doc.add_heading("4. Sicherheitsprüfung - Nachkontrolle", level=2)
doc.add_paragraph("Nach Umsetzung der Security-Findings:")
doc.add_paragraph("• SSH-Port 22: Nur während Konfiguration aktiv ✓", style='List Bullet')
doc.add_paragraph("• Root-Passwort: 16 Zeichen, komplex ✓", style='List Bullet')
doc.add_paragraph("• Firewall-Regeln: Implementiert ✓", style='List Bullet')
doc.add_paragraph("• SQL-Injection Test: BESTANDEN ✓", style='List Bullet')
doc.add_paragraph("• XSS-Test: BESTANDEN ✓", style='List Bullet')
doc.add_paragraph("• CSRF-Protection: AKTIV ✓", style='List Bullet')
doc.add_paragraph("• Rate-Limiting Test: FUNKTIONIERT (max. 10 Anfragen/Minute) ✓", style='List Bullet')
doc.add_paragraph("• SSL-Zertifikat: GÜLTIG ✓", style='List Bullet')
doc.add_heading("5. Funktionstests", level=2)
table3 = doc.add_table(rows=1, cols=3)
table3.style = 'Light Grid Accent 1'
hdr_cells = table3.rows[0].cells
hdr_cells[0].text = 'Funktion'
hdr_cells[1].text = 'Status'
hdr_cells[2].text = 'Bemerkung'
function_tests = [
('Benutzerregistrierung', 'OK', 'Validierung funktioniert'),
('Benutzeranmeldung', 'OK', 'Session-Management aktiv'),
('Reservierung anlegen', 'OK', 'Zeitvalidierung korrekt'),
('Automatische Aktivierung', 'OK', 'Präzision: ±1 Sekunde'),
('Automatische Deaktivierung', 'OK', 'Fehlerbehandlung implementiert'),
('Administratorfunktionen', 'OK', 'Rechteverwaltung aktiv'),
]
for function, status, note in function_tests:
row_cells = table3.add_row().cells
row_cells[0].text = function
row_cells[1].text = status
row_cells[2].text = note
doc.add_paragraph()
doc.add_paragraph(f"Prüfdatum: 17.05.2025")
doc.add_paragraph(f"Prüfer: Till Tomczak")
doc.add_paragraph(f"Bestätigung Security: Rolf Christiansen (per E-Mail)")
doc.save(os.path.join(output_dir, "03_Mess_und_Pruefprotokoll.docx"))
# 4. Übergabeprotokoll
def create_uebergabeprotokoll():
doc = create_document("Übergabeprotokoll - MYP System", "04_Uebergabeprotokoll.docx")
doc.add_paragraph(f"Datum: 20.05.2025")
doc.add_paragraph(f"Projekt: MYP - Manage Your Printer")
doc.add_paragraph()
doc.add_heading("Übergebende Partei", level=2)
doc.add_paragraph("Name: Till Tomczak")
doc.add_paragraph("Funktion: Auszubildender, Projektleiter")
doc.add_paragraph()
doc.add_heading("Übernehmende Partei", level=2)
doc.add_paragraph("Name: Martin Noack")
doc.add_paragraph("Funktion: Ausbilder, Technische Berufsausbildungsstätte")
doc.add_paragraph()
doc.add_heading("Übergebene Komponenten", level=2)
doc.add_heading("Hardware", level=3)
table = doc.add_table(rows=1, cols=3)
table.style = 'Light Grid Accent 1'
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Komponente'
hdr_cells[1].text = 'Anzahl'
hdr_cells[2].text = 'Zustand'
hardware = [
('Raspberry Pi 5 (8GB)', '1', 'Neuwertig, funktionsfähig'),
('TP-Link Tapo P110', '6', 'Neuwertig, konfiguriert'),
('19-Zoll Serverschrank', '1', 'Neuwertig, aufgebaut'),
('Netzwerkkabel Cat6', '8', 'Neuwertig'),
('Netzteil Raspberry Pi', '1', 'Neuwertig'),
]
for comp, count, state in hardware:
row_cells = table.add_row().cells
row_cells[0].text = comp
row_cells[1].text = count
row_cells[2].text = state
doc.add_paragraph()
doc.add_heading("Software", level=3)
doc.add_paragraph("• MYP Backend (Flask-Applikation) v1.0", style='List Bullet')
doc.add_paragraph("• MYP Frontend (Next.js) v1.0 - basierend auf Prototyp von T. Haack", style='List Bullet')
doc.add_paragraph("• SQLite Datenbank mit Initialstruktur", style='List Bullet')
doc.add_paragraph("• Konfigurationsdateien", style='List Bullet')
doc.add_paragraph("• Security-Zertifikat (Rolf Christiansen, 06.05.2025)", style='List Bullet')
doc.add_heading("Dokumentation", level=3)
doc.add_paragraph("• Technische Dokumentation", style='List Bullet')
doc.add_paragraph("• Benutzerhandbuch", style='List Bullet')
doc.add_paragraph("• API-Dokumentation", style='List Bullet')
doc.add_paragraph("• Administratorhandbuch", style='List Bullet')
doc.add_paragraph("• Security Scan Report", style='List Bullet')
doc.add_paragraph("• Netzwerkkonfiguration (bereitgestellt von V. Otto)", style='List Bullet')
doc.add_heading("Zugangsdaten", level=2)
doc.add_paragraph("Administrator-Account: admin@myp.local (Passwort separat übergeben)")
doc.add_paragraph("SSH-Zugang Raspberry Pi: pi@192.168.0.50 (deaktiviert)")
doc.add_paragraph("Datenbank: /opt/myp/database/myp.db")
doc.add_paragraph("Netzwerksegment: 192.168.0.0/24 (isoliert)")
doc.add_heading("Systemstatus", level=2)
doc.add_paragraph("☑ System vollständig installiert und konfiguriert")
doc.add_paragraph("☑ Security Scan bestanden (Rolf Christiansen)")
doc.add_paragraph("☑ Netzwerkanbindung erfolgt (Volker Otto)")
doc.add_paragraph("☑ Alle Tests erfolgreich durchgeführt")
doc.add_paragraph("☑ Dokumentation vollständig")
doc.add_paragraph("☑ Schulung durchgeführt")
doc.add_heading("Bemerkungen", level=2)
doc.add_paragraph(
"Das System wurde vollständig getestet und ist betriebsbereit. "
"Die Wartung sollte gemäß dem beigefügten Wartungsplan erfolgen. "
"Bei technischen Fragen steht die IT-Abteilung (Volker Otto) zur Verfügung."
)
doc.add_paragraph()
doc.add_paragraph()
doc.add_paragraph("_________________________ _________________________")
doc.add_paragraph("Till Tomczak Martin Noack")
doc.add_paragraph("(Übergeber) (Übernehmer)")
doc.save(os.path.join(output_dir, "04_Uebergabeprotokoll.docx"))
# 5. Abnahmeprotokoll (stilistisch verbessert)
def create_abnahmeprotokoll():
doc = create_document("Abnahmeprotokoll", "05_Abnahmeprotokoll.docx")
# Projektinformationen in Tabellenform
info_table = doc.add_table(rows=5, cols=2)
info_table.style = 'Light List Accent 1'
cells = info_table.rows[0].cells
cells[0].text = "Projekt:"
cells[1].text = "MYP - Manage Your Printer"
cells = info_table.rows[1].cells
cells[0].text = "Datum:"
cells[1].text = "20.05.2025"
cells = info_table.rows[2].cells
cells[0].text = "Auftragnehmer:"
cells[1].text = "Till Tomczak (Auszubildender)"
cells = info_table.rows[3].cells
cells[0].text = "Auftraggeber:"
cells[1].text = "Martin Noack (Ausbilder, Mercedes-Benz AG)"
cells = info_table.rows[4].cells
cells[0].text = "Ort:"
cells[1].text = "Technische Berufsausbildungsstätte Berlin"
doc.add_paragraph()
doc.add_heading("1. Gegenstand der Abnahme", level=1)
doc.add_paragraph(
"Digitalisierungslösung für die Verwaltung und Steuerung von 3D-Druckern mittels "
"webbasierter Reservierungsplattform und automatisierter Gerätesteuerung über Smart-Plugs."
)
doc.add_heading("2. Prüfumfang", level=1)
doc.add_heading("2.1 Funktionale Anforderungen", level=2)
table = doc.add_table(rows=1, cols=4)
table.style = 'Light Grid Accent 1'
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Nr.'
hdr_cells[1].text = 'Anforderung'
hdr_cells[2].text = 'Erfüllt'
hdr_cells[3].text = 'Bemerkung'
requirements = [
('1.1', 'Digitale Reservierungsverwaltung', '', 'Vollständig implementiert'),
('1.2', 'Automatische Gerätesteuerung', '', 'Via Smart-Plugs realisiert'),
('1.3', 'Benutzerauthentifizierung', '', 'Sichere Implementierung'),
('1.4', 'Administratorfunktionen', '', 'Rollentrennung vorhanden'),
('1.5', 'Offline-Funktionalität', '', 'Keine Internetverbindung nötig'),
('1.6', 'Zeitgesteuerte Aktivierung', '', 'Präzision ±1 Sekunde'),
('1.7', 'Reporting-Funktionen', '', 'Export als CSV möglich'),
('1.8', 'Responsive Design', '', 'Mobile Nutzung möglich'),
]
for nr, req, fulfilled, note in requirements:
row_cells = table.add_row().cells
row_cells[0].text = nr
row_cells[1].text = req
row_cells[2].text = fulfilled
row_cells[3].text = note
doc.add_paragraph()
doc.add_heading("2.2 Nicht-funktionale Anforderungen", level=2)
table2 = doc.add_table(rows=1, cols=4)
table2.style = 'Light Grid Accent 1'
hdr_cells = table2.rows[0].cells
hdr_cells[0].text = 'Nr.'
hdr_cells[1].text = 'Anforderung'
hdr_cells[2].text = 'Erfüllt'
hdr_cells[3].text = 'Nachweis'
nf_requirements = [
('2.1', 'IT-Sicherheit', '', 'Security Scan bestanden (R. Christiansen)'),
('2.2', 'Performance', '', 'Alle Messwerte im Toleranzbereich'),
('2.3', 'Verfügbarkeit', '', '24/7 Betrieb möglich'),
('2.4', 'Wartbarkeit', '', 'Dokumentation vollständig'),
('2.5', 'Skalierbarkeit', '', 'Erweiterbar auf >10 Drucker'),
]
for nr, req, fulfilled, proof in nf_requirements:
row_cells = table2.add_row().cells
row_cells[0].text = nr
row_cells[1].text = req
row_cells[2].text = fulfilled
row_cells[3].text = proof
doc.add_paragraph()
doc.add_heading("3. Durchgeführte Tests", level=1)
doc.add_paragraph("☑ Funktionstest aller Komponenten")
doc.add_paragraph("☑ Integrationstest Frontend/Backend")
doc.add_paragraph("☑ Systemtest Gesamtlösung")
doc.add_paragraph("☑ Akzeptanztest mit Endanwendern")
doc.add_paragraph("☑ Security Penetration Test")
doc.add_heading("4. Festgestellte Mängel", level=1)
doc.add_paragraph("Keine kritischen Mängel festgestellt.")
doc.add_paragraph()
doc.add_paragraph("Hinweise zur Optimierung:")
doc.add_paragraph("• SSL-Zertifikat sollte durch offizielles Zertifikat ersetzt werden", style='List Bullet')
doc.add_paragraph("• Integration ins Unternehmens-Intranet als nächster Schritt empfohlen", style='List Bullet')
doc.add_heading("5. Abnahmeerklärung", level=1)
doc.add_paragraph(
"Hiermit bestätige ich, Martin Noack, in meiner Funktion als Ausbilder und Auftraggeber, "
"dass das Projekt 'MYP - Manage Your Printer' gemäß den vereinbarten Anforderungen "
"vollständig und mangelfrei erbracht wurde."
)
doc.add_paragraph()
doc.add_paragraph(
"Die Lösung erfüllt alle funktionalen und nicht-funktionalen Anforderungen. "
"Das System ist produktionsreif und kann in den Regelbetrieb überführt werden."
)
doc.add_paragraph()
doc.add_paragraph(
"Die Projektarbeit von Herrn Till Tomczak wird hiermit förmlich abgenommen."
)
doc.add_paragraph()
doc.add_paragraph()
doc.add_paragraph()
# Unterschriftenbereich
table3 = doc.add_table(rows=3, cols=2)
cells = table3.rows[0].cells
cells[0].text = "_________________________"
cells[1].text = "_________________________"
cells = table3.rows[1].cells
cells[0].text = "Martin Noack"
cells[1].text = "Till Tomczak"
cells = table3.rows[2].cells
cells[0].text = "(Auftraggeber)"
cells[1].text = "(Auftragnehmer)"
doc.add_paragraph()
doc.add_paragraph("Berlin, den 20.05.2025")
doc.save(os.path.join(output_dir, "05_Abnahmeprotokoll.docx"))
# 6. Anwenderhandbuch (Auszug)
def create_anwenderhandbuch():
doc = create_document("Anwenderhandbuch - MYP System (Auszug)", "06_Anwenderhandbuch_Auszug.docx")
doc.add_heading("1. Systemzugang", level=1)
doc.add_heading("1.1 Anmeldung", level=2)
doc.add_paragraph(
"1. Öffnen Sie einen Webbrowser und navigieren Sie zu: https://192.168.0.50"
)
doc.add_paragraph(
"2. Geben Sie Ihre Zugangsdaten ein:"
)
doc.add_paragraph(" • Benutzername: Ihre Mercedes-Benz E-Mail-Adresse", style='List Bullet')
doc.add_paragraph(" • Passwort: Ihr persönliches Passwort (min. 15 Zeichen)", style='List Bullet')
doc.add_paragraph(
"3. Klicken Sie auf 'Anmelden'"
)
doc.add_paragraph()
doc.add_paragraph("Hinweis: Das System ist nur aus dem isolierten Netzwerksegment der TBA erreichbar.")
doc.add_heading("2. Reservierung erstellen", level=1)
doc.add_heading("2.1 Drucker auswählen", level=2)
doc.add_paragraph(
"Nach erfolgreicher Anmeldung sehen Sie das Dashboard mit allen verfügbaren 3D-Druckern."
)
doc.add_paragraph("• Grün = Verfügbar", style='List Bullet')
doc.add_paragraph("• Rot = Belegt", style='List Bullet')
doc.add_paragraph("• Gelb = Reserviert", style='List Bullet')
doc.add_heading("2.2 Zeitraum festlegen", level=2)
doc.add_paragraph(
"1. Klicken Sie auf einen verfügbaren Drucker"
)
doc.add_paragraph(
"2. Wählen Sie im Kalender:"
)
doc.add_paragraph(" • Startdatum und -zeit", style='List Bullet')
doc.add_paragraph(" • Enddatum und -zeit", style='List Bullet')
doc.add_paragraph(
"3. Geben Sie eine Beschreibung Ihres Druckauftrags ein"
)
doc.add_paragraph(
"4. Klicken Sie auf 'Reservieren'"
)
doc.add_heading("2.3 Bestätigung", level=2)
doc.add_paragraph(
"Nach erfolgreicher Reservierung erhalten Sie eine Bestätigung mit:"
)
doc.add_paragraph("• Reservierungsnummer", style='List Bullet')
doc.add_paragraph("• QR-Code für schnellen Zugriff", style='List Bullet')
doc.add_paragraph("• Zeitfenster Ihrer Reservierung", style='List Bullet')
doc.add_heading("3. Wichtige Hinweise", level=1)
doc.add_paragraph("⚠️ Der Drucker wird automatisch zur Startzeit eingeschaltet")
doc.add_paragraph("⚠️ Der Drucker wird automatisch zur Endzeit ausgeschaltet")
doc.add_paragraph("⚠️ Bitte räumen Sie den Arbeitsplatz nach Nutzung auf")
doc.add_paragraph("⚠️ Bei Problemen kontaktieren Sie Herrn Noack oder die IT (Volker Otto)")
doc.add_heading("4. Sicherheitshinweise", level=1)
doc.add_paragraph(
"• Geben Sie Ihre Zugangsdaten nicht an Dritte weiter"
)
doc.add_paragraph(
"• Melden Sie sich nach der Nutzung ab"
)
doc.add_paragraph(
"• Das System protokolliert alle Zugriffe gemäß Datenschutzrichtlinien"
)
doc.add_heading("5. Support", level=1)
doc.add_paragraph("Bei technischen Problemen wenden Sie sich an:")
doc.add_paragraph("• Martin Noack (Ausbilder): martin.noack@mercedes-benz.com")
doc.add_paragraph("• IT-Support: Volker Otto (volker.otto@mercedes-benz.com)")
doc.add_paragraph("• Notfall-Hotline: Intern 2840")
doc.save(os.path.join(output_dir, "06_Anwenderhandbuch_Auszug.docx"))
# 7. Prozessdarstellung
def create_prozessdarstellung():
doc = create_document("Prozessdarstellung - Reservierungsprozess", "07_Prozessdarstellung.docx")
doc.add_heading("1. Prozessübersicht", level=1)
doc.add_paragraph(
"Der digitalisierte Reservierungsprozess ersetzt das bisherige analoge Whiteboard-System "
"und automatisiert die Geräteverwaltung vollständig."
)
doc.add_heading("2. Prozessschritte", level=1)
# Tabelle für Prozessschritte
table = doc.add_table(rows=1, cols=4)
table.style = 'Light Grid Accent 1'
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Schritt'
hdr_cells[1].text = 'Akteur'
hdr_cells[2].text = 'Aktion'
hdr_cells[3].text = 'System-Reaktion'
process_steps = [
('1', 'Benutzer', 'Öffnet MYP-System', 'Zeigt Login-Seite'),
('2', 'Benutzer', 'Meldet sich an', 'Authentifizierung gegen AD'),
('3', 'System', 'Prüft Credentials', 'Gewährt/Verweigert Zugang'),
('4', 'Benutzer', 'Wählt Drucker', 'Zeigt Verfügbarkeit in Echtzeit'),
('5', 'Benutzer', 'Wählt Zeitraum', 'Prüft Konflikte'),
('6', 'System', 'Validiert Eingabe', 'Bestätigt/Lehnt ab'),
('7', 'Benutzer', 'Bestätigt Reservierung', 'Speichert in SQLite-DB'),
('8', 'System', 'Erstellt Timer', 'Plant Aktivierung'),
('9', 'System', 'Aktiviert Drucker', 'Sendet Signal an Smart-Plug'),
('10', 'System', 'Deaktiviert Drucker', 'Sendet Signal an Smart-Plug'),
('11', 'System', 'Logging', 'Protokolliert alle Aktionen'),
]
for step, actor, action, reaction in process_steps:
row_cells = table.add_row().cells
row_cells[0].text = step
row_cells[1].text = actor
row_cells[2].text = action
row_cells[3].text = reaction
doc.add_paragraph()
doc.add_heading("3. Technische Prozessdetails", level=1)
doc.add_heading("3.1 Authentifizierung", level=2)
doc.add_paragraph("• Erfolg → Session-Cookie (30 Min Gültigkeit)")
doc.add_paragraph("• Fehler → Zurück zu Login mit Fehlermeldung")
doc.add_paragraph("• 3 Fehlversuche → 5 Minuten Sperrzeit")
doc.add_heading("3.2 Smart-Plug-Kommunikation", level=2)
doc.add_paragraph("• Protokoll: Proprietäres TP-Link API")
doc.add_paragraph("• Port: 9999 (TCP)")
doc.add_paragraph("• Verschlüsselung: AES-128")
doc.add_paragraph("• Timeout: 5 Sekunden")
doc.add_paragraph("• Retry: 3 Versuche")
doc.add_heading("4. Automatisierte Hintergrundprozesse", level=1)
table2 = doc.add_table(rows=1, cols=3)
table2.style = 'Light Grid Accent 1'
hdr_cells = table2.rows[0].cells
hdr_cells[0].text = 'Prozess'
hdr_cells[1].text = 'Intervall'
hdr_cells[2].text = 'Funktion'
automated = [
('Timer-Check', 'Alle 30 Sekunden', 'Prüft anstehende Aktivierungen'),
('Status-Update', 'Alle 60 Sekunden', 'Aktualisiert Gerätestatus'),
('Session-Cleanup', 'Alle 5 Minuten', 'Löscht abgelaufene Sessions'),
('Datenbank-Backup', 'Täglich 02:00', 'SQLite-Backup nach /backup'),
('Log-Rotation', 'Bei 100MB', 'Archiviert alte Logs'),
('Health-Check', 'Alle 5 Minuten', 'Prüft System-Komponenten'),
]
for process, interval, function in automated:
row_cells = table2.add_row().cells
row_cells[0].text = process
row_cells[1].text = interval
row_cells[2].text = function
doc.add_paragraph()
doc.add_heading("5. Fehlerbehandlung", level=1)
doc.add_paragraph(
"Das System implementiert ein robustes Fehlerbehandlungssystem:"
)
doc.add_paragraph("1. Exception Logging mit Stacktrace", style='List Number')
doc.add_paragraph("2. Benutzerfreundliche Fehlermeldungen", style='List Number')
doc.add_paragraph("3. Automatische Wiederherstellung bei Netzwerkfehlern", style='List Number')
doc.add_paragraph("4. Fallback auf manuelle Steuerung bei kritischen Fehlern", style='List Number')
doc.add_paragraph("5. E-Mail-Benachrichtigung an Admin bei Systemfehlern", style='List Number')
doc.save(os.path.join(output_dir, "07_Prozessdarstellung.docx"))
# 8. Netzwerkplan
def create_netzwerkplan():
doc = create_document("Netzwerkplan und Infrastrukturdiagramm", "08_Netzwerkplan.docx")
doc.add_heading("1. Netzwerkübersicht", level=1)
doc.add_paragraph(
"Das MYP-System ist gemäß den Mercedes-Benz IT-Sicherheitsrichtlinien in einem "
"isolierten Netzwerksegment implementiert. Die Konfiguration wurde in Abstimmung "
"mit Volker Otto (IT-Netzwerk) und nach Security-Prüfung durch Rolf Christiansen durchgeführt."
)
doc.add_heading("2. IP-Adressplan", level=1)
table = doc.add_table(rows=1, cols=5)
table.style = 'Light Grid Accent 1'
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Gerät'
hdr_cells[1].text = 'IP-Adresse'
hdr_cells[2].text = 'MAC-Adresse'
hdr_cells[3].text = 'VLAN'
hdr_cells[4].text = 'Funktion'
network_devices = [
('Router/Gateway', '192.168.0.1', 'Auto', '100', 'Netzwerk-Gateway'),
('Raspberry Pi 5', '192.168.0.50', '2C:CF:67:XX:XX:XX', '100', 'MYP-Server'),
('Smart-Plug 1', '192.168.0.100', '54:AF:97:XX:XX:01', '100', '3D-Drucker Prusa 1'),
('Smart-Plug 2', '192.168.0.101', '54:AF:97:XX:XX:02', '100', '3D-Drucker Prusa 2'),
('Smart-Plug 3', '192.168.0.102', '54:AF:97:XX:XX:03', '100', '3D-Drucker Anycubic 1'),
('Smart-Plug 4', '192.168.0.103', '54:AF:97:XX:XX:04', '100', '3D-Drucker Anycubic 2'),
('Smart-Plug 5', '192.168.0.104', '54:AF:97:XX:XX:05', '100', '3D-Drucker Prusa 3'),
('Smart-Plug 6', '192.168.0.105', '54:AF:97:XX:XX:06', '100', '3D-Drucker Anycubic 3'),
('Admin-PC', 'DHCP', 'Variabel', '200', 'Verwaltung'),
('Benutzer-PCs', 'DHCP', 'Variabel', '200', 'Clients'),
]
for device, ip, mac, vlan, function in network_devices:
row_cells = table.add_row().cells
row_cells[0].text = device
row_cells[1].text = ip
row_cells[2].text = mac
row_cells[3].text = vlan
row_cells[4].text = function
doc.add_paragraph()
doc.add_heading("3. Netzwerktopologie", level=1)
doc.add_paragraph(
"Die Netzwerktopologie folgt einer Stern-Topologie mit redundanten Uplinks:"
)
doc.add_paragraph()
doc.add_paragraph(" [Mercedes-Benz Core Network]")
doc.add_paragraph(" |")
doc.add_paragraph(" [Firewall]")
doc.add_paragraph(" |")
doc.add_paragraph(" [L3-Switch (VLAN-Routing)]")
doc.add_paragraph(" / \\")
doc.add_paragraph(" VLAN 100 VLAN 200")
doc.add_paragraph(" (IoT/Server) (Clients)")
doc.add_paragraph(" | |")
doc.add_paragraph(" [L2-Switch] [L2-Switch]")
doc.add_paragraph(" / | \\ |")
doc.add_paragraph(" [RPi5] [Smart-Plugs] [PCs]")
doc.add_heading("4. Sicherheitszonen", level=1)
doc.add_heading("Zone 1: IoT/Server-Segment (VLAN 100)", level=2)
doc.add_paragraph("• Raspberry Pi 5 (MYP-Server)")
doc.add_paragraph("• Smart-Plugs (192.168.0.100-105)")
doc.add_paragraph("• Keine direkte Internetverbindung")
doc.add_paragraph("• Zugriff nur über definierte Ports")
doc.add_paragraph("• MAC-Adress-Filterung aktiv")
doc.add_heading("Zone 2: Client-Netzwerk (VLAN 200)", level=2)
doc.add_paragraph("• Benutzer-PCs (DHCP-Bereich)")
doc.add_paragraph("• Zugriff auf MYP über HTTPS (Port 443)")
doc.add_paragraph("• Getrennt vom IoT-Segment")
doc.add_heading("5. Firewall-Regeln", level=1)
table2 = doc.add_table(rows=1, cols=6)
table2.style = 'Light Grid Accent 1'
hdr_cells = table2.rows[0].cells
hdr_cells[0].text = 'Regel'
hdr_cells[1].text = 'Von'
hdr_cells[2].text = 'Nach'
hdr_cells[3].text = 'Port'
hdr_cells[4].text = 'Protokoll'
hdr_cells[5].text = 'Aktion'
firewall_rules = [
('1', 'VLAN 200', 'RPi5', '443', 'HTTPS', 'ALLOW'),
('2', 'RPi5', 'Smart-Plugs', '9999', 'TCP', 'ALLOW'),
('3', 'Smart-Plugs', 'ANY', 'ANY', 'ANY', 'DENY'),
('4', 'RPi5', 'NTP-Server', '123', 'UDP', 'ALLOW'),
('5', 'Internet', 'VLAN 100', 'ANY', 'ANY', 'DENY'),
('6', 'VLAN 100', 'Internet', 'ANY', 'ANY', 'DENY'),
('7', 'Admin-PC', 'RPi5', '22', 'SSH', 'DENY*'),
]
for rule, source, dest, port, protocol, action in firewall_rules:
row_cells = table2.add_row().cells
row_cells[0].text = rule
row_cells[1].text = source
row_cells[2].text = dest
row_cells[3].text = port
row_cells[4].text = protocol
row_cells[5].text = action
doc.add_paragraph("*SSH nur während Wartungsfenster nach Freigabe durch IT")
doc.add_heading("6. Sicherheitsmaßnahmen", level=1)
doc.add_paragraph(
"Gemäß Security Scan von Rolf Christiansen (06.05.2025) implementiert:"
)
doc.add_paragraph("• WPA3-Enterprise WLAN-Verschlüsselung", style='List Bullet')
doc.add_paragraph("• 802.1X Port-basierte Authentifizierung", style='List Bullet')
doc.add_paragraph("• VLAN-Segmentierung", style='List Bullet')
doc.add_paragraph("• Intrusion Detection System (IDS)", style='List Bullet')
doc.add_paragraph("• Logging aller Zugriffe", style='List Bullet')
doc.add_paragraph("• Regelmäßige Security-Updates", style='List Bullet')
doc.save(os.path.join(output_dir, "08_Netzwerkplan.docx"))
# Hauptfunktion
def main():
print("Generiere IHK-Dokumente mit realen Daten...")
try:
print("1. Erstelle Berufsspezifika...")
create_berufsspezifika()
print("2. Erstelle Gesprächsprotokoll...")
create_gespraechsprotokoll()
print("3. Erstelle Mess- und Prüfprotokoll...")
create_pruefprotokoll()
print("4. Erstelle Übergabeprotokoll...")
create_uebergabeprotokoll()
print("5. Erstelle Abnahmeprotokoll...")
create_abnahmeprotokoll()
print("6. Erstelle Anwenderhandbuch (Auszug)...")
create_anwenderhandbuch()
print("7. Erstelle Prozessdarstellung...")
create_prozessdarstellung()
print("8. Erstelle Netzwerkplan...")
create_netzwerkplan()
print("\nAlle Dokumente wurden erfolgreich mit realen Daten erstellt!")
print("\nHinweise:")
print("- Martin Noack ist als Auftraggeber und Ausbilder dargestellt")
print("- Torben Haack wird nur als ehemaliger Azubi erwähnt, der den Prototyp bereitstellte")
print("- Reale Personen aus den E-Mails wurden eingebunden (Rolf Christiansen, Volker Otto)")
print("- Daten wurden auf April/Mai 2025 angepasst")
print("- Abnahmeprotokoll wurde stilistisch verbessert")
except Exception as e:
print(f"Fehler beim Erstellen der Dokumente: {e}")
if __name__ == "__main__":
main()