👉 For end users
- No more Token Proxy container.
Authentication happens entirely inside the integration. You can stop/remove the separate “UGREEN API Token Proxy” Docker container after updating. - Less confusion during setup.
The “Verify SSL” checkbox has been removed. The “Use HTTPS” option remains, but certificate verification toggles are no longer exposed, which prevents common misconfigurations. - Options changes now take immediate effect.
Editing host/port/username/password via the Options screen now correctly updates the active connection (previously only the initial config applied). - Hungarian language support.
Thanks to @gyuris for contributing a Hungarian translation for the config/option flows - much appreciated buddy! :)
👉 For fellow developers (internal changes)
Authentication & security
- Removed dependency on the Token Proxy; replaced the proxy token flow with direct UGOS login: fetch public RSA/SPKI key, encrypt password (RSAES-PKCS#1 v1.5), call
/verify/login, and append the returned token to subsequent requests. Credentials never leave Home Assistant anymore. - Removed: Proxy fields like
auth_port/verify_sslin the functional path; any external tooling expecting the proxy endpoints (/token,/credentials) is obsolete for the integration.
Data flow & runtime behavior
- WebSocket keep-alive integrated;
ws_keepalive()returns coroutine for Coordinator usage. UpdateWebSocket()logic from the Docker helper has been ported and streamlined insideapi.py.- Dynamic entities are built from a central registry (
_config_definitions/_status_definitions), ensuring a uniform approach for LAN/USB/RAM/UPS/Fans/Storage. - Added consistent handling of “single vs multiple” entities (
single_compact=True). count_dynamic_entitiesintroduced as cached API helper to pre-calculate #RAM, #Disks, #Volumes, etc.- Coordinators:
- Config (60s), State (5s), WebSocket (25s) each with grouped API calls per endpoint.
- Options-first fallback to entry.data ensures runtime updates on config edits.
Utilities / structure
get_entity_data_from_api(...)is centralized inutils.pyand used by all coordinators.make_entities(...)implemented withsingle_compactflag and unified placeholders.build_device_info(...)implemented for Pools, Volumes, Disks.api.pyrestructured: Public methods grouped at top, long logic factored into_count_dynamic_entities,_ws_keepalive, etc. for readability.- Code ordering and inline comments cleaned up across modules (
__init__.py,sensor.py,button.py).