2026.7 Zone / Person changes are broken?

Hey, is anyone else having these issues?

I use espresense and an ibeacon, as the only device tracker for my person entity.

In automations, I use the if zone.home > 0 condition - but since 2026.7, this is broken because my device tracker is no longer showing up in the correct zone.

My person shows as home, the device tracker shows as home, but neither have the zone set, even though the device tracker has the associated zone.

Am I missing something?

Espresense just gives me a sensor which shows which room I'm in, and using an automation, I generate a device tracker like this:

alias: ESPresense → MQTT device trackers
mode: parallel
max_exceeded: silent
triggers:
  - entity_id:
      - sensor.ibeacon_triangle
    trigger: state
actions:
  - variables:
      slug: "{{ trigger.entity_id.split('.')[1] }}"
      room: "{{ trigger.to_state.state }}"
  - data:
      topic: espresense/trackers/{{ slug }}/state
      payload: "{{ 'home' if room != 'not_home' else 'not_home' }}"
    action: mqtt.publish

Same issue for me. No persons in zone and the count is always 0. Happens since 2026.7. Obviously breaks various of my automations. Home zone covers the location of my house. I don't get why this suddenly broke. Any ideas how to fix it?

Release notes say this: https://www.home-assistant.io/blog/2026/07/01/release-20267/#backward-incompatible-changes

That sounds related. However, my Home zone should still count all persons which are inside the zone, right? I only got the default home zone.

Only if the in_zones attribute of your person is being updated by the tracker(s).

You can check this in Developer Tools → States.

Yeah doesnt look like it. So downgrade Home Assistant to 2026.6 and wait for the trackers to be fixed or is there a workaround?

Can you use MQTT Explorer to investigate what json attributes are being published by ESPresense?

If it has an in_zones attribute than all you need to do is update your mqtt device tracker to obtain that attribute.

If it does not then ESPresense needs to be updated. Until then you could use a Template device tracker to update the in_zones template option from the mqtt room data.

What about other tyoe of tracker in a map card...
I got only 2 things in it..

  1. person card
  2. P2000

The person card shows correct
But since last update my p2000 (112 Fryslân)
Shows things in africa!
Wth
Ill think that's a hughe error lol

More information please. We wouldn't know what your map card would be, nor what exactly the 2 "things" they are. Are you saying you have a person card inside a map card (??) And if P2000 is not a person card, what is it then?

Let's start with your map card config in yaml. Edit the card, and go to Code Editor of the card, and copy & paste what's in there with proper format in your post.

Ahum…
Person> tracking
P2000 tracker
P2000 is an intregration for tracking police etc fire department
Etc 112…
Device tracker person works flaffless…
The p2000 ain’t anymore…
And is pointing to Africa instead my neighborhood…
And…last not least flightradar24 tracker is dead for months now

type: map
grid_options:
  rows: 6
show_all: false
entities:
  - entity: person.me
  - entity: sensor.112_friesland
    name: "112"
    label_mode: icon
    attribute: discipline
    focus: false
geo_location_sources:
  - blitzortung
  - Flightradar24
  - gdacs
  - usgs_earthquakes_feed
  - flightradar24
hours_to_show: 1
aspect_ratio: "16:9"
default_zoom: 10
auto_fit: true
fit_zones: true
cluster: false
theme_mode: dark
uix:
  style:
    ha-map$:
      .leaflet-pane: |
        path {
          fill: none;
          stroke: none;
        }
      .leaflet-overlay-pane: |
        path {
          fill: none;
          stroke: none;
        }
      .leaflet-marker-icon:
        ha-entity-marker $: |
          .marker {
            vertical-align: right !important;
            width: 35px !important;
            height: 35px !important;
            background-color: var(--ha-marker-color,none) !important;
          }

As today…right now when typing… the 112 sensor shows okay
But that doesn’t say if it does go well on the next hit on that sensor

You need to publish an attribute “in_zones”.

In my configuration, i set :

mqtt:
  device_tracker:
    - name: "BLE_tracker_xxxx"
      state_topic: "location/ble_tel_xxxx"
      payload_home: "home"
      payload_not_home: "not_home"
      source_type: bluetooth
      json_attributes_topic: "location/ble_tel_xxxx/attributes"
      json_attributes_template: "{{ value }}"

The message, sent to “location/ble_tel_xxxx/attributes” should contain :

{
  "in_zones": [
    "zone.home"
    ]
}

When leaving, it sould be empty.
Hope it can help.

Perfect, thanks for helping out. It’s working now.

I did the following:

configuration.yaml:

homeassistant:
  packages:
    espresense: !include beacons.yaml

beacons.yaml:

sensor:
  - platform: mqtt_room
    name: "ibeacon whatever"
    unique_id: ibeacon_whatever
    device_id: "iBeacon:some-long-beacon-id-numbers"
    state_topic: "espresense/devices/iBeacon:some-long-beacon-id-numbers"
    away_timeout: 30

mqtt:
  device_tracker:
    - name: "ibeacon whatever"
      default_entity_id: ibeacon_whatever
      unique_id: ibeacon_tracker_whatever
      state_topic: "espresense/trackers/ibeacon_whatever/state"
      payload_home: "home"
      payload_not_home: "not_home"
      source_type: bluetooth_le
      json_attributes_topic: "espresense/trackers/ibeacon_whatever/attributes"
      json_attributes_template: "{{ value }}"

automation:
  - id: espresense_update_device_trackers
    alias: "ESPresense → MQTT device trackers"
    mode: parallel
    max_exceeded: silent
    trigger:
      - platform: state
        entity_id:
          - sensor.ibeacon_whatever
    action:
      - variables:
          slug: "{{ trigger.entity_id.split('.')[1] }}"
          room: "{{ trigger.to_state.state }}"
          at_home: "{{ room != 'not_home' }}"
      - service: mqtt.publish
        data:
          topic: "espresense/trackers/{{ slug }}/state"
          payload: "{{ 'home' if at_home else 'not_home' }}"
      - service: mqtt.publish
        data:
          topic: "espresense/trackers/{{ slug }}/attributes"
          payload: >-
            {% if at_home %}
            {"in_zones": ["zone.home"]}
            {% else %}
            {"in_zones": []}
            {% endif %}

Hello everyone,

I’m also having issues with my setup. I’m using Chipolo Bluetooth tags, which are detected by my Olimex boards in proxy mode.

So I created my device_tracker helper like this:

{{ ['zone.home'] if 'on' in [
  states('binary_sensor.olimex_bluetooth_proxy_033cc4_invit_chipolo_2'),
  states('binary_sensor.olimex_bluetooth_proxy_046ec4_invit_chipolo_2'),
  states('binary_sensor.olimex_garage_invit_chipolo')
] else [] }}

But even though it returns “home” in the configuration, it returns “unknown”:

On the other hand, the state is fine :

I’ve miss something ?

I also use the companion app’s location tracking and the phone’s Wi-Fi detection. All three of these ensure that my presence is reliably tracked.

Before, it seemed to me that if the Wi-Fi or the tag was detected at home, the person was marked as present even if the app didn’t detect them at home. Since the update, I get the impression that if the app no longer detects the person at home, they’re considered to be outside. Have the priorities changed?

Hi, i don’t know much about code. But i had problem with the way HA “read” the code. You need to put json between ’ '.

For your wifi thing, i had the problem too. Wifi and BLE are on the same level of priorities. But it keeps alternating between Wifi that has “in_zones” and BLE that doesn’t. It only takes the last one. So even, you’re still in wifi=home if you were on BLE and it’s not home for the last time, it considers you’re out.

Hope i’m clear .. anyway solve your BLE problem or disable it and it will be fine

Hey, thanks for your answer.

I’ve tried the single and double options, but I still get “unknown” in the preview, but the entity’s status is good

Even though the template does indeed return zone.home

Actually, my problem isn’t about Wi-Fi or BLE, but rather the fact that before, when a person’s device tracker was still at home, that person would show up on the map. Now, it seems to me that no matter what happens, the companion app’s location takes precedence.

EDIT :

For example, this person is detected outside:

The Wi-Fi tracker and companion are clearly outside, but the tag is still detected at home :

I think it’s because the source type is set to GPS? Is there a way to change it?

Add the same logic for lat/lon on the template entity. Provide None when not home, or the location of another entity.

Do you mean like that (with my latitude and longitude identical to those specified for my home zone) :

With these templates, the entity’s status is always good but the preview remains stuck at “Absent.”

On the map dashboard the tag is in the home zone.

you have to use state_attr('zone.home', 'longitude'), not "my zone.home longitude" and else none instead of else 'none'

yes that what I’ve done “my zone.home longitude” is just to explain what I put. Try with none without '. Thanks

EDIT :

I did that and it works really well (but if you have any suggestions for improvements, I’d love to hear them too…) :

Zones :

{{ ['zone.home'] if 'on' in [
  states('binary_sensor.olimex_bluetooth_proxy_033cc4_chipolo_blanc'),
  states('binary_sensor.olimex_bluetooth_proxy_046ec4_chipolo_blanc'),
  states('binary_sensor.olimex_garage_chipolo_blanc')
] else [] }}

Lattitude :

{% set is_home = 'on' in [
  states('binary_sensor.olimex_bluetooth_proxy_033cc4_chipolo_blanc'),
  states('binary_sensor.olimex_bluetooth_proxy_046ec4_chipolo_blanc'),
  states('binary_sensor.olimex_garage_chipolo_blanc')
] %}

{% if is_home %}
  {{ state_attr('zone.home', 'latitude') | float(0.0) }}
{% else %}
  0.0
{% endif %}

Longitude :

{% set is_home = 'on' in [
  states('binary_sensor.olimex_bluetooth_proxy_033cc4_chipolo_blanc'),
  states('binary_sensor.olimex_bluetooth_proxy_046ec4_chipolo_blanc'),
  states('binary_sensor.olimex_garage_chipolo_blanc')
] %}

{% if is_home %}
  {{ state_attr('zone.home', 'longitude') | float(0.0) }}
{% else %}
  0.0
{% endif %}

However, we still have the issue where the sensor is always detected as present, but the person is marked as absent because the companion app sent a GPS location that’s far away. This might seem like an unrelated issue, but I think it would be good to have the option to choose the tracking_type again.