🎉 Added IHK project documentation files and script for generating documents 🎨📚
This commit is contained in:
parent
6bce0b4f9a
commit
c853817c02
13
.claude/settings.local.json
Normal file
13
.claude/settings.local.json
Normal 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": []
|
||||
}
|
||||
}
|
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,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()
|
Loading…
x
Reference in New Issue
Block a user