{"id":27,"date":"2026-03-12T09:23:47","date_gmt":"2026-03-12T17:23:47","guid":{"rendered":"https:\/\/satchnet.io\/?p=27"},"modified":"2026-03-12T09:24:03","modified_gmt":"2026-03-12T17:24:03","slug":"when-your-weather-station-gets-chatty","status":"publish","type":"post","link":"https:\/\/satchnet.io\/?p=27","title":{"rendered":"When Your Weather Station Gets Chatty"},"content":{"rendered":"\n<p>So I decided my Tempest weather station needed to learn how to text me. Because apparently, looking outside like a caveman wasn&#8217;t cutting it anymore.<\/p>\n\n\n\n<p><strong>The Goal:<\/strong> Get real-time weather alerts on my phone through ntfy. Simple, right?<\/p>\n\n\n\n<p><strong>The Reality:<\/strong> Two hours of Home Assistant telling me my wind speed was &#8220;unavailable&#8221; while I watched leaves literally blowing past my window.<\/p>\n\n\n\n<p>Turns out <code>weather.home<\/code> wasn&#8217;t pulling from my actual weather station\u2014it was getting data from some mysterious forecast API that apparently updates on geological timescales. Meanwhile, <code>sensor.st_00136021_wind_speed<\/code> was sitting there with real-time data the whole time, just waiting for someone to notice it.<\/p>\n\n\n\n<p>Then came the Great JSON Disaster of 2026, where every notification looked like:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\"message\":\"High winds detected: 3.4 mph\",\"title\":\"\u26a0\ufe0f Wind Alert\",\"priority\":\"default\"}<\/code><\/pre>\n\n\n\n<p>My phone was basically getting raw API responses instead of, you know, actual messages. Very helpful. Much notification.<\/p>\n\n\n\n<p><strong>The fix?<\/strong> Skip Home Assistant&#8217;s fancy REST notify platform entirely and just <code>curl<\/code> it like it&#8217;s 2005. Worked perfectly. Sometimes the old ways are the best ways.<\/p>\n\n\n\n<p><strong>Now I get:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u26a0\ufe0f High wind alerts (at 20+ mph, not Portland&#8217;s usual &#8220;gentle breeze&#8221;)<\/li>\n\n\n\n<li>\ud83e\udd76 Freezing temps (\u226432\u00b0F)<\/li>\n\n\n\n<li>\ud83d\udd25 Heat warnings (\u226590\u00b0F, so like, twice a year)<\/li>\n\n\n\n<li>\ud83d\udca7 Heavy rain (because this is Oregon, this will get annoying)<\/li>\n\n\n\n<li>\u26a1 Lightning strikes with distance (nature&#8217;s &#8220;you should probably go inside&#8221; feature)<\/li>\n<\/ul>\n\n\n\n<p>The best part? Testing the lightning alert at 10am on a clear day and getting &#8220;\u26a1 Lightning detected 0 miles away.&#8221; My phone is now a certified drama queen.<\/p>\n\n\n\n<p><strong>Lessons learned:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Always use the actual sensor, not the aggregated weather entity<\/li>\n\n\n\n<li>When Home Assistant gets complicated, just use curl<\/li>\n\n\n\n<li>My weather station now has better notification hygiene than most of my friends<\/li>\n<\/ol>\n\n\n\n<p>Total setup time: 2 hours Number of times I said &#8220;it works locally&#8221;: 0 (surprisingly) Probability I&#8217;ll actually go inside when it warns me about lightning: 30%<\/p>\n\n\n\n<p>Worth it? Absolutely. Now if you&#8217;ll excuse me, I need to go acknowledge my &#8220;High winds detected: 2.3 mph&#8221; alert. \ud83c\udf2a\ufe0f<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>So I decided my Tempest weather station needed to learn how to text me. Because apparently, looking outside like a caveman wasn&#8217;t cutting it anymore. The Goal: Get real-time weather alerts on my phone through ntfy. Simple, right? The Reality: Two hours of Home Assistant telling me my wind speed was &#8220;unavailable&#8221; while I watched [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,8],"tags":[],"class_list":["post-27","post","type-post","status-publish","format-standard","hentry","category-monitoring","category-weather"],"_links":{"self":[{"href":"https:\/\/satchnet.io\/index.php?rest_route=\/wp\/v2\/posts\/27","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/satchnet.io\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/satchnet.io\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/satchnet.io\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/satchnet.io\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=27"}],"version-history":[{"count":1,"href":"https:\/\/satchnet.io\/index.php?rest_route=\/wp\/v2\/posts\/27\/revisions"}],"predecessor-version":[{"id":28,"href":"https:\/\/satchnet.io\/index.php?rest_route=\/wp\/v2\/posts\/27\/revisions\/28"}],"wp:attachment":[{"href":"https:\/\/satchnet.io\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=27"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/satchnet.io\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=27"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/satchnet.io\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=27"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}