# AOOSTAR WTR MAX / GEM12+ PRO Screen Control

Reverse engineering the [AOOSTAR WTR MAX](https://aoostar.com/products/aoostar-wtr-max-amd-r7-pro-8845hs-11-bays-mini-pc)
display protocol, with a proof-of-concept application written in Rust.  
It has only been tested on the WTR MAX, but should also support the GEM12+ PRO device.

Check out the **[User Guide](https://zehnm.github.io/aoostar-rs)** for a list of features and installation and usage information.

## Features

- Control the AOOSTAR WTR MAX and GEM12+ PRO second screen from Linux.
- Switch the display on or off.
    - Also possible with standard [Linux shell commands](docs/shell_commands.md).
    - [Linux systemd Service](docs/linux/README.md) to automatically switch off the LCD at boot up.
- Display images (with automatic scaling and partial update support).
- Render dynamic sensor panels defined from the AOOSTAR-X software.
    - Update sensor values from simple text files.
    - Rotate through multiple panels in a defined interval.
- USB device/serial port selection.

## Experimental Web UI

This fork also contains an experimental `aster-webui` crate for managing custom panel images and
`Monitor3.json` through a browser.

Current scope:

- upload source images through the browser
- normalize them to AOOSTAR-safe `960x376` JPG files
- manage rotation order and switch interval
- enable or disable custom panels without the vendor web UI
- drive the AOOSTAR LCD directly through the native `aoostar-rs` serial implementation

Start it from the workspace root:

```bash
cargo run -p aster-webui -- --config-dir /config --bind 0.0.0.0:8080
```

Important:

- the current web UI writes compatible `Monitor3.json` and `/config/img/*` assets
- animated GIF uploads currently use the first frame only
- the native display loop runs automatically and uses the default AOOSTAR USB UART unless
  `--device`, `--usb`, `--simulate`, or `--disable-display` is specified
- the native path currently targets custom image panels; built-in vendor sensor themes are not yet
  reimplemented in the web UI

## Native Container Variant

This fork also ships a separate containerized Unraid-friendly variant based purely on `aoostar-rs`.

Files:

- `container/Dockerfile`
- `container/entrypoint.sh`
- `container/unraid/aoostar-rs-webui.xml`

Build locally from the repository root:

```bash
docker build -f container/Dockerfile -t aoostar-rs-webui:latest .
```

Example run:

```bash
docker run -d \
  --name aoostar-rs-webui \
  --device /dev/ttyACM0:/dev/ttyACM0 \
  -p 8080:8080 \
  -v /mnt/user/appdata/aoostar-rs/config:/config \
  -v /mnt/cache:/mnt/cache:ro \
  -v /mnt/user:/mnt/user:ro \
  aoostar-rs-webui:latest
```

The container starts only the native Rust stack:

- `aster-webui` on port `8080`
- direct LCD rotation through `aoostar-rs`
- no vendor binary and no `_MEI*/sys_img` runtime sync

## Disclaimer

> I take no responsibility for the use of this software.  
> There is no official documentation available;
> all display control commands have been reverse engineered from the original AOOSTAR-X software.

Even though this software works fine **for me**, I cannot guarantee that it is risk-free:

- It may or may not work.
- It could crash the display firmware, requiring a power cycle.
- It could even brick the display firmware.
- You have been warned!

The risk remains until the manufacturer provides official documentation, and the protocol can be reviewed.
Note: Multiple attempts to contact the manufacturer for documentation have received no response.

With that out of the way, on to the fun stuff!

- Browse the source code or read the [User Guide](https://zehnm.github.io/aoostar-rs)
- See [releases](https://github.com/zehnm/aoostar-rs/releases) for binary Linux x64 releases. A Debian package for easy installation is planned for the future!

## Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please note that this software is currently in its initial development and will have major changes until the mentioned
goals above are reached!

## License

Licensed under either of

- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
- MIT License ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)

at your option.
