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
- Supports local section/separator tiles for grouping favorite devices
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
- Long-press history popup where Domoticz exposes history
- 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.
ControlHome supports a long-press history popup for supported devices.
Long press a tile.
The popup can show either:
- a chart for numeric history
- an event log for switch/dimmer/selector style history
- an unsupported message when Domoticz does not expose suitable history for that device type
Supported examples:
- Temperature
- Humidity
- Pressure / barometer
- PPM / Air Quality
- P1 Smart Meter
- Electricity / solar energy meter
Supported examples:
- Switch
- Dimmer
- Selector
Current supported ranges:
- Day
- Month
Year view is intentionally not part of the current mobile UI.
- Day / Month selector
- visible metric toggles
- metric values with units
- dynamic Y-axis scaling
- chart range recalculates when metrics are enabled/disabled
- line-end values
- tap tooltip showing values at a selected point
Pinch zoom is intentionally not implemented at this stage.
- Temperature β Β°C
- Humidity β %
- Pressure β hPa
- PPM β ppm
- Power input β W
- Power output β W
- Today input β kWh
- Today output β kWh
- Total input β kWh
- Total output β kWh
- Usage β W
- Today β kWh
- Total β kWh
A future dual Y-axis chart renderer could improve mixed-unit charts, for example:
- Temperature / Humidity
- W / kWh
- On/Off / %
The current implementation uses metric toggles and dynamic scaling instead.
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.
Current responsive layout:
- Phone portrait: 2 columns
- Phone landscape: 4 columns
- Tablet portrait: 4 columns
- Tablet landscape: 6 columns
The grid system is intentionally deterministic and currently not user-configurable.
Favorites, Rooms, and Devices now share a common width-based tile sizing system.
Supported tile sizes:
- Default
- 1x1
- 2x1
- 3x1
- 4x1
Important implementation direction:
- width-only resizing is the active architecture
- tile height is now content-driven
- experimental double-height reservation logic was intentionally removed from active UX usage
This significantly improved:
- spacing consistency
- reorder mode stability
- tile-size mode stability
- Compose grid behavior
Favorites now supports local application-defined section header tiles.
Purpose:
- visually separate logical device groups
- improve tablet dashboard readability
- provide lightweight organization without introducing hierarchy or sub-pages
Characteristics:
- Favorites-only feature
- local UI object
- not backed by Domoticz devices
- reorderable
- resizable
- customizable title and color
- persisted locally
- uses the same visual language as Devices category headers
Section tile editing supports:
- rename
- color customization
- delete
- shared
...menu interaction pattern
Visual direction:
- centered title
- larger typography
- category-style radius
- category-style color palette
Favorites, Rooms, and Devices now share:
- reorder menu behavior
- reorder action bars
- tile size edit mode
- spacing logic
- drag/drop infrastructure
This significantly reduced layout divergence between screens and edit modes.
The screenshots below are shown in filename creation order. Click any picture to open it in full size.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |











