
If you’re still running Home Assistant Core in a Python virtual environment, it’s time to start planning your move. The Core and Supervised installation methods are being phased out, and future updates will focus on the Home Assistant Operating System (HAOS) and Container. Migrating now means smoother updates, better reliability, and full access to the Add-on Store. In this article, I’ll share how I migrated my Home Assistant installation from a Python virtual environment on Ubuntu 24.04 in Proxmox to Home Assistant Operating System running in a Proxmox VM—including the hiccups I hit and how I fixed them.
Table of Contents
Background
When I first started using Home Assistant years ago, I installed it using the Python virtual environment method on an Ubuntu VM. It worked well for a long time, and I documented that early journey in my original Home Assistant setup guide. Over time, though, maintaining it became more of a chore, especially when Home Assistant dropped support for older Python versions. Every major update seemed to mean another round of rebuilding the virtual environment.
Then came Home Assistant’s announcement about deprecating older installation methods. The writing was on the wall: my Core install’s days were numbered. It was time to migrate to the Home Assistant Operating System (HAOS)—formerly known as HASSOS—which is now the officially supported and easiest path forward.
Editor’s note: If you are looking for virtualization hardware, check out this article about small form factor Proxmox hardware options.
The Migration Plan
Before diving in, I created a detailed migration plan:
- Snapshot the existing Home Assistant Proxmox VM
- Download Home Assistant backups
- Make sure I have copies of Z-wave security keys
- Note USB passthrough devices for my Z-Wave/Zigbee controller and Bluetooth adapter
- Make sure I know my credentials for Nabu Casa and Home Assistant
- Shut down the existing Home Assistant VM
- Run the community HAOS Proxmox install script in advanced mode to customize disk size, name, and ID
- Assign USB passthrough devices for Z-Wave/Zigbee and Bluetooth devices to new VM
- Restore Home Assistant backup from Nabu Casa
- Install Z-Wave JS and switch to Z-Wave JS UI
- Add the Samba add-on for file access
- Test and get everything working!
Everything went smoothly at first. Using my new Proxmox host, the community HAOS Proxmox script created the new VM in minutes. I restored my backup from Nabu Casa and restarted… only to boot into safe mode.
Hiccup #1: Safe Mode and the Missing Directory
Safe mode turned out to be caused by a bad allowlist_external_dirs path. My old Ubuntu setup used a directory for writing monthly energy readings that didn’t exist in HAOS. I’d written about that setup in an earlier post on tracking home power usage and cost with Home Assistant.
In the past, I’d just edit configuration files via SSH, but HAOS doesn’t work that way. Instead, I installed the File Editor add-on, updated the directory path in configuration.yaml, and rebooted. Simple fix, even if I did miss the old command line flexibility.

Backups Work Amazingly Well
One of the best parts of this migration was seeing how Home Assistant backups include everything—custom components, integrations, and even my RF control script that I wrote about in Using a Sonoff RF Bridge to Expand Your Smart Home. The install asks you if you want to restore a backup, and you can do it from a local backup or from Nabu Casa. After restoring, all of that worked immediately with no issues, except…
Hiccup #2: Alarm.com Integration

My custom Alarm.com integration from HACS didn’t reauthenticate after the restore, and wouldn’t accept my username and password, even though I knew they were correct. The fix was easy: I reinstalled the integration and reauthenticated, and it worked right away.
Rebuilding the Z-Wave Network

Next, I focused on getting Z-Wave working again. I followed Home Assistant’s Z-Wave JS setup guide, switching to Z-Wave JS UI—the same interface I used previously via Ubuntu Snap. I prefer Z-Wave JS UI because it gives better visibility into device statuses and communication issues.
The migration mostly went fine, but with about 50 Z-Wave devices, it took time for everything to reconnect. Many of the battery-powered devices needed to be woken up manually. Thankfully, I had my security keys handy, and eventually, every device came back online.
Zigbee, on the other hand, worked almost instantly without any configuration changes. Nice and easy. But then, I only have a handful of Zigbee devices
Hiccup #3: Presence Detection and the Disabled Entity
After the Z-Wave rebuild, I noticed that presence detection wasn’t working. I use the nmap integration to detect smartphones on my network. For some reason, the nmap entity tied to my phone was disabled, even though the others weren’t. Re-enabling it fixed the issue immediately.
Hiccup #4: Telegram Bot Notifications

My Telegram Bot integration also failed to connect after migration, but reinstalling the integration fixed it. I wrote about my Telegram setup in Using a Telegram Bot for Home Assistant Notifications, and thankfully, the reconfiguration was simple.
Custom Irrigation Controller, Cron Job, Shell Command, and MQTT Setup
One of my more customized setups is my Home Assistant irrigation controller, which uses a shell command triggered by cron and MQTT. Since HAOS doesn’t give you direct cron access, I moved that shell script and cron job to my Proxmox VM that runs all my Docker containers.
Now, getting the shell command to work in HAOS was a chore. My shell script uses commands not available in the HAOS Docker container. Since the script is already hosted on the Proxmox VM that runs my Docker containers, I decided to set up my shell command to ssh into that VM and run the script. To do this you need to:
- Create an SSH key on the target VM and copy that to the /config folder of your HAOS installation (so it survives upgrades)
- You’ll also want to create a known_hosts in your config directory so it doesn’t get overridden
- Then you can SSH into your VM and execute a script without a password.
- Update your Home Assistant shell command to use an SSH command that specifically uses the key in the config folder and the known_hosts file
That’s the overview. This community guide walks through the specific commands.
That same VM already hosts my MQTT broker using Docker and Eclipse Mosquitto, which I described in MQTT and Home Assistant Using Docker and Eclipse Mosquitto. I still use that broker instead of the one now built into Home Assistant, simply because it’s stable, familiar, and already integrated with my network automations.
Final Thoughts
After all that, things stabilized quickly. I tested several automations and integrations, and everything seemed to be functioning normally. Even the mobile app continued working, likely because I reused the same hostname and IP address from the old installation.
I installed the Samba add-on and set up a share on my Linux desktop for easy access to configuration files—straightforward and reliable.
Then, just for a final test, I tried upgrading Home Assistant from the UI. It worked perfectly. The OS updated, too, so I no longer have to worry about maintaining the underlying system. Even restarts from the Home Assistant UI now work, which they never did in my old Python venv install.
I might still add SSH access later, but for now, everything is running smoothly. From start to finish, the entire migration took just a few hours, with most of that time spent rebuilding the Z-Wave network.
The true test will be if anyone in my family notices anything. I doubt they will—and that’s exactly how it should be.
Key Takeaways
- Home Assistant is officially deprecating Core and Supervised installs—migrate to the Home Assistant Operating System (HAOS) for long-term support.
- The Proxmox install script makes spinning up an HAOS VM simple and fast.
- Restoring backups preserves most custom components, integrations, and automations.
- Be prepared for minor fixes: path changes, disabled entities, or reauthentication issues.
- HAOS simplifies life—upgrades and restarts from the UI just work.
Interested in supporting HomeTechHacker?
Have you found the content on this site useful? If so, are you interested in supporting me and this site? There’s no obligation of course, but I would really appreciate any support you can give. Below are a few ways you can show support:
- Share this site with your friends and on social media (use the sharing links at the end of this page for your convenience)
- Subscribe to this site
- Purchase one of my books, Life by Design, The Personal Cybersecurity Manual, The Home Network Manual, or The Smart Home Manual, for yourself or as a gift
- Put a link to HomeTechHacker on a site you have access to. Be sure to let me know about it!
- Enroll in HomeTechHacker Academy for free and premium online home technology courses.
- Reach out to me via my contact page or Twitter and let me know something I should write about
- Shop at Amazon through my affiliate links and ads on these pages. See my disclosures for more details about affiliate links. You can also just shop from one of the links below:
- HomeTechHacker Shop: This is a listing of products that I use, have reviewed, and that I recommend
- HomeTechHacker Technology Advisor: This suite of tools will give you customized home technology product recommendations based on your needs
- My Amazon affiliate link: Just click on this link to go to Amazon and shop
Thank you! I really appreciate it!