SpeamPlan — Brandschutz-Grundrissplanung
Zweck
SpeamPlan ist das Planungsmodul für Brandmeldeanlagen. Es wird als eigenes Modul angeboten, ist aber direkt in SpeamCore integriert — der Errichter plant im selben System, in dem er Kunden, Standorte, Anlagen und Aufträge führt.
Der Ablauf: einen Grundriss (DWG/DXF/PDF) je Etage hochladen, die Räume erkennen lassen, den Maßstab kalibrieren, die erforderlichen Melder normgerecht berechnen (nach DIN 14675 / DIN VDE 0833-2 / VdS 2095) und die Melder platzieren. Das Ergebnis wird strukturiert gespeichert (Etagen, Räume, Melder).
Voraussetzungen
Berechtigungen (CASL)
Frontend-Page-Guard (requiredAbility in routes.tsx):
| Route | Guard |
|---|---|
/plans (Liste) | view Plan |
/plans/:id (Editor) | view Plan |
Datenzugriff (caslMiddleware): je Aktion view/create/update/delete auf die Subjects Plan, PlanFloor, PlanRoom, PlanDetector. Die Norm-Berechnung (POST /plans/calculate) erfordert view Plan.
Ablauf
1. Plan anlegen
Unter SpeamPlan (/plans) → + Neu: Name, optional Kunde, Standort und Projekt, dazu die Aufnahme-Angaben Gebäudetyp (buildingType) und Schutzkategorie (protectionCategory). Optional lässt sich schon beim Anlegen ein Grundriss hochladen.
2. Grundriss je Etage hochladen
Ein Plan hat mehrere Etagen (PlanFloor). Pro Etage wird eine Datei hochgeladen (POST /plan-floors/:id/upload): DWG, DXF oder PDF/Bild. PDFs/Bilder werden gerendert (PNG in doppelter Auflösung für die KI-Erkennung), CAD-Dateien für die Vektor-Auswertung vorbereitet.
3. Räume erkennen
Drei Wege, je nach Datenlage:
| Methode | Endpoint | Grundlage |
|---|---|---|
| Geometrisch | POST /plan-floors/:id/detect-rooms | geschlossene Wandzüge aus der DXF-Vektorgeometrie (Türöffnungen werden überbrückt) |
| KI-Vision | POST /plan-floors/:id/detect-rooms-ai | Analyse des gerenderten Grundriss-Bildes durch die KI (erkennt Raumgrenzen, Name, Typ) |
| Aus Viewer-Geometrie | POST /plan-floors/:id/detect-rooms-from-walls | Wand-Segmente aus dem geladenen APS/Forge-Modell (robust bei komplexen DWGs mit Blöcken/Xrefs) |
Erkannte Räume werden als PlanRoom gespeichert (Polygon, Fläche, Typ, Höhe, ZMA-Stufe).
4. Maßstab kalibrieren
Über eine Referenzstrecke wird der Maßstab (Pixel ↔ Meter) gesetzt; POST /plan-floors/:id/scale rechnet Geometrie, Räume und Melder konsistent um.
5. Norm-Berechnung
POST /plans/calculate berechnet zustandslos (ohne Persistenz) je Raum die erforderlichen Melder nach DIN 14675 / DIN VDE 0833-2 / VdS 2095. Eingang je Raum: Länge, Breite, Höhe, optional Dachschräge/Wölbung, ZMA-Stufe (none/zma30/zma50), Türen ins Freie und Fluchtweglänge. Ergebnis (RoomCalcResult):
- RM (Rauchmelder) und WM (Wärmemelder): Melder-Anzahl, Überwachungsfläche je Melder, Raster (Spalten × Zeilen), Abstände, Radius, Positionen.
- HFM (Handfeuermelder): Anzahl aus Türen/Fluchtweg.
- Warnungen bei Sonderfällen (z. B. sehr große Flächen, Höhen über Norm-Maximum).
Die Engine ist gegen einen Satz Referenzfälle aus der Ingenieurs-Tabelle abgesichert.
6. Melder platzieren und speichern
Im Editor werden die berechneten Melder automatisch ins Raster gesetzt oder manuell verschoben/ergänzt und als PlanDetector gespeichert (Typ rm/wm/manual_call_point/siren, Position, Radius, productCode).
Editor (/plans/:id)
Der Plan-Editor bietet:
- Multi-Etagen — Umschalter zwischen den
PlanFloors. - Zwei Ansichten: ein Autodesk-APS/Forge-Viewer (native DWG-2D/3D-Darstellung, Layer-Auswahl, Wand-Extraktion) und ein Fallback-Canvas mit parametrischem Wand-Editieren (
wallEditing.ts). - Raum-Panel — Länge/Breite/Höhe, ZMA, Türen/Fluchtweg je Raum.
- Live-Berechnung — Melderzahlen aktualisieren sich mit den Raumdaten.
Datenmodell
| Modell | Wichtige Felder | Relation |
|---|---|---|
Plan | name, customerId, locationId, projectId, status (draft/active/archived), buildingType, protectionCategory | — |
PlanFloor | planId, name, order, fileType (dxf/dwg/pdf), status (created/processing/roomsDetected/ready/failed), geometry (JSON, Wände in Metern), scale, floorHeightCm | N:1 Plan |
PlanRoom | planFloorId, name, type (general_room/hallway/staircase_elevator/technical/wet/unmatched), outerBoundary (Polygon), areaSqm, heightCm, zma, doorsToOutside, escapeRouteM, ignored | N:1 PlanFloor |
PlanDetector | planFloorId, planRoomId, kind (rm/wm/manual_call_point/siren), position {x,y}, radiusM, source (auto/manual), productCode, label | N:1 PlanFloor |
Grundriss-Verarbeitung (DWG/DXF)
- Konvertierung: DWG → DXF über den ODA File Converter (produktiv) bzw. LibreDWG (
dwg2dxf, Fallback). Aus dem DXF werden Wände (Polylinien), Türen (Blöcke) und Beschriftungen (Text) extrahiert; die Einheit wird aus$INSUNITSmit Plausibilitätsprüfung abgeleitet. - Autodesk Platform Services (APS/Forge): Für die native Darstellung wird die Datei zu APS übersetzt (
POST /plan-floors/:id/translate, Model Derivative → SVF) und mit einem kurzlebigen Viewer-Token (GET /plan-floors/:id/viewer-token) im Editor geladen. Aus dem geladenen Modell lassen sich Wand-Segmente vollständig extrahieren. - Wand-Layer:
POST /plan-floors/:id/wall-layerwählt den relevanten CAD-Layer und parst die Geometrie neu.
Verknüpfungen zu anderen Modulen
- Standorte / Kunden / Projekte — optionale Zuordnung eines Plans.
- Anlagen am Standort — die geplante Brandmeldeanlage (Zielobjekt der Planung).
- Verkaufsbelege / Aufträge / Produkte — Ausblick: künftige Weiterverarbeitung eines Plans in Angebot/Auftrag inkl. Melder-Stückliste (siehe Hinweis unter „Zweck").
Wiederverwendbare Konzepte
API/Schnittstellen (Auswahl)
| Methode | Endpoint | Zweck | CASL |
|---|---|---|---|
POST | /api/plans/calculate | zustandslose Norm-Berechnung je Raum | view Plan |
GET/POST | /api/plans | Pläne lesen/anlegen | view/create Plan |
PATCH/DELETE | /api/plans/:id | ändern/löschen | update/delete Plan |
POST | /api/plan-floors/:id/upload | Grundriss hochladen | update PlanFloor |
POST | /api/plan-floors/:id/detect-rooms · /detect-rooms-ai | Raumerkennung (geometrisch / KI) | update PlanFloor |
POST | /api/plan-floors/:id/scale | Maßstab setzen + umrechnen | update PlanFloor |
GET | /api/plan-floors/:id/viewer-token | APS-Viewer-Token | view PlanFloor |
GET/POST/PATCH | /api/plan-rooms, /api/plan-detectors | Räume und Melder pflegen | je PlanRoom/PlanDetector |
Versionshinweise
- 2026-07-06: Initiale Veröffentlichung — SpeamPlan-Integration in SpeamCore dokumentiert: Grundriss-Upload (DWG/DXF/PDF), Raumerkennung (geometrisch, KI-Vision, APS), Maßstab-Kalibrierung, Norm-Berechnung nach DIN 14675 (
POST /plans/calculate, RM/WM/HFM), Multi-Etagen-Editor mit Melder-Platzierung. Weiterverarbeitung (Plan → Angebot/Auftrag) als in Entwicklung gekennzeichnet (im Code noch nicht umgesetzt — verifiziert). Verifiziert anplan.model.ts,planFloor.model.ts,planRoom.model.ts,planDetector.model.ts,plan.router.ts,planFloor.router.ts,planCalc/engine.ts,PlanListPage.tsx,PlanEditorPage.tsx,routes.tsx,casl.ts.