Chapter 3

The dashboard and the interface

A full walk through the shell and the dashboard you can reach in Stable 2.0.55: onboarding, the three widgets, custom ordering, stats and bridge cards, bulk actions, Quick Navigation, health refresh, language and theme, System Logs, and the version mismatch and WebSocket warnings.

Learn the fixed shell and the pages you can reach

The React interface in Stable 2.0.55 is made of a top app bar, the main content, a footer and a language switcher in the bottom right. At desktop width the navigation icons are shown directly; on a narrower screen the same items move into a drawer on the right. Click the logo or Dashboard to return to the root route /. The top bar also holds the Status Indicator, the light/dark toggle and the entry point for System Logs.

RoutePageMain purpose
/DashboardOverview, onboarding, widgets and everyday actions
/bridgesBridgesThe full bridge list, creation, import and export, and per-bridge actions
/bridges/createCreate BridgeCreate from a template plus the full form or JSON
/bridges/area-setupArea SetupCreate bridges in bulk by HA area
/devicesDevicesSearch entities, review mappings and failed items
/standalone-devicesStandalone DevicesReview Server Mode devices, which still have experimental limits in Stable
/network-mapNetwork MapBridge, fabric and topology views
/healthHealthDetailed service, controller, network and device health diagnostics
/startupStartup OrderBridge startup precedence
/labelsFilter ReferenceHA label and area reference
/lock-credentialsLock CredentialsLock credential management; the contents are sensitive, so never screenshot or share them
/pluginsPluginsExperimental plugin management and status
/settingsSettingsSystem settings, updates and other operations entry points

An unknown route lands on Not Found. "Reachable" only means that Stable 2.0.55 registers the page; it does not mean every feature on that page has the same maturity. The Plugins and Standalone Devices routes are in Stable, for example, but the features behind them still have to be labeled experimental-in-Stable.

Onboarding when there is no bridge yet

The dashboard starts by calling the detailed health API. If there is no bridge yet, the page does not show the customizable widgets. It shows a welcome card instead, with three ways to create one: Bridge Wizard, Setup by Area and Manual Setup, plus an external Documentation link. These three paths are not maturity levels; they are different setup workflows.

Entry pointWhen it fitsKnow this before you create
Bridge WizardYou want to start from a template, a controller profile and a six-stage guideYou still have to cross-check the filter, the port and the network preflight at the end
Setup by AreaYour HA areas are already tidy and you want one bridge per areaIt creates several bridges at once and increments the port for each; confirm your resources and controller scale first
Manual SetupYou need the full schema, a fine-grained filter or JSONThere are more fields, and you have to understand identity, session and the advanced flags yourself

Once you have created at least one bridge, the dashboard switches to the widget layout. When at least one fabric appears, a first-success message is shown; after you dismiss it the browser remembers hamh-first-success-dismissed in local storage. That is only a message in the interface, not a commissioning check and not a guarantee of controller compatibility.

  1. Read the status at the top first

    Expand the indicator and check the version, uptime, HA connection and WebSocket. With no bridge yet, No Bridges is the expected state.

  2. Choose a workflow

    For a first bridge, Bridge Wizard is usually the one to press. Choose Setup by Area only when your HA areas are fully planned, and Manual Setup only when you need the fine-grained schema.

  3. Go back to the dashboard after creating

    Confirm that the welcome card has been replaced by Stats, Bridges and Quick Navigation, and that the bridge count matches what you just created.

  4. Verify with status only; do not rush into commissioning

    Confirm that HA is Online, that the bridge is running and that the device count is plausible before you move on to commissioning. Do not expose any pairing data while you are still touring the interface.

Show, reorder and reset the three widgets

Once a bridge exists, a Customize Dashboard button appears to the right of the dashboard title. The dialog always manages three widgets: Status Overview, Bridges and Quick Navigation. The eye button toggles visibility, the up and down buttons swap the order, Reset restores the default order and shows everything, and Done closes the dialog.

Widget IDUI nameContents
statsStatus OverviewFour stat cards: bridges, devices, fabrics and the HA connection
bridgesBridgesCreation entry points, bulk start, stop and restart, and mini cards ordered by priority
quickNavQuick NavigationShortcut cards for the pages you use most

The setting is kept in the current browser under the local storage key hamh-dashboard-widgets. It is not backend bridge configuration, and it does not travel with a Matter Hub backup or sync to every browser. On load the code ignores unknown widgets and adds newly known widgets back into the order; corrupted local storage falls back to the default.

  1. Open Customize Dashboard

    Go back to the dashboard root page and press the customize icon to the right of the title. If the icon is not there, first confirm that at least one bridge exists.

  2. Hide the blocks you do not need

    Press the eye to the left of a widget. An operations screen, for instance, can keep only Status Overview and Bridges. Hiding a widget does not stop the health refresh or a bridge.

  3. Set the reading order

    Use Move up and Move down on the right to bring the block you read most often to the front; the first item cannot move up and the last cannot move down.

  4. Test Reset

    If the layout is not what you expected, press Reset to restore stats → bridges → quickNav with everything visible, then press Done. This changes nothing in the backend.

Stats, the status indicator and two refresh cadences

The four cards in Status Overview come from api/health/detailed: the total number of bridges (with a running/failed summary), the device count summed across all bridges, the summed fabric count, and the HA connection and uptime. Once you are on the dashboard it refreshes every 15 seconds; the Status Indicator at the top calls api/health separately and refreshes every 30 seconds. The two can therefore disagree for a short while, which is not on its own a reason to conclude that data is corrupted.

Card / indicatorWhat clicking doesHow to read it
BridgesGoes to the Bridges pageThe total, plus running/failed; not a controller count
DevicesGoes to Devices; the failed chip goes straight to ?showFailed=trueThe device count after mapping, summed; look further into the reason behind a failure
FabricsGoes to Network MapThe fabrics of each bridge, summed; it does not mean the controllers support the same features
HA ConnectionNoneOnline or Offline plus the application uptime; it covers only the HA service connection layer
The status at the topHover or tap for a tooltipVersion, uptime, bridges running, and the combined HA and WebSocket status

The status icon is error when health is error or unhealthy, or when any bridge is stopped or failed. It can only be warning when health is still healthy but the WebSocket has dropped, or in the healthy fallback where there is no bridge or not every bridge is running; success means every bridge is running and the connections are healthy. With no bridge it shows the matching state instead of pretending that "everything is running".

Read it in this order: wait one refresh cycle, then compare the dashboard against the Status tooltip. If they still disagree, go to Health rather than reloading over and over or restarting every bridge.

Bridge mini cards, ordering and bulk actions

The top of the Bridges widget holds Bridge Wizard, Create Bridge and Area Setup, along with Start All, Stop All and Restart All. While a bulk action runs the buttons are disabled, and the code also uses a guard against double clicks; health is fetched again as soon as it finishes. These buttons are real backend actions, not just a change to what the dashboard shows.

The mini cards are ordered by priority, smallest first, with a missing value treated as 100; the #1 and #2 on screen are the current display order. Each card shows an icon, the name, running/stopped/failed, the device count and a non-zero fabric count, and it shows a warning count when there are failed entities. Click a card to open the bridge details.

ActionImpactSafe use
Start AllTries to start every bridgeUse it after maintenance, and watch for failures instead of clicking repeatedly
Stop AllStops every bridge, and the controllers lose serviceOnly during a maintenance window you have announced
Restart AllEvery bridge is briefly interrupted and its service is rebuiltIt should not be your first step for a single device fault
Clicking a mini cardOnly navigates to that bridge's detailsRead the individual statusReason, the failed entities and controller health first
Bulk actions are not a troubleshooting shortcut: when one bridge has failed, open its card and read the reason first. Restart All widens the outage, and it can rebuild controller sessions that were healthy.

The nine Quick Navigation shortcuts

Quick Navigation does not replace the full top navigation. It turns the nine destinations you use most in day-to-day operations into cards: Bridges, Area Setup, Devices, Network Map, Health, Startup Order, Lock Credentials, Filter Reference and Settings. Standalone Devices and Plugins are still reachable from the top navigation, but they are not in this set of quick cards.

ShortcutWhen you normally use it
BridgesChecking the full list, importing or exporting, or adding a bridge
Area SetupCreating in bulk once your HA areas are tidy
DevicesSearching mappings and reviewing failed devices
Network MapUnderstanding the bridge and fabric topology
HealthReviewing HA, bridge, controller, session and network diagnostics
Startup OrderManaging priority across several bridges
Lock CredentialsManaging sensitive lock features; read the security chapter before you touch it
Filter ReferenceCross-checking area and label identifiers and filter rules
SettingsSystem, updates, restore and other global settings

If you hide the Quick Navigation widget, the top navigation still works; on a phone, open the drawer on the right first. A different interface width does not mean a feature has been removed.

Language choices and light/dark

The fixed Language button in the bottom right opens the language list; Stable 2.0.55 ships with English, Deutsch, Français, Español, Italiano, Magyar, Simplified Chinese, Traditional Chinese, Japanese, ไทย, Svenska, Türkçe, Русский and Português (Brasil). Selecting Traditional Chinese maps to zh-TW. Switching affects the interface translation only; it does not change the HA language, a bridge identity or a display name in a controller.

The moon/sun icon at the top switches between dark and light. On the desktop layout the icon is shown directly; on the mobile layout the drawer shows "Dark Mode" or "Light Mode". The theme is a browser UI preference; it does not change a bridge, a device or the contents of a log.

  1. Switch language

    Press the Language button in the bottom right and pick your language from the list. If some strings are still untranslated, the translation for that pinned version may not cover them yet; that is not evidence that the backend version is wrong. Note: the Chinese edition of this guide walks through Traditional Chinese here; the steps are the same for any entry in the list.

  2. Choose a theme

    On the desktop layout press the theme icon at the top; on the mobile layout open the menu on the right and pick Dark or Light Mode. Check the contrast and the readability.

  3. Tell browser preferences apart from backend data

    When you check from a different browser, the language, the widgets or the theme may differ. Do not read that difference as a lost backup.

  4. Redact sensitive content when you report a translation issue

    Give only the pinned version, where the string appears and the wording you expect; do not attach full System Logs, live URLs or commissioning screens.

The System Logs dialog: filter, search, refresh and clear

The Bug Report icon at the top opens the System Logs dialog. By default error, warn and info are selected and it asks api/logs for at most 500 entries; you can select several of error/warn/info/debug, type a search string, and refresh by hand. With Auto on it refreshes every 5 seconds; the Auto/Manual chip switches between the two.

Each entry shows a timestamp, a level, a message and optional context. Delete sends a DELETE to the log API and empties the current log. That has real consequences, so do not press it before you have preserved the evidence of the fault. Close only closes the dialog; it clears nothing.

ControlWhat it is forWatch out
LevelSelect several of error/warn/info/debugdebug can produce a lot of output; use it only for short troubleshooting sessions
SearchPasses the search string to the log APIAvoid typing or screenshotting sensitive identifiers
RefreshImmediately fetches the logs for the current criteria againIt is not the same as restarting the service
Auto/ManualControls the automatic refresh every 5 secondsSwitch to Manual to hold the view during a long analysis
DeleteClears the server logsSave the redacted diagnostics you need, and check your operations policy, before you do it
Redact before you share: log context can contain URLs, entity identifiers and other details from the live site. Do not copy the full JSON. Quote only the error type and the pinned version, and remove every secret, private address and piece of Matter identity data.

Version mismatch and WebSocket connection lost

When the frontend and backend versions differ, AppLayout shows a yellow Version mismatch banner with a Reload button. That usually means the browser is still holding old frontend assets; press Reload first to get the latest UI. Do not rebuild a bridge or change storage because of it. If it is still there after a reload, then check the proxy cache, Ingress and the actual backend version.

When the global WebSocket is not connected, a red "Connection lost, data may be outdated. Reconnecting…" is shown. The WebSocket picks ws/wss from the protocol of the current page, builds api/ws from the document base, and retries about 3 seconds after a drop. The data on screen may be out of date while that lasts, so pause bulk actions and configuration changes.

MessageFirst stepDo not
Version mismatchPress Reload; confirm that frontend and backend show the same pinned versionDo not reset, delete a bridge or commission again
Connection lostWait for the automatic reconnect, and check the Status tooltip and HTTP healthDo not run bulk actions one after another on a screen showing stale data
HA Offline but the WebSocket connectedGo to Health and check the Home Assistant service connectionDo not mistake the UI WebSocket for the HA WebSocket
UI Online but the controller says No ResponseCheck the bridge, the fabric, the session and the mDNS network layerDo not just refresh the browser

Common dashboard pitfalls

  1. The Customize button has disappeared

    It only shows when hasBridges is true. If the welcome card is still there, first confirm that the bridge was really created: cross-check it on the Bridges page or against the health API status, not against local storage.

  2. The widget order differs on every machine

    The setting lives in each browser's local storage, not in the backend. When you need them to match, set it on every managed browser, or press Reset to go back to the default; do not restore Matter Hub storage.

  3. The stats did not update right after an action

    The dashboard refreshes every 15 seconds and the status at the top every 30 seconds. Wait, then verify with Refresh or Health. A bulk action fetches once by itself when it finishes, but the data can still be out of date while the WebSocket is disconnected.

  4. Connection lost never goes away

    Check whether the reverse proxy or Ingress forwards api/ws correctly, whether HTTPS uses WSS, and whether the base path matches. Do not just restart bridges over and over, because the warning is about the WebSocket layer between frontend and backend.

  5. Version mismatch is still there after a reload

    Cross-check the browser cache, the proxy cache and the actual backend version. Do a no-cache reload or clear the static asset cache properly; do not clear persistent data.

  6. System Logs does not show an older event

    Check the level, the search and the 500-entry limit, and check whether anyone pressed Delete. Once it is cleared, closing the dialog will not bring it back, so before you troubleshoot, save the necessary redacted data as your operations policy requires.

FAQ

Is the device count on the dashboard every entity in HA?
No. It sums the deviceCount from each bridge's health detail. Filters, mappings and composed devices all affect it, so it is not the total in the HA entity registry.
Does hiding the Bridges widget stop a bridge?
No. Widget visibility lives only in the browser's local storage; the backend bridge lifecycle is unaffected.
Can I use Stop All as an ordinary refresh?
No. It stops every bridge, and the controllers are cut off. For an ordinary view update, wait for the health refresh; for a single fault, deal with that one bridge first.
Does switching language change device names in a controller?
No. It only calls the frontend i18n to switch the UI language. A bridge identity, an HA entity name and a custom name in a controller are different data.
Does WebSocket Offline mean Home Assistant is offline?
Not necessarily. The global warning is the WebSocket from the browser to the Matter Hub backend; the HA connection is a separate layer from the backend to Home Assistant, so read Status and Health separately.
Does Delete in System Logs remove only the current search results?
The interface sends a DELETE to api/logs and empties the display, so do not assume it removes only the current filter. Do not run it before you have preserved your diagnostics.

Pinned-version official and source-code references