Releases: Springvar/home-assistant-whereabouts-map-card
Release list
v0.3.1 — stale detection, accurate data_age, fixed trail history
Added
- Stale-person detection - mark a person stale when their location hasn't updated within
stale_after_hours(default: disabled). Stale markers are faded, dimmed, and grayscale, re-evaluated once a minute. data_agebuilt-in sensor - age (in minutes) for display conditions (e.g.sensor: data_age, comparator: gt, value: 1440hides a person last updated > 24h ago).- "Show as stale" editor setting - configurable under Display Conditions with a 1-72h threshold slider.
- Editor restyled to match the flightradar24-card design language.
Fixed
- Trail history "Request error" - replaced the REST history fetch with the WebSocket
history/history_during_periodAPI (hass.callWS). - Stale styling on overlay toggles - person toggle buttons now dim/grayscale when stale, matching map markers.
Install
Replace home-assistant-whereabouts-map-card.js with the file bound to this release.
v0.3.0 — Whereabouts Map Card rename + reworked background maps
Whereabouts Map Card v0.3.0
A major update renaming the card to Whereabouts Map Card (companion to the whereabouts-card) and reworking its background-map system with per-user CARTO/Stadia keys and configurable per-theme maps.
Renamed: Lens Map Card → Whereabouts Map Card
- New custom element type:
custom:whereabouts-map-card - New built artifact:
home-assistant-whereabouts-map-card.js - Backwards compatible: existing dashboards using
custom:lens-map-cardkeep working via a registered alias.
Reworked background maps
Tile providers moved into a single data-driven store. Per provider terms, CARTO and Stadia tiles now require a per-user API key — each user creates their own free key and enters it in the card editor.
- Keyless maps (no key — work out of the box):
color— OpenStreetMapsatellite— Esri World Imagerytopo— OpenTopoMap
- Keyed maps (require an API key):
light,dark,voyager— CARTO. Get a free key: https://carto.com/basemaps/apikeybw,outlines— Stadia Maps. Get a free key: https://stadiamaps.com/
- Fixed a bug where CARTO keys were appended with the Stadia
?api_key=param — CARTO now correctly uses?key=. - The card editor shows provider-specific API-key help inline, with a link to request a key.
Per-theme maps for system
map.type: system no longer hard-codes color/dark. You can now pick one map for light themes and one for dark themes, each able to carry its own API key:
map.light→ defaultcolormap.dark→ defaultdarkmap.light_api_keymap.dark_api_key
Backwards compatible: existing system configurations keep the previous color/dark behavior.
Upgrade notes
- If you use
light,dark,voyager,bw, oroutlines, create a free API key and enter it in the card editor (or inmap.api_key). - Existing
custom:lens-map-carddashboards keep working, but the new type iscustom:whereabouts-map-card. - No other breaking changes.
HACS: re-download the card in HACS and use custom:whereabouts-map-card in your dashboard.
v0.1.5
What's New in v0.1.5
Fixes
- Editor crash on empty groups — Fixed "Cannot use in operator to search for type in undefined" error when toggling group logic (AND/OR) or adding conditions to empty groups.
- Add/remove conditions in groups — Fixed context extraction from path strings. Paths like
person:0:0were parsed with context"person"instead of"person:0", causing all add/update/remove operations to silently fail. Extracted shared_parsePath()helper. - ResizeObserver feedback loop — Fixed infinite requestAnimationFrame loop that caused map to crash and show only blue tiles. Added re-entrancy guard to prevent observer-triggered resize cascades.
- Map center fallback — When center type is
visibleand no markers are loaded yet, map now defaults to Oslo (59.9, 10.7) instead of [0,0] (Gulf of Guinea). - User sensor logic — Fixed
user == person.ivarto check if the logged-in user is associated with that person entity (by looking up the entity'suser_idattribute), instead of comparing the evaluated person's entity_id.
v0.1.4
v0.1.3
What's New in v0.1.3
Features
- DEFAULT Condition Reference — New
DefaultConditiontype ({ type: "DEFAULT" }) that references the card-level default conditions from within a person's override conditions. - Enables patterns like
DEFAULT OR [custom conditions]— show a person if the default conditions match OR if custom conditions match. - Works inside AND, OR, and NOT groups. With no defaults defined, DEFAULT evaluates to
true. - Editor shows a purple "DEFAULT" badge and "+ Default" button in person condition editors (not available in the default conditions section itself).
Configuration
- New condition type:
{ type: "DEFAULT" }— usable inperson.displayConditions
v0.1.2
What's New in v0.1.2
Major Features
- Advanced Display Conditions — Replace flat display rules with a recursive condition tree supporting AND/OR groups and NOT conditions for complex person visibility logic.
- Built-in Selectors — New condition selectors:
who(match specific persons),where(match zones),when(time-of-day and day-type),user(logged-in user),random(probabilistic),distance, andstate. - Smart Value Inputs — Editor auto-detects sensor type and provides appropriate input widgets: dropdowns for who/where/user, multi-select chips for when, number inputs for distance/random, and dynamic inputs for custom named sensors.
- Tree-Based Condition Editor — Collapsible condition groups with colored badges (blue=Value, orange=Group, red=NOT), nested AND/OR/NOT conditions to arbitrary depth.
- Backward Compatibility — Old
display_rulesconfigs are automatically migrated to the newdisplayConditionsformat on load.
Fixes
- Deep copy frozen config objects in setConfig to prevent "object is not extensible" error
Configuration Updates
displayConditionsreplacesdisplay_rulesas the primary condition systemperson.displayConditionsreplacesperson.displayRulesfor per-person overrides- Old
display_rules/person.displayRulesconfigs continue to work via auto-migration
v0.1.1
What's New in v0.1.1
Major Features
- History Trail — Track person movement over time with configurable history window (max_age), distance cutoff (max_distance), and proximity filtering to remove GPS drift near current position. Trails rendered as colored polylines with opacity gradient from newest to oldest.
- Trail Opacity Controls — Configure
newest_opacity(default 1),oldest_opacity(default 0.3), andmidpointslider (0-100) controlling the fade curve. - Per-Person Trail Colors — Auto-assigned from 20-color palette, overridable per person via trail color picker.
- Connection Line — Dashed line drawn from current position to the last unfiltered trail point for visible persons.
- Overlay Controls — Auto-zoom toggle button and per-person visibility toggle buttons in the top-right corner of the map. Configurable via
show_auto_zoomandshow_toggle_buttons. - Auto Zoom — Works for all center types:
fitBoundsforvisiblecenter, zoom-to-fit for others. Toggleable via overlay button. - Auto-Recenter — Map re-centers when target moves >100m (configurable threshold respect).
- Map Interactivity Toggle —
map.interactivecontrols zoom/pan/scroll behavior. - Auto-Detect Current User — No need to set
current_usermanually; detected fromhass.user.id. - New Map Tile Layers — Added
none,light,voyager,satellite,topo. - Center Type:
visible— Centers on centroid of all visible persons. With auto zoom usesfitBounds, without uses centroid + configured zoom.
Fixes
- Map rendering reliability: retry loop, ResizeObserver, container dimension guards
- Leaflet CSS/JS loading stability (CSS in Lit template, JS via document.head)
- Marker flickering eliminated by diffing instead of recreating all markers
- Current user marker rendered below others via zIndexOffset
- Display rules: fixed empty-array fallthrough bug
- Trail history fetched from HA recorder via REST API
- Reconnection after navigation: clears markers, re-fetches trails
- Config guarded against undefined/null
Configuration Updates
trail.enabled,trail.max_age,trail.max_distance,trail.proximity,trail.newest_opacity,trail.oldest_opacity,trail.midpoint,trail.colorsshow_auto_zoom,show_toggle_buttonsmap.interactive,map.typenow includesnone/light/voyager/satellite/topocenter.typeexpanded touser/visible/home/fixed/person:<entity_id>zoom.auto_levelworks with all center types