2025.2 Duplicate ZWave Hubs

I noticed an odd behavior when installing 2025.2. I have a Zooz 800 running through ZWave JS and detected fine in the ZWave integration. Upon installing a 2025.2, the zwave integration detected another copy of my controller. If I add it, it adds a second controller hub. Each reports 30 devices, but the entities are split (not evenly) between the two hubs. Anyone have any thoughts?

If I click add, I’ll get a second entry, with 30 devices. It will have 323 entities and the other will have the remaining 646 will be with the other.

I’m also experiencing this and would like to understand why as well. RPi 4, Aeotec Z-Stick 7, HAOS.



Same here. Zooz ZST39 stick.

It’s not detecting another copy of your controller. It’s detecting the DNS name and the IP address of Z-Wave JS UI. Just a different way to access the same server. Last time I checked you could connect to the same Z-Wave JS UI instance more than once but it wouldn’t allow you to use the same server URL on the same machine. If it were me I would make a backup so you can restore in case anything goes wrong then delete the entry that’s connected with the IP address.

Why did this just start happening after 2025.2 and/or the latest ZWave JS update?

Is there any harm in leaving it split like this to avoid headaches trying to reconnect with the entities tied to the would-be deleted entry?

If I did delete that entry, would the other one automatically “recapture” those entities?

The answer to all 3 of your questions is I am not sure. That’s why I recommend making a backup that way if deleting the other integration doesn’t work you can always revert back.

Having the same issue here. Tried deleting the IP address based entry and it came right back (auto detected) after a reboot.

Just ignore the integration discovery.

image

Or disable DNS Discovery in the ZUI add-on to prevent it in the first place.

Did the integration reassign those entities to the other configuration entry after you deleted the IP config?

I’m unable to reproduce this. HA correctly associates the DNS discovery entry with an existing one for me, even updates the config with the DNS info. I also cannot introduce duplicate integrations by using a different URL (e.g IP address).

Could someone in this situation with duplicate integrations added run the following command in a terminal add-on and post the results?

jq '.data.entries = [.data.entries[] | select(.domain == "zwave_js") | .data |= with_entries(select(.key | endswith("_key") | not))]' /config/.storage/core.config_entries

Example output:

{
  "version": 1,
  "minor_version": 4,
  "key": "core.config_entries",
  "data": {
    "entries": [
      {
        "created_at": "2025-02-19T16:44:22.619825+00:00",
        "data": {
          "integration_created_addon": false,
          "url": "ws://a0d7b954-zwavejs2mqtt:3000",
          "usb_path": null,
          "use_addon": false
        },
        "disabled_by": null,
        "discovery_keys": {
          "zeroconf": [
            {
              "domain": "zeroconf",
              "key": [
                "_zwave-js-server._tcp.local.",
                "3494921295._zwave-js-server._tcp.local."
              ],
              "version": 1
            }
          ]
        },
        "domain": "zwave_js",
        "entry_id": "01JMFHH86VSTJSMXY87EST9N0B",
        "minor_version": 1,
        "modified_at": "2025-02-19T17:14:04.272548+00:00",
        "options": {},
        "pref_disable_new_entities": false,
        "pref_disable_polling": false,
        "source": "user",
        "title": "Z-Wave JS",
        "unique_id": "3494921295",
        "version": 1
      }
    ]
  }
}

Here you go. Thank you for looking into this.

{                                                                                                                                                                                                  
  "version": 1,                                                                                                                                                                                    
  "minor_version": 4,                                                                                                                                                                              
  "key": "core.config_entries",                                                                                                                                                                    
  "data": {                                                                                                                                                                                        
    "entries": [                                                                                                                                                                                   
      {                                                                                                                                                                                            
        "created_at": "1970-01-01T00:00:00+00:00",                                                                                                                                                 
        "data": {                                                                                                                                                                                  
          "integration_created_addon": false,                                                                                                                                                      
          "url": "ws://a0d7b954-zwavejs2mqtt:3000",                                                                                                                                                
          "usb_path": null,                                                                                                                                                                        
          "use_addon": false                                                                                                                                                                       
        },                                                                                                                                                                                         
        "disabled_by": null,                                                                                                                                                                       
        "discovery_keys": {},                    
        "domain": "zwave_js",                    
        "entry_id": "3205b31789dc1da01768c75d8cd583fc",
        "minor_version": 1,                      
        "modified_at": "1970-01-01T00:00:00+00:00",
        "options": {},                           
        "pref_disable_new_entities": false,      
        "pref_disable_polling": false,           
        "source": "user",                        
        "title": "Z-Wave JS",                    
        "unique_id": "3314412413",               
        "version": 1                             
      },                                         
      {                                          
        "created_at": "2025-02-10T21:10:36.199564+00:00",
        "data": {},                              
        "disabled_by": null,                     
        "discovery_keys": {                      
          "zeroconf": [                          
            {                                    
              "domain": "zeroconf",              
              "key": [                           
                "_zwave-js-server._tcp.local.",  
                "3865337926._zwave-js-server._tcp.local."
              ],                                 
              "version": 1                       
            }                                    
          ]                                      
        },                                       
        "domain": "zwave_js",                    
        "entry_id": "01JKRV68D7NA1JT6MC58ENF5A3",
        "minor_version": 1,                      
        "modified_at": "2025-02-10T21:10:36.199591+00:00",
        "options": {},                           
        "pref_disable_new_entities": false,      
        "pref_disable_polling": false,           
        "source": "ignore",                      
        "title": "3865337926",                   
        "unique_id": "3865337926",               
        "version": 1                             
      }                                          
    ]                                            
  }                                              
}     

What’s your actual Home Id? You can find it in ZUI (blue info button top right) or HA integration config page.

It is

home id: 3865337926

Do your duplicate Z-Wave integrations show the same Home ID, as in comment 2025.2 Duplicate ZWave Hubs - #2 by GoodyGizmos?

I have ignored the second one, but yes, it’s showing the same Home ID:

Did you change controllers before, but keep the same integration instance? For some reason the unique ID, which is supposed to be the home ID, does not match your current controller, apparently.

Anyone else have their config entry information to provide? Wondering if these are all for the same reason.

Possibly… But if so, it was a very long time ago. I may have started with an Aeotec Z Stick 5, but I’ve had the same controller for at least the last 2 years, an Aeotec Z-Stick 7.

Only thing that has changed lately (past month-ish) is that I updated it to the latest firmware.

Here’s the same info requested earlier on my end. This is a relatively new install. I did have an issue with a prior firmware and had ordered a new controller to help troubleshoot, but I don’t think I ended up using it. Not 100% sure though.

image

{
  "version": 1,
  "minor_version": 4,
  "key": "core.config_entries",
  "data": {
    "entries": [
      {
        "created_at": "2024-09-15T12:37:13.092351+00:00",
        "data": {
          "integration_created_addon": false,
          "url": "ws://a0d7b954-zwavejs2mqtt:3000",
          "usb_path": null,
          "use_addon": false
        },
        "disabled_by": null,
        "discovery_keys": {},
        "domain": "zwave_js",
        "entry_id": "01J7TTZV84Z2ATNNAE9HBGHJT5",
        "minor_version": 1,
        "modified_at": "2024-09-15T12:37:13.092356+00:00",
        "options": {},
        "pref_disable_new_entities": false,
        "pref_disable_polling": false,
        "source": "user",
        "title": "Z-Wave JS",
        "unique_id": "3793154134",
        "version": 1
      },
      {
        "created_at": "2025-02-23T14:10:45.903936+00:00",
        "data": {
          "integration_created_addon": false,
          "url": "ws://172.30.33.1:3000",
          "usb_path": null,
          "use_addon": false
        },
        "disabled_by": null,
        "discovery_keys": {
          "zeroconf": [
            {
              "domain": "zeroconf",
              "key": [
                "_zwave-js-server._tcp.local.",
                "3289653543._zwave-js-server._tcp.local."
              ],
              "version": 1
            }
          ]
        },
        "domain": "zwave_js",
        "entry_id": "01JMSJAVGFT9V0BSYQ2T5XD1X2",
        "minor_version": 1,
        "modified_at": "2025-02-23T14:10:45.903941+00:00",
        "options": {},
        "pref_disable_new_entities": false,
        "pref_disable_polling": false,
        "source": "zeroconf",
        "title": "Z-Wave JS",
        "unique_id": "3289653543",
        "version": 1
      }
    ]
  }
}

Checking in with a similar issue, but in looking into this command, I realized what I did. I had a HubZ shared Zigbee/ Z-wave stick. I moved my Z-Wave network to a Zooz 800 controller (~6 months ago), but I didn’t move my Zigbee network. So the HubZ stick is still plugged into my HA instance. The popup showed up with the local domain name, and I clicked add. Now I essentially have two Z-Wave controllers, but just one Z-Wave Addon:

[core-ssh ~]$ jq '.data.entries = [.data.entries[] | select(.domain == "zwave_js") | .data |= with_entries(select(.key | endswith("_key") | not))]' /config/.storage/core.config_entries
{
  "version": 1,
  "minor_version": 4,
  "key": "core.config_entries",
  "data": {
    "entries": [
      {
        "created_at": "1970-01-01T00:00:00+00:00",
        "data": {
          "data_collection_opted_in": true,
          "integration_created_addon": false,
          "url": "ws://a0d7b954-zwavejs2mqtt:3000",
          "usb_path": "/dev/serial/by-id/usb-Silicon_Labs_HubZ_Smart_Home_Controller_813007F0-if00-port0",
          "use_addon": false
        },
        "disabled_by": null,
        "discovery_keys": {},
        "domain": "zwave_js",
        "entry_id": "44bdfea92a9b23dda2c641001cd4b16f",
        "minor_version": 1,
        "modified_at": "2024-10-06T14:50:47.349113+00:00",
        "options": {},
        "pref_disable_new_entities": false,
        "pref_disable_polling": false,
        "source": "user",
        "title": "Z-Wave JS",
        "unique_id": "3802221086",
        "version": 1
      },
      {
        "created_at": "2025-02-10T20:46:47.028216+00:00",
        "data": {
          "integration_created_addon": false,
          "url": "ws://172.30.33.2:3000",
          "usb_path": null,
          "use_addon": false
        },
        "disabled_by": null,
        "discovery_keys": {
          "zeroconf": [
            {
              "domain": "zeroconf",
              "key": [
                "_zwave-js-server._tcp.local.",
                "4001865689._zwave-js-server._tcp.local."
              ],
              "version": 1
            }
          ]
        },
        "domain": "zwave_js",
        "entry_id": "01JKRSTMQMJWT4XWQ44SXRTFYJ",
        "minor_version": 1,
        "modified_at": "2025-02-10T20:46:47.028219+00:00",
        "options": {},
        "pref_disable_new_entities": false,
        "pref_disable_polling": false,
        "source": "zeroconf",
        "title": "Z-Wave JS",
        "unique_id": "4001865689",
        "version": 1
      }
    ]
  }
}

I disabled the integration tied to the HubZ stick, but now the majority of my Z-Wave devices show as unavailable, but alive. I had un-paired most of these before pairing to the new Zooz stick, but some would not exclude, so I reset the devices themselves to join to the Zooz:

If I try to activate the disabled entity, I see this:

These all show normally in the Z-Wave Add on:

I’m not sure how to get out of this mess now…

I don’t think it has anything to do with the controller still being plugged in. If there’s no add-on running, nothing is using the HubZ. The problem is the unique ID being different.