Fully migrating from SmartThings to Home Assistant

As of today, I have completed my migration from SmartThings which I used as the hub of two different homes over the last 8 years! I’ve been a Home Assistant user for the last couple of years but up until now, it used to be a secondary hub with SmartThings running my ZigBee and Z-Wave networks as well as most of my core automations. There were many reasons to switch but it was the last one on this list that finally pushed me over the edge:

  1. Internet outages making my smart home useless
  2. SmartThings outages doing the same
  3. Slow and clunky mobile app
  4. Deprecation of the original groovy platform that powered webCoRE and most of my critical automations

Overall, the migration went pretty smoothly and it only took me about a week with a couple of hours spent per day moving ZigBee and Z-Wave devices over as well as updating/recreating my automations.

The only painful part of the whole process (and the reason why I’m posting in this topic) was the migration of my Z-Wave network. It was so tedious that I almost gave up on several occasions. Here are some of the major issues I hit and had to deal with:

  1. Before I could start re-creating the network, I had to update the firmware on my Aeotec 700 series stick which took a very long time (and failed on Windows so I had to do it on one of my Raspberry Pi’s)
  2. On countless occasions, Z-Wave JS got stuck searching for devices and the only way I could fix it was by restarting the Add-on (and waiting a while for it to come back up again); on a few occasions, I even had to completely reboot my Home Assistant Yellow device
  3. On many occasions, the Z-Wave devices I paired dropped off the network and couldn’t be remotely controlled even after trying to re-interview and heal them; the only solution I found was to remove and re-pair them (which was a pain because I had often put the switch covers back on blocking access to the DSK codes)
  4. Some of my Z-Wave devices are a lot less functional when paired in Home Assistant that they were in SmartThings; for example, my GoControl garage door controller doesn’t expose an open/close sensor, setting up codes on my Z-Wave locks has been a nightmare, etc.

Given how well most everything in Home Assistant works and the praise I had heard for Z-Wave JS, I was honestly very surprised by how painful this part of the migration was; especially when compared with the super smooth process of moving my Zigbee devices over.

I’m starting this thread mostly to understand if I had a one-off experience here others have run into these issues too? Should I be worried about the long term stability of my Z-Wave network? Is there something I could have done better (e.g. used Zwave2Mqtt or a different Z-Wave stick)?

I only started using ZWaveJS a few months ago and so far have a handful of devices. I’ve noticed how ZWaveJS doesn’t see some capabilities of some nodes. For example, it doesn’t send swipe gestures of a scene controller, only taps and holds. Apparently there’s a way to work around this by using custom configs, but I haven’t gotten that far.
In your opinion, which one between ZWave and Zigbee is better from the point of view of signal reception and reliability?

1 Like

The first thing I would have done is used the Z-Wave PC Controller Software. It’s made by the people that make Z-Wave so it supports all the Z-Wave features and has a few nice to haves.

Normally when you exclude a device it’s done one at a time. With this software you can exclude multiple devices at once as well as add multiple devices at once which is a timesaver.

If want to get the most out of your devices I would switch to Z-WavejsUI. It has a provisioning list that you can use to store your DSK codes. It also supports associations.

2 Likes

@odwide, I don’t think I’ve had my networks running in Home Assistant long enough to tell the differences in stability yet. In SmartThings, a few Zigbee devices (e.g. smart vents) would occasionally drop off the network unless there was a Zigbee repeater in the same room as them). However, just based on the ease of setup and pairing, I would say Zigbee is way way better! I’ve personally started looking at Zigbee devices for my future needs (e.g. Aqara contact sensors, Inovelli Blue switches, etc.). For being owned and defined by a single company, it’s surprising how bad the Z-Wave experience still is. Silicon Labs have full control of the chipset in every device so why don’t they all work perfectly together?!

Thanks for the tips, @cornellrwilliams! Wish I knew about the multiple exclusion option; half the times the ZWaveJS got hung was during exclusion process. :man_facepalming:

ZWaveJS just got hung again while trying to exclude a device. Here are the logs in case anyone can decipher them.


2023-03-13T00:49:03.663Z CNTRLR » [Node 137] Association group #2: Querying command list...
2023-03-13T00:49:03.731Z CNTRLR » [Node 137] Association group #3: Querying name...
2023-03-13T00:49:03.798Z CNTRLR « [Node 137] Association group #3 has name "BASIC SET"
2023-03-13T00:49:03.798Z CNTRLR » [Node 137] Association group #3: Querying command list...
2023-03-13T00:49:03.866Z CNTRLR » [Node 137] Association group #1: Querying info...
2023-03-13T00:49:03.937Z CNTRLR « [Node 137] Received info for association group #1:
                                  info is dynamic: false
                                  profile:         General: Lifeline
2023-03-13T00:49:03.938Z CNTRLR » [Node 137] Association group #2: Querying info...
2023-03-13T00:49:04.004Z CNTRLR « [Node 137] Received info for association group #2:
                                  info is dynamic: false
                                  profile:         Control: Key 01
2023-03-13T00:49:04.005Z CNTRLR » [Node 137] Association group #3: Querying info...
2023-03-13T00:49:04.079Z CNTRLR « [Node 137] Received info for association group #3:
                                  info is dynamic: false
                                  profile:         Control: Key 01
2023-03-13T00:49:04.081Z CNTRLR   [Node 137] Interviewing Binary Switch...
2023-03-13T00:49:04.083Z CNTRLR » [Node 137] querying Binary Switch state...
2023-03-13T00:49:04.154Z CNTRLR « [Node 137] received Binary Switch state:
                                  current value:      false
2023-03-13T00:49:04.158Z CNTRLR   [Node 137] Interviewing Configuration...
2023-03-13T00:49:04.159Z CNTRLR   [Node 137] ConfigurationCC: Loading configuration parameters from device confi
                                  g
2023-03-13T00:49:04.172Z CNTRLR » [Node 137] querying parameter #1 value...
2023-03-13T00:49:04.240Z CNTRLR « [Node 137] parameter #1 has value: 0
2023-03-13T00:49:04.240Z CNTRLR » [Node 137] querying parameter #2 value...
2023-03-13T00:49:04.308Z CNTRLR « [Node 137] parameter #2 has value: 0
2023-03-13T00:49:04.309Z CNTRLR » [Node 137] querying parameter #3 value...
2023-03-13T00:49:04.379Z CNTRLR « [Node 137] parameter #3 has value: 0
2023-03-13T00:49:04.380Z CNTRLR » [Node 137] querying parameter #4 value...
2023-03-13T00:49:04.445Z CNTRLR « [Node 137] parameter #4 has value: 60
2023-03-13T00:49:04.446Z CNTRLR » [Node 137] querying parameter #5 value...
2023-03-13T00:49:04.513Z CNTRLR « [Node 137] parameter #5 has value: 0
2023-03-13T00:49:04.514Z CNTRLR » [Node 137] querying parameter #6 value...
2023-03-13T00:49:04.582Z CNTRLR « [Node 137] parameter #6 has value: 60
2023-03-13T00:49:04.582Z CNTRLR » [Node 137] querying parameter #7 value...
2023-03-13T00:49:04.652Z CNTRLR « [Node 137] parameter #7 has value: 15
2023-03-13T00:49:04.653Z CNTRLR » [Node 137] querying parameter #8 value...
2023-03-13T00:49:04.718Z CNTRLR « [Node 137] parameter #8 has value: 2
2023-03-13T00:49:04.719Z CNTRLR » [Node 137] querying parameter #9 value...
2023-03-13T00:49:04.789Z CNTRLR « [Node 137] parameter #9 has value: 0
2023-03-13T00:49:04.790Z CNTRLR » [Node 137] querying parameter #10 value...
2023-03-13T00:49:05.876Z CNTRLR   [Node 137] Timed out while waiting for a response from the node (ZW0201)
2023-03-13T00:49:05.878Z CNTRLR « [Node 137] received no value for parameter #10
2023-03-13T00:49:05.879Z CNTRLR » [Node 137] querying parameter #11 value...
2023-03-13T00:49:05.952Z CNTRLR « [Node 137] parameter #11 has value: 1
2023-03-13T00:49:05.953Z CNTRLR » [Node 137] querying parameter #12 value...
2023-03-13T00:49:06.024Z CNTRLR « [Node 137] parameter #12 has value: 0
2023-03-13T00:49:06.025Z CNTRLR » [Node 137] querying parameter #13 value...
2023-03-13T00:49:06.099Z CNTRLR « [Node 137] parameter #13 has value: 0
2023-03-13T00:49:06.102Z CNTRLR   [Node 137] Interviewing Central Scene...
2023-03-13T00:49:06.106Z CNTRLR » [Node 137] Querying supported scenes...
2023-03-13T00:49:06.314Z CNTRLR « [Node 137] received supported scenes:
                                  # of scenes:           2
                                  supports slow refresh: true
2023-03-13T00:49:06.315Z CNTRLR » [Node 137] Enabling slow refresh capability...
2023-03-13T00:49:06.387Z CNTRLR   [Node 137] Interview stage completed: CommandClasses
2023-03-13T00:49:06.389Z CNTRLR   [Node 137] Interview stage completed: OverwriteConfig
2023-03-13T00:49:06.391Z CNTRLR   [Node 137] Interview completed
2023-03-13T00:49:06.392Z CNTRLR   [Node 137] The node is ready to be used
2023-03-13T00:52:23.970Z CNTRLR « [Node 038] received wakeup notification
2023-03-13T00:52:23.973Z CNTRLR   [Node 038] The node is now awake.
2023-03-13T00:52:24.976Z CNTRLR » [Node 038] Sending node back to sleep...
2023-03-13T00:52:25.009Z CNTRLR   [Node 038] The node is now asleep.
2023-03-13T00:52:41.914Z CNTRLR   [Node 022] treating BasicCC::Set as a value event
2023-03-13T00:52:44.329Z CNTRLR « [Node 053] received wakeup notification
2023-03-13T00:52:44.332Z CNTRLR   [Node 053] The node is now awake.
2023-03-13T00:52:45.334Z CNTRLR » [Node 053] Sending node back to sleep...
2023-03-13T00:52:45.376Z CNTRLR   [Node 053] The node is now asleep.
2023-03-13T00:53:44.761Z DRIVER   Dropping message with invalid payload
2023-03-13T00:55:14.995Z CNTRLR   [Node 022] treating BasicCC::Set as a value event
2023-03-13T00:59:06.844Z CNTRLR   [Node 054] detected a deviation of the node's clock, updating it...
2023-03-13T00:59:24.507Z CNTRLR   starting exclusion process...
2023-03-13T00:59:24.542Z CNTRLR   The controller is now ready to remove nodes
2023-03-13T01:01:24.505Z CNTRLR   stopping exclusion process...
2023-03-13T01:01:24.533Z CNTRLR   the exclusion process was stopped
2023-03-13T01:01:38.360Z CNTRLR « [Node 133] Received updated node info
2023-03-13T01:01:38.362Z CNTRLR   [Node 133] The node is now awake.
2023-03-13T01:01:39.618Z CNTRLR   starting exclusion process...
2023-03-13T01:01:47.240Z CNTRLR   [Node 133] did not respond after 1/3 attempts. Scheduling next try in 500 ms.
2023-03-13T01:01:48.565Z CNTRLR   [Node 133] failed to decode the message, retrying with SPAN extension...
2023-03-13T01:01:50.113Z CNTRLR   stopping exclusion process...
2023-03-13T01:01:50.952Z CNTRLR   stopping exclusion process...
2023-03-13T01:01:56.947Z CNTRLR   stopping exclusion process...
2023-03-13T01:01:57.345Z CNTRLR   stopping exclusion process...
2023-03-13T01:01:57.575Z CNTRLR   stopping exclusion process...
2023-03-13T01:01:57.757Z CNTRLR   stopping exclusion process...
2023-03-13T01:02:05.615Z CNTRLR   [Node 133] Timed out while waiting for a response from the node (ZW0201)
Z-Wave error ZWaveError: Cannot check for firmware updates for node 133: Failed to query fingerprint from the node! (ZW0260)
    at ZWaveController.getAvailableFirmwareUpdates (/usr/src/node_modules/zwave-js/src/lib/controller/Controller.ts:5416:10)
    at Function.handle (/usr/src/node_modules/@zwave-js/server/dist/lib/controller/message_handler.js:205:30)
    at Client.receiveMessage (/usr/src/node_modules/@zwave-js/server/dist/lib/server.js:106:62) {
  code: 260,
  context: undefined,
  transactionSource: undefined
}
2023-03-13T01:02:05.650Z CNTRLR   The controller is now ready to remove nodes
2023-03-13T01:02:05.682Z CNTRLR   the exclusion process was stopped
2023-03-13T01:02:05.699Z CNTRLR   handling remove node request (status = undefined)
2023-03-13T01:02:05.699Z CNTRLR     exclusion is NOT active, ignoring it...

And this is what the UI looks like:

Tapping on “stop searching” does nothing.

I would update your software first. The latest driver version is 10.11.1. Its supposed to fix a bug that prevented including nodes using S2 security. Update and see if that fixes the issue.

Thanks for the tip, @cornellrwilliams! How do I go updating the driver? I don’t see any available updates for my Home Assistant OS, Core, or the Z-Wave JS add-on itself.

Quick question: If we move from SmartThings to HA, do you have to exclude all the devices from Smartthings before re-enrolling them to HA?

If you intend to use a hub other than the SmartThings pods, yes, you’d have to exclude them and include them in the new hub.

Otherwise, you can simply start using HA and link the existing devices using the SmartThings integration.

1 Like

Yes, all your Zigbee and Z-Wave devices need to be unpaired from SmartThings and re-paired with Home Assistant. This is by far the most time consuming part of the mugration. You can link Home Assistant to SmartThings and operate the devices that way; however, that’s at best a temporary stopgap solution. It’s not fast or reliable enough to really let you appreciate the benefits of switching to Home Assistant.

Funny I went through the same issues you did when I was setting up my ZWave devices in Home Assistant in March. Supposedly there was an issue with 700 series devices at the time. What ultimately fixed it was updating the firmware on the ZooZ 700 stick. I am now on a Zooz 800 LR which works flawlessly.

You don’t have to exclude all your devices. I made a video explaining how to migrate from Any hub to home assistant without having to exclude any of your devices. The best part is that this method is non destructive so if you decide you want to revert back you can. Plus you can also use these steps to run multiple controllers in the same network.

1 Like

That’s awesome! Thank you.
This is a really well-made tutorial.
However, for someone like me who is not familiar with the foundations of Z-Wave, it seems a bit complicated to follow.
But I will try to watch it multiple times to grasp what is going on here and then try migrating.
Could I possibly pay you to remotely assist or share my screen in a conference call so you could guide me through this process?:face_with_peeking_eye: