🎉 Added IHK project documentation files and script for generating documents 🎨📚

This commit is contained in:
Till Tomczak 2025-06-04 13:57:07 +02:00
parent 6bce0b4f9a
commit c853817c02
10 changed files with 713 additions and 0 deletions

View File

@ -0,0 +1,13 @@
{
"permissions": {
"allow": [
"Bash(mkdir:*)",
"Bash(pip install:*)",
"Bash(python3 -m pip install:*)",
"Bash(apt list:*)",
"Bash(python3:*)",
"Bash(ls:*)"
],
"deny": []
}
}

View File

@ -0,0 +1,700 @@
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_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_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_heading("4. Sicherheitsaspekte", level=2)
doc.add_paragraph(
"Die Informationssicherheit wurde durch folgende Maßnahmen gewährleistet:"
)
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.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("• Herr Schmidt (Ausbildungsleiter)", style='List Bullet')
doc.add_paragraph("• Frau Müller (IT-Abteilung)", style='List Bullet')
doc.add_paragraph("• Herr Weber (Werkstattleiter)", 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_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."
)
doc.add_heading("2. Technische Anforderungen", level=3)
doc.add_paragraph(
"Frau Müller betonte die Notwendigkeit der Offline-Funktionalität gemäß Unternehmensrichtlinien. "
"Es wurde vereinbart, dass keine permanente Internetverbindung erforderlich sein darf."
)
doc.add_heading("3. Sicherheitsaspekte", level=3)
doc.add_paragraph(
"Folgende Sicherheitsanforderungen wurden definiert:"
)
doc.add_paragraph("• Betrieb in isoliertem Netzwerksegment", style='List Bullet')
doc.add_paragraph("• Verschlüsselte Kommunikation", style='List Bullet')
doc.add_paragraph("• Mehrstufige Authentifizierung", style='List Bullet')
doc.add_heading("4. Ressourcen", level=3)
doc.add_paragraph(
"Budget genehmigt für:"
)
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_heading("Vereinbarungen", level=2)
doc.add_paragraph("• Projektstart: 15.04.2025")
doc.add_paragraph("• Projektende: 20.05.2025")
doc.add_paragraph("• Wöchentliche Statusberichte")
doc.add_paragraph("• Finale Präsentation 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. 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("2. 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("3. Sicherheitsprüfung", level=2)
doc.add_paragraph("SQL-Injection Test: BESTANDEN")
doc.add_paragraph("XSS-Test: BESTANDEN")
doc.add_paragraph("CSRF-Protection: AKTIV")
doc.add_paragraph("Rate-Limiting Test: FUNKTIONIERT (max. 10 Anfragen/Minute)")
doc.add_paragraph("SSL-Zertifikat: GÜLTIG")
doc.add_heading("4. 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.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: Herr Weber")
doc.add_paragraph("Funktion: Werkstattleiter")
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", style='List Bullet')
doc.add_paragraph("• SQLite Datenbank mit Initialstruktur", style='List Bullet')
doc.add_paragraph("• Konfigurationsdateien", 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_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")
doc.add_paragraph("Datenbank: /opt/myp/database/myp.db")
doc.add_heading("Systemstatus", level=2)
doc.add_paragraph("☑ System vollständig installiert und konfiguriert")
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."
)
doc.add_paragraph()
doc.add_paragraph()
doc.add_paragraph("_________________________ _________________________")
doc.add_paragraph("Till Tomczak Herr Weber")
doc.add_paragraph("(Übergeber) (Übernehmer)")
doc.save(os.path.join(output_dir, "04_Uebergabeprotokoll.docx"))
# 5. Abnahmeprotokoll
def create_abnahmeprotokoll():
doc = create_document("Abnahmeprotokoll - Projekt MYP", "05_Abnahmeprotokoll.docx")
doc.add_paragraph(f"Datum: 20.05.2025")
doc.add_paragraph(f"Projekt: MYP - Manage Your Printer")
doc.add_paragraph(f"Auftragnehmer: Till Tomczak")
doc.add_paragraph(f"Auftraggeber: Mercedes-Benz AG, Technische Berufsausbildungsstätte")
doc.add_paragraph()
doc.add_heading("1. Prüfung der Projektergebnisse", level=2)
table = doc.add_table(rows=1, cols=3)
table.style = 'Light Grid Accent 1'
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Anforderung'
hdr_cells[1].text = 'Erfüllt'
hdr_cells[2].text = 'Bemerkung'
requirements = [
('Digitale Reservierungsverwaltung', 'Ja', 'Vollständig implementiert'),
('Automatische Gerätesteuerung', 'Ja', 'Via Smart-Plugs realisiert'),
('Benutzerauthentifizierung', 'Ja', 'Sichere Implementierung'),
('Administratorfunktionen', 'Ja', 'Rollentrennung vorhanden'),
('Offline-Funktionalität', 'Ja', 'Keine Internetverbindung nötig'),
('Zeitgesteuerte Aktivierung', 'Ja', 'Präzision ±1 Sekunde'),
('Reporting-Funktionen', 'Ja', 'Export als CSV möglich'),
('Responsive Design', 'Ja', 'Mobile Nutzung möglich'),
]
for req, fulfilled, note in requirements:
row_cells = table.add_row().cells
row_cells[0].text = req
row_cells[1].text = fulfilled
row_cells[2].text = note
doc.add_paragraph()
doc.add_heading("2. Funktionsprüfung", level=2)
doc.add_paragraph("Alle Systemfunktionen wurden gemäß Testprotokoll geprüft und für funktionsfähig befunden.")
doc.add_heading("3. Dokumentationsprüfung", level=2)
doc.add_paragraph("☑ Technische Dokumentation vollständig")
doc.add_paragraph("☑ Benutzerdokumentation vorhanden")
doc.add_paragraph("☑ Administratorhandbuch erstellt")
doc.add_paragraph("☑ API-Dokumentation komplett")
doc.add_heading("4. Mängel", level=2)
doc.add_paragraph("Keine kritischen Mängel festgestellt.")
doc.add_paragraph()
doc.add_paragraph("Kleinere Optimierungen:")
doc.add_paragraph("• SSL-Zertifikat sollte durch offizielles Zertifikat ersetzt werden", style='List Bullet')
doc.add_paragraph("• Integration ins Unternehmens-Intranet noch ausstehend", style='List Bullet')
doc.add_heading("5. Abnahmeerklärung", level=2)
doc.add_paragraph(
"Das Projekt MYP wird hiermit abgenommen. Die vereinbarten Leistungen wurden "
"vollständig und in der geforderten Qualität erbracht. Das System ist betriebsbereit "
"und kann in den Produktivbetrieb überführt werden."
)
doc.add_paragraph()
doc.add_paragraph()
doc.add_paragraph("_________________________ _________________________")
doc.add_paragraph("Herr Schmidt Till Tomczak")
doc.add_paragraph("(Ausbildungsleiter) (Projektleiter)")
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 E-Mail-Adresse", style='List Bullet')
doc.add_paragraph(" • Passwort: Ihr persönliches Passwort", style='List Bullet')
doc.add_paragraph(
"3. Klicken Sie auf 'Anmelden'"
)
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 den Administrator")
doc.add_heading("4. Häufige Fragen", level=1)
doc.add_heading("Kann ich eine Reservierung stornieren?", level=3)
doc.add_paragraph(
"Ja, gehen Sie zu 'Meine Reservierungen' und klicken Sie auf 'Stornieren'. "
"Dies ist bis 30 Minuten vor Beginn möglich."
)
doc.add_heading("Was passiert bei Stromausfall?", level=3)
doc.add_paragraph(
"Das System startet automatisch neu. Ihre Reservierungen bleiben erhalten. "
"Die Drucker müssen ggf. manuell neu gestartet werden."
)
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 gliedert sich in folgende Hauptphasen:"
)
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, Session-Start'),
('3', 'System', 'Prüft Credentials', 'Gewährt/Verweigert Zugang'),
('4', 'Benutzer', 'Wählt Drucker', 'Zeigt Verfügbarkeit'),
('5', 'Benutzer', 'Wählt Zeitraum', 'Prüft Konflikte'),
('6', 'System', 'Validiert Eingabe', 'Bestätigt/Lehnt ab'),
('7', 'Benutzer', 'Bestätigt Reservierung', 'Speichert in 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'),
]
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. Entscheidungspunkte", level=1)
doc.add_heading("3.1 Authentifizierung", level=2)
doc.add_paragraph("• Erfolg → Weiter zu Dashboard")
doc.add_paragraph("• Fehler → Zurück zu Login mit Fehlermeldung")
doc.add_heading("3.2 Verfügbarkeitsprüfung", level=2)
doc.add_paragraph("• Verfügbar → Reservierung möglich")
doc.add_paragraph("• Belegt → Alternative Zeiten vorschlagen")
doc.add_heading("3.3 Validierung", level=2)
doc.add_paragraph("• Gültig → Reservierung speichern")
doc.add_paragraph("• Ungültig → Fehlermeldung anzeigen")
doc.add_heading("4. Automatisierte Prozesse", 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 = 'Trigger'
hdr_cells[2].text = 'Aktion'
automated = [
('Drucker-Aktivierung', 'Startzeit erreicht', 'Smart-Plug einschalten'),
('Drucker-Deaktivierung', 'Endzeit erreicht', 'Smart-Plug ausschalten'),
('Session-Timeout', '30 Min Inaktivität', 'Automatischer Logout'),
('Datenbank-Backup', 'Täglich 02:00', 'SQLite-Backup erstellen'),
('Log-Rotation', 'Log > 100MB', 'Archivierung und Neustart'),
]
for process, trigger, action in automated:
row_cells = table2.add_row().cells
row_cells[0].text = process
row_cells[1].text = trigger
row_cells[2].text = action
doc.add_paragraph()
doc.add_heading("5. Fehlerbehandlung", level=1)
doc.add_paragraph(
"Bei Prozessfehlern greift ein mehrstufiges Fehlerbehandlungssystem:"
)
doc.add_paragraph("1. Logging des Fehlers", style='List Number')
doc.add_paragraph("2. Benachrichtigung des Administrators", style='List Number')
doc.add_paragraph("3. Automatischer Wiederholungsversuch (3x)", style='List Number')
doc.add_paragraph("4. Fallback auf manuelle Steuerung", 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 in einem isolierten Netzwerksegment implementiert, "
"um die Sicherheitsanforderungen zu erfüllen."
)
doc.add_heading("2. IP-Adressplan", level=1)
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 = 'Subnet'
hdr_cells[3].text = 'Funktion'
network_devices = [
('Router/Gateway', '192.168.0.1', '255.255.255.0', 'Netzwerk-Gateway'),
('Raspberry Pi 5', '192.168.0.50', '255.255.255.0', 'MYP-Server'),
('Smart-Plug 1', '192.168.0.100', '255.255.255.0', '3D-Drucker 1'),
('Smart-Plug 2', '192.168.0.101', '255.255.255.0', '3D-Drucker 2'),
('Smart-Plug 3', '192.168.0.102', '255.255.255.0', '3D-Drucker 3'),
('Smart-Plug 4', '192.168.0.103', '255.255.255.0', '3D-Drucker 4'),
('Smart-Plug 5', '192.168.0.104', '255.255.255.0', '3D-Drucker 5'),
('Smart-Plug 6', '192.168.0.105', '255.255.255.0', '3D-Drucker 6'),
('Admin-PC', 'DHCP', '255.255.255.0', 'Verwaltung'),
('Benutzer-PCs', 'DHCP', '255.255.255.0', 'Clients'),
]
for device, ip, subnet, function in network_devices:
row_cells = table.add_row().cells
row_cells[0].text = device
row_cells[1].text = ip
row_cells[2].text = subnet
row_cells[3].text = function
doc.add_paragraph()
doc.add_heading("3. Netzwerktopologie", level=1)
doc.add_paragraph(
"Die Netzwerktopologie folgt einer Stern-Topologie mit dem Switch als zentralem Punkt:"
)
doc.add_paragraph()
doc.add_paragraph(" [Internet]")
doc.add_paragraph(" |")
doc.add_paragraph(" [Router]")
doc.add_paragraph(" |")
doc.add_paragraph(" [Switch]")
doc.add_paragraph(" / | \\")
doc.add_paragraph(" / | \\")
doc.add_paragraph(" [RPi5] [Smart-Plugs] [Clients]")
doc.add_heading("4. Sicherheitszonen", level=1)
doc.add_heading("DMZ (Demilitarisierte Zone)", level=2)
doc.add_paragraph("• Raspberry Pi 5 (MYP-Server)")
doc.add_paragraph("• Zugriff nur über HTTPS (Port 443)")
doc.add_heading("IoT-Segment", level=2)
doc.add_paragraph("• Smart-Plugs (192.168.0.100-105)")
doc.add_paragraph("• Keine direkte Internetverbindung")
doc.add_paragraph("• Kommunikation nur mit MYP-Server")
doc.add_heading("Client-Netzwerk", level=2)
doc.add_paragraph("• Benutzer-PCs (DHCP-Bereich)")
doc.add_paragraph("• Zugriff auf MYP über Webbrowser")
doc.add_heading("5. Firewall-Regeln", level=1)
table2 = doc.add_table(rows=1, cols=5)
table2.style = 'Light Grid Accent 1'
hdr_cells = table2.rows[0].cells
hdr_cells[0].text = 'Von'
hdr_cells[1].text = 'Nach'
hdr_cells[2].text = 'Port'
hdr_cells[3].text = 'Protokoll'
hdr_cells[4].text = 'Aktion'
firewall_rules = [
('Client-Netz', 'RPi5', '443', 'HTTPS', 'ALLOW'),
('RPi5', 'Smart-Plugs', '9999', 'TCP', 'ALLOW'),
('Smart-Plugs', 'ANY', 'ANY', 'ANY', 'DENY'),
('RPi5', 'Internet', '123', 'NTP', 'ALLOW'),
('ANY', 'RPi5', '22', 'SSH', 'DENY'),
]
for source, dest, port, protocol, action in firewall_rules:
row_cells = table2.add_row().cells
row_cells[0].text = source
row_cells[1].text = dest
row_cells[2].text = port
row_cells[3].text = protocol
row_cells[4].text = action
doc.add_heading("6. Monitoring", level=1)
doc.add_paragraph(
"Das Netzwerk wird kontinuierlich überwacht:"
)
doc.add_paragraph("• Verfügbarkeit aller Smart-Plugs (Ping alle 60s)", style='List Bullet')
doc.add_paragraph("• CPU/RAM-Auslastung des Servers", style='List Bullet')
doc.add_paragraph("• Netzwerktraffic-Analyse", style='List Bullet')
doc.add_paragraph("• Log-Aggregation und -Analyse", style='List Bullet')
doc.save(os.path.join(output_dir, "08_Netzwerkplan.docx"))
# Hauptfunktion
def main():
print("Generiere IHK-Dokumente...")
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 erstellt!")
except Exception as e:
print(f"Fehler beim Erstellen der Dokumente: {e}")
if __name__ == "__main__":
main()