# t1me2drum/ecoflow-mon-android architecture

> Architecture diagram of the GitHub repository t1me2drum/ecoflow-mon-android, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/t1me2drum/ecoflow-mon-android
- Repository: https://github.com/t1me2drum/ecoflow-mon-android

## Overview

PowerHub is an Android EcoFlow station monitoring and control client. The main workflow is login and optional account-based station discovery, then background MQTT monitoring; protocol adapters interpret telemetry and build model-specific commands, while screens expose status, controls, history, and diagnostics. The README documents alerts, a widget, and broader model coverage beyond the sampled source, so those capabilities are included with conservative wiring. Some subsystem links rely on the README and tree rather than inspected implementation excerpts.

Main entry points: [`app/src/main/java/app/powerhub/data/Repository.kt`](https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/data/Repository.kt) (Device repository), [`app/src/main/java/app/powerhub/api/MqttLink.kt`](https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/api/MqttLink.kt) (MQTT transport), [`app/src/main/java/app/powerhub/protocol`](https://github.com/t1me2drum/ecoflow-mon-android/tree/main/app/src/main/java/app/powerhub/protocol) (Model protocols), [`app/src/main/java/app/powerhub/service/MonitorService.kt`](https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/service/MonitorService.kt) (Background monitor)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Android app"]
  node_main["Navigation and theme<br/>[MainActivity.kt]"]
  node_devices["Station list<br/>[DevicesScreen.kt]"]
  node_device["Station details<br/>[DeviceScreen.kt]"]
  node_login["Login screen<br/>[LoginScreen.kt]"]
  node_settingsui["Settings screen<br/>[SettingsScreen.kt]"]
  node_historyui["History charts<br/>[HistoryPane.kt]"]
  node_service["Background monitor<br/>[MonitorService.kt]"]
  node_alerts["Alert engine<br/>[Alerts.kt]"]
  node_widget["Battery widget<br/>[BatteryWidget.kt]"]
  node_appinit["App initialization<br/>[PowerHubApp.kt]"]
end

subgraph group_integration["EcoFlow integration"]
  node_cloud["Account API<br/>[EcoflowCloud.kt]"]
  node_openapi["Developer API<br/>[EcoflowOpenApi.kt]"]
  node_mqtt["MQTT transport<br/>[MqttLink.kt]"]
end

subgraph group_domain["Device domain"]
  node_repo["Device repository<br/>[Repository.kt]"]
  node_protocols["Model protocols"]
  node_jsonprotocol["JSON messages"]
  node_delta2["Delta 2 protocol<br/>[Delta2Protocol.kt]"]
  node_delta3["Delta 3 protocol<br/>[Delta3Protocol.kt]"]
  node_pro3["Pro 3 protocol"]
end

subgraph group_persistence["Local data"]
  node_settings[("Settings and credentials<br/>[Stores.kt]")]
  node_historydb[("History database<br/>[HistoryDb.kt]")]
end

node_user(("User"))
node_eco["EcoFlow services"]
node_stations["EcoFlow stations"]

node_user -->|"opens app"| node_main
node_main -->|"routes to"| node_login
node_main -->|"routes to"| node_devices
node_user -->|"enters credentials"| node_login
node_login -->|"logs in"| node_repo
node_repo -->|"validates login"| node_cloud
node_cloud -->|"requests session"| node_eco
node_devices -->|"manages stations"| node_repo
node_repo -.->|"syncs station list"| node_openapi
node_openapi -.->|"requests device list"| node_eco
node_service -->|"starts monitoring"| node_repo
node_repo -->|"gets MQTT credentials"| node_cloud
node_repo -->|"connects and subscribes"| node_mqtt
node_mqtt -->|"connects TLS MQTT"| node_eco
node_stations -->|"sends telemetry"| node_mqtt
node_mqtt -->|"delivers messages"| node_repo
node_repo -->|"decodes and builds"| node_protocols
node_protocols -->|"uses JSON formats"| node_jsonprotocol
node_protocols -->|"uses model adapter"| node_delta2
node_protocols -->|"uses model adapter"| node_delta3
node_protocols -->|"uses model adapter"| node_pro3
node_repo -->|"publishes commands"| node_mqtt
node_mqtt -->|"sends commands"| node_stations
node_devices -->|"opens station"| node_device
node_device -->|"reads state and controls"| node_repo
node_settingsui -->|"updates configuration"| node_repo
node_historyui -->|"requests history"| node_repo
node_service -->|"records telemetry"| node_repo
node_repo -->|"stores and reads history"| node_historydb
node_repo -->|"reads and saves settings"| node_settings
node_repo -->|"stores widget cache"| node_settings
node_widget -->|"reads cached status"| node_settings
node_service -->|"refreshes widget"| node_widget
node_service -->|"evaluates alert conditions"| node_alerts
node_appinit -->|"creates repository"| node_repo

click node_main "https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/ui/MainActivity.kt"
click node_devices "https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/ui/DevicesScreen.kt"
click node_device "https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/ui/DeviceScreen.kt"
click node_login "https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/ui/LoginScreen.kt"
click node_settingsui "https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/ui/SettingsScreen.kt"
click node_historyui "https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/ui/HistoryPane.kt"
click node_service "https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/service/MonitorService.kt"
click node_alerts "https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/service/Alerts.kt"
click node_widget "https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/widget/BatteryWidget.kt"
click node_cloud "https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/api/EcoflowCloud.kt"
click node_openapi "https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/api/EcoflowOpenApi.kt"
click node_mqtt "https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/api/MqttLink.kt"
click node_repo "https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/data/Repository.kt"
click node_protocols "https://github.com/t1me2drum/ecoflow-mon-android/tree/main/app/src/main/java/app/powerhub/protocol"
click node_jsonprotocol "https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/protocol/LegacyJsonProtocols.kt"
click node_delta2 "https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/protocol/Delta2Protocol.kt"
click node_delta3 "https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/protocol/Delta3Protocol.kt"
click node_pro3 "https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/protocol/DeltaPro3Protocol.kt"
click node_settings "https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/data/Stores.kt"
click node_historydb "https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/data/HistoryDb.kt"
click node_appinit "https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/PowerHubApp.kt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_devices,node_device,node_login,node_settingsui,node_historyui,node_service,node_alerts,node_widget,node_appinit,node_user toneBlue
class node_cloud,node_openapi,node_mqtt toneAmber
class node_repo,node_protocols,node_jsonprotocol,node_delta2,node_delta3,node_pro3 toneMint
class node_settings,node_historydb toneRose
class node_eco,node_stations toneIndigo
```

## Components

### Android app

- [Navigation and theme](https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/ui/MainActivity.kt): `app/src/main/java/app/powerhub/ui/MainActivity.kt`
- [Station list](https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/ui/DevicesScreen.kt): `app/src/main/java/app/powerhub/ui/DevicesScreen.kt`
- [Station details](https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/ui/DeviceScreen.kt): `app/src/main/java/app/powerhub/ui/DeviceScreen.kt`
- [Login screen](https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/ui/LoginScreen.kt): `app/src/main/java/app/powerhub/ui/LoginScreen.kt`
- [Settings screen](https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/ui/SettingsScreen.kt): `app/src/main/java/app/powerhub/ui/SettingsScreen.kt`
- [History charts](https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/ui/HistoryPane.kt): `app/src/main/java/app/powerhub/ui/HistoryPane.kt`
- [Background monitor](https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/service/MonitorService.kt): `app/src/main/java/app/powerhub/service/MonitorService.kt`
- [Alert engine](https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/service/Alerts.kt): `app/src/main/java/app/powerhub/service/Alerts.kt`
- [Battery widget](https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/widget/BatteryWidget.kt): `app/src/main/java/app/powerhub/widget/BatteryWidget.kt`
- [App initialization](https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/PowerHubApp.kt): `app/src/main/java/app/powerhub/PowerHubApp.kt`

### EcoFlow integration

- [Account API](https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/api/EcoflowCloud.kt): `app/src/main/java/app/powerhub/api/EcoflowCloud.kt`
- [Developer API](https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/api/EcoflowOpenApi.kt): `app/src/main/java/app/powerhub/api/EcoflowOpenApi.kt`
- [MQTT transport](https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/api/MqttLink.kt): `app/src/main/java/app/powerhub/api/MqttLink.kt`

### Device domain

- [Device repository](https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/data/Repository.kt): `app/src/main/java/app/powerhub/data/Repository.kt`
- [Model protocols](https://github.com/t1me2drum/ecoflow-mon-android/tree/main/app/src/main/java/app/powerhub/protocol): `app/src/main/java/app/powerhub/protocol`
- [JSON messages](https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/protocol/LegacyJsonProtocols.kt): `app/src/main/java/app/powerhub/protocol/LegacyJsonProtocols.kt`
- [Delta 2 protocol](https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/protocol/Delta2Protocol.kt): `app/src/main/java/app/powerhub/protocol/Delta2Protocol.kt`
- [Delta 3 protocol](https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/protocol/Delta3Protocol.kt): `app/src/main/java/app/powerhub/protocol/Delta3Protocol.kt`
- [Pro 3 protocol](https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/protocol/DeltaPro3Protocol.kt): `app/src/main/java/app/powerhub/protocol/DeltaPro3Protocol.kt`

### Local data

- [Settings and credentials](https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/data/Stores.kt): `app/src/main/java/app/powerhub/data/Stores.kt`
- [History database](https://github.com/t1me2drum/ecoflow-mon-android/blob/main/app/src/main/java/app/powerhub/data/HistoryDb.kt): `app/src/main/java/app/powerhub/data/HistoryDb.kt`

### Other components

- **User**
- **EcoFlow services**
- **EcoFlow stations**

## Connections

- User → Navigation and theme: opens app
- Navigation and theme → Login screen: routes to
- Navigation and theme → Station list: routes to
- User → Login screen: enters credentials
- Login screen → Device repository: logs in
- Device repository → Account API: validates login
- Account API → EcoFlow services: requests session
- Station list → Device repository: manages stations
- Device repository → Developer API: syncs station list
- Developer API → EcoFlow services: requests device list
- Background monitor → Device repository: starts monitoring
- Device repository → Account API: gets MQTT credentials
- Device repository → MQTT transport: connects and subscribes
- MQTT transport → EcoFlow services: connects TLS MQTT
- EcoFlow stations → MQTT transport: sends telemetry
- MQTT transport → Device repository: delivers messages
- Device repository → Model protocols: decodes and builds
- Model protocols → JSON messages: uses JSON formats
- Model protocols → Delta 2 protocol: uses model adapter
- Model protocols → Delta 3 protocol: uses model adapter
- Model protocols → Pro 3 protocol: uses model adapter
- Device repository → MQTT transport: publishes commands
- MQTT transport → EcoFlow stations: sends commands
- Station list → Station details: opens station
- Station details → Device repository: reads state and controls
- Settings screen → Device repository: updates configuration
- History charts → Device repository: requests history
- Background monitor → Device repository: records telemetry
- Device repository → History database: stores and reads history
- Device repository → Settings and credentials: reads and saves settings
- Device repository → Settings and credentials: stores widget cache
- Battery widget → Settings and credentials: reads cached status
- Background monitor → Battery widget: refreshes widget
- Background monitor → Alert engine: evaluates alert conditions
- App initialization → Device repository: creates repository
