[OBSOLETE] How do you replace Zwave devices in the new SmartThings IOS app?

Personally, I just add the new device, update any referenced routines and then remove the old device.

Both the old app option and the manual instructions above were flawed in that the previous hardware details were used for the new device.

That’s not necessarily a flaw if the Zwave Replace Utility, which is part of the independent third party standard, is being used as intended.

The purpose of this utility is really simple: a physical zwave device breaks and you want to replace it with another device of exactly the same model.

Since zwave hubs assign each device a network ID when they join the network, this means that a new device gets a new ID. The replace utility allows you to tell the hub to reuse an existing ID for a new device. But it does assume that the hardware specs are exactly the same.

If you want to use a new device with different specs, you aren’t supposed to use the Replace utility, but just add it as a new device.

How much rules rebuilding you then have to do isn’t part of the Zwave standard, it’s up to the hub/platform manufacturer. :thinking:

@Paralytic
How do you do step 2?

  1. Change that Device Network Id to something else not already in use (I typically just add a couple of digits to it)

In the IDE, I couldn’t figure out how to “update”:

alias st=smartthings
# Note down the Device Network Id (from the ST IDE) for the rogue device that is no longer responding
st devices
old=bea7f5a3-45b4-4eef-ae85-fd9852110543
new=bfd5dfe0-64d8-4584-a4ba-06276c727589
# Change that Device Network Id to something else not already in use (I typically just add a couple of digits to it)
st devices $old
    # Network Id              17
st devices:update $old '{"zwave": {"networkId": "17bad"}}'

Returns
Error: Unexpected argument: {"zwave": {"networkId": "17bad"}}

So I tried the API:

PUT https://api.smartthings.com/v1/devices/bea7f5a3-45b4-4eef-ae85-fd9852110543
with a body:

{
    "deviceId": "bea7f5a3-45b4-4eef-ae85-fd9852110543",
    "name": "ge-motiondimmer-assoc",
    "label": "Sage room ceiling light",
    "manufacturerName": "SmartThingsCommunity",
    "presentationId": "31a8fa88-fb5a-30e2-88c1-a948b9272cd0",
    "deviceManufacturerCode": "0063-494D-3034",
    "locationId": "3d3832fc-c049-4596-96aa-06e5f6399f9f",
    "ownerId": "3d1000f1-d132-9653-216b-60883755daa0",
    "roomId": "c38cf920-c45d-4764-8b2f-2cbf7b5f5c1d",
    "components": [
        {
            "id": "main",
            "label": "main",
            "capabilities": [
                {
                    "id": "switch",
                    "version": 1
                },
                {
                    "id": "switchLevel",
                    "version": 1
                },
                {
                    "id": "motionSensor",
                    "version": 1
                },
                {
                    "id": "refresh",
                    "version": 1
                }
            ]
        }
    ],
    "createTime": "2023-08-13T15:41:31.208Z",
    "parentDeviceId": "02838661-777a-40a0-9f57-9a1179f13d37",
    "profile": {
        "id": "a3cc9d56-5280-3748-9a59-7af68f976a24"
    },
    "zwave": {
        "networkId": "17aa",
        "driverId": "5ad2cc83-5503-4040-a98b-b0fc9931b9fe",
        "executingLocally": true,
        "hubId": "02838661-777a-40a0-9f57-9a1179f13d37",
        "networkSecurityLevel": "ZWAVE_LEGACY_NON_SECURE",
        "provisioningState": "PROVISIONED",
        "manufacturerId": 99,
        "productType": 18765,
        "productId": 12340
    },
    "type": "ZWAVE",
    "restrictionTier": 0,
    "allowed": null,
    "executionContext": "LOCAL"
}

(and an API token with full privileges in the headers)

but it just returns 200 with the equivalent of hitting GET /status:

{
    "deviceId": "bea7f5a3-45b4-4eef-ae85-fd9852110543",
    "name": "ge-motiondimmer-assoc",
    "label": "Sage room ceiling light",
    "manufacturerName": "SmartThingsCommunity",
    "presentationId": "31a8fa88-fb5a-30e2-88c1-a948b9272cd0",
    "deviceManufacturerCode": "0063-494D-3034",
    "locationId": "3d3832fc-c049-4596-96aa-06e5f6399f9f",
    "ownerId": "3d1000f1-d132-9653-216b-60883755daa0",
    "roomId": "c38cf920-c45d-4764-8b2f-2cbf7b5f5c1d",
    "components": [
        {
            "id": "main",
            "label": "main",
            "capabilities": [
                {
                    "id": "switch",
                    "version": 1
                },
                {
                    "id": "switchLevel",
                    "version": 1
                },
                {
                    "id": "motionSensor",
                    "version": 1
                },
                {
                    "id": "refresh",
                    "version": 1
                }
            ],
            "categories": [
                {
                    "name": "Switch",
                    "categoryType": "manufacturer"
                }
            ]
        }
    ],
    "createTime": "2023-08-13T15:41:31.208Z",
    "parentDeviceId": "02838661-777a-40a0-9f57-9a1179f13d37",
    "profile": {
        "id": "a3cc9d56-5280-3748-9a59-7af68f976a24"
    },
    "zwave": {
        "networkId": "17",
        "driverId": "5ad2cc83-5503-4040-a98b-b0fc9931b9fe",
        "executingLocally": true,
        "hubId": "02838661-777a-40a0-9f57-9a1179f13d37",
        "networkSecurityLevel": "ZWAVE_LEGACY_NON_SECURE",
        "provisioningState": "PROVISIONED",
        "manufacturerId": 99,
        "productType": 18765,
        "productId": 12340
    },
    "type": "ZWAVE",
    "restrictionTier": 0,
    "allowed": null,
    "executionContext": "LOCAL"
}

Would you please give me some more specifics?

You’re responding to a post which is two years old, and in 2023 SmartThings switched to an entirely new architecture. There is no IDE anymore, and it is no longer possible to use the method described in this post.

It also appears that smartthings no longer provides a method for doing a “zwave replace“ at all, although maybe that’s hidden somewhere. :thinking:

1 Like

Shame. Thank you for helping my sanity: I was feeling rather inadequate.

1 Like