Migrating My Home Assistant from Python Virtual Environment to Home Assistant Operating System in Proxmox

Home Assistant dashboard with logo visible on a computer screen in a modern home office.

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.

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!
See also  TRMNL OG (7.5″) E-Ink Dashboard Review: A Focused, Battery-Powered Family Status Board

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.

Life by Design book in paperback and ebook format with message about focusing on what truly matters

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

Alarm.com logo

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

Z-Wave JS

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

See also  The Hidden Culprits Behind Slow Wi-Fi Speeds in Your Home

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

Telegram logo

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.

See also  The State Of My Smart Home (2026)

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:


Thank you! I really appreciate it!
Share this:

Migrating My Home Assistant from Python Virtual Environment to Home Assistant Operating System in Proxmox

by HomeTechHacker time to read: 5 min