Files
home-information/docs/GettingStarted.md
Tony C 1a6a704875 Pre-release tweaks across simulator, attributes, weather, Frigate, naming (#376)
* Simulator improvements: profile-load lifecycle, cache hygiene, naming

Profile load lifecycle:
  - Drop _add_zm_server from the ZM seed builders. The ZmServer was
    being persisted by both the seed and the simulator's on-demand
    auto-create, doubling up under a hydration race.
  - Add ServiceSimulator.post_load_hook() — a deterministic
    lifecycle point invoked once per profile load after hydration.
    ZoneMinderSimulator overrides it to materialize the singleton
    ZM Server so freshly-created and freshly-switched profiles
    always show it.
  - Take the manager's data lock for the duration of
    _load_entities_for_simulator's clear+rehydrate, closing the
    race where a concurrent add_sim_entity could see an empty map
    mid-hydration and persist a duplicate singleton. The
    initialize() flow releases the lock before the cross-thread
    sync_to_async hop so the existing once-only _initialized guard
    still works without deadlocking.

Cache hygiene:
  - Add NoStoreMiddleware (in both hi.middleware and
    hi.simulator.middleware so the apps stay independent) that sets
    Cache-Control: no-store on HTML and JSON responses lacking an
    explicit directive. Without this, browsers apply heuristic
    caching and may serve a stale page when the server is down —
    making controls appear functional while every AJAX call
    silently fails. Static assets and views with explicit
    Cache-Control are not touched.

Naming:
  - ZM 'volume' profile cameras renamed 'Volume Camera NN' →
    'ZM Camera NN'.
  - Frigate 'volume' profile cameras renamed 'Volume Camera NN' →
    'Frigate Camera NN', with the wire-format camera_name tracking
    the rename so diagnostics stay coherent.

* HA camera snapshot regression: strip substate suffix in state-id map

Cameras stopped showing the polled snapshot in the live view after
the motion_detection substate was added: cameras went through the
multi-substate decomposition path and their Sensor rows now carry
'~state' / '~motion_detection' integration_names instead of the
bare 'camera.X'. The HassManager's entity_id->ha_state_id map was
returning those suffixed names, but the latest-attrs cache is keyed
by the bare HA state id, so the lookup missed and
get_entity_video_snapshot returned None — the template fell through
to the placeholder branch.

Strip the suffix when building the map so the lookup hits. Multiple
substate sensors for the same camera collapse to the same bare key
by construction.

Also added a code comment at the device-grouping short-name match
documenting that pairing only spans the current sync pass: an
operator who excludes 'camera' on one sync and re-enables it on a
later sync gets a standalone motion-sensor orphan that the
newly-arriving camera does not absorb. Rare power-user scenario;
documented for the next reader rather than fixed with cross-pass
absorption logic.

* Fix two attribute restore regressions

Restore-default icon (single attribute):
  _restoreTextarea updated the textarea and hidden field but left
  the read-mode div untouched. With the read-mode linkified rendering
  introduced more recently, the operator sees no visible change after
  Restore — the form's dirty state ticks over but the displayed value
  doesn't until they hit Save. _restoreTextarea now also overwrites
  the read-mode content div with the restored value as escaped plain
  text. Server-side linkification returns on the next save.

Restore-from-history (config settings, multi-attribute page):
  SubsystemAttributeRestoreInlineView routes through
  <int:subsystem_id> while the initial ConfigSettingsView routes
  through a re_path \d+ capture (string). The template's tab-pane
  'show active' comparison
    selected_subsystem_id == owner.id|stringformat:'s'
  succeeded for the initial render (string==string) and silently
  failed for the restore response (int==string is False in Django
  templates). The response replaced #attr-v2-content-subsystem
  correctly, but every tab-pane rendered without 'show active', so
  Bootstrap's .fade hid all of them. The action bar above the tabs
  stayed visible, looking exactly like 'only the UPDATE button
  re-rendered'. Normalize selected_subsystem_id to str in
  SubsystemAttributePageEditContext so callers can pass int or str
  and the comparison always succeeds.

* Weather monitor: opt out of alarms, link banner to health modal

The weather monitor's health status is now surfaced in the sidebar
notice area, so it no longer needs to participate in the alarm/alert
subsystem to be visible. Drop the alarm_ceiling override (which had
opted WeatherMonitor in at AlarmLevel.INFO), the now-unused AlertMixin
parent, and the corresponding imports. Inherited default behavior
returns the monitor to 'publish health only, dispatch no alarms'.

When the conditions-pane status banner shows (warning/error states),
clicking it now opens the existing system_health_status modal for the
weather monitor. The banner is an <a> with data-async='modal'; the
HTML5 parser auto-closes the surrounding clickable-card <a> when it
encounters the inner one, so the banner ends up as a DOM sibling and
its click doesn't trigger the conditions-details modal. Antinode's
delegated handler already calls preventDefault + stopPropagation, so
no extra propagation control is needed.

* Rename user-facing 'Trigger' vocabulary to 'Rule' / 'Rule Matches'

The internal Event / EventDefinition models had been surfaced to
operators as 'Trigger' / 'Trigger Rule' / 'Trigger History'. 'Trigger'
collides with the term several integrations use (HA triggers,
ZoneMinder events, Frigate events) and read poorly enough to want to
change. Internal class names stay; only user-visible strings move:

  EventDefinition           -> 'Rule'
  EventClause               -> 'Rule Condition'
  EventHistory              -> 'Rule Match' / 'Rule Matches'
  Trigger Type              -> 'Match Type'        (operator label)
  Trigger Window Secs       -> 'Match Window Secs' (operator label)
  Trigger when ...          -> 'Match when ...'    (operator help)
  Config tab 'Triggers'     -> 'Rules'
  Sidebar 'TRIGGER HISTORY' -> 'RULE MATCHES'

Migration 0009 reflects the verbose_name / verbose_name_plural
changes. Domain phrases like 'sensor triggers' and 'alarms trigger'
(unrelated to EventDefinition) are kept; same with internal code
identifiers, comments, and trigger_reason fields.

* Frigate: expose Authorization Header field and document static-auth scenarios

Flip AUTH_HEADER.is_editable to True so operators can set the
Authorization header value themselves. The client already sends the
value verbatim, so no client changes needed.

Document the supported static-auth scenarios in
docs/integrations/frigate.md with a table: no-auth (default), reverse
proxy with HTTP Basic, reverse proxy with long-lived bearer, reverse
proxy with anonymous backend, and Frigate's built-in JWT login
(not supported in v1). The header field is the right answer for the
first three; the last has a documented workaround (front Frigate with
a proxy that handles auth).
2026-05-27 16:43:19 -05:00

7.7 KiB

Home Information Logo

Getting Started

Once successfully running (see the Installation Page), you will be greeted with:

Home Information Start Page

Choose which home type you want to use. If you choose "Two Story", you will see this initial screen with some common household items pre-populated.

initial-view-1024x768

These provide defaults to get started quickly. You can modify and customize as much as you want after this.

Adding Information

To core feature of Home Information is managing information about your home and the things in it. To add information, tap on any of the items and you will see the main information view/edit dialog. Initially, it looks like this:

item-edit-modal-empty-1024x768

Use the "Add Info" button to add some information about the item. Or use the "Add File" button to upload a document:

item-edit-add-info-1024x768   item-edit-add-file-1024x768

Some information may not be associated with an individual item, but the home overall. For that, use the top-right button to add the information to the home itself.

location-edit-modal-1024x768 location-edit-modal-1024x768

Multiple Spaces

If you have a multi-story house, basement, attic or even another vacation home or second property, you can create a different "space" for that. Here we have an extra space defined for the second floor rooms and crawl spaces.

spaces-dropdown-1024x768   view-second-space-1024x768

Collections

Not everything in your home has a well defined location, so use the "collections" bottom buttons for those items and you can choose whether you prefer a list of grid layout.

collections-buttons

collections-grid-1024x768 & nbsp; collections-list-1024x768

Weather

There are some default weather integrations which also provide weather alerts. Tap on the weather information to see more details.

weather-details-1024x768   weather-forecast-1024x768

Seen sunrise times, sunset, moon phase, weather history and more.

astronomical-details-1024x768   weather-history-1024x768

Controls and Settings

Control alert sounds, screen brightness and lock your screen. The alerts and display keep running so you do not miss anything.

bottom-right-buttons-1024x768

For accurate weather and time, be sure to set your timezone and geographic location in the configuration pages.

console-settings-page-1024x768

Layout Editing

You have full control of the layout of your items and the background image. These are all managed by choosing "EDIT" and entering "Editing Mode".

edit-button edit-mode-1024x768

The Editing Page has many details on how to use the editor.

Integrations

For smart home device automation, go to the configuration area to enable one of the current integrations (e.g., Home Assistant).

integrations-page-empty-1024x768   integrations-enable-modal-1024x768

After enabled, you can import all the items to add them to your views and collections.

integrations-page-view-1024x768 integrations-sync-result-1024x768

See the Integrations Page for more details.

Cameras

If the integation provides cameras with video feeds (e.g., ZoneMinder), the cameras will appear in the side bar for easy access to their streams and for browsing the video stream history from past motion events.

video-stream-live-1024x768.png   video-stream-history-1024x768.png

Alert Rules and Security Modes

By default, if you have motion sensors, open/close sensors, camera motion, etc. the integration item import automatically creates alert rules. You can view, refine and manage these in the configuration pages.

rules-1024x768

The rules allow you to target different "security modes" for better control of what alerts and when.

security-modes

Alert Areas

In the editor, you can define areas and associate it with a device, like a camera. Then, if the camera detects motion, both the camera and the area will be highlighted.

camera-area-idle-1024x768.png   camera-area-active-1024x768.png

The highlighting will change color over time so you can see what is currently alarming, recently alarmed or what was active in the near past.

camera-area-recent-1024x768.png   camera-area-past-1024x768.png

Additional Details

Custom Background Images

In the editor, you can swap out the default property/house images for your own custom images. See the Custom Background Image Page for more details.

Alert Sounds

For features that use sounds (e.g., alerts), this allows toggling to mute and unmute. The alert sounds are considered "auto-play" by browsers, so you may need to allow this in the browser in order to hear the alert sounds. If you see "blocked' on this button, click it to see more info about fixing it.

Locking Feature

When visitors are in your house, be they friends, acquaintances, service or maintenance people, you may want to temporarily lock the screen so they cannot access the information you've stored. To unlock, it uses a password you set the first time you lock the screen. This is is just a light security convenience against casual snooping. Locking the device itself is better protection.