🎉 Added IHK project documentation files in Word format 🎨
This commit is contained in:
parent
76e4c2ccad
commit
413c44aaa0
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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()
|
Loading…
x
Reference in New Issue
Block a user