<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="/feed.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>Michael Harley (Posts only)</title>
  <subtitle>Blog posts from Michael Harley.</subtitle>
  <link href="https://michaelharley.net/posts/feed.xml" rel="self"/>
  <link href="https://michaelharley.net/posts/"/>
  <updated>2026-09-25T12:05:00Z</updated>
  <id>https://michaelharley.net/posts/</id>
  <author>
    <name>Michael Harley</name>
    <email>michael@michaelharley.net</email>
  </author>
      <entry>
        <title>IndieWeb link sharing - which method do you prefer?</title>
        <link href="https://michaelharley.net/posts/2026/09/25/indieweb-link-sharing-which-method-do-you-prefer/"/>
        <updated>2026-09-25T12:05:00Z</updated>
        <id>https://michaelharley.net/posts/2026/09/25/indieweb-link-sharing-which-method-do-you-prefer/</id>
        <content type="html">&lt;p&gt;Link sharing is a fundamental piece of the IndieWeb. It&#39;s a kindness we show to other bloggers and sites. We share things we find good or interesting so that others may enjoy them, and it provides the author a bit more reach.&lt;/p&gt;
&lt;p&gt;I notice there are two main ways people tend to share links.&lt;/p&gt;
&lt;p&gt;The first is as link dump posts like the way &lt;a href=&quot;https://82mhz.net/posts/2026/09/linkdump-no-126/&quot; rel=&quot;noopener noreferrer&quot;&gt;Andreas does it&lt;/a&gt;. I assume they save the links as they&#39;re going about their week then post them all at the end of the week.&lt;/p&gt;
&lt;p&gt;The second way is to post the shared links immediately as a bookmark or repost type post. &lt;a href=&quot;https://michaelharley.net/links/2026/09/24/f-droid-gets-its-biggest-update-in-a-decade-with-new-ui-and-smoother-app-installs/&quot;&gt;Here&lt;/a&gt; is my own site as an example. These come out in dribs and drabs, but it&#39;s more in real time.&lt;/p&gt;
&lt;p&gt;So, dear reader, I&#39;m curious: which method of link sharing do you prefer? Link dumps or individual posts?&lt;/p&gt;
&lt;p&gt;📊 This post has a poll. &lt;a href=&quot;https://michaelharley.net/posts/2026/09/25/indieweb-link-sharing-which-method-do-you-prefer/#poll-heading&quot;&gt;Vote on my site&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;mailto:michael@michaelharley.net?subject=Re:%20IndieWeb%20link%20sharing%20-%20which%20method%20do%20you%20prefer?&quot;&gt;Reply via email&lt;/a&gt;&lt;/p&gt;</content>
      </entry>
      <entry>
        <title>Re: AI is not “just a tool”</title>
        <link href="https://michaelharley.net/posts/2026/09/21/re-ai-is-not-just-a-tool/"/>
        <updated>2026-09-21T11:55:00Z</updated>
        <id>https://michaelharley.net/posts/2026/09/21/re-ai-is-not-just-a-tool/</id>
        <content type="html">&lt;figure&gt;
&lt;blockquote cite=&quot;https://brettcodes.com/ai-is-not-just-a-tool/&quot;&gt;
&lt;p&gt;Sure, you could run a local LLM model on your computer and use it to generate some SQL to help you create a report. Or generate awful art for your D&amp;amp;D campaign with your friends. But who made that model? Who trained it? Where did the data come from? How much did it cost in compute and environmental resources? What are the motivations behind the company making it?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figcaption&gt;
&lt;p&gt;— Brett Codes, &lt;cite&gt;&lt;a href=&quot;https://brettcodes.com/ai-is-not-just-a-tool/&quot; rel=&quot;noopener noreferrer&quot;&gt;AI is not “just a tool”&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Ah, moral absolutism.&lt;/p&gt;
&lt;p&gt;In recent years, I&#39;ve noticed people making it a point to be more aware of how they&#39;re spending money. Some people boycott Target because they canceled their DEI policies. Some people boycott Nike because they supported trans athletes. The Home Depot co-founder was problematic, so we&#39;re not supposed to shop there anymore. We shouldn&#39;t buy Chick-fil-A because they do not support non-traditional marriage. Most of the anti-AI positions I read are in the same spirit as these.&lt;/p&gt;
&lt;p&gt;If a person pulls on that thread too long, then they must back themselves into such a corner that they can&#39;t morally use any technology or even be a member of any country. What was the cost in terms of human life and environmental resources of the industrial revolution? What were the motivations behind the people polluting the world and taking advantage of the poor?&lt;/p&gt;
&lt;p&gt;How can anyone morally live in the United States? Europeans colonized it. They killed the natives and drove them from their homes, their lands taken from them by force.&lt;/p&gt;
&lt;p&gt;What virtues is a person signaling by remaining a member of such societies and countries?&lt;/p&gt;
&lt;p&gt;LLMs had a messy and questionable start, but there is real capability there and it has changed how the world does things with computers. I see a path where I can buy a sufficiently capable computer for my homelab, then run my own model to empower myself with more digital freedom and sovereignty.&lt;/p&gt;
&lt;p&gt;We should sufficiently regulate the companies building the frontier models, just like any other company, tech or otherwise, so they align with the values of the society they operate in. I think Amazon &lt;a href=&quot;https://www.404media.co/we-tracked-a-shipment-of-rare-books-it-ended-at-an-amazon-ai-training-facility/&quot; rel=&quot;noopener noreferrer&quot;&gt;buying rare books&lt;/a&gt;, which it then destroys as part of the scanning process for LLM model training, is morally reprehensible. I think the LLM companies scraping the entire internet to train their models without recompense to the people they took the information from is obscene. But the scanned books are already destroyed and gone. The tech companies have already taken, stored and used the data. The genie is out and there&#39;s no putting it back.&lt;/p&gt;
&lt;p&gt;Using an open model is not morally equivalent to destroying rare books for AI training, stealing everyone&#39;s content on the internet, or companies trying to replace employees with AI chatbots. It&#39;s just not. The problem with this type of thinking is that it&#39;s guilt by association, once, twice and sometimes thrice removed.&lt;/p&gt;
&lt;p&gt;Look, we should all do what we feel is right. To this day, I will not spend money at Chick-fil-A because I don&#39;t want my money going towards homophobic advocacy. But I think this idea that people can just opt out of all AI is silly. Somewhere in your supply chain, there is someone using AI to build something you like and use.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;mailto:michael@michaelharley.net?subject=Re:%20Re:%20AI%20is%20not%20%E2%80%9Cjust%20a%20tool%E2%80%9D&quot;&gt;Reply via email&lt;/a&gt;&lt;/p&gt;</content>
      </entry>
      <entry>
        <title>Hey IndieWeb, POSSE people, can we please use the same hashtags for reviews?!</title>
        <link href="https://michaelharley.net/posts/2026/09/07/hey-indieweb-posse-people-can-we-please-use-the-same-hashtags-for-reviews/"/>
        <updated>2026-09-07T12:38:00Z</updated>
        <id>https://michaelharley.net/posts/2026/09/07/hey-indieweb-posse-people-can-we-please-use-the-same-hashtags-for-reviews/</id>
        <content type="html">&lt;p&gt;Like any good IndieWeb nerd, I post my reviews on my website first, then syndicate those to all the places.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://justincox.com/&quot; rel=&quot;noopener noreferrer&quot;&gt;Justin&lt;/a&gt; is someone I follow, and we both use our websites in pretty similar ways, with goals that seem to line up. I noticed that we both reviewed Silo S3 and syndicated both of our posts to Mastodon. Here is &lt;a href=&quot;https://social.lol/@justincox/117226801316872849&quot; class=&quot;link-dead&quot; rel=&quot;noopener noreferrer&quot;&gt;his&lt;/a&gt; (&lt;a class=&quot;archived-link&quot; href=&quot;https://web.archive.org/web/20260907192434/https://social.lol/@justincox/117226801316872849&quot; rel=&quot;noopener noreferrer&quot; aria-label=&quot;Archived copy of social.lol, saved September 7 2026 (original link is dead)&quot; title=&quot;Archived copy of social.lol, saved September 7 2026 (original link is dead)&quot;&gt;archived&lt;/a&gt;) and here is &lt;a href=&quot;https://infosec.exchange/@michaelharley/117215337326358270&quot; rel=&quot;noopener noreferrer&quot;&gt;mine&lt;/a&gt;. Our hashtags do not connect. Two people doing the very same thing, on the very same show, do not connect to each other with hashtags. That doesn&#39;t seem right in my mind.&lt;/p&gt;
&lt;p&gt;This led me down a rabbit hole of trying to do analytics on which hashtags connect with the people I&#39;m trying to connect with. I wish the IndieWeb wiki contained some recommended hashtags. I looked and didn&#39;t find any, but it would have been nice to have something to start with.&lt;/p&gt;
&lt;p&gt;So after taking a very small sample and studying the analytics, I am standardizing on these tags when syndicating. I invite everyone to pick some of these as well or to recommend better ones.&lt;/p&gt;
&lt;h2 id=&quot;mastodon&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;https://michaelharley.net/posts/2026/09/07/hey-indieweb-posse-people-can-we-please-use-the-same-hashtags-for-reviews/#mastodon&quot;&gt;Mastodon&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Movies:&lt;/strong&gt; &lt;code&gt;#Review #Cinemastodon #Movies #MovieReview&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shows:&lt;/strong&gt; &lt;code&gt;#Review #TVShows #Series&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Books:&lt;/strong&gt; &lt;code&gt;#Review #Books #Bookstodon #Reading&lt;/code&gt; + genre tag&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;bluesky&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;https://michaelharley.net/posts/2026/09/07/hey-indieweb-posse-people-can-we-please-use-the-same-hashtags-for-reviews/#bluesky&quot;&gt;Bluesky&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Movies:&lt;/strong&gt; &lt;code&gt;#FilmSky #Films #MovieReview&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shows:&lt;/strong&gt; &lt;code&gt;#TVSky #TV #Series&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Books:&lt;/strong&gt; &lt;code&gt;#BookSky #Books #Reading&lt;/code&gt; + genre tag&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&#39;m curious, where else do you syndicate your review posts? Other than movies, shows and books, what else do you syndicate? If you have any suggestions please send them my way.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;mailto:michael@michaelharley.net?subject=Re:%20Hey%20IndieWeb,%20POSSE%20people,%20can%20we%20please%20use%20the%20same%20hashtags%20for%20reviews?!&quot;&gt;Reply via email&lt;/a&gt;&lt;/p&gt;</content>
      </entry>
      <entry>
        <title>European digital sovereignty helps everyone, not just Europeans</title>
        <link href="https://michaelharley.net/posts/2026/09/01/european-digital-sovereignty-helps-everyone-not-just-europeans/"/>
        <updated>2026-09-01T21:41:00Z</updated>
        <id>https://michaelharley.net/posts/2026/09/01/european-digital-sovereignty-helps-everyone-not-just-europeans/</id>
        <content type="html">&lt;figure&gt;
&lt;blockquote cite=&quot;https://infosec.exchange/@DaveMWilburn/117184932159111629&quot;&gt;
&lt;p&gt;Anyone inside or outside the US that thinks they&#39;re safe relying on American tech providers and financial institutions should consider how quickly and enthusiastically they carried out the diktats of the Trump regime.&lt;/p&gt;
&lt;p&gt;Just in the last week, Google changed Google Maps&#39; references from Lake Ontario to Lake America, and Paypal and the Internet Society froze financial assets and domain names of Autistici/Inventati.&lt;/p&gt;
&lt;p&gt;You risk instant humiliation, immiseration, and social death at the whims of a corrupt, vindictive, narcissistic dictator. No due process required or given.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figcaption&gt;
&lt;p&gt;— Dave Wilburn (&lt;a href=&quot;https://infosec.exchange/@DaveMWilburn/117184932159111629&quot; rel=&quot;noopener noreferrer&quot;&gt;@DaveMWilburn@infosec.exchange&lt;/a&gt;), &lt;time datetime=&quot;2026-08-30&quot;&gt;August 30, 2026&lt;/time&gt;&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;As an American, I&#39;m embarrassed by the entire situation. I hate that our country has elected a strongman who only understands the world as a zero-sum, transaction-based order.&lt;/p&gt;
&lt;p&gt;Depending on American companies and banks made sense when the US was a friend and ally because that meant Europe never had to build any of that themselves. The US is now using that dependency as leverage that I don&#39;t think any country would have knowingly handed to a hostile power, and nobody in Europe ever agreed to that part.&lt;/p&gt;
&lt;p&gt;US tech companies have become an oligopoly, and it&#39;s not good for anyone. As European countries begin to build their own services, subject to European laws and ethics, that will just give the world more choices. I think it will be harder to do than just re-imagining European versions of AWS or Google I really want them to try.&lt;/p&gt;
&lt;p&gt;I hope the Europeans are successful at doing this because it helps all citizens of the world.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;mailto:michael@michaelharley.net?subject=Re:%20European%20digital%20sovereignty%20helps%20everyone,%20not%20just%20Europeans&quot;&gt;Reply via email&lt;/a&gt;&lt;/p&gt;</content>
      </entry>
      <entry>
        <title>And that&#39;s a wrap on Blaugust 2026!</title>
        <link href="https://michaelharley.net/posts/2026/08/31/and-thats-a-wrap-on-blaugust-2026/"/>
        <updated>2026-08-31T11:55:00Z</updated>
        <id>https://michaelharley.net/posts/2026/08/31/and-thats-a-wrap-on-blaugust-2026/</id>
        <content type="html">&lt;p&gt;Ok, I did it. I wrote and posted a blog post every day for the month of August. At first, it was pretty easy because I had many partial posts just sitting in my drafts folder so I just needed to finish those. As the month continued, it got harder and harder and whew boy, I&#39;m glad Blaugust is over. This was a fun exercise but I will now be going back to a slower cadence.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/01/how-did-the-canadian-wildfires-show-up-in-home-assistant-here-in-va/&quot;&gt;How did the Canadian wildfires show up in Home Assistant here in VA?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/02/relationship-advice-id-give-to-my-younger-self/&quot;&gt;Relationship advice I&#39;d give to my younger self&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/03/smarter-thermostat-with-home-assistant/&quot;&gt;Smarter Thermostat with Home Assistant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/04/why-i-switched-from-firefox-to-vivaldi-for-browsing/&quot;&gt;Why I switched from Firefox to Vivaldi for browsing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/05/how-i-make-my-blog-posts-more-resilient/&quot;&gt;How I make my blog posts more resilient&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/06/what-happens-to-our-blogs-when-we-die/&quot;&gt;What happens to our blogs when we die?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/07/my-blogging-workflow-2026/&quot;&gt;My blogging workflow 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/08/how-i-use-home-assistant-to-help-with-my-cats/&quot;&gt;How I use Home Assistant to help with my cats&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/09/mikes-chonky-denver-omelet/&quot;&gt;Mike&#39;s chonky Denver omelet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/10/three-years-at-tripoint-a-retrospective/&quot;&gt;Three years at Tripoint, a retrospective&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/11/my-backup-strategy-2026/&quot;&gt;My backup strategy 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/12/trip-report-malvern-hill-battlefield/&quot;&gt;Trip Report: Malvern Hill Battlefield&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/13/re-tech-sucks-really/&quot;&gt;Re: Tech sucks? Really?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/14/citizen-developers-in-power-platform-five-years-later-better-or-worse-with-ai/&quot;&gt;Citizen developers in Power Platform, five years later: Better or worse with AI?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/15/how-i-share-links-on-my-blog/&quot;&gt;How I share links on my blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/photos/2026/08/16/our-first-rose-on-a-sunday-evening/&quot;&gt;Our first rose on a Sunday evening&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/17/my-perfect-laptop/&quot;&gt;My perfect laptop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/18/re-the-loss-of-links-continues/&quot;&gt;Re: The Loss of Links Continues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/19/titans-football-is-back/&quot;&gt;Titans football is back!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/20/nfl-vs-f1-which-is-the-better-tv-viewing-experience/&quot;&gt;NFL vs F1, which is the better TV viewing experience?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/21/re-things-to-do-after-your-dad-dies/&quot;&gt;Re: Things to do after your dad dies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/22/please-let-me-interact-with-your-blog-post/&quot;&gt;Please let me interact with your blog post!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/23/re-i-no-longer-care/&quot;&gt;Re: I no longer care&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/24/new-generations-have-so-much-music-to-love/&quot;&gt;New generations have SO. MUCH. MUSIC. to love&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/25/my-ar-glasses-daydream/&quot;&gt;My AR glasses daydream&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/&quot;&gt;How I use Home Assistant to automate and monitor my aquariums&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/27/some-of-our-favorite-smart-home-automations/&quot;&gt;Some of our favorite smart home automations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/28/the-best-shows-and-movies-of-2026-according-to-mike-and-rachelle-so-far/&quot;&gt;The best shows and movies of 2026 according to Mike and Rachelle, so far&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/29/an-overview-of-how-our-family-is-prepared/&quot;&gt;An overview of how our family is prepared&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/30/its-my-dang-birthday/&quot;&gt;It&#39;s my dang birthday&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href=&quot;mailto:michael@michaelharley.net?subject=Re:%20And%20that&amp;#39;s%20a%20wrap%20on%20Blaugust%202026!&quot;&gt;Reply via email&lt;/a&gt;&lt;/p&gt;</content>
      </entry>
      <entry>
        <title>It&#39;s my dang birthday</title>
        <link href="https://michaelharley.net/posts/2026/08/30/its-my-dang-birthday/"/>
        <updated>2026-08-30T11:55:00Z</updated>
        <id>https://michaelharley.net/posts/2026/08/30/its-my-dang-birthday/</id>
        <content type="html">&lt;p&gt;On my birthday, I wanted to take a moment and just say all the things I&#39;m grateful for.&lt;/p&gt;
&lt;p&gt;I&#39;m grateful for &lt;a href=&quot;https://michaelharley.net/posts/2022/11/02/rachelle-and-i-got-married-in-las-vegas/&quot;&gt;Rachelle&lt;/a&gt; and our life together. I know that&#39;s a big one and kind of cheesy, but it&#39;s true. I normally can only recognize good periods in my life when looking back, but I think when I look back, this will probably be in the top two or three periods in my life. We are so lucky because we both work from home full time, I really enjoy Rachelle&#39;s company, we make good money, and we do not want for anything. We pretty much do whatever we want. We have weird but awesome cats. The minivan is still running great. What else could people want?!&lt;/p&gt;
&lt;p&gt;I&#39;m grateful that things are going well for my daughter, Jessica, and my grandson Carter down in Nashville. She&#39;s got a job she&#39;s enjoying and learning in. Carter is doing well in school and is basically a grown-ass person at 16!&lt;/p&gt;
&lt;p&gt;I&#39;m grateful for my job. It&#39;s hard and challenging, but I get enjoyment and fulfillment from it. I mean, I don&#39;t know anyone who couldn&#39;t use a bit more money, but it pays well. And despite some contract uncertainty at the moment, I&#39;m optimistic that will work itself out and I will still have a job after the FY flips over.&lt;/p&gt;
&lt;p&gt;I&#39;m grateful that my mom and I were able to take a road trip down to Florida to visit my aunt this year. It was a really great trip, and it was nice spending some dedicated time with my mom and aunt and visiting all the extended family.&lt;/p&gt;
&lt;p&gt;I&#39;m hopeful this next year will be as good as this year.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;mailto:michael@michaelharley.net?subject=Re:%20It&amp;#39;s%20my%20dang%20birthday&quot;&gt;Reply via email&lt;/a&gt;&lt;/p&gt;</content>
      </entry>
      <entry>
        <title>An overview of how our family is prepared</title>
        <link href="https://michaelharley.net/posts/2026/08/29/an-overview-of-how-our-family-is-prepared/"/>
        <updated>2026-08-29T12:50:00Z</updated>
        <id>https://michaelharley.net/posts/2026/08/29/an-overview-of-how-our-family-is-prepared/</id>
        <content type="html">&lt;p&gt;Reading Dave&#39;s post, &lt;a href=&quot;https://nice-marmot.net/Archives/2026/August_2026.html#note_3769&quot; rel=&quot;noopener noreferrer&quot;&gt;Prepare&lt;/a&gt;, has me thinking about my own preps, so I wanted to write down a few things about our own plans and approaches.&lt;/p&gt;
&lt;h2 id=&quot;threat-model&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;https://michaelharley.net/posts/2026/08/29/an-overview-of-how-our-family-is-prepared/#threat-model&quot;&gt;Threat model&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In order to plan properly, I took the time to think about the things I felt could affect us. I see a fair amount of people on the preppers subreddit planning for the Shit Hits the Fan type scenarios. That is, societal collapse and zombie apocalypse type events. That&#39;s not what we plan for. We plan for things that we feel are likely to happen to us.&lt;/p&gt;
&lt;p&gt;We have a strong preference for sheltering in place, so we do not have a go bag or anything like that. We&#39;d shelter in place because that&#39;s where all our preps are!&lt;/p&gt;
&lt;h3 id=&quot;water-outages&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;https://michaelharley.net/posts/2026/08/29/an-overview-of-how-our-family-is-prepared/#water-outages&quot;&gt;Water outages&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Since moving to Richmond, VA we&#39;ve had more water outages than power outages, which is backwards from what I&#39;d expect. Since January 2025, Richmond has issued two boil water advisories for us. The first one lasted &lt;a href=&quot;https://www.rva.gov/press-releases-and-announcements/news/city-richmond-releases-final-after-action-assessment-report&quot; rel=&quot;noopener noreferrer&quot;&gt;five days&lt;/a&gt; and the other one lasted &lt;a href=&quot;https://virginiamercury.com/2025/05/29/richmond-clears-water-advisory-after-latest-crisis-exposes-system-flaws/&quot; rel=&quot;noopener noreferrer&quot;&gt;two&lt;/a&gt;. During one of them, the water wasn&#39;t working at all. Turning on the faucet did nothing. Drinking water wasn&#39;t a problem for us, but flushing the toilets was.&lt;/p&gt;
&lt;p&gt;Then in July 2026, a &lt;a href=&quot;https://www.wtvr.com/news/local-news/richmond/water-main-break-update-july-5-2026&quot; rel=&quot;noopener noreferrer&quot;&gt;36 inch transmission main broke&lt;/a&gt; near the treatment plant and pressure dropped in parts of the city for more than a day. The city &lt;a href=&quot;https://www.wtvr.com/news/local-news/richmond/opted-against-precautionary-boile-advisory-july-7-2026&quot; rel=&quot;noopener noreferrer&quot;&gt;chose not to issue an advisory at all&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To prepare for water outages, we keep the following on hand:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;35 gallons of potable water stored in &lt;a href=&quot;https://relianceoutdoors.com/products/aqua-tainer-4g-15l?variant=36996955242660&quot; rel=&quot;noopener noreferrer&quot;&gt;7 gallon Aqua-Tainer jugs&lt;/a&gt;, which gives us two weeks of drinking water.&lt;/li&gt;
&lt;li&gt;25 gallons of non-potable water stored in 5 gallon buckets. This is for flushing and lasts about three days. After that, we&#39;d start using the camp toilet.&lt;/li&gt;
&lt;li&gt;Camp toilet. This is basically a trash bag lined bucket with a toilet seat. We do our business and add litter over the top like a cat.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;power-outages&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;https://michaelharley.net/posts/2026/08/29/an-overview-of-how-our-family-is-prepared/#power-outages&quot;&gt;Power outages&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We&#39;ve only had one sustained power outage since we&#39;ve lived in Richmond. A tree across the street fell down during a storm and knocked some of the power lines down. This is a problem for me specifically because I sleep with a CPAP machine so I need to be able to run it.&lt;/p&gt;
&lt;p&gt;Our main solution is the &lt;a href=&quot;https://www.dji.com/power-1000&quot; rel=&quot;noopener noreferrer&quot;&gt;DJI Power 1000 Portable Power Station&lt;/a&gt;. I purchased this one mostly because one of my credit cards earns REI credits and I had built up enough to have a good discount. Upon researching, I see these are modular and I can add additional capacity and I can charge it via solar.&lt;/p&gt;
&lt;h2 id=&quot;general-preps&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;https://michaelharley.net/posts/2026/08/29/an-overview-of-how-our-family-is-prepared/#general-preps&quot;&gt;General preps&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I have a list of general preps.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://mrheater.com/collections/buddy-series/products/big-buddy-portable-heater-nf&quot; rel=&quot;noopener noreferrer&quot;&gt;Mr. Heater Big Buddy&lt;/a&gt; - This is a propane heater. I have the hose that allows me to use the 20 lb propane tanks. Some heat, if needed during winter power outages.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.coleman.com/grills-stoves/camping-stoves/cascade-classic-camping-stove/SAP_2223509.html&quot; rel=&quot;noopener noreferrer&quot;&gt;Coleman Classic Camping Stove&lt;/a&gt; - This is a propane stove and I have the adapter to use 20 lb propane tanks.&lt;/li&gt;
&lt;li&gt;20 lb propane tanks - I&#39;ve collected a number of these. Our gas grill also uses this type of tank so having 3-4 on-hand allows us headroom.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;deep-pantry&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;https://michaelharley.net/posts/2026/08/29/an-overview-of-how-our-family-is-prepared/#deep-pantry&quot;&gt;Deep pantry&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;To deal with supply chain type issues, either from pandemics or from idiotic tariffs from the government, we use the deep pantry strategy. We try to keep enough food in our pantry, fridges and freezers so that we could stay in our house for one month and have everything we need.&lt;/p&gt;
&lt;p&gt;Many preppers like to purchase freeze dried camping meals, or five gallon buckets full of rice with mylar bags and oxygen absorbers and they&#39;re planning for like multiple years. That is not our strategy. Instead, we stock up enough of our staples that we could make all the normal stuff we regularly eat for at least a month and we rotate through them so we use up the oldest stuff first.&lt;/p&gt;
&lt;p&gt;We use this strategy for non-food items as well, like over-the-counter medication, toilet paper, paper towels, household supplies, cat supplies, batteries, and just everything. If we buy it at the store, we keep one out that we&#39;re using, and then the backup is in the pantry. Two is one, and one is none.&lt;/p&gt;
&lt;p&gt;So that&#39;s basically our plan. How prepared are you? Does your area have unique threats that you must prepare for? I&#39;m thankful that here in Richmond, we do not have to plan for things that would cause an evacuation like wildfires or hurricanes.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;mailto:michael@michaelharley.net?subject=Re:%20An%20overview%20of%20how%20our%20family%20is%20prepared&quot;&gt;Reply via email&lt;/a&gt;&lt;/p&gt;</content>
      </entry>
      <entry>
        <title>The best shows and movies of 2026 according to Mike and Rachelle, so far</title>
        <link href="https://michaelharley.net/posts/2026/08/28/the-best-shows-and-movies-of-2026-according-to-mike-and-rachelle-so-far/"/>
        <updated>2026-08-28T11:55:00Z</updated>
        <id>https://michaelharley.net/posts/2026/08/28/the-best-shows-and-movies-of-2026-according-to-mike-and-rachelle-so-far/</id>
        <content type="html">&lt;p&gt;Rachelle and I are really good at watching TV and we have opinions about what we watch. Here are our favorite TV and movies from 2026 so far. You can see my &lt;a href=&quot;https://michaelharley.net/rating-scale&quot;&gt;rating scale&lt;/a&gt; here. The ratings are mostly about how much we enjoyed it and have less to do with the quality.&lt;/p&gt;
&lt;h2 id=&quot;shows&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;https://michaelharley.net/posts/2026/08/28/the-best-shows-and-movies-of-2026-according-to-mike-and-rachelle-so-far/#shows&quot;&gt;Shows&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/watching/2026/a-knight-of-the-seven-kingdoms-s1/&quot;&gt;A Knight of the Seven Kingdoms Season 1&lt;/a&gt; - &lt;span class=&quot;post-rating-inline&quot; role=&quot;img&quot; aria-label=&quot;My rating: 5 out of 5 stars, all-time favorite&quot;&gt;&lt;span class=&quot;visually-hidden&quot;&gt;My rating: 5 out of 5 stars, all-time favorite&lt;/span&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt; &lt;svg class=&quot;icon icon-heart&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/watching/2026/widows-bay-s1/&quot;&gt;Widows Bay Season 1&lt;/a&gt; - &lt;span class=&quot;post-rating-inline&quot; role=&quot;img&quot; aria-label=&quot;My rating: 5 out of 5 stars&quot;&gt;&lt;span class=&quot;visually-hidden&quot;&gt;My rating: 5 out of 5 stars&lt;/span&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Honorable mentions:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/watching/2026/the-bear-s5/&quot;&gt;The Bear Season 5&lt;/a&gt; - &lt;span class=&quot;post-rating-inline&quot; role=&quot;img&quot; aria-label=&quot;My rating: 4 out of 5 stars&quot;&gt;&lt;span class=&quot;visually-hidden&quot;&gt;My rating: 4 out of 5 stars&lt;/span&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star-empty&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linejoin=&quot;round&quot; stroke-linecap=&quot;round&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/watching/2026/rooster-s1/&quot;&gt;Rooster Season 1&lt;/a&gt; - &lt;span class=&quot;post-rating-inline&quot; role=&quot;img&quot; aria-label=&quot;My rating: 4 out of 5 stars&quot;&gt;&lt;span class=&quot;visually-hidden&quot;&gt;My rating: 4 out of 5 stars&lt;/span&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star-empty&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linejoin=&quot;round&quot; stroke-linecap=&quot;round&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/watching/2026/dtf-st-louis-s1/&quot;&gt;DTF St. Louis&lt;/a&gt; - &lt;span class=&quot;post-rating-inline&quot; role=&quot;img&quot; aria-label=&quot;My rating: 4 out of 5 stars&quot;&gt;&lt;span class=&quot;visually-hidden&quot;&gt;My rating: 4 out of 5 stars&lt;/span&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star-empty&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linejoin=&quot;round&quot; stroke-linecap=&quot;round&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/watching/2026/jury-duty-presents-company-retreat-s2/&quot;&gt;Jury Duty Presents: Company Retreat&lt;/a&gt; - &lt;span class=&quot;post-rating-inline&quot; role=&quot;img&quot; aria-label=&quot;My rating: 4 out of 5 stars&quot;&gt;&lt;span class=&quot;visually-hidden&quot;&gt;My rating: 4 out of 5 stars&lt;/span&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star-empty&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linejoin=&quot;round&quot; stroke-linecap=&quot;round&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;movies&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;https://michaelharley.net/posts/2026/08/28/the-best-shows-and-movies-of-2026-according-to-mike-and-rachelle-so-far/#movies&quot;&gt;Movies&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/watching/2026/the-odyssey/&quot;&gt;The Odyssey&lt;/a&gt; - &lt;span class=&quot;post-rating-inline&quot; role=&quot;img&quot; aria-label=&quot;My rating: 5 out of 5 stars, all-time favorite&quot;&gt;&lt;span class=&quot;visually-hidden&quot;&gt;My rating: 5 out of 5 stars, all-time favorite&lt;/span&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt; &lt;svg class=&quot;icon icon-heart&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/watching/2026/obsession/&quot;&gt;Obsession&lt;/a&gt; - &lt;span class=&quot;post-rating-inline&quot; role=&quot;img&quot; aria-label=&quot;My rating: 5 out of 5 stars, all-time favorite&quot;&gt;&lt;span class=&quot;visually-hidden&quot;&gt;My rating: 5 out of 5 stars, all-time favorite&lt;/span&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt; &lt;svg class=&quot;icon icon-heart&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/watching/2026/project-hail-mary/&quot;&gt;Project Hail Mary&lt;/a&gt; - &lt;span class=&quot;post-rating-inline&quot; role=&quot;img&quot; aria-label=&quot;My rating: 5 out of 5 stars&quot;&gt;&lt;span class=&quot;visually-hidden&quot;&gt;My rating: 5 out of 5 stars&lt;/span&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Honorable mentions:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/watching/2026/the-drama/&quot;&gt;The Drama&lt;/a&gt; - &lt;span class=&quot;post-rating-inline&quot; role=&quot;img&quot; aria-label=&quot;My rating: 4 out of 5 stars&quot;&gt;&lt;span class=&quot;visually-hidden&quot;&gt;My rating: 4 out of 5 stars&lt;/span&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star-empty&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linejoin=&quot;round&quot; stroke-linecap=&quot;round&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/watching/2026/remarkably-bright-creatures/&quot;&gt;Remarkably Bright Creatures&lt;/a&gt; - &lt;span class=&quot;post-rating-inline&quot; role=&quot;img&quot; aria-label=&quot;My rating: 4 out of 5 stars&quot;&gt;&lt;span class=&quot;visually-hidden&quot;&gt;My rating: 4 out of 5 stars&lt;/span&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star-empty&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linejoin=&quot;round&quot; stroke-linecap=&quot;round&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/watching/2026/the-truth-and-tragedy-of-moriah-wilson/&quot;&gt;The Truth and Tragedy of Moriah Wilson&lt;/a&gt; - &lt;span class=&quot;post-rating-inline&quot; role=&quot;img&quot; aria-label=&quot;My rating: 4 out of 5 stars&quot;&gt;&lt;span class=&quot;visually-hidden&quot;&gt;My rating: 4 out of 5 stars&lt;/span&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star-empty&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linejoin=&quot;round&quot; stroke-linecap=&quot;round&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://michaelharley.net/watching/2026/rental-family/&quot;&gt;Rental Family&lt;/a&gt; - &lt;span class=&quot;post-rating-inline&quot; role=&quot;img&quot; aria-label=&quot;My rating: 4 out of 5 stars&quot;&gt;&lt;span class=&quot;visually-hidden&quot;&gt;My rating: 4 out of 5 stars&lt;/span&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-star-empty&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linejoin=&quot;round&quot; stroke-linecap=&quot;round&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Do you have any must-watch TV or movies that aren&#39;t on this list? If yes, drop me a line.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;mailto:michael@michaelharley.net?subject=Re:%20The%20best%20shows%20and%20movies%20of%202026%20according%20to%20Mike%20and%20Rachelle,%20so%20far&quot;&gt;Reply via email&lt;/a&gt;&lt;/p&gt;</content>
      </entry>
      <entry>
        <title>Some of our favorite smart home automations</title>
        <link href="https://michaelharley.net/posts/2026/08/27/some-of-our-favorite-smart-home-automations/"/>
        <updated>2026-08-27T11:55:00Z</updated>
        <id>https://michaelharley.net/posts/2026/08/27/some-of-our-favorite-smart-home-automations/</id>
        <content type="html">&lt;p&gt;The best home automations are the ones that you don&#39;t think about. If you&#39;re visiting family or staying in a hotel, you notice that the automatic thing didn&#39;t happen. Here is our list!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Automatic lighting schedule:&lt;/strong&gt; Lights come on when it&#39;s too dark and go off when it&#39;s light. When no one is in the room, the lights are off. Rarely having to reach for a light switch is nice. It&#39;s such a basic thing, and it&#39;s usually the first thing people automate, but yes, it&#39;s nice.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automatic curtain schedule:&lt;/strong&gt; We have the &lt;a href=&quot;https://www.aqara.com/en/product/curtain-driver-e1-track-version&quot; rel=&quot;noopener noreferrer&quot;&gt;Aqara Curtain Driver E1&lt;/a&gt; on our street-facing curtains, and like with the lights, they&#39;re on an automatic schedule. They open and close at the right times, and it&#39;s not something we think about.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Arriving home automations:&lt;/strong&gt; We turned on presence detection in Home Assistant. That is, Home Assistant uses our phones to know when we&#39;re away or home. When someone arrives home, the locks automatically unlock so we can just come straight in. If it&#39;s after dark, Home Assistant turns on the lights for us.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bathroom motion lighting:&lt;/strong&gt; The downstairs bathroom doesn&#39;t have a window or any natural light, so it&#39;s always dark. We have an automation that detects motion when someone walks in, and it turns on some toe-kick lights. Not bright but enough to use the bathroom without having to turn on the big light.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Controlling the house with voice:&lt;/strong&gt; This isn&#39;t an automation per se, but we like to voice control devices. It&#39;s &amp;quot;Siri, open the curtains,&amp;quot; for example, or &amp;quot;Siri, turn off the kitchen&amp;quot; as I&#39;m walking to the sofa with my bowl of cereal.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ok so that&#39;s it! Those are the things we notice when we&#39;re not at home. What are your favorite smart home features?&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;mailto:michael@michaelharley.net?subject=Re:%20Some%20of%20our%20favorite%20smart%20home%20automations&quot;&gt;Reply via email&lt;/a&gt;&lt;/p&gt;</content>
      </entry>
      <entry>
        <title>How I use Home Assistant to automate and monitor my aquariums</title>
        <link href="https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/"/>
        <updated>2026-08-26T11:45:00Z</updated>
        <id>https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/</id>
        <content type="html">&lt;p&gt;I feel the aquarium hobby is a retro hobby. Sure, the lights and filters have got much more expensive, and now rimless tanks are popular online, but the standard size tanks like the 40 breeder and the 75 gallon are the same footprint from decades past.&lt;/p&gt;
&lt;p&gt;What &lt;em&gt;can&lt;/em&gt; I automate? Can I improve monitoring and alerting? There are some off-the-shelf options like &lt;a href=&quot;https://www.neptunesystems.com/&quot; rel=&quot;noopener noreferrer&quot;&gt;Neptune Systems Apex&lt;/a&gt;, but what could a person do with &lt;a href=&quot;https://www.home-assistant.io/&quot; rel=&quot;noopener noreferrer&quot;&gt;Home Assistant&lt;/a&gt;? That&#39;s what I&#39;m trying to figure out.&lt;/p&gt;
&lt;nav aria-label=&quot;Table of contents&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/#hardware&quot;&gt;Hardware&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/#lighting&quot;&gt;Lighting&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/#feeding&quot;&gt;Feeding&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/#heaters&quot;&gt;Heaters&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/#leak-detection&quot;&gt;Leak detection&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/#alerts&quot;&gt;Alerts&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/#conclusion&quot;&gt;Conclusion&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/nav&gt;
&lt;h2 id=&quot;hardware&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/#hardware&quot;&gt;Hardware&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;My home automation platform of choice is Home Assistant. This runs bare metal on a little mini PC NUC with the following specs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;System76 Meerkat&lt;/strong&gt; (Intel NUC10i3FNB board)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Intel Core i3-10110U&lt;/strong&gt; @ 2.10GHz, 4 threads&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;16 GB RAM&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;228 GB&lt;/strong&gt; disk&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Home Assistant OS&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zigbee:&lt;/strong&gt; &lt;a href=&quot;https://www.home-assistant.io/connect/zbt-2/&quot; rel=&quot;noopener noreferrer&quot;&gt;ZBT-2&lt;/a&gt; and ZHA&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Z-Wave:&lt;/strong&gt; &lt;a href=&quot;https://www.home-assistant.io/connect/zwa-2/&quot; rel=&quot;noopener noreferrer&quot;&gt;ZWA-2&lt;/a&gt; and Z-Wave JS&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To enable all the automations I&#39;m writing about here, each aquarium gets these smart devices. When relevant, I will call out the specific bit of aquarium gear I picked for how I need it to work with Home Assistant.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Power Strip:&lt;/strong&gt; &lt;a href=&quot;https://www.getzooz.com/zooz-zen20-power-strip/&quot; rel=&quot;noopener noreferrer&quot;&gt;Zooz Zen20 Power Strip&lt;/a&gt;. This has 5 regular plugs and 2 USB plugs, all of which can be individually controlled. This runs on my Z-Wave network. Each aquarium gets one.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Temperature Sensor:&lt;/strong&gt; &lt;a href=&quot;https://apolloautomation.com/products/temp-1&quot; rel=&quot;noopener noreferrer&quot;&gt;Apollo TEMP-1 Temperature Sensor&lt;/a&gt;. This allows me to get the temperature into Home Assistant; it runs on ESPHome and connects via Wi-Fi. If aquariums are close enough together, a single sensor can have multiple probes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Water Leak Sensor:&lt;/strong&gt; &lt;a href=&quot;https://www.getzooz.com/zooz-zse42-water-leak-xs-sensor/&quot; rel=&quot;noopener noreferrer&quot;&gt;Zooz Water Leak Sensor&lt;/a&gt;. At least one goes into each plant saucer/catch tray that I use with my canister filters.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Smart Button:&lt;/strong&gt; &lt;a href=&quot;https://www.aqara.com/us/product/wireless-mini-switch/&quot; rel=&quot;noopener noreferrer&quot;&gt;Aqara Mini Switch&lt;/a&gt;. I can use these buttons at the tanks to trigger automations without having to fish out my phone. Single press, double press and long press are all available to do things like toggle the lights or activate maintenance mode.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automatic Feeder:&lt;/strong&gt; &lt;a href=&quot;https://www.avastmarine.com/products/plank-mini-1&quot; rel=&quot;noopener noreferrer&quot;&gt;Avast Labs Plank MINI&lt;/a&gt;. These feeders have no built-in schedules or batteries and that&#39;s what I like. When there&#39;s power to the unit, the corkscrew turns, dispensing food. To stop dispensing, turn off the power.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Heater:&lt;/strong&gt; &lt;a href=&quot;https://www.bulkreefsupply.com/titanium-heater-element-bulk-reef-supply.html&quot; rel=&quot;noopener noreferrer&quot;&gt;Bulk Reef Supply Titanium Heater Element&lt;/a&gt;. These do not have built-in thermostats and plug directly into the Zen20. When the plug is powered on, it heats. To stop the heat, turn off the power. Easy peasy. The smallest these go are 100W and it&#39;s what I use in my 20 gallon long aquariums. In the 75 gallon display tank, I use two 200W heaters.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Filters:&lt;/strong&gt; &lt;a href=&quot;https://eheim.com/en_GB/aquatics/technology/external-filters/classic/&quot; rel=&quot;noopener noreferrer&quot;&gt;Eheim Classic Canister Filter&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://www.aquariumcoop.com/collections/aquarium-filtration/products/black-easy-flow-sponge-filter-coarse&quot; rel=&quot;noopener noreferrer&quot;&gt;Aquarium Co-Op Coarse Sponge Filter&lt;/a&gt;. I like having both a canister and sponge filter in my tanks. If my canister is clogged and I don&#39;t notice, the sponge can carry things until I do. In the event of a power outage, I can run the air pump for the sponge filters off a battery pack for a good long time. Finally, having a seeded sponge filter at all times is nice for quickly spinning up a new tank.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Air Pump:&lt;/strong&gt; &lt;a href=&quot;https://eheim.com/en_GB/aquatics/technology/air-pumps/air/&quot; rel=&quot;noopener noreferrer&quot;&gt;Eheim Air&lt;/a&gt;. This pump has been the quietest in my experience.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lights:&lt;/strong&gt; &lt;a href=&quot;https://www.hygger-online.com/product/auto-on-off-led-aquarium-light/&quot; rel=&quot;noopener noreferrer&quot;&gt;Hygger HG999&lt;/a&gt;. This is just a budget light but it&#39;s a good price and my plants seem happy. Works fine powering it off and on from the power plug.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;
  &lt;picture&gt;
        &lt;source type=&quot;image/webp&quot; srcset=&quot;https://michaelharley.net/assets/images/U0MJUKy8rS-300.webp 300w, https://michaelharley.net/assets/images/U0MJUKy8rS-600.webp 600w, https://michaelharley.net/assets/images/U0MJUKy8rS-900.webp 900w, https://michaelharley.net/assets/images/U0MJUKy8rS-1200.webp 1200w, https://michaelharley.net/assets/images/U0MJUKy8rS-1600.webp 1600w&quot; sizes=&quot;(min-width: 30em) 50vw, 100vw&quot; /&gt;
  &lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://michaelharley.net/assets/images/U0MJUKy8rS-300.jpeg 300w, https://michaelharley.net/assets/images/U0MJUKy8rS-600.jpeg 600w, https://michaelharley.net/assets/images/U0MJUKy8rS-900.jpeg 900w, https://michaelharley.net/assets/images/U0MJUKy8rS-1200.jpeg 1200w, https://michaelharley.net/assets/images/U0MJUKy8rS-1600.jpeg 1600w&quot; sizes=&quot;(min-width: 30em) 50vw, 100vw&quot; /&gt;
        &lt;img src=&quot;https://michaelharley.net/assets/images/U0MJUKy8rS-1600.jpeg&quot; width=&quot;1600&quot; height=&quot;1205&quot; alt=&quot;A well-decorated freshwater aquarium with green plants, driftwood, and a skull decoration on sandy substrate. Several small fish swim among the vegetation and ornaments under blue lighting.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
      &lt;/picture&gt;
  &lt;figcaption&gt;
&lt;p&gt;Aquarium 2! This is my &amp;quot;shrimp tank&amp;quot;, which I put white cloud mountain minnows with. I&#39;m rehoming the shrimpies and the minnows into a hillstream tank which is cycling now!&lt;span class=&quot;fig-meta&quot;&gt;Richmond, VA · August 2026&lt;/span&gt;&lt;/p&gt;
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;lighting&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/#lighting&quot;&gt;Lighting&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Probably one of the easiest and most forgiving things to automate is the lighting schedule. I use &lt;a href=&quot;https://www.hygger-online.com/product/auto-on-off-led-aquarium-light/&quot; rel=&quot;noopener noreferrer&quot;&gt;Hygger HG999&lt;/a&gt; lights with my tanks and they&#39;re fine for the price. If I plug the light into a smart plug, then it&#39;s easy to set a simple schedule to turn the lights on and off. The HG999 does have its own little controller, but it restores its previous state on power restore. So I just turn it on for the first time, set the brightness I want, and control it with Home Assistant via the smart plug.&lt;/p&gt;
&lt;h3 id=&quot;helpers&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/#helpers&quot;&gt;Helpers&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Lights On Time:&lt;/strong&gt; Date and/or time. Time only. Example: 7:30 a.m.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lights Off Time:&lt;/strong&gt; Date and/or time. Time only. Example: 4:30 p.m.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lights On:&lt;/strong&gt; Template binary sensor. It converts Lights On Time/Lights Off Time into an on/off state that then drives the automations. Example: On&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;automations&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/#automations&quot;&gt;Automations&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Each tank gets two automations for lighting.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Lights On:&lt;/strong&gt; When the Lights On template binary sensor turns On, this fires and turns the lights on.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lights Off:&lt;/strong&gt; This is the off version! When the Lights On template binary sensor turns Off, this fires and turns the lights off.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;dashboard&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/#dashboard&quot;&gt;Dashboard&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The dashboard gives me exactly one control for the lighting.&lt;/p&gt;
&lt;figure&gt;
  &lt;picture&gt;
        &lt;source type=&quot;image/webp&quot; srcset=&quot;https://michaelharley.net/assets/images/EGbl9gV0_5-300.webp 300w, https://michaelharley.net/assets/images/EGbl9gV0_5-600.webp 600w, https://michaelharley.net/assets/images/EGbl9gV0_5-900.webp 900w, https://michaelharley.net/assets/images/EGbl9gV0_5-1200.webp 1200w, https://michaelharley.net/assets/images/EGbl9gV0_5-1600.webp 1600w&quot; sizes=&quot;(min-width: 30em) 50vw, 100vw&quot; /&gt;
  &lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://michaelharley.net/assets/images/EGbl9gV0_5-300.jpeg 300w, https://michaelharley.net/assets/images/EGbl9gV0_5-600.jpeg 600w, https://michaelharley.net/assets/images/EGbl9gV0_5-900.jpeg 900w, https://michaelharley.net/assets/images/EGbl9gV0_5-1200.jpeg 1200w, https://michaelharley.net/assets/images/EGbl9gV0_5-1600.jpeg 1600w&quot; sizes=&quot;(min-width: 30em) 50vw, 100vw&quot; /&gt;
        &lt;img src=&quot;https://michaelharley.net/assets/images/EGbl9gV0_5-1600.jpeg&quot; width=&quot;1600&quot; height=&quot;874&quot; alt=&quot;Dashboard for Aquarium #1 showing status alerts including a dry leak and overdue water change, with controls for main power, filter, heater, light, and feeder, along with settings for temperature setpoint (75.0°F), feed schedule (8:45 AM), and other aquarium parameters.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
      &lt;/picture&gt;
  &lt;figcaption&gt;
&lt;p&gt;I have controls on each tank dashboard to do a manual feed, to adjust when the feed happens, a feeder master switch and the feed seconds.&lt;/p&gt;
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id=&quot;improvements&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/#improvements&quot;&gt;Improvements&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I plan to add a WLED light strip to each tank. The Hygger lights have morning, evening and night modes, which basically set the colors at a dim level. It&#39;s really more aesthetic, but I would like to be able to replicate that with my setup because I think it&#39;s cool. Plus, it seems the sudden on of the main light startles the fish, so I&#39;d like to ramp up in the morning and ramp down in the evenings.&lt;/p&gt;
&lt;figure&gt;
  &lt;picture&gt;
        &lt;source type=&quot;image/webp&quot; srcset=&quot;https://michaelharley.net/assets/images/uhvUzOiDkE-300.webp 300w, https://michaelharley.net/assets/images/uhvUzOiDkE-600.webp 600w, https://michaelharley.net/assets/images/uhvUzOiDkE-900.webp 900w, https://michaelharley.net/assets/images/uhvUzOiDkE-1200.webp 1200w, https://michaelharley.net/assets/images/uhvUzOiDkE-1600.webp 1600w&quot; sizes=&quot;(min-width: 30em) 50vw, 100vw&quot; /&gt;
  &lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://michaelharley.net/assets/images/uhvUzOiDkE-300.jpeg 300w, https://michaelharley.net/assets/images/uhvUzOiDkE-600.jpeg 600w, https://michaelharley.net/assets/images/uhvUzOiDkE-900.jpeg 900w, https://michaelharley.net/assets/images/uhvUzOiDkE-1200.jpeg 1200w, https://michaelharley.net/assets/images/uhvUzOiDkE-1600.jpeg 1600w&quot; sizes=&quot;(min-width: 30em) 50vw, 100vw&quot; /&gt;
        &lt;img src=&quot;https://michaelharley.net/assets/images/uhvUzOiDkE-1600.jpeg&quot; width=&quot;1600&quot; height=&quot;1595&quot; alt=&quot;A vibrant blue and red betta fish swims among green aquatic plants and brown leaf litter on the dark substrate of an aquarium.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
      &lt;/picture&gt;
  &lt;figcaption&gt;
&lt;p&gt;Tina!&lt;span class=&quot;fig-meta&quot;&gt;Richmond, VA · August 2026&lt;/span&gt;&lt;/p&gt;
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;feeding&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/#feeding&quot;&gt;Feeding&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Feeding the fish is one of my favorite things about fish keeping. So why then would I want to automate it? Well, mostly to see if I can. But secondarily, it means I don&#39;t &lt;em&gt;have&lt;/em&gt; to feed the fish every day if I don&#39;t want. I let the autofeeders dispense the dry pellets and I will supplement with frozen treats when I&#39;m in the mood. Plus, if I automate the feeding like this, then I don&#39;t need to recruit anyone to come feed the fish while I&#39;m away.&lt;/p&gt;
&lt;p&gt;I knew I wanted to use automatic feeders with my fish. In my research, most hobbyists seemed to dismiss the idea as pointless and maybe even dangerous. Most of the anecdotes I saw were people using cheap barrel feeders like the &lt;a href=&quot;https://eheim.com/en_GB/aquatics/accessories/feeding/autofeeder/autofeeder&quot; rel=&quot;noopener noreferrer&quot;&gt;Eheim Autofeeder&lt;/a&gt; while they were away, coming back to dead fish because the feeder dumped too much food into the aquarium.&lt;/p&gt;
&lt;p&gt;Naively undeterred, I started experimenting with what was actually possible. I did try the cheap barrel feeders and yeah, they&#39;re not great. The dispensing bit is clunky and not very precise, plus there&#39;s no way to have a fasting day schedule with the barrel feeders I tried (Eheim and Aquarium Co-Op). That&#39;s where Home Assistant and the &lt;a href=&quot;https://www.avastmarine.com/products/plank-mini-1&quot; rel=&quot;noopener noreferrer&quot;&gt;Avast Labs Plank MINI&lt;/a&gt; come in. This is a dumb feeder. If I plug it up, it runs the motor that spins the auger to dispense food. I then power off the plug to stop it. Hell yeah.&lt;/p&gt;
&lt;p&gt;It actually took me a long time to find this feeder because I didn&#39;t know what to type into the search bar. Avast makes a regular-sized Plank, which is expensive. The mini is also expensive compared to the battery powered barrel feeders but I just squint my eyes and hit the buy button. Buy once, cry once, I always say.&lt;/p&gt;
&lt;p&gt;This automation could be dangerous for my fishy friends so I spent a fair amount of time thinking through the edge cases and how this could fail. Accidentally dumping the full canister of food into the tank because a run got stuck would be a critical incident. Let&#39;s try not to do that.&lt;/p&gt;
&lt;p&gt;The other failure mode is less critical. That&#39;s the feeder not dispensing food when I think it is, so I&#39;ve also built some automations and monitors to try to catch this failure.&lt;/p&gt;
&lt;h3 id=&quot;helpers-1&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/#helpers-1&quot;&gt;Helpers&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Feeding Enabled:&lt;/strong&gt; Toggle. This allows me to arm and disarm the automatic schedule, should I for some reason want to turn off the automatic feeder without having to go around disabling automations. Example: On&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feed Time:&lt;/strong&gt; Date and/or time. This is when the food drops. Example: 7:45 a.m.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feeder Seconds:&lt;/strong&gt; Number. This is the number of seconds the motor should run. I ran a few test runs of the feeder to see how much it dispensed and I continue to tweak this as needed. Example: 35&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feeder Active:&lt;/strong&gt; Toggle. The automations and scripts set this helper during legitimate feeding paths. Example: Off&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Last Verified Feed:&lt;/strong&gt; Date and/or time. I use this helper to work out whether a scheduled feed actually happened. Example: August 24, 2026 at 7:45 a.m.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;automations-1&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/#automations-1&quot;&gt;Automations&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Feed:&lt;/strong&gt; The Feed Time helper triggers this automation. When the time arrives, it toggles the Feeder Active helper on, powers the feeder on, and the auger starts to dispense food. It waits the number of seconds I set in Feeder Seconds, then it powers the feeder off and toggles the Feeder Active helper off.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cutoff:&lt;/strong&gt; This automation monitors for every edge case that I could think of that would cause an outlet to be on when it shouldn&#39;t be, then turns off the feeder and sends out all the alerts to all the places. There are three triggers:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Overrun:&lt;/strong&gt; If the outlet has been on past the max feed window, then this trigger executes. The max feed window is a hard-coded value of 120 seconds.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unexpected on:&lt;/strong&gt; This trigger fires if the outlet came on with no feed running. A ghost Z-Wave command, a hand tapping the strip, a stale state restore. This branch only works because the automation switches the Feeder Active toggle helper on during a real feeding session. So the condition boils down to this: the plug on the feeder is powered on and the Feeder Active toggle helper is off.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Startup recovery:&lt;/strong&gt; This trigger fires if the outlet was already on when Home Assistant booted, which probably means HA rebooted mid-feed.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feed Verify:&lt;/strong&gt; This runs a few seconds into a feed and checks the outlet is actually drawing current. If it is, it stamps Last Verified Feed. A relay can report a perfectly clean feed into a dead outlet and this is the automation that catches it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feed Watchdog:&lt;/strong&gt; This runs 15 minutes after the feed was due and alerts me if nothing stamped Last Verified Feed today. This one is for a feed that never ran at all.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;dashboard-1&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/#dashboard-1&quot;&gt;Dashboard&lt;/a&gt;&lt;/h3&gt;
&lt;figure&gt;
  &lt;picture&gt;
        &lt;source type=&quot;image/webp&quot; srcset=&quot;https://michaelharley.net/assets/images/EGbl9gV0_5-300.webp 300w, https://michaelharley.net/assets/images/EGbl9gV0_5-600.webp 600w, https://michaelharley.net/assets/images/EGbl9gV0_5-900.webp 900w, https://michaelharley.net/assets/images/EGbl9gV0_5-1200.webp 1200w, https://michaelharley.net/assets/images/EGbl9gV0_5-1600.webp 1600w&quot; sizes=&quot;(min-width: 30em) 50vw, 100vw&quot; /&gt;
  &lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://michaelharley.net/assets/images/EGbl9gV0_5-300.jpeg 300w, https://michaelharley.net/assets/images/EGbl9gV0_5-600.jpeg 600w, https://michaelharley.net/assets/images/EGbl9gV0_5-900.jpeg 900w, https://michaelharley.net/assets/images/EGbl9gV0_5-1200.jpeg 1200w, https://michaelharley.net/assets/images/EGbl9gV0_5-1600.jpeg 1600w&quot; sizes=&quot;(min-width: 30em) 50vw, 100vw&quot; /&gt;
        &lt;img src=&quot;https://michaelharley.net/assets/images/EGbl9gV0_5-1600.jpeg&quot; width=&quot;1600&quot; height=&quot;874&quot; alt=&quot;Dashboard for Aquarium #1 showing status alerts including a dry leak and overdue water change, with controls for main power, filter, heater, light, and feeder, along with settings for temperature setpoint (75.0°F), feed schedule (8:45 AM), and other aquarium parameters.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
      &lt;/picture&gt;
  &lt;figcaption&gt;
&lt;p&gt;I have controls on each tank dashboard to do a manual feed, to adjust when the feed happens, a feeder master switch and the feed seconds.&lt;/p&gt;
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;heaters&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/#heaters&quot;&gt;Heaters&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Aquarium heaters are notoriously unreliable. The general advice on them is that they&#39;re so unreliable that fish keepers should replace theirs proactively, every 2 or 3 years. The main thing is the cheaply made thermostats on the heaters can fail in the on position, cooking all the fish in the tank. Or the glass can break, causing an electrocution risk.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sources:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.bulkreefsupply.com/content/post/aquarium-heater-failure&quot; rel=&quot;noopener noreferrer&quot;&gt;Aquarium Heater Failures: How to Protect Your Reef Tank from Disaster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://aquariumscience.org/14-8-aquarium-heaters/&quot; rel=&quot;noopener noreferrer&quot;&gt;14.8. Aquarium Heaters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://advancedaquariumconcepts.com/best-aquarium-heater/&quot; rel=&quot;noopener noreferrer&quot;&gt;Heaters – The Ticking Timebomb in Every Tank&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hobbyists recommend using a separate controller, like an &lt;a href=&quot;https://www.inkbird.com/products/wifi-aquarium-temperature-controller-itc-306a&quot; rel=&quot;noopener noreferrer&quot;&gt;INKBIRD&lt;/a&gt;. Then I&#39;d just turn the thermostat up on the aquarium heater and let the INKBIRD control the temp. The INKBIRD is higher quality, one presumes, so is less likely to catastrophically fail. Instead of an INKBIRD, I decided to use Home Assistant as my controller.&lt;/p&gt;
&lt;p&gt;To run the heaters, I use the &lt;a href=&quot;https://www.getzooz.com/zooz-zen20-power-strip/&quot; rel=&quot;noopener noreferrer&quot;&gt;Zooz Zen20 Power Strip&lt;/a&gt;, &lt;a href=&quot;https://apolloautomation.com/products/temp-1&quot; rel=&quot;noopener noreferrer&quot;&gt;Apollo TEMP-1 Temperature Sensor&lt;/a&gt;, and the &lt;a href=&quot;https://www.bulkreefsupply.com/titanium-heater-element-bulk-reef-supply.html&quot; rel=&quot;noopener noreferrer&quot;&gt;Bulk Reef Supply Titanium Heater Element&lt;/a&gt;. I&#39;m choosing the BRS heater because it does not have a built-in thermostat. I power on its plug to run the heater and I turn off its plug to turn off the heater.&lt;/p&gt;
&lt;p&gt;I&#39;ve seen people say to get a standard aquarium heater and to set the temp a few degrees above the target so the external controller can drive the heater, but if the controller fails in some way, then the built-in thermostat can be the backstop. I reject that because if I don&#39;t trust the thermostat enough to run the heater, why would I trust it to be the backstop?&lt;/p&gt;
&lt;p&gt;This is the most dangerous automation. A heater stuck in the on position can kill the fish in hours, so I&#39;ve really spent a lot of time and energy to ensure I&#39;ve accounted for the failure modes and edge cases that could cause the automations to fail. So far so good.&lt;/p&gt;
&lt;figure&gt;
  &lt;picture&gt;
        &lt;source type=&quot;image/webp&quot; srcset=&quot;https://michaelharley.net/assets/images/amfwXSVtXP-300.webp 300w, https://michaelharley.net/assets/images/amfwXSVtXP-600.webp 600w, https://michaelharley.net/assets/images/amfwXSVtXP-900.webp 900w, https://michaelharley.net/assets/images/amfwXSVtXP-1200.webp 1200w, https://michaelharley.net/assets/images/amfwXSVtXP-1600.webp 1600w&quot; sizes=&quot;(min-width: 30em) 50vw, 100vw&quot; /&gt;
  &lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://michaelharley.net/assets/images/amfwXSVtXP-300.jpeg 300w, https://michaelharley.net/assets/images/amfwXSVtXP-600.jpeg 600w, https://michaelharley.net/assets/images/amfwXSVtXP-900.jpeg 900w, https://michaelharley.net/assets/images/amfwXSVtXP-1200.jpeg 1200w, https://michaelharley.net/assets/images/amfwXSVtXP-1600.jpeg 1600w&quot; sizes=&quot;(min-width: 30em) 50vw, 100vw&quot; /&gt;
        &lt;img src=&quot;https://michaelharley.net/assets/images/amfwXSVtXP-1600.jpeg&quot; width=&quot;1600&quot; height=&quot;1604&quot; alt=&quot;A colorful fish with a reddish-orange chest and spotted gray-blue body swims in an aquarium among green aquatic plants, driftwood, and fallen leaves. The tank features dark water with hanging root systems visible at the top.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
      &lt;/picture&gt;
  &lt;figcaption&gt;
&lt;p&gt;A male pearl gourami in the 75 gallon tank downstairs.&lt;span class=&quot;fig-meta&quot;&gt;Richmond, VA · August 2026&lt;/span&gt;&lt;/p&gt;
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id=&quot;helpers-2&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/#helpers-2&quot;&gt;Helpers&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;If I were building this today, I&#39;d just use the &lt;a href=&quot;https://www.home-assistant.io/integrations/generic_thermostat/&quot; rel=&quot;noopener noreferrer&quot;&gt;Generic Thermostat&lt;/a&gt; integration but I built this before I knew about the integration. There&#39;s little value that I can see to migrate to the integration so I&#39;m just going to keep using my hand rolled solution.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Set Point:&lt;/strong&gt; Number. This is the target temperature of the aquarium. Example: 78&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hysteresis:&lt;/strong&gt; Number. I didn&#39;t know what this meant before working on this project but hysteresis is the gap you deliberately leave between the point where something switches on and the point where it switches off, so it doesn&#39;t flap back and forth every time the measurement wobbles across a single number. If I set the hysteresis at 1, then at 77.5, the heater turns on. At 78.5 it turns off. Hysteresis is basically the band of the swing. Example: 1&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Call For Heat:&lt;/strong&gt; Template binary sensor. It reads the temperature probe, then compares against the Set Point and half the Hysteresis, then returns true or false depending on the target temperature and the actual temperature. It also reads its own current state, which is what creates the band: once it&#39;s on it stays on until the top of the band, and once it&#39;s off it stays off until the bottom. If the sensor is not returning a value, say the probe got unplugged, then it falls back to false so a heater can&#39;t get stuck on.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Maintenance Mode:&lt;/strong&gt; Toggle. Every tank gets a helper that allows me to put the tank into maintenance mode. This stops the filters and disables the heater so it&#39;s not running during a water change. It also holds off the temperature alerts, the sensor offline alert and the filter watchdog, because none of those are news while I&#39;ve got my hands in the tank. Example: Off&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Temp Offset Alert:&lt;/strong&gt; Number. This is the maximum amount of temperature swing, compared to Set Point, allowed before the system starts alerting. Example: 3&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;automations-2&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/#automations-2&quot;&gt;Automations&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I use several classes of automations to run the heaters and verify everything is working correctly.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Heater On:&lt;/strong&gt; There are three triggers for this automation. When Call For Heat flips to true, when Home Assistant restarts, and when Maintenance Mode turns off. This automation is gated on Call For Heat, so when Home Assistant restarts, if Call For Heat is off then nothing happens. It&#39;s also gated on Maintenance Mode. If it&#39;s on, then do nothing because I&#39;m doing a dang water change.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Heater Off:&lt;/strong&gt; There are also three triggers for this automation. When Call For Heat flips to false, when Maintenance Mode turns on and when Home Assistant restarts. Both Heater On and Heater Off fire on a reboot, so this one also carries the appropriate conditions to let the correct mode win.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Low Temperature Alert:&lt;/strong&gt; This triggers when a tank has drifted below setpoint by more than the alert offset.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;High Temperature Alert:&lt;/strong&gt; This triggers when a tank has drifted above setpoint by more than the alert offset.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Heater Stuck On:&lt;/strong&gt; This triggers if the relay reads off while the heater outlet is still drawing over 20W. This is a critical automation and I&#39;ve experienced this exact condition.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Temperature Sensor Offline:&lt;/strong&gt; This triggers if the temperature sensor is offline for more than five minutes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;dashboard-2&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/#dashboard-2&quot;&gt;Dashboard&lt;/a&gt;&lt;/h3&gt;
&lt;figure&gt;
  &lt;picture&gt;
        &lt;source type=&quot;image/webp&quot; srcset=&quot;https://michaelharley.net/assets/images/vK8PzhXfV4-300.webp 300w, https://michaelharley.net/assets/images/vK8PzhXfV4-600.webp 600w, https://michaelharley.net/assets/images/vK8PzhXfV4-900.webp 900w, https://michaelharley.net/assets/images/vK8PzhXfV4-1200.webp 1200w, https://michaelharley.net/assets/images/vK8PzhXfV4-1600.webp 1600w&quot; sizes=&quot;(min-width: 30em) 50vw, 100vw&quot; /&gt;
  &lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://michaelharley.net/assets/images/vK8PzhXfV4-300.jpeg 300w, https://michaelharley.net/assets/images/vK8PzhXfV4-600.jpeg 600w, https://michaelharley.net/assets/images/vK8PzhXfV4-900.jpeg 900w, https://michaelharley.net/assets/images/vK8PzhXfV4-1200.jpeg 1200w, https://michaelharley.net/assets/images/vK8PzhXfV4-1600.jpeg 1600w&quot; sizes=&quot;(min-width: 30em) 50vw, 100vw&quot; /&gt;
        &lt;img src=&quot;https://michaelharley.net/assets/images/vK8PzhXfV4-1600.jpeg&quot; width=&quot;1600&quot; height=&quot;875&quot; alt=&quot;Dashboard for Aquarium #1 showing status indicators including temperature at 74.6°F, energy at 12W, and various system controls like main power, filter, heater, and light switches, along with settings for temperature setpoint and hysteresis levels.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
      &lt;/picture&gt;
  &lt;figcaption&gt;
&lt;p&gt;The dashboard for aquarium 1. At the bottom are the controls and dials for the temperature automations and helpers.&lt;/p&gt;
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;leak-detection&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/#leak-detection&quot;&gt;Leak detection&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I have no idea if canister filters are more prone to leaking than hang-on-back filters, but if one of mine springs a leak, I&#39;d like to know it. So at a minimum, each of my tanks gets a &lt;a href=&quot;https://www.getzooz.com/zooz-zse42-water-leak-xs-sensor/&quot; rel=&quot;noopener noreferrer&quot;&gt;Zooz Water Leak Sensor&lt;/a&gt; that goes into the leak tray of each filter. I have a holding/QT tank that uses an undergravel filter and a hang-on-back. For that one, I put the leak sensor right under the hang-on-back in case it overflows.&lt;/p&gt;
&lt;p&gt;I treat leak detection alerts as critical, so they play no matter the time of day or night.&lt;/p&gt;
&lt;h3 id=&quot;helpers-3&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/#helpers-3&quot;&gt;Helpers&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Leak Detected:&lt;/strong&gt; Toggle. When a leak sensor detects water, the automation toggles this On.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Leak Detected Time:&lt;/strong&gt; Date and/or time. This records the date and time of an active leak.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;automations-3&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/#automations-3&quot;&gt;Automations&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Leak Alert:&lt;/strong&gt; This automation fires when a leak sensor detects water. It repeats every 5 minutes while the probe reads wet, capped at 12 passes, so an unanswered leak nags for an hour and then stops. Each pass plays a prerecorded clip at full volume and sends a high-priority push alert to my phone.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Leak Latch:&lt;/strong&gt; This automation fires when a leak sensor detects water. It turns on the Leak Detected helper and sets the Leak Detected Time helper. I do this so a leak detection must be manually cleared.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Leak Reset:&lt;/strong&gt; This is actually a script, but it&#39;s what resets the Leak Detected and Leak Detected Time helpers. I clear the leak from the dashboard.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;dashboard-3&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/#dashboard-3&quot;&gt;Dashboard&lt;/a&gt;&lt;/h3&gt;
&lt;figure&gt;
  &lt;picture&gt;
        &lt;source type=&quot;image/webp&quot; srcset=&quot;https://michaelharley.net/assets/images/efBb5NztRC-300.webp 300w, https://michaelharley.net/assets/images/efBb5NztRC-600.webp 600w, https://michaelharley.net/assets/images/efBb5NztRC-900.webp 900w, https://michaelharley.net/assets/images/efBb5NztRC-1200.webp 1200w, https://michaelharley.net/assets/images/efBb5NztRC-1600.webp 1600w&quot; sizes=&quot;(min-width: 30em) 50vw, 100vw&quot; /&gt;
  &lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://michaelharley.net/assets/images/efBb5NztRC-300.jpeg 300w, https://michaelharley.net/assets/images/efBb5NztRC-600.jpeg 600w, https://michaelharley.net/assets/images/efBb5NztRC-900.jpeg 900w, https://michaelharley.net/assets/images/efBb5NztRC-1200.jpeg 1200w, https://michaelharley.net/assets/images/efBb5NztRC-1600.jpeg 1600w&quot; sizes=&quot;(min-width: 30em) 50vw, 100vw&quot; /&gt;
        &lt;img src=&quot;https://michaelharley.net/assets/images/efBb5NztRC-1600.jpeg&quot; width=&quot;1600&quot; height=&quot;875&quot; alt=&quot;Dashboard displaying status of six aquariums with temperature and energy readings, operational modes, leak status, and a shared light schedule showing lights on from 8:00 AM to 4:00 PM.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
      &lt;/picture&gt;
  &lt;figcaption&gt;
&lt;p&gt;I show the leak status in several places in the UI. Here on the fish dashboard, plus the alert dashboard and each individual tank dashboard.&lt;/p&gt;
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;alerts&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/#alerts&quot;&gt;Alerts&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Since Home Assistant is running important life support for my fishy companions, I&#39;ve put a fair amount of thought into making my alerting system as robust as possible.&lt;/p&gt;
&lt;p&gt;Everything related to life support gets both a voice announcement played loudly over our house speakers and a high-priority alert sent to my phone, with no consideration for hour of the day. If I have a water leak, then yes I want to be woken up so I can deal with it.&lt;/p&gt;
&lt;p&gt;I prefer the Nabu Casa voices over the Piper voices, so I do use a cloud-based service for my TTS. What happens if there&#39;s a critical alert during an internet outage? The alert fails is what! To mitigate that, I made prerecorded announcements with the Nabu Casa voices, then I just cast the announcement over my local network to my media devices, no internet required.&lt;/p&gt;
&lt;figure&gt;
  &lt;picture&gt;
        &lt;source type=&quot;image/webp&quot; srcset=&quot;https://michaelharley.net/assets/images/GlAWDuPWXk-300.webp 300w, https://michaelharley.net/assets/images/GlAWDuPWXk-600.webp 600w, https://michaelharley.net/assets/images/GlAWDuPWXk-900.webp 900w, https://michaelharley.net/assets/images/GlAWDuPWXk-1200.webp 1200w, https://michaelharley.net/assets/images/GlAWDuPWXk-1600.webp 1600w&quot; sizes=&quot;(min-width: 30em) 50vw, 100vw&quot; /&gt;
  &lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://michaelharley.net/assets/images/GlAWDuPWXk-300.jpeg 300w, https://michaelharley.net/assets/images/GlAWDuPWXk-600.jpeg 600w, https://michaelharley.net/assets/images/GlAWDuPWXk-900.jpeg 900w, https://michaelharley.net/assets/images/GlAWDuPWXk-1200.jpeg 1200w, https://michaelharley.net/assets/images/GlAWDuPWXk-1600.jpeg 1600w&quot; sizes=&quot;(min-width: 30em) 50vw, 100vw&quot; /&gt;
        &lt;img src=&quot;https://michaelharley.net/assets/images/GlAWDuPWXk-1600.jpeg&quot; width=&quot;1600&quot; height=&quot;906&quot; alt=&quot;An orange and brown pleco catfish forages along the gravelly bottom of an aquarium, with aquatic plants, driftwood, and scattered pebbles visible in the tank.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
      &lt;/picture&gt;
  &lt;figcaption&gt;
&lt;p&gt;Super Red Bristlenose in the 75 gallon display tank downstairs.&lt;span class=&quot;fig-meta&quot;&gt;Richmond, VA · August 2026&lt;/span&gt;&lt;/p&gt;
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;conclusion&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;https://michaelharley.net/posts/2026/08/26/how-i-use-home-assistant-to-automate-and-monitor-my-aquariums/#conclusion&quot;&gt;Conclusion&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So what can I automate and monitor? A fair amount, but nothing really groundbreaking, it turns out. I&#39;m happiest with my solution for the automatic feeders. All the rest of it is mostly just nice-to-haves.&lt;/p&gt;
&lt;p&gt;When I first started, I thought I might be able to monitor my water parameters like pH, ammonia, nitrites and nitrates, but that still doesn&#39;t seem possible. I was hoping for some probes, connected via ESPHome and reporting to Home Assistant. Alas, I use the API Master Test Kit like everyone else.&lt;/p&gt;
&lt;p&gt;I think dosing would be trivial if I had the right type of doser, like this &lt;a href=&quot;https://fresh.bulkreefsupply.com/brs-2-part-doser-1-1-ml-per-minute-bundle.html&quot; rel=&quot;noopener noreferrer&quot;&gt;BRS model&lt;/a&gt; or even an &lt;a href=&quot;https://apolloautomation.com/products/pump-1-fluid-pump&quot; rel=&quot;noopener noreferrer&quot;&gt;Apollo PUMP-1 Fluid Pump&lt;/a&gt; for close to half the price because both work from just being powered on or off from the switch. I just manually dose my tanks weekly, plus I run low-tech tanks, so it&#39;s not strictly necessary.&lt;/p&gt;
&lt;p&gt;I run my aquariums like a fleet and I use &lt;a href=&quot;https://www.home-assistant.io/docs/automation/using_blueprints/&quot; rel=&quot;noopener noreferrer&quot;&gt;blueprints&lt;/a&gt; because if I need to adjust something, I don&#39;t want to make the same adjustment six different times. I&#39;ve tried to create a system that I can replicate and stamp down when I add a new tank. Get the tank and hardware, run the onboarding script and boom, I have a tank!&lt;/p&gt;
&lt;p&gt;Are you in the fish keeping hobby? If yes, I&#39;d be curious how you do it. Are you strictly old school or do you have some automations? I&#39;d be interested in hearing.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;mailto:michael@michaelharley.net?subject=Re:%20How%20I%20use%20Home%20Assistant%20to%20automate%20and%20monitor%20my%20aquariums&quot;&gt;Reply via email&lt;/a&gt;&lt;/p&gt;</content>
      </entry>
</feed>