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/15 11:35] (current) – [TODO] dominik | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== ionpy Framework: Erweiterte Architektur-Spezifikation ====== | + | ====== ionpy Framework: Erweiterte Architektur-Spezifikation |
| - | Dieses Dokument dient als detaillierte Implementierungsvorlage für die nächste Evolutionsstufe des ionpy-Frameworks. Ziel ist die Transformation von einer reinen Monitoring-Plattform zu einem interaktiven Automatisierungssystem. | + | ===== TODO ===== |
| + | * Checkn ob Webseite Reconnect macht wenn man ionpy neu startet | ||
| + | * Inventar über Web View einstellbar machen | ||
| + | * Inventar | ||
| + | * Gerät hinzufügen, | ||
| + | * Settings nicht überschreiben beim Einstellen -> siehe Punkt 1 | ||
| + | * Projekt anlegen / speichern / laden -> Frontend | ||
| + | * Speichern im Backend | ||
| + | * RP2350 als Testgerät | ||
| + | * Buttons mit X Settings ausführen | ||
| - | ===== 1. Dynamische Eingabesynchronisation (The Mute-Pattern) ===== | ||
| - | Problem: Race Conditions zwischen Hardware-Polling und User-Eingaben führen zu springenden Werten in der UI. | ||
| - | ==== 1.1 Backend: Implementierung in AbstractDevice ==== | + | Dieses Dokument beschreibt die integrale Architektur-Erweiterung des ionpy-Frameworks. Es dient als verbindliche Grundlage für die Implementierung neuer Entitätstypen, haptischer Steuerungen und geräteübergreifender Automatisierung. |
| - | [cite_start]Die Basisklasse '' | + | |
| - | * **Datenstruktur**: | + | |
| - | * **Code-Integration (hardware/ | + | |
| - | * [cite_start]In '' | + | |
| - | * [cite_start]In '' | + | |
| - | < | + | |
| - | ==== 1.2 Frontend: Universeller Focus-Lock | + | ===== 1. Dynamische Eingabesynchronisation (Race Condition Schutz) ===== |
| - | In der '' | + | Um zu verhindern, dass Hintergrund-Polling Benutzereingaben im Frontend überschreibt, |
| - | * **Logik**: Verwendung eines '' | + | |
| - | * **Code-Hint**: | + | |
| - | < | + | |
| - | const lockedFields = new Set(); | + | |
| - | containerEl.addEventListener(' | + | |
| - | containerEl.addEventListener(' | + | |
| - | + | ||
| - | // Im WebSocket-Handler: | + | |
| - | if (lockedFields.has(`i-${sample.entity_id}`)) return; | + | |
| - | </ | + | |
| - | ===== 2. Strukturierte Daten: TableEntity ===== | + | ==== 1.1 Backend: Mute-Timer (AbstractDevice) |
| - | [cite_start]Ermöglicht die Verwaltung von Profilen, Sequenzen und Speicherplätzen | + | [cite_start]In der Klasse '' |
| + | * [cite_start]**Mechanismus**: | ||
| + | * **Logik**: | ||
| + | * [cite_start]Sobald '' | ||
| + | * [cite_start]Die Methode '' | ||
| + | * **Ziel**: Die Hardware hat Zeit, den Wert intern zu setzen, und der Polling-Loop liest keine " | ||
| - | ==== 2.1 Datenmodell (structures/ | + | ==== 1.2 Frontend: Universeller Focus-Lock (JS) ==== |
| - | [cite_start]Erweiterung | + | In der Web-UI (settings.html) wird eine automatische Erkennung aktiver Eingabefelder implementiert. |
| - | * **TableEntity**: | + | * **Mechanismus**: Nutzung eines '' |
| - | * [cite_start]'' | + | * **Event-Delegation**: |
| - | * '' | + | * '' |
| + | * '' | ||
| + | * **WebSocket-Logik**: | ||
| - | ==== 2.2 UI-Repräsentation | + | ===== Neue View Multisensor Device ===== |
| - | * Dynamische Generierung einer HTML-Tabelle. | + | * auf einen Schlag alle Readings anzeigen |
| - | * Jede Zelle erhält eine koordinatenbasierte ID (z.B. '' | + | * Checkbox on/off für MAIN = "main", |
| - | * Änderungen senden ein spezielles Command-Objekt: | + | * Device basiert |
| - | ===== 3. Gamepad-Steuerung via Pygame ===== | ||
| - | Integration von Human Interface Devices zur haptischen Steuerung. | ||
| - | ==== 3.1 Gamepad-Treiber (hardware/ | ||
| - | Ein dedizierter Treiber nutzt '' | ||
| - | * **Threading**: | ||
| - | < | ||
| - | 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(...), | ||
| - | </ | ||
| - | * **Entity-Mapping**: | ||
| - | ==== 3.2 Discovery | + | ===== 2. Strukturierte Daten: TableEntity (Deep Dive) ===== |
| - | [cite_start]Der Treiber scannt beim Start mittels | + | Die '' |
| - | ===== 4. LogicService: | + | ==== 2.1 Datenstruktur & Schema ==== |
| - | [cite_start]Ein zentraler | + | Eine '' |
| + | * **Schema (columns)**: | ||
| + | * Jede Spalte definiert: '' | ||
| + | * **Daten (value)**: Eine Liste von Dictionaries, | ||
| + | * **Typen**: Unterscheidung zwischen '' | ||
| + | |||
| + | ==== 2.2 Erweiterte Interaktions-Logik ==== | ||
| + | * **Row-Updates**: | ||
| + | * **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. | ||
| + | |||
| + | ==== Software Liste ==== | ||
| + | * Abspulen von Lastprofilen für PSU / Senke -> rein Softwar5e basiert | ||
| + | |||
| + | ==== Settings auf Button legen ==== | ||
| + | * **neue View** ! | ||
| + | * Buttons Beschriftung setzen (Größe ??) | ||
| + | * (mehrere) Aktions hinterlegen für Device | ||
| + | * ggf. inkl. Start ?? | ||
| + | * Beispiel -> PSU -> 12V Setzen, max 1A, OCP an, Output ON | ||
| + | |||
| + | |||
| + | |||
| + | ===== 3. Gamepad-Integration (HID-Steuerung) ===== | ||
| + | Haptische Steuerung via USB-Controller, | ||
| + | |||
| + | ==== 3.1 GamepadManager (hardware/ | ||
| + | Ein neuer Treiber-Typ, | ||
| + | * [cite_start]**Discovery**: | ||
| + | * [cite_start]**GamepadEntity**: | ||
| + | |||
| + | ==== 3.2 Haptisches Feedback & Visualisierung ==== | ||
| + | * [cite_start]**UI-Widgets**: | ||
| + | * **Sicherheitskonzept**: | ||
| + | |||
| + | ===== 4. LogicService: | ||
| + | [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**: Ein Sample von Gerät A (z.B. Gamepad-Achse oder BMS-Temperatur)[cite: |
| - | * **Trigger**: '' | + | * **Transformation |
| - | * **Transformation**: Linear Scaling | + | * [cite_start]**Action**: Ausführung von '' |
| - | * **Action**: '' | + | |
| + | ==== 4.2 Cross-Device Szenarien | ||
| + | * **Synchronisation**: Die elektronische Last (Senke) folgt automatisch der Spannung des Netzteils (Quelle), um eine konstante Leistung (CP-Mode) über das Framework zu simulieren. | ||
| + | * **Master-Slave**: | ||
| + | |||
| + | ===== 5. Erweiterter Entitäten-Katalog ===== | ||
| + | [cite_start]Zusätzliche spezialisierte Typen für professionelle Laboranforderungen[cite: | ||
| + | |||
| + | ^ Typ ^ UI-Repräsentation ^ Funktionalität ^ | ||
| + | | **LogEntity** | Scrollende Konsole | Lokaler Ereignis-Speicher für gerätespezifische Fehler (z.B. SCPI-Fehlermeldungen). | | ||
| + | | **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: | ||
| + | | **FileEntity** | Upload/ | ||
| + | | **RangeEntity** | Multi-Slider/ | ||
| + | | **ScheduleEntity** | Zeitplan-Editor | Verwaltung von Zeitereignissen (z.B. " | ||
| + | |||
| + | ===== 6. Implementierungs-Leitfaden für KI-Entwicklung ===== | ||
| + | * [cite_start]**Concurrency**: | ||
| + | * [cite_start]**Caching**: | ||
| + | * **Modularität**: | ||
| + | |||
| + | ===== 7. Erweiterte Web-Views | ||
| + | |||
| + | Um die wachsende Komplexität der Daten (Gamepad, BMS, IMU-Sensoren) beherrschbar zu machen, werden spezialisierte Views implementiert. | ||
| + | |||
| + | ==== 7.1 XYZ / 3D-Visualisierung (Spatial View) ==== | ||
| + | Diese View nutzt Bibliotheken wie **Three.js** oder **Plotly.js**, | ||
| + | * [cite_start]**Anwendungsfall A: IMU/ | ||
| + | * **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**: | ||
| + | |||
| + | ==== 7.3 Logic-Flow Visualizer (Automation View) ==== | ||
| + | Da der geplante | ||
| + | * **Konzept**: | ||
| + | * [cite_start]**Darstellung**: | ||
| + | * [cite_start]**Live-Feedback**: | ||
| + | |||
| + | ==== 7.4 Session Replay & Analyse (History View) ==== | ||
| + | [cite_start]Basierend auf dem '' | ||
| + | * **Konzept**: | ||
| + | * [cite_start]**Funktion**: | ||
| + | * **Vergleichs-Modus**: | ||
| + | |||
| + | ==== 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**: | ||
| - | ==== 4.2 Web-Konfigurator | + | ==== Features |
| - | Ein universelles Frontend-Modul erlaubt das Erstellen dieser Regeln per Dropdown: | + | * **AR-Overlay**: Positionierung von Messwerten direkt über dem Videobild (z.B. Temperaturanzeige direkt auf dem Kühlkörper im Bild). |
| - | * WENN [Gerät wählen] [Entität wählen] ÄNDERUNG > X% | + | * **Visual CV**: Optionale Bilderkennung im Backend, die Ergebnisse (z.B. " |
| - | | + | |
| - | ===== 5. Erweiterter Entitäten-Katalog | + | ==== Implementierung |
| + | * **Backend**: | ||
| + | * **Frontend**: | ||
| - | ==== 5.1 LogEntity | + | ==== 7.7 Visual Event Trigger |
| - | * **Zweck**: Ein lokaler Feed für geräteinterne Ereignisse | + | Zusätzlich zum Videostream kann das System Bildbereiche |
| - | * **Visualisierung**: | + | |
| - | ==== 5.2 StatusIndicatorEntity ==== | + | * **Funktion**: |
| - | * **Zweck**: Visuelles Feedback ohne Text (virtuelle LED). | + | * **Verarbeitung**: |
| - | * **Mapping**: Wert 0 = Grau, 1 = Grün, 2 = Rot blinkend. | + | 1. ROI Definition via Koordinaten. |
| + | 2. HSV-Farbraumfilterung zur Detektion von Statusfarben. | ||
| + | 3. State-Machine zur Vermeidung von Bus-Spam | ||
| + | * **Anwendung**: "BMS Alarm LED" -> EventBus -> "PSU OFF". | ||
| - | ==== 5.3 XYGraphEntity | + | ==== 7.8 Optical Character Recognition (OCR) Sensor |
| - | * **Zweck**: Darstellung von Kennlinien (z.B. Strom über Spannung beim Batterie-Test). | + | Verwandelt visuelle Anzeigen in digitale Datenströme. |
| - | * [cite_start]**Implementierung**: | + | |
| - | ==== 5.4 FileEntity ==== | + | * **Technologie**: |
| - | * **Zweck**: Übertragung von Firmware-Dateien | + | * **Datenfluss**: |
| - | * **API**: Endpoint für Multipart-Uploads, der direkt an den Treiber durchreicht. | + | 1. Extraktion der Anzeige via ROI. |
| + | 2. Bildvorbehandlung (Grayscale, Thresholding, | ||
| + | 3. Konvertierung String | ||
| + | 4. Publikation als '' | ||
| + | * **Anwendung**: Digitalisierung von Legacy-Hardware ohne Schnittstellen (DMMs, Waagen, analoge Anzeigen). | ||
| + | ===== 8. Zusammenfassung der Datenfluss-Architektur ===== | ||
| - | ===== 6. Implementierungshinweise für KI-Programmierung ===== | + | Der Datenfluss im erweiterten System folgt nun diesem Muster: |
| - | | + | |
| - | | + | |
| - | | + | |
projekte/ionpy/ideen.1770968825.txt.gz · Last modified: by dominik
