Zigbee Map - Visualize your mesh network

I don’t know why this happens, sorry.

Tomorrow I’ll prepare a version based on your code, where one can specify the websocket url in the panel config, and the app can skip all the supervisor/ingress auto-detection kung-fu.

Thank you for taking the time to look into this, great work!

1 Like

I just found this topic and wanted to thank you, absolutely love it. The new Z2M UI was driving me crazy.

I wanted to ask if it would be possible to add some mark that would show which device is a parent? I meant specifically for my routers.

1 Like

Released version 2.3.0 with the following change:

Added

  • Add support for external Zigbee2MQTT instances via manual WebSocket URL - @walberjunior

Connecting to Zigbee2MQTT instances not installed as an add‑on

  1. For manual installations of Zigbee Map
    Add the following in config/configuration.yaml (version 2.3.0 adds support for the config section):

    panel_custom:
      - name: zigbee-map-panel
        url_path: zigbee-map
        module_url: /local/zigbee-map-panel.js
        sidebar_title: Zigbee Map
        sidebar_icon: mdi:hub
        config:
          websocket-url: ws://192.168.1.200:8099/api?token=abc123
    
      - name: zigbee-log-panel
        url_path: zigbee-log
        module_url: /local/zigbee-log-panel.js
        sidebar_title: Zigbee Log
        sidebar_icon: mdi:list-box-outline
        config:
          websocket-url: ws://192.168.1.200:8099/api?token=abc123
    
  2. If Zigbee Map is installed as a custom component/integration
    Use the configuration UI:

    1. Go to SettingsDevices & services
    2. Open the Zigbee Map integration
    3. Click the Configure icon
    4. Enter your Zigbee2MQTT WebSocket URL in the field.
      Examples:
      • ws://192.168.1.50:9001
      • ws://192.168.1.200:8099/api?token=abc123
    5. Click Submit. You don’t need to restart Home Assistant.


Click here if version 2.3.0 doesn't appear in the 'About' tab after updating.
  1. Go to Zigbee Map and select the About tab
  2. Clear browser or companion app cache:
    • Firefox browser:
      Press Ctrl + F5 (Linux/Windows) or Cmd + Shift + R (Mac).
    • Chrome browser:
      Press F12 (Linux/Windows) or Cmd + Option + I (Mac) to open Developer Tools. Right‑click the Reload button (the circular arrow next to the address bar). Select Empty Cache and Hard Reload.
    • Companion app:
      On your mobile device, go to SettingsCompanion appTroubleshootingReset frontend cache. Restart the app.

Have fun!

I might be misunderstanding what you mean by “parent device”, so just to clarify how Zigbee handles it: in Zigbee terms, a parent is simply a router (blue node) that has one or more end devices (green nodes) connected to it. An end device is “speaking” to the mesh only through its
parent device.

If you meant something else, I’d love to hear more so I can point you in the right direction.

Thanks.

1 Like

Not too bad as i will mostly watch my mesh on a big monitor.
Is there any option likely in the future to save the settings server-sided?

@francisp, @Brad_Ford, @sublevel7, @haakon.haraldsen Sorry for the group ping, I went through the thread looking for folks running their Zigbee2MQTT outside of the Home Assistant add‑on system.

With the just released v2.3.0, you can now connect to standalone Zigbee2MQTT installations (Docker, separate hosts, etc.). Just provide the proper WebSocket URL as described in the Readme file.

Take it for a spin and see if it scratches any itch, or if it turns out to be completely useless :slightly_smiling_face:

Hello,
I’m on home assistant core with manual setup of your very nice project and Zigbee2MQTT server NOT HA-addon …
on Zigbee Log I can see each device !
but on Zigbee Map Map-tab i can see only coordinator while on Zigbee Map Devices-tab
I can see every device but with icon red or maybe orange?
what can i do to debug?
Console of zigbee map
[ INFO ] Mapping started # protocol: exodus — directive: breach
[ INFO ] Interface rerouted to graphical feed # user engaged with visual decoy
[ DONE ] Applying background image # none
[ FAIL ] Probing 0x94b216fffe502938 # timeout: 30000ms — trace: b53ebc51-8713-4804-8f7e-3b15c2c7e891
[ INFO ] Mapping process complete # I am the last process — I cannot terminate
[ FAIL ] Probing 0x94b216fffe502938 # timeout: 30000ms — trace: be68904c-d108-4651-bfc0-1b668a31aec7
Thank you for your project

You are right, that technically a router doesn’t have the same definition for a parent device as end devices do. But there is stil one that is considered parent to my knowledge or at least that is how it used to be represented in the old Z2M UI. It probably isn’t important.

Did a bit of digging after your comment, and it turns out you are right, routers/repeaters also have a “parent” in Zigbee terms. It’s not the same kind of parent relationship that end devices rely on; for routers it’s a logical thing that gets set when the device first joins the network, and it doesn’t affect how the mesh routes traffic or how healthy the network is.

I ignored that field and focused on actual LQI‑based links, since those tell you what’s really going on. Still, seeing the join‑parent could be interesting to understand how the network formed, so I’ll think about adding some kind of optional marker for it in a future update.

Thanks for bringing it up! Always nice when I get to learn something new :slight_smile:

1 Like

If you can see all your devices in the list, that means Zigbee Map app connected to the Z2M WebSocket just fine; the device list is sent automatically as soon as the connection is established.

After that, the map tries to deploy a small Z2M extension over the WebSocket and then asks the coordinator for its LQI data (using the extension). In your case, that LQI request seems to be timing out after about 30 seconds, so the whole process stops there.

Couple of things to try:

  1. Verify that the extension actually loaded in Z2M:
    With the Zigbee Map open in another tab, open the new Z2M UI (windfront) and go to: Settings → Dev console → External Extensions. Make sure zigbee-map-extension.js shows up in the dropdown.

  2. Check the Z2M logs while the Zigbee Map is open to see if any warnings or errors pop up. Also check the browser dev console for.

  3. What coordinator hardware are you using? Maybe yours is a bit picky about being asked for LQI data :slight_smile: but I doubt that.

Hope this helps.

My coordinator is SLZB-06
zigbee-map-extension is loaded in zigbee2mqtt but response log on zigbee2mqtt is

[10/01/2026, 11:47:26] z2m:mqtt: MQTT publish: topic ‘zigbee2mqtt/bridge/zigbee-log’, payload ‘{“addr”:“0xa4c138d68e704745”,“ep”:1,“tx”:242,“type”:“attributeReport”,“cluster”:“genBasic”,“data”:{“appVersion”:83},“lqi”:86}’
[10/01/2026, 11:47:34] z2m: ZigbeeLogExtension: Stopping extension
[10/01/2026, 11:47:34] z2m: zigbee-log-extension.js (/opt/zigbee2mqtt/data/external_extensions/zigbee-log-extension.js) removed.
[10/01/2026, 11:47:34] z2m:mqtt: MQTT publish: topic ‘zigbee2mqtt/bridge/response/extension/remove’, payload ‘{“data”:{},“status”:“ok”}’
[10/01/2026, 11:47:36] z2m: ZigbeeMapExtension: Starting extension
[10/01/2026, 11:47:36] z2m: Loaded external extension ‘zigbee-map-extension.js’.
[10/01/2026, 11:47:36] z2m: zigbee-map-extension.js loaded. Contents written to ‘/opt/zigbee2mqtt/data/external_extensions/zigbee-map-extension.js’.
[10/01/2026, 11:47:36] z2m:mqtt: MQTT publish: topic ‘zigbee2mqtt/bridge/response/extension/save’, payload ‘{“data”:{},“status”:“ok”}’
[10/01/2026, 11:47:38] z2m:mqtt: MQTT publish: topic ‘zigbee2mqtt/Mobile Zigbee’, payload ‘{“countdown”:0,“last_seen”:“2026-01-10T11:47:38+01:00”,“linkquality”:81,“power_on_behavior”:“on”,“state”:“ON”,“switch_type”:“toggle”}’
[10/01/2026, 11:48:07] z2m: ZigbeeMapExtension: Failed to execute LQI for ‘Coordinator’ (0x94b216fffe502938)

How can i help you to debug?
Thank you
EDIT: I have tried to extend timeout to 60secs but same replay Failed to execute…

Hi, the two SLZB-06 have different IP addresses and run on different channels. They also work on separate IP ports. In HA they both have their own Zigbee2MQTT. Also in HA I use Ingres to allow the two neworks/devices to show twice in the menu.

See below. Happy to share the setup if you are interested. Not mine really, but patched together from different Youtube channels.

Regards

Haakon
ingress:
zigbee2mqtt1:
work_mode: hassio
title: Z2M first floor
icon: mdi:zigbee
url: 45df7312_zigbee2mqtt

zigbee2mqtt2:
work_mode: hassio
title: Z2M second floor
icon: mdi:zigbee
url: 9336c2b0_zigbee2mqtt

1 Like

Released version 2.4.0 with the following small changes:

Added

  • Add support for multiple Zigbee2MQTT instances using config slug - @haakon.haraldsen
  • Add cache-busting query parameter (e.g. ?v=2.4.0) when sidebar entries are added using the integration

Changed

  • Expand mobile layout to use full screen width
  • Use the Lit version that is shipped with Home Assistant (smaller bundle size)

Fixed

  • Remove rounded corners from Zigbee Log panels

Click here if version 2.4.0 doesn't appear in the 'About' tab after updating.
  1. Go to Zigbee Map and select the About tab
  2. Clear browser or companion app cache:
    • Firefox browser:
      Press Ctrl + F5 (Linux/Windows) or Cmd + Shift + R (Mac).
    • Chrome browser:
      Press F12 (Linux/Windows) or Cmd + Option + I (Mac) to open Developer Tools. Right‑click the Reload button (the circular arrow next to the address bar). Select Empty Cache and Hard Reload.
    • Companion app:
      On your mobile device, go to SettingsCompanion appTroubleshootingReset frontend cache. Restart the app.

Have fun!

1 Like

I added a new feature in version 2.4.0 that should help with your setup. You can now explicitly define the add‑on “slug” in the panel configuration. When provided, the Zigbee Map will use that slug instead of trying to auto‑detect the Zigbee2MQTT instance.

You can configure it like this in your config/configuration.yaml:

# Feel free to change any of the configuration values to suit your setup,
# but keep the panel names zigbee-map-panel-1 and zigbee-map-panel-2 unchanged
panel_custom:
  - name: zigbee-map-panel-1
    url_path: zigbee-map-1
    module_url: /local/zigbee-map-panel.js
    sidebar_title: Zigbee Map (first floor)
    sidebar_icon: mdi:hub
    config:
      slug: 45df7312_zigbee2mqtt

  - name: zigbee-map-panel-2
    url_path: zigbee-map-2
    module_url: /local/zigbee-map-panel.js
    sidebar_title: Zigbee Map (second floor)
    sidebar_icon: mdi:hub
    config:
      slug: 9336c2b0_zigbee2mqtt

After restarting Home Assistant, you should see both Zigbee Map entries appear in the sidebar.

Sweet! That worked like a charm! Thanks a lot

H

1 Like

After the manual installation and configuration added in the configuration.yaml file I receive this fail, I run z2mqtt in a seperate lxc in Proxmox but I can access the frondend by adding z2mqtt proxy addon in HA and point it to the IP address with port 8099 of the z2mqtt instance without tokens.

1 Like

Released version 2.5.0 with the following small change:

Added

  • Add support for Zigbee2MQTT Proxy - @rytecbe

The app should now auto-detect if the Zigbee2MQTT Proxy add-on is used and use its slug (45df7312_zigbee2mqtt_proxy).

Click here if version 2.5.0 doesn't appear in the 'About' tab after updating.
  1. Go to Zigbee Map and select the About tab
  2. Clear browser or companion app cache:
    • Firefox browser:
      Press Ctrl + F5 (Linux/Windows) or Cmd + Shift + R (Mac).
    • Chrome browser:
      Press F12 (Linux/Windows) or Cmd + Option + I (Mac) to open Developer Tools. Right‑click the Reload button (the circular arrow next to the address bar). Select Empty Cache and Hard Reload.
    • Companion app:
      On your mobile device, go to SettingsCompanion appTroubleshootingReset frontend cache. Restart the app.

Have fun!

1 Like

Try updating to version 2.5.0 and give it another shot.

From your logs, it looks like the Zigbee2MQTT add-on is also installed, so make sure it is fully stopped before you try it.

1 Like

Hello Dan, I followed your tips, removed z2mqtt add-on completely from HA because I don’t use it anymore in HA as add-on but in a seperate container, cleared the cache in the browser after copying both files from your github
afbeelding
to the config/www folder and restarting HA I get this message below but the z2mqtt proxy is still installed and if I open that I see the z2mqtt frontend as it should. Weird that your app is complaining about z2mqtt not installed because I pointed your config to the seperate container with IP address. Also in the about window of your app I still see v1.1.1

1 Like