projekte:ionpy:ideen
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| projekte:ionpy:ideen [2026/02/13 08:47] – dominik | projekte:ionpy:ideen [2026/02/13 09:16] (current) – [Implementierung (Code-Skizze)] dominik | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== ionpy Framework: Erweiterte Architektur-Spezifikation ====== | + | ====== ionpy Framework: Erweiterte Architektur-Spezifikation |
| - | Dieses Dokument | + | Dieses Dokument |
| - | ===== 1. Dynamische Eingabesynchronisation (The Mute-Pattern) ===== | + | ===== 1. Dynamische Eingabesynchronisation (Race Condition Schutz) ===== |
| - | Problem: Race Conditions zwischen Hardware-Polling | + | Um zu verhindern, dass Hintergrund-Polling |
| - | ==== 1.1 Backend: | + | ==== 1.1 Backend: |
| - | [cite_start]Die Basisklasse | + | [cite_start]In der Klasse |
| - | * **Datenstruktur**: Ein Dictionary '' | + | * [cite_start]**Mechanismus**: Ein Dictionary '' |
| - | * **Code-Integration (hardware/ | + | * **Logik**: |
| - | * [cite_start]In '' | + | * [cite_start]Sobald |
| - | * [cite_start]In '' | + | * [cite_start]Die Methode |
| - | < | + | * **Ziel**: Die Hardware hat Zeit, den Wert intern zu setzen, und der Polling-Loop liest keine " |
| - | ==== 1.2 Frontend: Universeller Focus-Lock ==== | + | ==== 1.2 Frontend: Universeller Focus-Lock |
| - | In der '' | + | In der Web-UI (settings.html) wird eine automatische Erkennung aktiver Eingabefelder |
| - | * **Logik**: Verwendung | + | * **Mechanismus**: Nutzung |
| - | * **Code-Hint**: | + | * **Event-Delegation**: |
| - | | + | |
| - | const lockedFields = new Set(); | + | |
| - | containerEl.addEventListener(' | + | * **WebSocket-Logik**: Die Funktion '' |
| - | | + | |
| - | + | ||
| - | // Im WebSocket-Handler: | + | |
| - | if (lockedFields.has(`i-${sample.entity_id}`)) return; | + | |
| - | </ | + | |
| - | ===== 2. Strukturierte Daten: TableEntity ===== | + | ===== 2. Strukturierte Daten: TableEntity |
| - | [cite_start]Ermöglicht die Verwaltung von Profilen, Sequenzen und Speicherplätzen | + | Die '' |
| - | ==== 2.1 Datenmodell (structures/ | + | ==== 2.1 Datenstruktur & Schema |
| - | [cite_start]Erweiterung der Entitäten um einen tabellarischen Typ[cite: 413]: | + | Eine '' |
| - | * **TableEntity**: | + | * **Schema (columns)**: Definition der Spalten-Metadaten. |
| - | * [cite_start]'' | + | * Jede Spalte definiert: |
| - | * '' | + | * **Daten (value)**: Eine Liste von Dictionaries, |
| + | * **Typen**: Unterscheidung zwischen '' | ||
| - | ==== 2.2 UI-Repräsentation | + | ==== 2.2 Erweiterte Interaktions-Logik ==== |
| - | * Dynamische Generierung einer HTML-Tabelle. | + | * **Row-Updates**: Das Frontend sendet Koordinaten-Pakete: '' |
| - | | + | * **Atomic Row Actions**: Unterstützung einer Spalte vom Typ '' |
| - | | + | * **Active Row Tracking**: Ein zusätzliches Attribut '' |
| + | * **Zell-basiertes Muting**: Die Mute-Logik aus Kapitel 1 wird auf Zellebene angewendet, sodass eine Bearbeitung in Zeile 1 nicht die Live-Updates von Zeile 2 blockiert. | ||
| - | ===== 3. Gamepad-Steuerung | + | ===== 3. Gamepad-Integration (HID-Steuerung) ===== |
| - | Integration von Human Interface Devices zur haptischen | + | Haptische |
| - | ==== 3.1 Gamepad-Treiber | + | ==== 3.1 GamepadManager |
| - | Ein dedizierter | + | Ein neuer Treiber-Typ, der autonom nach Controllern sucht. |
| - | * **Threading**: Da Pygame einen eigenen Event-Loop benötigt, wird dieser in einem Thread gestartet: | + | * [cite_start]**Discovery**: Nutzt '' |
| - | < | + | * [cite_start]**GamepadEntity**: Eine neue Entitätsklasse, |
| - | def pygame_loop(self): | + | |
| - | while self.running: | + | |
| - | for event in pygame.event.get(): | + | |
| - | if event.type == pygame.JOYAXISMOTION: | + | |
| - | asyncio.run_coroutine_threadsafe(self.update_entity(...), self.loop) | + | |
| - | </ | + | |
| - | * **Entity-Mapping**: Der Controller wird als '' | + | |
| - | ==== 3.2 Discovery | + | ==== 3.2 Haptisches Feedback & Visualisierung |
| - | [cite_start]Der Treiber scannt beim Start mittels '' | + | |
| + | * **Sicherheitskonzept**: | ||
| - | ===== 4. LogicService: | + | ===== 4. LogicService: |
| - | [cite_start]Ein zentraler | + | [cite_start]Zentraler asynchroner |
| ==== 4.1 Die Rule-Engine ==== | ==== 4.1 Die Rule-Engine ==== | ||
| - | [cite_start]Der Dienst abonniert den '' | + | [cite_start]Der Dienst abonniert den '' |
| - | * **Beispiel-Regel (Mapping)**: | + | * [cite_start]**Trigger**: |
| - | * **Trigger**: | + | * **Transformation |
| - | * **Transformation**: | + | * [cite_start]**Action**: |
| - | * **Action**: '' | + | |
| - | ==== 4.2 Web-Konfigurator | + | ==== 4.2 Cross-Device Szenarien (Beispiele) |
| - | Ein universelles Frontend-Modul erlaubt | + | * **Synchronisation**: |
| - | * WENN [Gerät wählen] [Entität wählen] ÄNDERUNG > X% | + | * **Master-Slave**: Zwei Netzteile werden so gekoppelt, dass Kanal 2 immer exakt dem Wert von Kanal 1 folgt. |
| - | | + | |
| - | ===== 5. Erweiterter Entitäten-Katalog | + | ===== 5. Erweiterter Entitäten-Katalog ===== |
| + | [cite_start]Zusätzliche spezialisierte Typen für professionelle Laboranforderungen[cite: | ||
| - | ==== 5.1 LogEntity (Geräte-spezifisch) ==== | + | ^ Typ ^ UI-Repräsentation ^ Funktionalität ^ |
| - | * **Zweck**: Ein lokaler Feed für geräteinterne Ereignisse | + | | **LogEntity** | Scrollende Konsole | Lokaler Ereignis-Speicher für gerätespezifische Fehler |
| - | * **Visualisierung**: Terminal-Widget in der Geräte-Tab-Ansicht. | + | | **StatusIndicator** | Virtuelle LED | Farb-Mapping für Zustände (z.B. 0=Off, 1=OK/Grün, 2=Warnung/ |
| + | | **XYGraphEntity** | Kennlinien-Plot | Darstellung von X-Y-Beziehungen (z.B. Batterie-Entladekurve: Spannung über Kapazität). | | ||
| + | | **FileEntity** | Upload/ | ||
| + | | **RangeEntity** | Multi-Slider/ | ||
| + | | **ScheduleEntity** | Zeitplan-Editor | Verwaltung von Zeitereignissen (z.B. " | ||
| - | ==== 5.2 StatusIndicatorEntity | + | ===== 6. Implementierungs-Leitfaden für KI-Entwicklung ===== |
| - | * **Zweck**: Visuelles Feedback ohne Text (virtuelle LED). | + | * [cite_start]**Concurrency**: Alle Logik-Operationen müssen asynchron |
| - | * **Mapping**: Wert 0 = Grau, 1 = Grün, 2 = Rot blinkend. | + | * [cite_start]**Caching**: Die '' |
| + | * **Modularität**: | ||
| - | ==== 5.3 XYGraphEntity | + | ===== 7. Erweiterte Web-Views (Advanced Visualization) ===== |
| - | * **Zweck**: Darstellung von Kennlinien (z.B. Strom über Spannung beim Batterie-Test). | + | |
| - | * [cite_start]**Implementierung**: | + | |
| - | ==== 5.4 FileEntity ==== | + | Um die wachsende Komplexität der Daten (Gamepad, BMS, IMU-Sensoren) beherrschbar zu machen, werden spezialisierte Views implementiert. |
| - | * **Zweck**: Übertragung von Firmware-Dateien oder Konfigurations-Backups. | + | |
| - | * **API**: Endpoint für Multipart-Uploads, der direkt an den Treiber durchreicht. | + | |
| - | ===== 6. Implementierungshinweise für KI-Programmierung | + | ==== 7.1 XYZ / 3D-Visualisierung (Spatial View) ==== |
| - | * [cite_start]**Stabilität**: Alle Treiber müssen | + | Diese View nutzt Bibliotheken wie **Three.js** oder **Plotly.js**, |
| - | * [cite_start]**Performance**: Der '' | + | * [cite_start]**Anwendungsfall A: IMU/ |
| - | * [cite_start]**Sicherheit**: Automatisierungsregeln müssen "Safe-Guards" | + | * **Anwendungsfall B: Multi-Parameter-Sweeps**: |
| + | * **Anwendungsfall C: Raum-Mapping**: | ||
| + | |||
| + | ==== 7.2 Multi-Device Dashboard (Global View) ==== | ||
| + | [cite_start]Die aktuelle UI ist stark auf einzelne Tabs pro Gerät fokussiert[cite: | ||
| + | * **Konzept**: | ||
| + | * [cite_start]**Beispiel**: Ein " | ||
| + | |||
| + | ==== 7.3 Logic-Flow Visualizer | ||
| + | Da der geplante | ||
| + | * **Konzept**: | ||
| + | * [cite_start]**Darstellung**: | ||
| + | * [cite_start]**Live-Feedback**: Linien zwischen den Blöcken leuchten kurz auf, wenn ein Event über den '' | ||
| + | |||
| + | ==== 7.4 Session Replay & Analyse (History View) ==== | ||
| + | [cite_start]Basierend auf dem '' | ||
| + | * **Konzept**: | ||
| + | * [cite_start]**Funktion**: Über eine Timeline kann eine aufgezeichnete Session (identifiziert durch die '' | ||
| + | * **Vergleichs-Modus**: Zwei Sessions können übereinandergelegt werden | ||
| + | |||
| + | ==== 7.5 Synoptic View (Prozessgrafik) ==== | ||
| + | * **Konzept**: | ||
| + | * **Nutzen**: Extrem intuitive Überwachung von komplexen Verdrahtungen. | ||
| + | |||
| + | ==== Sonstiges ==== | ||
| + | Was ich mir sonst noch vorstellen könnte: | ||
| + | * Virtuelle Instrumente (Skins): Dass du für das UDP3305 eine View baust, die exakt so aussieht wie die Frontplatte des echten Geräts. Das macht die Bedienung im Web viel natürlicher. | ||
| + | * Webcam-Integration mit Overlay: Wenn dein Pi eine Kamera hat, könntest du den Videostream anzeigen und die Messwerte (z.B. Temperatur) direkt über das Bild legen (ähnlich wie Augmented Reality). | ||
| + | * Alarm-Management: | ||
| + | |||
| + | ===== 7.6 Webcam & Augmented Reality (AR) Overlay ===== | ||
| + | |||
| + | Diese View kombiniert visuelles Feedback der Hardware mit den Live-Daten des EventBus. | ||
| + | |||
| + | ==== Architektur des Datenflusses ==== | ||
| + | * **Video-Pfad**: | ||
| + | * **Daten-Pfad**: | ||
| + | * **Vorteil**: | ||
| + | |||
| + | ==== Features ==== | ||
| + | * **AR-Overlay**: | ||
| + | * **Visual CV**: Optionale Bilderkennung im Backend, die Ergebnisse (z.B. " | ||
| + | |||
| + | ==== Implementierung (Code-Skizze) ==== | ||
| + | * **Backend**: | ||
| + | * **Frontend**: | ||
| + | |||
| + | ==== 7.7 Visual Event Trigger (Virtual Sensor) ==== | ||
| + | Zusätzlich zum Videostream kann das System Bildbereiche (ROI) analysieren, | ||
| + | |||
| + | * **Funktion**: | ||
| + | * **Verarbeitung**: | ||
| + | 1. ROI Definition via Koordinaten. | ||
| + | 2. HSV-Farbraumfilterung zur Detektion von Statusfarben. | ||
| + | 3. State-Machine zur Vermeidung von Bus-Spam (nur Änderungen werden publiziert). | ||
| + | * **Anwendung**: | ||
| + | |||
| + | ==== 7.8 Optical Character Recognition (OCR) Sensor ==== | ||
| + | Verwandelt visuelle Anzeigen in digitale Datenströme. | ||
| + | |||
| + | * **Technologie**: | ||
| + | * **Datenfluss**: | ||
| + | 1. Extraktion der Anzeige via ROI. | ||
| + | 2. Bildvorbehandlung (Grayscale, Thresholding, | ||
| + | 3. Konvertierung String -> Float/ | ||
| + | 4. Publikation als '' | ||
| + | * **Anwendung**: | ||
| + | ===== 8. Zusammenfassung der Datenfluss-Architektur ===== | ||
| + | |||
| + | Der Datenfluss im erweiterten System folgt nun diesem Muster: | ||
| + | - [cite_start]**Hardware/ | ||
| + | - [cite_start]**LogicService** (Abonniert Bus) -> Berechnet Transformation -> **Engine.execute_command**[cite: | ||
| + | - [cite_start]**Web-Views** (Abonnieren Bus via WebSocket [cite: 427]) -> Filtern nach Focus-Lock -> **Visualisierung** (3D, Table, Graph). | ||
projekte/ionpy/ideen.1770968825.txt.gz · Last modified: by dominik
