# Virtueller Gesundheitsassistent A Java 17 desktop application that ingests binary health predictions over MQTT, stores them in SQLite, computes rolling risk levels, and visualizes the result in a dashboard with optional avatar/Unreal integration. ## Contents - [Features](#features) - [Architecture Overview](#architecture-overview) - [Tech Stack](#tech-stack) - [Getting Started](#getting-started) - [Configuration](#configuration) - [Testing](#testing) - [Project Structure](#project-structure) - [Documentation](#documentation) - [Known Limitations](#known-limitations) ## Features - Swing desktop UI with: - `Avatar Streaming` tab (embedded JCEF browser) - `Dashboard` tab (risk time-series chart + level bar) - MQTT subscription to prediction events (`PREDICTION` by default) - SQLite persistence (`data/health.db`) - Threshold-based risk classification from the latest 20 values: - `NONE` for ratio `< 0.5` - `WARNING` for ratio `>= 0.5` - `HIGH` for ratio `>= 0.8` - `DISASTER` for ratio `>= 0.9` - Animation state JSON export (`animation.output.path`) - Optional startup/shutdown management for: - Python MQTT simulator - Unreal/Pixel Streaming startup script - Asynchronous logger with optional file output and rotation ## Architecture Overview Runtime flow: 1. The app initializes UI and services. 2. MQTT messages are received on a configured topic. 3. Incoming JSON payloads are validated. 4. Accepted predictions are persisted in SQLite. 5. Risk ratio and level are re-evaluated. 6. App state notifies UI controllers. 7. Dashboard widgets and chart update. 8. Animation JSON is written for external consumers. ## Tech Stack - Java 17 - Maven - Swing + FlatLaf + JFreeChart - Eclipse Paho MQTT client - SQLite JDBC - JCEF (`jcefmaven`) - JUnit 5 + Mockito ## Getting Started ### Prerequisites - JDK 17 - Maven 3.9+ - MQTT broker running at `localhost:1883` (or adjust config) - Windows for bundled PowerShell/BAT integration scripts - Optional: Python for simulator support - Optional: Unreal/Pixel Streaming environment ### 1) Configure a minimal local run In `src/main/resources/config/application.properties`, disable optional external integrations if they are not available on your machine: ```properties mqtt_sim.enabled=false unreal.enabled=false ``` ### 2) Build and run ```powershell mvn clean compile mvn org.codehaus.mojo:exec-maven-plugin:3.5.0:java -Dexec.mainClass=vassistent.App ``` You can also run `vassistent.App` directly from an IDE. ### 3) Send test data Publish to topic `PREDICTION` with payload format: ```json { "valid": true, "_id": 1, "prediction": 0 } ``` Validation rules: - `valid` must be `true` - `_id` must exist - `prediction` must be `0` or `1` ## Configuration Main config: `src/main/resources/config/application.properties` Logger config: `src/main/resources/config/logger.properties` High-impact keys: - `mqtt.broker.url`, `mqtt.client.id`, `mqtt.topic` - `streaming.url` - `animation.output.path` - `mqtt_sim.enabled`, `python.path`, `mqtt_sim.script` - `unreal.enabled`, `unreal.executable`, `unreal.signalling_server.script` A full key-by-key reference is available in [`docs/CONFIGURATION.md`](docs/CONFIGURATION.md). ## Testing Run tests with: ```powershell mvn test ``` The suite includes unit and integration tests for state changes, payload validation, threshold evaluation, persistence behavior, process management, MQTT behavior, and animation output. ## Project Structure ```text src/main/java/vassistent App.java bootstrap/ # startup wiring + shutdown sequencing controller/ # UI orchestration model/ # app state + value objects service/ # MQTT, DB, stats, evaluation, processes ui/ # Swing views/components util/ # config loading/validation + logging src/main/resources config/application.properties config/logger.properties scripts/mqtt_simulator.py scripts/start_avatar.ps1 ``` ## Documentation - [Documentation Index](docs/INDEX.md) - [Project Review](docs/PROJECT_REVIEW.md) - [Architecture](docs/ARCHITECTURE.md) - [Setup and Run](docs/SETUP_AND_RUN.md) - [Configuration](docs/CONFIGURATION.md) - [Testing](docs/TESTING.md) - [Source Map](docs/SOURCE_MAP.md) - [Known Issues](docs/KNOWN_ISSUES.md) ## Known Limitations - The runtime database (`data/health.db`) is currently deleted on application shutdown. - Default Unreal-related paths in `application.properties` are machine-specific and require adaptation on other systems. - Enabling optional external integrations without valid local paths causes startup validation to fail.