<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Home Automation | Bas Nijholt</title><link>https://www.nijho.lt/tag/home-automation/</link><atom:link href="https://www.nijho.lt/tag/home-automation/index.xml" rel="self" type="application/rss+xml"/><description>Home Automation</description><generator>Hugo</generator><language>en-us</language><copyright>© 2026</copyright><lastBuildDate>Fri, 05 Dec 2025 00:00:00 +0000</lastBuildDate><image><url>https://www.nijho.lt/media/icon_hu_408a8f6cef43e327.png</url><title>Home Automation</title><link>https://www.nijho.lt/tag/home-automation/</link></image><item><title>Wyoming MLX Whisper</title><link>https://www.nijho.lt/project/wyoming-mlx-whisper/</link><pubDate>Fri, 05 Dec 2025 00:00:00 +0000</pubDate><guid isPermaLink="false">/project/wyoming-mlx-whisper/</guid><description/></item><item><title>Home Assistant Ecosystem 🏠</title><link>https://www.nijho.lt/post/advent-of-open-source/24-home-assistant-ecosystem/</link><pubDate>Tue, 24 Dec 2024 00:00:00 +0000</pubDate><guid isPermaLink="false">/post/advent-of-open-source/24-home-assistant-ecosystem/</guid><description>&lt;p&gt;(See my &lt;a href="../"&gt;intro post&lt;/a&gt;)&lt;/p&gt;&#10;&lt;p&gt;There are not enough days in this advent calendar to highlight all my projects. So today is a collection of IoT/Home Assistant-related packages. Each has its own story.&lt;/p&gt;&#10;&lt;h2 id="-origin-stories--technical-details"&gt;📖 Origin Stories &amp;amp; Technical Details &lt;a class="anchor" href="#-origin-stories--technical-details" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;My Home Assistant obsession began as described in &lt;a href="https://www.linkedin.com/posts/basnijholt_opensource-homeassistant-smarthome-activity-7272248713882820608-w7RV" target="_blank" rel="noopener"&gt;Day 10&lt;/a&gt;. Many projects emerged from this hobby:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/basnijholt/aiokef" target="_blank" rel="noopener"&gt;&lt;strong&gt;aiokef&lt;/strong&gt;&lt;/a&gt;: To control my KEF speakers, I reverse-engineered network traffic and decoded raw byte sequences, diving deep into proprietary protocols to &amp;ldquo;speak&amp;rdquo; the speaker&amp;rsquo;s language.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/basnijholt/miflora" target="_blank" rel="noopener"&gt;&lt;strong&gt;miflora&lt;/strong&gt;&lt;/a&gt;: When &lt;a href="https://github.com/ChristianKuehnel" target="_blank" rel="noopener"&gt;@ChristianKuehnel&lt;/a&gt; couldn&amp;rsquo;t maintain this plant sensor library anymore, he transferred it to me. A perfect example of open source collaboration, it continues to help users monitor plant health and demonstrates how projects can thrive through community handovers.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/basnijholt/addon-otmonitor" target="_blank" rel="noopener"&gt;&lt;strong&gt;addon-otmonitor&lt;/strong&gt;&lt;/a&gt;: This HA add-on packages OpenTherm Monitor for the OpenTherm Gateway (OTGW). Using Docker to simplify deployment, it&amp;rsquo;s become a powerful open-source alternative to Nest or Ecobee, giving full control over heating systems.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/basnijholt/home-assistant-macbook-touch-bar" target="_blank" rel="noopener"&gt;&lt;strong&gt;home-assistant-macbook-touch-bar&lt;/strong&gt;&lt;/a&gt;: Remember that useless touch bar on the old MacBook? I transformed it into a mini Home Assistant control panel for lights, temperature, and more - a classic case of hardware hacking giving new life to abandoned technology.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/python-kasa/python-kasa" target="_blank" rel="noopener"&gt;&lt;strong&gt;python-kasa&lt;/strong&gt;&lt;/a&gt;: To modernize the popular &lt;code&gt;pyHS100&lt;/code&gt; library for TP-Link devices, I converted it to use &lt;code&gt;asyncio&lt;/code&gt;. With &lt;a href="https://github.com/rytilahti" target="_blank" rel="noopener"&gt;@rytilahti&lt;/a&gt;, we created the &lt;code&gt;python-kasa&lt;/code&gt; organization through community collaboration. While I haven&amp;rsquo;t contributed much since its inception, it&amp;rsquo;s now the standard for controlling Kasa devices.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="-impact--lessons"&gt;📊 Impact &amp;amp; Lessons &lt;a class="anchor" href="#-impact--lessons" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;These projects serve thousands of users while teaching valuable lessons:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Open source empowers us: from KEF speaker integration to plant monitoring&lt;/li&gt;&#10;&lt;li&gt;Reverse engineering unlocks potential: turning proprietary protocols into open solutions&lt;/li&gt;&#10;&lt;li&gt;Community drives success: projects like miflora and python-kasa thrive through collaboration&lt;/li&gt;&#10;&lt;li&gt;Innovation through repurposing: giving new life to hardware like the MacBook Touch Bar&lt;/li&gt;&#10;&lt;li&gt;Modern tech matters: Docker simplifies deployment, async code boosts performance&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Want to explore these projects? Check them out on GitHub:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/basnijholt/aiokef" target="_blank" rel="noopener"&gt;aiokef&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/basnijholt/miflora" target="_blank" rel="noopener"&gt;miflora&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/basnijholt/addon-otmonitor" target="_blank" rel="noopener"&gt;addon-otmonitor&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/basnijholt/home-assistant-macbook-touch-bar" target="_blank" rel="noopener"&gt;home-assistant-macbook-touch-bar&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/python-kasa/python-kasa" target="_blank" rel="noopener"&gt;python-kasa&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;This concludes our Advent of Open Source! I hope you&amp;rsquo;ve enjoyed this journey through my projects as much as I&amp;rsquo;ve enjoyed sharing them. Happy holidays and happy coding!&lt;/p&gt;&#10;&lt;p&gt;#OpenSource #HomeAssistant #IoT #Python #SmartHome&lt;/p&gt;&#10;</description></item><item><title>Home Assistant Config 🏠</title><link>https://www.nijho.lt/post/advent-of-open-source/10-home-assistant-config/</link><pubDate>Tue, 10 Dec 2024 00:00:00 +0000</pubDate><guid isPermaLink="false">/post/advent-of-open-source/10-home-assistant-config/</guid><description>&lt;p&gt;(See my &lt;a href="../"&gt;intro post&lt;/a&gt;)&lt;/p&gt;&#10;&lt;p&gt;Funny how things work out - initially, I didn&amp;rsquo;t care for home automation at all. But when in 2020 I discovered Home Assistant was written in Python, my favorite programming language, I suddenly found a new hobby. Over the years, I&amp;rsquo;ve built a comprehensive setup with over 137 automations (and counting!). These automations are triggered by everything from simple motion sensors to complex patterns of conditions and sensor states, creating a home that responds intelligently to our needs.&lt;/p&gt;&#10;&lt;h2 id="-origin-story"&gt;📖 Origin Story &lt;a class="anchor" href="#-origin-story" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;What started with basic light controls evolved into a complete home automation system. In the beginning, my wife was continuously annoyed by lights turning on at the wrong moment or not at all. However, as I debugged and refined the system, things started working exactly as expected, and she began to really appreciate it. When we moved from The Netherlands to the US in 2022 (and two more times since), we felt like we were back in the stone age having to manually control lights. The annoyance had shifted from buggy automations to not having Home Assistant fully installed yet!&lt;/p&gt;&#10;&lt;p&gt;Unfortunately, I&amp;rsquo;ve been less active lately with my Home Assistant setup because so many other projects draw my attention. One of these &amp;ldquo;projects&amp;rdquo; is my 1.5-year-old twin boys, who now have their own room with specialized automations, including 100% local cameras with ML pattern detection for monitoring without compromising privacy.&lt;/p&gt;&#10;&lt;figure id="figure-the-evolution-of-home-automation"&gt;&lt;img src="https://www.nijho.lt/post/advent-of-open-source/10-home-assistant-config/meme_hu_6700885751a5eed.webp" srcset="https://www.nijho.lt/post/advent-of-open-source/10-home-assistant-config/meme_hu_a2f1eaea094dec73.webp 285w, https://www.nijho.lt/post/advent-of-open-source/10-home-assistant-config/meme_hu_6700885751a5eed.webp 542w, https://www.nijho.lt/post/advent-of-open-source/10-home-assistant-config/meme_hu_2a8639bb88253b09.webp 856w" sizes="auto, (max-width: 760px) 100vw, 720px" width="542" height="760" alt="Meme with four panels, each showing a brain with increasing complexity. The panels are labeled: &amp;#39;MANUAL LIGHT SWITCHES&amp;#39;, &amp;#39;SMART BULBS&amp;#39;, &amp;#39;MOTION SENSORS&amp;#39;, and &amp;#39;137 AUTOMATIONS RUNNING YOUR ENTIRE HOME&amp;#39;." loading="lazy" data-zoomable&gt;&lt;figcaption&gt;The evolution of home automation&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;h2 id="-technical-highlights"&gt;🔧 Technical Highlights &lt;a class="anchor" href="#-technical-highlights" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;137 documented automations with auto-generated documentation&lt;/li&gt;&#10;&lt;li&gt;Presence detection in every room&lt;/li&gt;&#10;&lt;li&gt;Adaptive lighting throughout the house&lt;/li&gt;&#10;&lt;li&gt;Privacy-focused baby monitoring&lt;/li&gt;&#10;&lt;li&gt;Fully local processing&lt;/li&gt;&#10;&lt;li&gt;2,432 commits of continuous improvement&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="-impact"&gt;📊 Impact &lt;a class="anchor" href="#-impact" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;1,747 GitHub stars&lt;/li&gt;&#10;&lt;li&gt;185 forks&lt;/li&gt;&#10;&lt;li&gt;Used as reference by countless Home Assistant enthusiasts&lt;/li&gt;&#10;&lt;li&gt;Featured in Home Assistant community&lt;/li&gt;&#10;&lt;li&gt;Spawned several spin-off projects (like &lt;a href="../02-adaptive-lighting"&gt;Adaptive Lighting&lt;/a&gt; from Day 2!)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="-lessons-learned"&gt;💡 Lessons Learned &lt;a class="anchor" href="#-lessons-learned" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Start small, expand gradually&lt;/li&gt;&#10;&lt;li&gt;Privacy and local processing matter&lt;/li&gt;&#10;&lt;li&gt;Automated documentation stays accurate&lt;/li&gt;&#10;&lt;li&gt;Home automation is never &amp;ldquo;finished&amp;rdquo;&lt;/li&gt;&#10;&lt;li&gt;Sometimes life (like twins!) brings new automation challenges&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;Want to explore my home automation setup? Check out &lt;a href="https://github.com/basnijholt/home-assistant-config" target="_blank" rel="noopener"&gt;the full config on GitHub&lt;/a&gt;!&lt;/p&gt;&#10;&lt;p&gt;#OpenSource #HomeAssistant #SmartHome #IoT #Python&lt;/p&gt;&#10;</description></item><item><title>Home Assistant Stream Deck YAML 🎮</title><link>https://www.nijho.lt/post/advent-of-open-source/08-home-assistant-stream-deck-yaml/</link><pubDate>Sun, 08 Dec 2024 00:00:00 +0000</pubDate><guid isPermaLink="false">/post/advent-of-open-source/08-home-assistant-stream-deck-yaml/</guid><description>&lt;p&gt;(See my &lt;a href="../"&gt;intro post&lt;/a&gt;)&lt;/p&gt;&#10;&lt;p&gt;What started as a personal hack to control my home (temperature, lights, TV, music) with a gifted Stream Deck evolved into something bigger. This project became my first real exploration of AI-assisted development, showing me how much faster I could work with AI as a tool. With 250+ stars and 9 contributors adding significant features, it&amp;rsquo;s grown beyond my initial vision.&lt;/p&gt;&#10;&lt;h2 id="-origin-story"&gt;📖 Origin Story &lt;a class="anchor" href="#-origin-story" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;While the Stream Deck&amp;rsquo;s official software is great for streamers, it doesn&amp;rsquo;t support Linux and its Home Assistant integration is not very programmable. After creating a simple solution using &lt;a href="https://github.com/abcminiuser/python-elgato-streamdeck" target="_blank" rel="noopener"&gt;&lt;code&gt;python-elgato-streamdeck&lt;/code&gt;&lt;/a&gt;, I realized others might be interested. Using AI as a development partner changed my workflow - it helped write tests, reviewed code, and generated use cases I hadn&amp;rsquo;t thought of. What really surprised me was asking AI to brainstorm example configurations - it generated over 30 creative use cases with complete code examples, which I then turned into unit tests. These tests now automatically generate the documentation using &lt;a href="https://github.com/basnijholt/markdown-code-runner" target="_blank" rel="noopener"&gt;&lt;code&gt;markdown-code-runner&lt;/code&gt; &lt;/a&gt;(&lt;a href="../05-markdown-code-runner"&gt;from Day 5&lt;/a&gt;).&lt;/p&gt;&#10;&lt;h2 id="-technical-highlights"&gt;🔧 Technical Highlights &lt;a class="anchor" href="#-technical-highlights" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;YAML configuration with Jinja2 templating&lt;/li&gt;&#10;&lt;li&gt;Supports all Stream Deck models, including the Plus with dials&lt;/li&gt;&#10;&lt;li&gt;Cross-platform (Linux, macOS, Windows)&lt;/li&gt;&#10;&lt;li&gt;30+ example configurations (AI-generated, then human-refined)&lt;/li&gt;&#10;&lt;li&gt;Documentation auto-generated from code and unit tests&lt;/li&gt;&#10;&lt;li&gt;Available as a Home Assistant add-on&lt;/li&gt;&#10;&lt;li&gt;Community-contributed features like touchscreen support and dial controls&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="-lessons-learned"&gt;💡 Lessons Learned &lt;a class="anchor" href="#-lessons-learned" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;AI can significantly speed up development&lt;/li&gt;&#10;&lt;li&gt;Faster development enables broader project scope&lt;/li&gt;&#10;&lt;li&gt;Good examples make the best documentation&lt;/li&gt;&#10;&lt;li&gt;Tools building upon tools multiply productivity&lt;/li&gt;&#10;&lt;li&gt;Community contributions can take a project in exciting new directions&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;Want to control Home Assistant with a Stream Deck? Check out &lt;a href="https://github.com/basnijholt/home-assistant-streamdeck-yaml" target="_blank" rel="noopener"&gt;the project on GitHub&lt;/a&gt;!&lt;/p&gt;&#10;&lt;p&gt;#OpenSource #HomeAssistant #SmartHome #Python #AI&lt;/p&gt;&#10;</description></item><item><title>Adaptive Lighting 💡</title><link>https://www.nijho.lt/post/advent-of-open-source/02-adaptive-lighting/</link><pubDate>Mon, 02 Dec 2024 00:00:00 +0000</pubDate><guid isPermaLink="false">/post/advent-of-open-source/02-adaptive-lighting/</guid><description>&lt;p&gt;(See my &lt;a href="../"&gt;intro post&lt;/a&gt;)&lt;/p&gt;&#10;&lt;p&gt;Unlike &lt;a href="../01-calendar-of-life"&gt;yesterday&amp;rsquo;s Calendar of Life&lt;/a&gt; project, today we&amp;rsquo;re looking at one of my most popular contributions. It&amp;rsquo;s one of several Home Assistant and home automation related projects (&lt;a href="../08-home-assistant-stream-deck-yaml"&gt;Day 8&lt;/a&gt;, &lt;a href="../10-home-assistant-config"&gt;Day 10&lt;/a&gt;, &lt;a href="../24-home-assistant-ecosystem"&gt;Day 24&lt;/a&gt;) I&amp;rsquo;ll be sharing this month. While my coding journey started in scientific computing with physics simulations, discovering how to control my home environment through code sparked a new obsession. Home Assistant, currently the &lt;strong&gt;#1&lt;/strong&gt; open source project on GitHub, is the brain of my smart home and lets you control and automate everything from lights to thermostats, completely locally and privacy-focused.&lt;/p&gt;&#10;&lt;p&gt;Keep your lighting in sync with the sun, they said. It&amp;rsquo;ll be simple, they said&amp;hellip;&lt;/p&gt;&#10;&lt;h2 id="-origin-story"&gt;📖 Origin Story &lt;a class="anchor" href="#-origin-story" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Back in 2020, inspired by @claytonjn&amp;rsquo;s circadian_lighting Home Assistant component, I wanted to create a more comprehensive solution for automatically adjusting lights based on the time of day. What started as a contribution attempt to Home Assistant Core evolved into its own custom component when the PR wasn&amp;rsquo;t merged - handling all the edge cases made the code too complex for core. The standalone component gave us the freedom to implement features properly, becoming one of Home Assistant&amp;rsquo;s most installed custom integrations.&lt;/p&gt;&#10;&lt;h2 id="-technical-highlights"&gt;🔧 Technical Highlights &lt;a class="anchor" href="#-technical-highlights" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;While the concept is simple, making it work reliably is&amp;hellip; interesting:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Handles unreliable Zigbee networks and flaky WiFi connections&lt;/li&gt;&#10;&lt;li&gt;Manages different light brands&amp;rsquo; quirks (looking at you, IKEA bulbs 👀)&lt;/li&gt;&#10;&lt;li&gt;Provides smooth transitions between color temperatures&lt;/li&gt;&#10;&lt;li&gt;Detects manual overrides without disrupting user control&lt;/li&gt;&#10;&lt;li&gt;Supports sleep modes for bedtime routines&lt;/li&gt;&#10;&lt;li&gt;Configurable via YAML or the UI (only integration to support this!)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;The integration has 38 parameters to fine-tune your lighting. Try our &lt;a href="https://basnijholt.github.io/adaptive-lighting/" target="_blank" rel="noopener"&gt;WebAssembly simulator&lt;/a&gt; to visualize your settings!&lt;/p&gt;&#10;&lt;h2 id="-impact"&gt;📊 Impact &lt;a class="anchor" href="#-impact" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;2000+ GitHub stars&lt;/li&gt;&#10;&lt;li&gt;103 contributors&lt;/li&gt;&#10;&lt;li&gt;512 issues&lt;/li&gt;&#10;&lt;li&gt;Tens of thousands of active users&lt;/li&gt;&#10;&lt;li&gt;Available in 20+ languages&lt;/li&gt;&#10;&lt;li&gt;One of the most installed custom integrations&lt;/li&gt;&#10;&lt;li&gt;Featured in several YouTube videos and podcasts&lt;/li&gt;&#10;&lt;li&gt;Dedicated parameter visualization web app&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="-challenges-we-solved"&gt;🎯 Challenges We Solved &lt;a class="anchor" href="#-challenges-we-solved" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Lights randomly turning on (bulbs falsely reporting state)&lt;/li&gt;&#10;&lt;li&gt;Network congestion (solved with Zigbee grouping)&lt;/li&gt;&#10;&lt;li&gt;Different brands interpreting colors differently&lt;/li&gt;&#10;&lt;li&gt;Handling manual overrides gracefully&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="-lessons-learned"&gt;💡 Lessons Learned &lt;a class="anchor" href="#-lessons-learned" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&amp;ldquo;It works on my setup&amp;rdquo; is just the beginning&lt;/li&gt;&#10;&lt;li&gt;Users surprise you (like using it for plants, or above the polar circle!)&lt;/li&gt;&#10;&lt;li&gt;Edge cases multiply quickly&lt;/li&gt;&#10;&lt;li&gt;Documentation is as important as code&lt;/li&gt;&#10;&lt;li&gt;Open source thrives on community effort&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;Want your lights to follow the sun? Check out the &lt;a href="https://github.com/basnijholt/adaptive-lighting" target="_blank" rel="noopener"&gt;project on GitHub&lt;/a&gt; and try the &lt;a href="https://basnijholt.github.io/adaptive-lighting/" target="_blank" rel="noopener"&gt;simulator&lt;/a&gt;!&lt;/p&gt;&#10;&lt;p&gt;#OpenSource #HomeAssistant #SmartHome #IoT #Python&lt;/p&gt;&#10;</description></item><item><title>My homelab: from a single Raspberry Pi to a Proxmox cluster and a dedicated NAS 🔧</title><link>https://www.nijho.lt/post/homelab/</link><pubDate>Sat, 06 Jul 2024 00:00:00 +0000</pubDate><guid isPermaLink="false">/post/homelab/</guid><description>&lt;p&gt;In 2020, I began my homelab journey (&lt;em&gt;even though I never heard of the term &amp;ldquo;homelab&amp;rdquo; at that point&lt;/em&gt;) with a simple yet powerful setup: Home Assistant running on Proxmox on a NUC8i3BEH.&#10;My Home Assistant instance, with over 100 automations and about 20 addons (docker containers), had outgrown the capabilities of my Raspberry Pi 4, leading me to upgrade to the NUC8i3BEH.&#10;You can check out my &lt;a href="https://github.com/basnijholt/home-assistant-config/" target="_blank" rel="noopener"&gt;Home Assistant configuration&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;This system was more than sufficient for running Home Assistant—arguably overkill.&#10;However, because I passionately develop addons and custom components, I needed the ability to quickly restart and reload everything while debugging.&#10;For a long time, I ran Proxmox, mainly because the Home Assistant community recommended it, but I only used it to host one extra Ubuntu VM and Home Assistant OS.&lt;/p&gt;&#10;&lt;p&gt;In 2022, I stumbled upon the &lt;a href="https://github.com/tteck/Proxmox" target="_blank" rel="noopener"&gt;Proxmox VE Helper-Scripts&lt;/a&gt; by tteck, which got me interested in the whole homelabber/self-hosting community.&#10;These scripts opened a new world of possibilities.&#10;With them, I expanded my Proxmox environment to run 25 different VMs and &lt;a href="https://linuxcontainers.org/lxc/introduction/" target="_blank" rel="noopener"&gt;LXC containers&lt;/a&gt;, each performing a variety of tasks, from DNS servers and reverse proxies to local dashboards and backup software.&lt;/p&gt;&#10;&lt;p&gt;Initially, I used an external 2 TB drive for storage, but it quickly became insufficient as my data needs grew.&#10;After some research, I found the &lt;a href="https://support.hp.com/id-en/document/c06047207" target="_blank" rel="noopener"&gt;HP EliteDesk 800 G4 SFF&lt;/a&gt;, a renewed enterprise-grade desktop with slots for two 3.5-inch drives.&#10;At approximately $160 on Amazon, it offered excellent specs for a budget-friendly price.&#10;I decided to create a TrueNAS VM on this machine using Proxmox and passed through the two 16TB renewed enterprise-level HDDs (via the PCIe SATA controller), which I had purchased from serverpartdeals.com.&#10;I chose these drives based on their reliability as reported in the &lt;a href="https://www.backblaze.com/blog/backblaze-drive-stats-for-2023/" target="_blank" rel="noopener"&gt;BackBlaze drive stats&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;When I got the HP, I created a Proxmox cluster and was very excited about how easy it was to migrate containers and VMs from one machine to the other.&#10;However, I soon encountered a significant drawback: enterprise drives are notably loud.&#10;Since I had my Proxmox &amp;ldquo;cluster&amp;rdquo; (just the two machines) running behind the TV, the loudness was noticeable and disruptive.&#10;This noise was just the beginning of my troubles.&#10;The NFS server on the TrueNAS VM often crashed, causing the entire Proxmox system to lock up.&#10;Initially, I mounted the NFS drives directly on the Proxmox host and used bind-mounts to pass through the drives.&#10;Due to the locking behavior of NFS, any problem would cause the entire system to lock up.&#10;To prevent this, I started to use &lt;a href="https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/storage_administration_guide/nfs-autofs" target="_blank" rel="noopener"&gt;autofs&lt;/a&gt; to mount the drives in the LXC containers and VMs instead.&#10;This worked fine until Proxmox started its periodic backups.&#10;Any issue with the NFS during backup caused the whole process to hang, locking up the VMs and LXC containers.&#10;This could be partially avoided by using the &amp;ldquo;stop&amp;rdquo; backup mode, but it still resulted in almost daily debugging sessions where I had to restart Proxmox-related services.&lt;/p&gt;&#10;&lt;p&gt;After running all services as LXC containers, I realized that updating them and keeping up with all security updates was labor-intensive.&#10;So, I started to look into migrating everything to Docker Compose.&#10;This transition turned out great because I could manage my config files in a git repo and keep the relevant data separate, streamlining updates and maintenance.&lt;/p&gt;&#10;&lt;p&gt;To resolve these issues and because I was having a lot of fun, I decided to build a dedicated NAS running TrueNAS Scale, not that I &lt;em&gt;really&lt;/em&gt; needed one, but mostly because I could.&#10;This new setup included high-performance components, ensuring both stability and quiet operation.&#10;I used &amp;ldquo;Manufacturer Recertified&amp;rdquo; &lt;a href="https://www.westerndigital.com/products/internal-drives/data-center-drives/ultrastar-dc-hc550-hdd?sku=0F38356" target="_blank" rel="noopener"&gt;Western Digital Ultrastar DC HC550 HDDs&lt;/a&gt;, known for their reliability and performance.&#10;I have 6 x 16TB = 96TB now with the option to add 2 more 3.5&amp;quot; drives, 2 nvme M.2 drives, and 1 SATA 2.5&amp;quot; SSD.&#10;Now, I run all services that previously relied on NFS locally on TrueNAS via a Debian &lt;a href="https://wiki.debian.org/nspawn" target="_blank" rel="noopener"&gt;systemd-nspawn container&lt;/a&gt; managed with a new script called &lt;a href="https://github.com/Jip-Hop/jailmaker" target="_blank" rel="noopener"&gt;Jailmaker&lt;/a&gt;, which leverages the systemd-nspawn program in TrueNAS Scale (not to be confused with FreeBSD jails).&#10;Inside this systemd-nspawn container, I run Debian with Docker.&#10;For managing Docker Compose files, I use &lt;a href="https://github.com/louislam/dockge" target="_blank" rel="noopener"&gt;Dockge&lt;/a&gt;, which provides a nice web UI for easy management.&lt;/p&gt;&#10;&lt;p&gt;Along the way, I got familiar with ZFS and grew to love it for its amazing snapshotting and data integrity features.&#10;ZFS has been a game-changer, providing robust data protection and ease of management.&#10;Initially, &lt;a href="https://jrs-s.net/2015/02/06/zfs-you-should-use-mirror-vdevs-not-raidz/" target="_blank" rel="noopener"&gt;I used mirrored vdevs&lt;/a&gt;, but I recently switched to RAIDZ2 for the added storage capacity and &lt;a href="https://github.com/openzfs/zfs/pull/15022#issuecomment-1802428899" target="_blank" rel="noopener"&gt;the promise of OpenZFS 2.3 supporting expansion of RAIDZ vdevs&lt;/a&gt;.&#10;I also use ZFS for my Proxmox VMs and LXC containers, whose backups I store on the NAS via rsync in a cronjob to another jail running plain Debian (no more NFS on the Proxmox host for me&amp;hellip;)&lt;/p&gt;&#10;&lt;p&gt;This journey from a simple NUC running Home Assistant to a Proxmox cluster and dedicated NAS has been very time-consuming but a lot of fun.&#10;The lessons learned and the improvements in stability and performance have made the effort worthwhile.&#10;If you&amp;rsquo;re considering building your own homelab, investing in reliable hardware and being prepared for a bit of trial and error can make all the difference.&lt;/p&gt;&#10;&lt;h2 id="lessons-learned"&gt;Lessons learned &lt;a class="anchor" href="#lessons-learned" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Run your services in Docker containers, not LXC containers, for easier management and updates.&lt;/li&gt;&#10;&lt;li&gt;Do &lt;strong&gt;not&lt;/strong&gt; have virtualized NAS (TrueNAS VM) on Proxmox, it&amp;rsquo;s a bad idea if you are also sharing the drives with Proxmox via NFS. There are many folks on the internet who run their NAS in a VM on Proxmox, seemingly without issues, but I was not one of them.&lt;/li&gt;&#10;&lt;li&gt;Do not encrypt the root ZFS dataset! Encrypt its children instead.&lt;/li&gt;&#10;&lt;li&gt;Use passphrase encryption instead of a generated key. It allows you to use the UI and rotating keys.&lt;/li&gt;&#10;&lt;li&gt;Do &lt;strong&gt;not&lt;/strong&gt; remove the physical drive that is passed through in a Proxmox VM, because Proxmox will &lt;em&gt;not&lt;/em&gt; boot properly afterwards.&lt;/li&gt;&#10;&lt;li&gt;Do &lt;strong&gt;not&lt;/strong&gt; use random 100 character passwords for your Proxmox, you have only 60 seconds to enter it during boot.&lt;/li&gt;&#10;&lt;li&gt;When making Proxmox backups, send them to a different physical machine, not only the same machine that is being backed up.&lt;/li&gt;&#10;&lt;li&gt;When building a NAS or home server, consider noise levels, especially if the equipment will be in a living area. Enterprise-grade drives can be surprisingly loud.&lt;/li&gt;&#10;&lt;li&gt;When using Intel I226-V 2.5GbE controllers, be prepared for potential issues.&lt;/li&gt;&#10;&lt;li&gt;When planning your NAS storage size needs, remember to account for the extra space needed for redundancy (e.g., in RAIDZ2). Additionally, keep in mind that ZFS performs optimally when drives aren&amp;rsquo;t filled to capacity. It&amp;rsquo;s wise to plan for more storage than you think you&amp;rsquo;ll immediately need.&lt;/li&gt;&#10;&lt;li&gt;Buy as many used enterprise-grade hardware components as you can, they are often cheaper and more reliable than consumer-grade components.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="components"&gt;Components &lt;a class="anchor" href="#components" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;For completeness, here are the components for each machine in my homelab:&lt;/p&gt;&#10;&lt;h3 id="nuc-components"&gt;NUC Components &lt;a class="anchor" href="#nuc-components" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h3&gt;&#10;&lt;div class="table-wrap"&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;Name&lt;/th&gt;&#10;&lt;th&gt;Full Name&lt;/th&gt;&#10;&lt;th&gt;Server&lt;/th&gt;&#10;&lt;th&gt;Price&lt;/th&gt;&#10;&lt;th&gt;Quantity&lt;/th&gt;&#10;&lt;th&gt;Cost&lt;/th&gt;&#10;&lt;th&gt;Date&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;NUC8i3BEH&lt;/td&gt;&#10;&lt;td&gt;Intel NUC Kit NUC8i3BEH&lt;/td&gt;&#10;&lt;td&gt;NUC&lt;/td&gt;&#10;&lt;td&gt;278.3&lt;/td&gt;&#10;&lt;td&gt;1&lt;/td&gt;&#10;&lt;td&gt;278.3&lt;/td&gt;&#10;&lt;td&gt;2020-02-22&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;500GB M2 SSD&lt;/td&gt;&#10;&lt;td&gt;Samsung 970 EVO M.2 500GB&lt;/td&gt;&#10;&lt;td&gt;NUC&lt;/td&gt;&#10;&lt;td&gt;94.99&lt;/td&gt;&#10;&lt;td&gt;1&lt;/td&gt;&#10;&lt;td&gt;94.99&lt;/td&gt;&#10;&lt;td&gt;2020-02-21&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;32 GB RAM&lt;/td&gt;&#10;&lt;td&gt;TEAMGROUP 32GB DDR4 3200MHz&lt;/td&gt;&#10;&lt;td&gt;NUC&lt;/td&gt;&#10;&lt;td&gt;58.99&lt;/td&gt;&#10;&lt;td&gt;1&lt;/td&gt;&#10;&lt;td&gt;58.99&lt;/td&gt;&#10;&lt;td&gt;2024-05-01&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;4TB SSD&lt;/td&gt;&#10;&lt;td&gt;Crucial P3 Plus 4TB NVMe&lt;/td&gt;&#10;&lt;td&gt;NUC&lt;/td&gt;&#10;&lt;td&gt;226.99&lt;/td&gt;&#10;&lt;td&gt;1&lt;/td&gt;&#10;&lt;td&gt;226.99&lt;/td&gt;&#10;&lt;td&gt;2024-04-27&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;!-- | 16 GB DDR4 | Crucial 8GB DDR4 2400 MT/s | NUC | 25.52 | 2 | 51.04 | 2020-02-21 | --&gt;&#10;&lt;h3 id="hp-components"&gt;HP Components &lt;a class="anchor" href="#hp-components" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h3&gt;&#10;&lt;div class="table-wrap"&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;Name&lt;/th&gt;&#10;&lt;th&gt;Full Name&lt;/th&gt;&#10;&lt;th&gt;Server&lt;/th&gt;&#10;&lt;th&gt;Price&lt;/th&gt;&#10;&lt;th&gt;Quantity&lt;/th&gt;&#10;&lt;th&gt;Cost&lt;/th&gt;&#10;&lt;th&gt;Date&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;64 GB RAM&lt;/td&gt;&#10;&lt;td&gt;TEAMGROUP 32GB DDR4 3200MHz&lt;/td&gt;&#10;&lt;td&gt;HP&lt;/td&gt;&#10;&lt;td&gt;57.99&lt;/td&gt;&#10;&lt;td&gt;2&lt;/td&gt;&#10;&lt;td&gt;115.98&lt;/td&gt;&#10;&lt;td&gt;2024-05-02&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;HP EliteDesk 800 G4 SFF&lt;/td&gt;&#10;&lt;td&gt;HP EliteDesk 800 G4 SFF&lt;/td&gt;&#10;&lt;td&gt;HP&lt;/td&gt;&#10;&lt;td&gt;164&lt;/td&gt;&#10;&lt;td&gt;1&lt;/td&gt;&#10;&lt;td&gt;164&lt;/td&gt;&#10;&lt;td&gt;2024-04-27&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;!-- | SSD enclosure | UGREEN SSD Enclosure | HP | 16.98 | 1 | 16.98 | 2024-04-27 | --&gt;&#10;&lt;p&gt;Notes on the HP components:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Initially, I planned to use this machine as a NAS because it has two 3.5&amp;quot; drive bays, 2 M.2 slots, and the disc drive bay can be converted to a 2.5&amp;quot; drive bay. However, the 2 x 16TB drives I bought quickly filled up because I used a mirrored vdev, so I decided to build a dedicated NAS instead.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="nas-components"&gt;NAS Components &lt;a class="anchor" href="#nas-components" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h3&gt;&#10;&lt;div class="table-wrap"&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;Name&lt;/th&gt;&#10;&lt;th&gt;Full Name&lt;/th&gt;&#10;&lt;th&gt;Server&lt;/th&gt;&#10;&lt;th&gt;Price&lt;/th&gt;&#10;&lt;th&gt;Quantity&lt;/th&gt;&#10;&lt;th&gt;Cost&lt;/th&gt;&#10;&lt;th&gt;Date&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;16 TB HDD&lt;/td&gt;&#10;&lt;td&gt;Western Digital Ultrastar DC HC550 16TB&lt;/td&gt;&#10;&lt;td&gt;NAS&lt;/td&gt;&#10;&lt;td&gt;159.99&lt;/td&gt;&#10;&lt;td&gt;2&lt;/td&gt;&#10;&lt;td&gt;319.98&lt;/td&gt;&#10;&lt;td&gt;2024-05-01&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;16 TB HDD&lt;/td&gt;&#10;&lt;td&gt;Western Digital Ultrastar DC HC550 16TB&lt;/td&gt;&#10;&lt;td&gt;NAS&lt;/td&gt;&#10;&lt;td&gt;187.5&lt;/td&gt;&#10;&lt;td&gt;4&lt;/td&gt;&#10;&lt;td&gt;750&lt;/td&gt;&#10;&lt;td&gt;2024-06-21&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;Motherboard&lt;/td&gt;&#10;&lt;td&gt;Q670 8-bay NAS motherboard&lt;/td&gt;&#10;&lt;td&gt;NAS&lt;/td&gt;&#10;&lt;td&gt;203.21&lt;/td&gt;&#10;&lt;td&gt;1&lt;/td&gt;&#10;&lt;td&gt;203.21&lt;/td&gt;&#10;&lt;td&gt;2024-06-22&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;CPU i5 13500T&lt;/td&gt;&#10;&lt;td&gt;Intel Core i5-13500T&lt;/td&gt;&#10;&lt;td&gt;NAS&lt;/td&gt;&#10;&lt;td&gt;180.88&lt;/td&gt;&#10;&lt;td&gt;1&lt;/td&gt;&#10;&lt;td&gt;180.88&lt;/td&gt;&#10;&lt;td&gt;2024-06-22&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;PSU SFX&lt;/td&gt;&#10;&lt;td&gt;FSP Dagger Pro 650W&lt;/td&gt;&#10;&lt;td&gt;NAS&lt;/td&gt;&#10;&lt;td&gt;87.13&lt;/td&gt;&#10;&lt;td&gt;1&lt;/td&gt;&#10;&lt;td&gt;87.13&lt;/td&gt;&#10;&lt;td&gt;2024-06-21&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;Jonsbo N3 case&lt;/td&gt;&#10;&lt;td&gt;JONSBO N3 Mini-ITX NAS Case&lt;/td&gt;&#10;&lt;td&gt;NAS&lt;/td&gt;&#10;&lt;td&gt;187.51&lt;/td&gt;&#10;&lt;td&gt;1&lt;/td&gt;&#10;&lt;td&gt;187.51&lt;/td&gt;&#10;&lt;td&gt;2024-06-16&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;CPU cooler&lt;/td&gt;&#10;&lt;td&gt;Thermalright AXP90 X36 CPU cooler&lt;/td&gt;&#10;&lt;td&gt;NAS&lt;/td&gt;&#10;&lt;td&gt;21.83&lt;/td&gt;&#10;&lt;td&gt;1&lt;/td&gt;&#10;&lt;td&gt;21.83&lt;/td&gt;&#10;&lt;td&gt;2024-06-25&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;64 GB DDR5 RAM&lt;/td&gt;&#10;&lt;td&gt;CORSAIR VENGEANCE 64GB DDR5&lt;/td&gt;&#10;&lt;td&gt;NAS&lt;/td&gt;&#10;&lt;td&gt;162.13&lt;/td&gt;&#10;&lt;td&gt;1&lt;/td&gt;&#10;&lt;td&gt;162.13&lt;/td&gt;&#10;&lt;td&gt;2024-06-29&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Notes on the NAS components:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;The 13500T is a 35W TDP CPU I bought on eBay, which will help keep the system cool and quiet.&lt;/li&gt;&#10;&lt;li&gt;I bought the motherboard from AliExpress because it seems to be the only mini-ITX motherboard that supports 8 SATA drives, and also comes with 2x2.5GbE ports, 3xM.2 slots, and a full sized PCIe slot.&lt;/li&gt;&#10;&lt;li&gt;The motherboard uses Intel I225-V 2.5GbE controllers, which are notoriously bad, initially &lt;code&gt;iperf3&lt;/code&gt; maxed out at 100Mbps. The internet is full with people complaining about these controllers auto-negotiating to 100Mbps, however, for me it showed 1Gbps. After trying all suggestions I could find (there are few), as a last resort I connecting the NAS directly to my ASUS XT8 router instead of the NETGEAR GS305 switch, and now I got 1Gbps speeds. So I bought a new managed TL-SG108E switch, which now also gives me 1Gbps speeds. I&amp;rsquo;m not sure what the issue was, but I&amp;rsquo;m happy it&amp;rsquo;s resolved.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item><item><title>Adaptive Lighting</title><link>https://www.nijho.lt/project/adaptive-lighting/</link><pubDate>Sat, 22 Apr 2023 00:00:00 +0000</pubDate><guid isPermaLink="false">/project/adaptive-lighting/</guid><description/></item><item><title>Home Assistant Streamdeck YAML</title><link>https://www.nijho.lt/project/home-assistant-streamdeck-yaml/</link><pubDate>Sat, 22 Apr 2023 00:00:00 +0000</pubDate><guid isPermaLink="false">/project/home-assistant-streamdeck-yaml/</guid><description/></item><item><title>home-assistant-macbook-touch-bar</title><link>https://www.nijho.lt/project/home-assistant-macbook-touch-bar/</link><pubDate>Tue, 09 Jun 2020 00:00:00 +0000</pubDate><guid isPermaLink="false">/project/home-assistant-macbook-touch-bar/</guid><description/></item><item><title>iOS Themes for Home Assistant</title><link>https://www.nijho.lt/project/lovelace-ios-themes/</link><pubDate>Sun, 26 Jan 2020 00:00:00 +0000</pubDate><guid isPermaLink="false">/project/lovelace-ios-themes/</guid><description/></item><item><title>Home Assistant</title><link>https://www.nijho.lt/project/home-assistant/</link><pubDate>Mon, 25 Nov 2019 00:00:00 +0000</pubDate><guid isPermaLink="false">/project/home-assistant/</guid><description/></item><item><title>python-aiokef</title><link>https://www.nijho.lt/project/aiokef/</link><pubDate>Mon, 25 Nov 2019 00:00:00 +0000</pubDate><guid isPermaLink="false">/project/aiokef/</guid><description/></item><item><title>miflora</title><link>https://www.nijho.lt/project/miflora/</link><pubDate>Thu, 25 Aug 2016 00:00:00 +0000</pubDate><guid isPermaLink="false">/project/miflora/</guid><description/></item></channel></rss>