ControlHome is a fast, mobile-first Domoticz client focused on:
- β‘ Real-time control where Domoticz supports it
- π Instant startup with cache-first rendering
- π― Optimistic UI for fast interaction
- π¨ Deep UI customization for tiles, headers, and backgrounds
This is not a simple dashboard.
It is a full-featured mobile control interface designed for speed, clarity, and further extension.
- Uses Domoticz Favorites ordering as the default baseline
- WebSocket real-time updates for normal devices
- Cache-first loading
- Optimistic UI behavior
- Local reorder override on top of Domoticz order
- Supports Domoticz-favorite Scenes / Groups as well as normal favorite devices
- Favorites remains the reference screen for perceived performance.
- Favorites membership belongs to Domoticz.
- Favorites default order comes from Domoticz.
- Local tile reorder should remain an override layer on top of Domoticz ordering, not a replacement for it.
- Domoticz
getplans - Devices mapped by
PlanID/PlanIDs
- Uses Domoticz order (NOT alphabetical)
- Preserved end-to-end (API β Repository β ViewModel β UI)
- Supports local per-room tile reorder with reset back to Domoticz order
- Swipe left/right
- Arrow buttons
- If a room name contains
_, it is ignored from the visible room set.
Each room has a large customizable tile.
- Set image
- Set color
- Set default
- Image OR color background, never both as active presentation mode
- Automatic contrast handling
- Overlay dim for readability
- Header title and controls adapt to the effective room header visual
- Image selection uses persistent document access, so the chosen image survives app restart
- The room header is visual customization only. It does not change Domoticz room structure.
- Room reorder is already implemented as an app-local visual override.
- Reset order should always return to Domoticz room device order.
- All
- Switches
- Scenes
- Temperatures
- Utilities
- Weather
- User Variables
- Uses Domoticz JSON order as default
- Scene and variable categories are HTTP-driven, not WebSocket-driven
- Supports local reorder per category, with reset back to Domoticz order
- Large category tile
- Per-category color customization
- Left/right navigation between categories
- Real-time filtering
- Accent-insensitive
- Per-category
- Partial name matching
- Search field styling adapts to the same dark/light title logic used by the screen header
- Loaded from Domoticz
getscenes - Added after Switches
- Scene tiles use power-style visuals
Scenesends onlyOnGroupsendsOn/Off- No WebSocket support, therefore action result is confirmed by HTTP refresh
- Loaded from Domoticz
getuservariables - Placed after Weather, at the end of Devices
- Read-only
- Displayed as sensor-style tiles
- Uses a tag-style icon
- Category lists should always inherit order from the merged Domoticz/bootstrap snapshot.
- Search is a UI filter only. It must never mutate the underlying order model.
- HTTP-only categories such as Scenes and User Variables should stay structurally separate from the WS-backed device categories.
- Switch
- Dimmer
- Selector
- Sensor
- Contact sensor (OPEN/CLOSED β no toggle)
- Scene / Group tile behavior on Devices and Favorites
- User Variable sensor tiles
- Immediate state change on tap where the device type supports control
- WS or fallback HTTP refresh confirms final state
- If backend rejects β tile reverts or reloads from truth source
- Contact sensors are displayed as state indicators, not toggle controls.
- They can still be used by Linked Tile Colors as status source devices.
- Scene tiles are activation-only and always send
On - Group tiles behave as
On/Off - Scene/Group status display still comes from Domoticz state
- Tile behavior is intentionally separated from storage and server structure.
- A future tile-specific customization layer should remain UI-only unless explicitly intended to write back to Domoticz.
Control a tile background using another device state.
- Garage door button colored by door sensor state
- Thermostat tile reflecting real heating activity
- Status device does not need to be favorite
- Global, works across screens
- WebSocket-driven where supported
- Implemented as a UI override layer, not server-side metadata
- The UI uses linked rules to calculate visual overrides for tile backgrounds.
- Rules are stored in app settings.
- The underlying Domoticz device model remains unchanged.
Available for:
- Rooms
- Device category headers
- Tiles
- Linked Tile Colors rules
- Preset colors
- HSV picker
- Opacity slider
- Adaptive contrast
- Host / Port / SSL / self-signed handling
- Credentials (password stored in SecretStore)
- Password is not backed up
- Missing password redirects to Server Settings with a clear message
- Unauthorized credentials redirect to Server Settings with a clear message
- Saving server settings now forces connection reset/rebuild behavior so the app does not keep talking to the previously active server
- Color or image
- Blur (Android 12+)
- Dim overlay
- Colors
- Icon style
- Radius
- Typography
- Rule editor
- Condition-based coloring
Android QS tiles.
- Switch
- Dimmer
- Selector
- Up to 6 slots
Tap:
- Toggle / main action
Long press:
- Dimmer slider
- Selector options
- Cache + HTTP refresh
- No WebSocket dependency in background
- Uses last known per-device state cache for quick rendering
- Edge-to-edge layout
- Dynamic icon color
Based on:
- Background color luminance
- Image dim level
- Room header text/icons adapt to room visual
- Category header text/icons adapt to category background color
- Reorder menu icon ring follows the same light/dark contrast logic
- Cache-first startup
- Minimal HTTP calls
- WebSocket-driven updates where supported
- HTTP-only categories loaded lazily when entered
- Load cached state first
- Render immediately
- Refresh in background
- Apply WS updates after snapshot sync
- Cache-first behavior is now a core part of perceived UX quality.
- Any future architectural refactor should protect startup responsiveness.
Startup:
Cache β UI β HTTP refresh β WebSocket sync
Runtime:
WebSocket / HTTP refresh β Global store β UI update
Additional HTTP-only flows:
- Scenes / Groups
- User Variables
These are merged into the app model without pretending they are WS-backed.
- Stores password separately
- Not included in backup
- Recreated safely if encrypted storage becomes invalid
- Prevent restoring broken auth state
- Secret prefs excluded from backup
- Non-sensitive settings can remain restorable
- Redirects to Server Settings
- Requests password re-entry
- Redirects to Server Settings
- Shows authentication error message
- Redirects to Server Settings when the app determines the server is unavailable
- Cache-first behavior still remains important for perceived continuity
- Broken encrypted prefs crash is fixed
- Missing password and unauthorized flows are implemented
- Server unavailability handling is integrated with Settings navigation
WebSocket + HTTP β Shared bootstrap/cache model β ViewModels β Compose UI
- Single source of truth
- No duplicated mutable screen state
- Instant startup from cache
- Local UI override layers on top of Domoticz truth
These rules should be preserved in future development:
-
Domoticz order is the default order everywhere
- Favorites
- Rooms
- Devices categories
-
UI overrides remain local unless explicitly intended otherwise
- Linked Tile Colors
- Room header visuals
- Category header visuals
- Local tile reorder
-
Secret data stays separated from normal settings
- Password in SecretStore
- UI/config in DataStore
-
Cache-first startup must be protected
- It is one of the appβs strongest UX characteristics
-
HTTP-only categories must stay explicit
- Scenes / Groups
- User Variables
ControlHome provides:
- β‘ Real-time control where available
- π¨ Full customization
- π§ A coherent internal architecture
- π± A fast mobile-first Domoticz UX
Designed for further extension without breaking baseline Domoticz behavior.







