<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Igor Bubelov</title>
        <link>https://bubelov.com/tags/home-automation/</link>
        <description>All posts by Igor Bubelov</description><atom:link href="https://bubelov.com/tags/home-automation/index.xml" rel="self" type="application/rss+xml" />
        <item>
            <title>Wi-Fi is the Best Protocol for Smart Lights</title>
            <link>https://bubelov.com/blog/2026/wifi-lights/</link>
            <pubDate>Mon, 19 Jan 2026 00:00:00 +0000</pubDate>
            <guid>https://bubelov.com/blog/2026/wifi-lights/</guid>
            <description>&lt;p&gt;Once you&amp;rsquo;ve had lights you can actually control, you know, brightness, color, the whole deal, there&amp;rsquo;s zero chance you&amp;rsquo;re going back to the dumb ones. The whole &amp;ldquo;smart&amp;rdquo; light scene is a total mess though, because it&amp;rsquo;s split between Bluetooth, Zigbee, Wi‑Fi, Matter over Thread, and Matter over Wi‑Fi. Pick your poison.&lt;/p&gt;
&lt;p&gt;I have a bunch of Wi‑Fi lights (Phillips WiZ) and a whole zoo of Zigbee lights, from premium Phillips Hue all the way down to no‑name AliExpress brands for $3. Honestly, I like my Wi‑Fi WiZ lights much more.&lt;/p&gt;
&lt;p&gt;While meshes like Zigbee and Thread are pitched as the best choice because every new device supposedly strengthens your network, most homes don&amp;rsquo;t actually need a mesh. In reality, it just adds trouble. This isn&amp;rsquo;t just my take, it&amp;rsquo;s &lt;a href=&#34;https://www.home-assistant.io/connect/zbt-2/&#34;&gt;basically how the industry is evolving&lt;/a&gt;. Zigbee coordinators are quickly moving from tiny USB sticks to giant dildoes, centralizing the network around one powerful node.&lt;/p&gt;
&lt;p&gt;Another basic flaw with Zigbee is letting lights act as router nodes instead of end nodes. When a router node goes offline, which happens anytime someone uses a physical light switch to cut its power, it disrupts the whole network. Zigbee networks do self‑heal, but it takes time and makes the whole network slower and less predictable.&lt;/p&gt;
&lt;p&gt;Finding a good alternative isn&amp;rsquo;t easy. Bluetooth has range issues, and &amp;ldquo;naked&amp;rdquo; Wi‑Fi lacks a standardized pairing and device control protocol, so you end up needing a special app for every vendor, which is a hard no.&lt;/p&gt;
&lt;p&gt;While I don&amp;rsquo;t recommend &amp;ldquo;naked&amp;rdquo; Wi‑Fi, a lot of the newer Wi‑Fi lights do support a protocol called Matter. It acts as a common language between Wi‑Fi devices and smart home hubs. Since they all speak it, you don&amp;rsquo;t need any vendor apps, and using physical switches won&amp;rsquo;t break your network.&lt;/p&gt;
&lt;p&gt;That said, Zigbee and Thread mesh networks aren&amp;rsquo;t going anywhere, there&amp;rsquo;s no real alternative for battery-powered devices. But for everything that plugs into the wall, I prefer Matter over Wi‑Fi.&lt;/p&gt;
</description>
        </item>
        
        <item>
            <title>ESP &amp; Rust: A Match Made in Heaven</title>
            <link>https://bubelov.com/blog/2025/esp-rust/</link>
            <pubDate>Sun, 14 Dec 2025 00:00:00 +0000</pubDate>
            <guid>https://bubelov.com/blog/2025/esp-rust/</guid>
            <description>&lt;p&gt;One of my slow-going hobbies is tinkering with microcontrollers.&lt;/p&gt;
&lt;p&gt;It all started when I was a child. During a summer school break in my grandparents&amp;rsquo; village, I found a huge box of electrical components. The box belonged to my uncle, who was apparently into this stuff. Needless to say, I didn&amp;rsquo;t understand a thing and broke a lot of it, but the whole process fascinated me and made me curious about how things work under the hood.&lt;/p&gt;
&lt;p&gt;My second attempt to figure out what those fancy electronic components do came in 2018. I bought an Arduino board with a starter kit and a book. It was a fun read, and I grasped the basics. But this hobby is slow-going, so I put things on pause again.&lt;/p&gt;
&lt;p&gt;The third attempt was in 2020, right after the Raspberry Pi 4 was released. I got interested and ended up ordering six boards in total. It was a great experience, I picked up some essential sysadmin skills and got into self-hosting, which motivated me to keep blogging once my interest in finance cooled off and I didn&amp;rsquo;t know what else to write about.&lt;/p&gt;
&lt;p&gt;The fourth and latest attempt to dive into electronics and microcontrollers started this year, in 2025, and it&amp;rsquo;s still going. ESP is all the rage now, so I ordered a bunch of &lt;a href=&#34;https://wiki.seeedstudio.com/xiao_esp32c6_getting_started/&#34;&gt;Seeed Studio XIAO ESP32C6&lt;/a&gt; boards. They&amp;rsquo;re really nice. I started with Arduino but quickly outgrew it, which begs the question: what&amp;rsquo;s next?&lt;/p&gt;
&lt;p&gt;The first, officially recommended option is ESP-IDF, which is a heavy and invasive pile of crap you have to install, and you have to write in C or something like that. That&amp;rsquo;s a pretty bad option, honestly, but it does offer much more control over the board, so it&amp;rsquo;s clearly better than staying on Arduino.&lt;/p&gt;
&lt;p&gt;The second and unexpected option was discovering &lt;a href=&#34;https://docs.espressif.com/projects/rust/book/&#34;&gt;The Rust on ESP Book&lt;/a&gt;. Rust is a modern language I&amp;rsquo;m familiar with, and it turns out I can use my standard Rust workflow and tools to write ESP firmware. At first, I thought you still needed ESP-IDF installed, but after looking into it more, I realized it&amp;rsquo;s completely standalone.&lt;/p&gt;
&lt;p&gt;This combo is really exciting, and I’ve already started working on two projects:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/bubelov/temp-hum-sensor&#34;&gt;temp-hum-sensor&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/bubelov/pm-sensor&#34;&gt;pm-sensor&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The first one is a simple temperature and humidity sensor using multiplexed I2C, and the second is a PM2.5 sensor using UART. Both I2C and UART are essential building blocks if you want your board to interact with external components, and I wanted to make sure they work smoothly in my Rust setup.&lt;/p&gt;
&lt;p&gt;The next step is adding Zigbee or Matter support so I can integrate my DIY sensors into my Home Assistant smart home. Exciting times ahead!&lt;/p&gt;
</description>
        </item>
        
        <item>
            <title>$4 Zigbee Lightbulb Deep Dive</title>
            <link>https://bubelov.com/blog/2025/ali-lightbulb/</link>
            <pubDate>Wed, 01 Oct 2025 00:00:00 +0000</pubDate>
            <guid>https://bubelov.com/blog/2025/ali-lightbulb/</guid>
            <description>&lt;div class=&#34;table-of-contents&#34;&gt;
    &lt;h2&gt;Table of Contents&lt;/h2&gt;
    &lt;nav id=&#34;TableOfContents&#34;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&#34;#intro&#34;&gt;Intro&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#node-descriptor&#34;&gt;Node Descriptor&lt;/a&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&#34;#logical-type&#34;&gt;Logical Type&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#complex-descriptor-available&#34;&gt;Complex Descriptor Available&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#user-descriptor-available&#34;&gt;User Descriptor Available&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#reserved&#34;&gt;Reserved&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#aps-flags&#34;&gt;APS Flags&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#frequency-band&#34;&gt;Frequency Band&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#medium-access-control-capability-flags&#34;&gt;Medium Access Control Capability Flags&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#manufacturer-code&#34;&gt;Manufacturer Code&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#maximum-buffer-size&#34;&gt;Maximum Buffer Size&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#maximum-incoming-transfer-size&#34;&gt;Maximum Incoming Transfer Size&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#server-mask&#34;&gt;Server Mask&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#maximum-outgoing-transfer-size&#34;&gt;Maximum Outgoing Transfer Size&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#descriptor-capability-field&#34;&gt;Descriptor Capability Field&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#endpoint-1-of-1&#34;&gt;Endpoint 1 of 1&lt;/a&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&#34;#profile-id&#34;&gt;Profile ID&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#device-type&#34;&gt;Device Type&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#input-clusters&#34;&gt;Input Clusters&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#output-clusters&#34;&gt;Output Clusters&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#manufacturer&#34;&gt;Manufacturer&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#model&#34;&gt;Model&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#class&#34;&gt;Class&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#conclusion&#34;&gt;Conclusion&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/nav&gt;
&lt;/div&gt;
&lt;h2 id=&#34;intro&#34;&gt;Intro&lt;/h2&gt;
&lt;p&gt;So, my first Zigbee bulbs were a bunch of Philips Hues. I snagged a pretty good deal on the bundle, they were still pricey even with the discount. I was expecting top-notch quality, but two of them kicked the bucket in under two years, which got me looking for other options.&lt;/p&gt;
&lt;p&gt;The first (and only) alternative I&amp;rsquo;ve tried is this &lt;code&gt;eWeLink&lt;/code&gt; model &lt;code&gt;CK-BL702-AL-01(7009_Z102LG03-1)&lt;/code&gt;. Yeah, the name sounds kinda scary, but they were only four bucks each on AliExpress. I ordered six of them to swap out the old Philips WiZ WiFi downlights in my kitchen.&lt;/p&gt;
&lt;p&gt;The lights showed up surprisingly fast and they were all working perfectly. Pairing them with Home Assistant was a breeze, they just worked with the standard Zigbee 3.0 pairing, no funny business.&lt;/p&gt;
&lt;p&gt;Now, let&amp;rsquo;s take a look at the Zigbee signature for these lights:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;node_descriptor&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;logical_type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;complex_descriptor_available&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;user_descriptor_available&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;reserved&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;aps_flags&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;frequency_band&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;mac_capability_flags&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;142&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;manufacturer_code&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4742&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;maximum_buffer_size&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;127&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;maximum_incoming_transfer_size&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;242&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;server_mask&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11264&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;maximum_outgoing_transfer_size&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;242&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;descriptor_capability_field&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;endpoints&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;profile_id&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;0x0104&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;device_type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;0x010d&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;input_clusters&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;0x0000&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;0x0003&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;0x0004&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;0x0005&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;0x0006&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;0x0008&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;0x0300&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;0x1000&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;0xef00&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;0xfc11&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;0xfc57&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;output_clusters&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;0x0019&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;manufacturer&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;eWeLink&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;model&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;CK-BL702-AL-01(7009_Z102LG03-1)&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;class&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;zigpy.device.Device&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;node-descriptor&#34;&gt;Node Descriptor&lt;/h2&gt;
&lt;h3 id=&#34;logical-type&#34;&gt;Logical Type&lt;/h3&gt;
&lt;p&gt;Logical Type set to &lt;code&gt;1&lt;/code&gt; means these lights are Zigbee Routers, which is great news. Routers help extend your network&amp;rsquo;s range and make it more reliable.&lt;/p&gt;
&lt;p&gt;There is a debate about lightbulbs though, since those can be turned off with a physical switch, potentially disturbing the network. I would prefer downlights being leaf nodes.&lt;/p&gt;
&lt;h3 id=&#34;complex-descriptor-available&#34;&gt;Complex Descriptor Available&lt;/h3&gt;
&lt;p&gt;This device doesn&amp;rsquo;t have a complex descriptor, which is totally normal. Most devices skip this.&lt;/p&gt;
&lt;h3 id=&#34;user-descriptor-available&#34;&gt;User Descriptor Available&lt;/h3&gt;
&lt;p&gt;This is different from the complex descriptor, it&amp;rsquo;s meant for storing a custom label on the device itself. It&amp;rsquo;s empty here, which is standard if you&amp;rsquo;ve never set one. I don&amp;rsquo;t think Home Assistant even lets you edit this field right now anyway.&lt;/p&gt;
&lt;p&gt;HA&amp;rsquo;s own labeling system is way more flexible, since it&amp;rsquo;s not limited to a measly 16 characters like this Zigbee field.&lt;/p&gt;
&lt;h3 id=&#34;reserved&#34;&gt;Reserved&lt;/h3&gt;
&lt;p&gt;This is just an unused field saved for future features, so &lt;code&gt;0&lt;/code&gt; is exactly what we&amp;rsquo;d expect.&lt;/p&gt;
&lt;h3 id=&#34;aps-flags&#34;&gt;APS Flags&lt;/h3&gt;
&lt;p&gt;The Application Support Sub-layer (APS) flags are all zeros, which is pretty common.&lt;/p&gt;
&lt;h3 id=&#34;frequency-band&#34;&gt;Frequency Band&lt;/h3&gt;
&lt;p&gt;Value &lt;code&gt;8&lt;/code&gt; means it&amp;rsquo;s using the &lt;code&gt;2.4 GHz&lt;/code&gt; band, the same crowded-but-universal frequency everything else uses.&lt;/p&gt;
&lt;h3 id=&#34;medium-access-control-capability-flags&#34;&gt;Medium Access Control Capability Flags&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;142&lt;/code&gt; is &lt;code&gt;1000 1110&lt;/code&gt; in binary (LSB &lt;code&gt;0111 0001&lt;/code&gt;):&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Bit&lt;/th&gt;
					&lt;th&gt;Name&lt;/th&gt;
					&lt;th&gt;Value&lt;/th&gt;
					&lt;th&gt;Note&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;0&lt;/td&gt;
					&lt;td&gt;Alternate PAN coordinator&lt;/td&gt;
					&lt;td&gt;0&lt;/td&gt;
					&lt;td&gt;Can&amp;rsquo;t become a coordinator&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;1&lt;/td&gt;
					&lt;td&gt;Device type&lt;/td&gt;
					&lt;td&gt;1&lt;/td&gt;
					&lt;td&gt;Full function, can route&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;2&lt;/td&gt;
					&lt;td&gt;Power source&lt;/td&gt;
					&lt;td&gt;1&lt;/td&gt;
					&lt;td&gt;Mains-powered (not battery)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;3&lt;/td&gt;
					&lt;td&gt;Receiver ON when idle&lt;/td&gt;
					&lt;td&gt;1&lt;/td&gt;
					&lt;td&gt;Always awake and listening&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;4&lt;/td&gt;
					&lt;td&gt;Reserved&lt;/td&gt;
					&lt;td&gt;0&lt;/td&gt;
					&lt;td&gt;Reserved&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;5&lt;/td&gt;
					&lt;td&gt;Reserved&lt;/td&gt;
					&lt;td&gt;0&lt;/td&gt;
					&lt;td&gt;Reserved&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;6&lt;/td&gt;
					&lt;td&gt;Security capability&lt;/td&gt;
					&lt;td&gt;0&lt;/td&gt;
					&lt;td&gt;Doesn&amp;rsquo;t handle security at this level&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;7&lt;/td&gt;
					&lt;td&gt;Allocate address&lt;/td&gt;
					&lt;td&gt;1&lt;/td&gt;
					&lt;td&gt;Can help joining new devices&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;This looks&amp;hellip; interesting. The security capability bit being zero seems suspicious, but this is my first time digging this deep into a Zigbee descriptor. Maybe Zigbee 3.0 handles security at a different level and this flag is just legacy stuff?&lt;/p&gt;
&lt;h3 id=&#34;manufacturer-code&#34;&gt;Manufacturer Code&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;4742&lt;/code&gt; appears to be Signify Netherlands B.V. (the company behind Philips Hue). This is pretty clever, these bulbs are basically pretending to be Hue bulbs to sneak into a Hue Bridge ecosystem.&lt;/p&gt;
&lt;h3 id=&#34;maximum-buffer-size&#34;&gt;Maximum Buffer Size&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;127&lt;/code&gt; is the most common value and means it can handle the largest standard packet size.&lt;/p&gt;
&lt;h3 id=&#34;maximum-incoming-transfer-size&#34;&gt;Maximum Incoming Transfer Size&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;242&lt;/code&gt; is weird here. To actually transfer chunks this big, the device would need to support packet fragmentation&amp;hellip; but that capability isn&amp;rsquo;t advertised in the APS flags. Something&amp;rsquo;s not adding up.&lt;/p&gt;
&lt;h3 id=&#34;server-mask&#34;&gt;Server Mask&lt;/h3&gt;
&lt;p&gt;All the flags set here are &amp;ldquo;reserved&amp;rdquo;, meaning the device is using them for some non-standard, manufacturer-specific services. Not unusual for Zigbee devices trying to add (or pretending to have) extra features.&lt;/p&gt;
&lt;h3 id=&#34;maximum-outgoing-transfer-size&#34;&gt;Maximum Outgoing Transfer Size&lt;/h3&gt;
&lt;p&gt;Same issue as before, &lt;code&gt;242&lt;/code&gt; suggests it should support large outgoing transfers, but the APS flags don&amp;rsquo;t back that up. Another inconsistency.&lt;/p&gt;
&lt;h3 id=&#34;descriptor-capability-field&#34;&gt;Descriptor Capability Field&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;0&lt;/code&gt; is standard, just confirms there are no extra descriptors beyond the basics.&lt;/p&gt;
&lt;h2 id=&#34;endpoint-1-of-1&#34;&gt;Endpoint 1 of 1&lt;/h2&gt;
&lt;h3 id=&#34;profile-id&#34;&gt;Profile ID&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;0x0104&lt;/code&gt; is Zigbee Light Link (ZLL), the standard profile for smart lights.&lt;/p&gt;
&lt;h3 id=&#34;device-type&#34;&gt;Device Type&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;0x010D&lt;/code&gt; means &amp;ldquo;Extended Color Light.&amp;rdquo; This is exactly what we&amp;rsquo;d expect for a tunable white + RGB bulb, so Home Assistant should recognize it without any issues.&lt;/p&gt;
&lt;h3 id=&#34;input-clusters&#34;&gt;Input Clusters&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;ID&lt;/th&gt;
					&lt;th&gt;Note&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;0x0000&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Basic: Mandatory info like version and manufacturer.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;0x0003&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Identify: Makes the light blink, useful for finding it in a group.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;0x0004&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Groups: Lets you control multiple lights together.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;0x0005&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Scenes: Can save and recall preset colors/brightness.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;0x0006&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;On/Off: The basics.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;0x0008&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Level Control: Dimming.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;0x0300&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Color Control: Handles all the colors and white temperatures.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;0x1000&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Touchlink Commissioning: Lets you pair by holding it close to a bridge.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;0xef00&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Manufacturer Specific: Who knows? Custom feature.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;0xfc11&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Manufacturer Specific: Another custom thing.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;0xfc57&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Manufacturer Specific: Could be for custom firmware updates.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;output-clusters&#34;&gt;Output Clusters&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;ID&lt;/th&gt;
					&lt;th&gt;Note&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;0x0019&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;OTA Updates: Can receive firmware over-the-air.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;manufacturer&#34;&gt;Manufacturer&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s showing as &lt;code&gt;eWeLink&lt;/code&gt;, but it&amp;rsquo;s super easy to spoof this field when compiling firmware, so this doesn&amp;rsquo;t necessarily mean it&amp;rsquo;s officially from them.&lt;/p&gt;
&lt;h2 id=&#34;model&#34;&gt;Model&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;CK-BL702-AL-01(7009_Z102LG03-1)&lt;/code&gt;, that&amp;rsquo;s a model number alright.&lt;/p&gt;
&lt;h2 id=&#34;class&#34;&gt;Class&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;zigpy.device.Device&lt;/code&gt; means Home Assistant is using a generic driver with no special quirks. It should just work without any fancy custom handling.&lt;/p&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Take this with a grain of salt, since it&amp;rsquo;s the first Zigbee device I&amp;rsquo;ve really dug into. But I&amp;rsquo;ll be reviewing a lot more of these soon, I&amp;rsquo;m going all-in on Zigbee and want to really understand how it works under the hood.&lt;/p&gt;
</description>
        </item>
        
        <item>
            <title>Road to Zigbee</title>
            <link>https://bubelov.com/blog/2025/zigbee/</link>
            <pubDate>Sun, 28 Sep 2025 00:00:00 +0000</pubDate>
            <guid>https://bubelov.com/blog/2025/zigbee/</guid>
            <description>&lt;p&gt;I&amp;rsquo;ve been using Home Assistant for a couple of years now. I got started, like most people, with some basic Philips lights. They have this cheap line called WiZ (like $15 a light), but you need a special app to set them up. I also tried their fancy Hue line (~$60 per light!) because I wanted to get into motion sensors and have lights that turn on automatically. The big difference is that WiZ uses WiFi, and Hue uses Zigbee.&lt;/p&gt;
&lt;p&gt;At first, I was kinda pissed that WiZ didn&amp;rsquo;t have a motion sensor. But it turns out there&amp;rsquo;s a legit reason, and it&amp;rsquo;s not just the company being greedy. Motion sensors have to be super power-efficient, spending most of their time in a deep sleep to run for a year or more on a battery. WiFi is a total battery hog, so slapping it into a sensor would drain the thing in days. That&amp;rsquo;s the real reason you don&amp;rsquo;t see WiZ sensors.&lt;/p&gt;
&lt;p&gt;Home Assistant totally saved my wallet by letting me mix and match, I could use a Hue Zigbee sensor to trigger my cheap WiZ WiFi lights. But once I got a Zigbee router, I started looking into the protocol and realized it&amp;rsquo;s way better than WiFi for smart home stuff, like in every way. The only thing holding me back from buying more Hue devices was their crazy price.&lt;/p&gt;
&lt;p&gt;Luckily, I found out AliExpress is flooded with no-name Zigbee devices, and I&amp;rsquo;ve been buying them like crazy. The best part is that every new device makes my whole mesh network stronger and more reliable. You really can&amp;rsquo;t beat the prices from China at the moment, it&amp;rsquo;s a total game changer and there are no sane reasons to prefer WiFi.&lt;/p&gt;
</description>
        </item>
        
        <item>
            <title>AirGradient Open Air Review</title>
            <link>https://bubelov.com/blog/2023/airgradient-open-air/</link>
            <pubDate>Sat, 02 Sep 2023 00:00:00 +0000</pubDate>
            <guid>https://bubelov.com/blog/2023/airgradient-open-air/</guid>
            <description>&lt;div class=&#34;table-of-contents&#34;&gt;
    &lt;h2&gt;Table of Contents&lt;/h2&gt;
    &lt;nav id=&#34;TableOfContents&#34;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&#34;#disclaimer&#34;&gt;Disclaimer&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#indoor-air-is-a-priority&#34;&gt;Indoor Air is a Priority&lt;/a&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&#34;#how-to-reduce-co2&#34;&gt;How to Reduce CO2&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#how-to-reduce-pm-25&#34;&gt;How to Reduce PM 2.5&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#outdoor-air-monitoring&#34;&gt;Outdoor Air Monitoring&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#airgradient-open-air&#34;&gt;AirGradient Open Air&lt;/a&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&#34;#unboxing&#34;&gt;Unboxing&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#diy-vs-pre-assembled&#34;&gt;DIY vs Pre-Assembled&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#assembling-the-diy-model&#34;&gt;Assembling the DIY Model&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#mounting&#34;&gt;Mounting&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#software-setup&#34;&gt;Software Setup&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#going-cloudless&#34;&gt;Going Cloudless&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#what-does-open-source-mean-exactly&#34;&gt;What Does Open Source Mean, Exactly?&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#accuracy&#34;&gt;Accuracy&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#components-case&#34;&gt;Components: Case&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#components-board&#34;&gt;Components: Board&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#components-sensors&#34;&gt;Components: Sensors&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#components-external-hardware-watchdog&#34;&gt;Components: External Hardware Watchdog&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#notes-on-power-management&#34;&gt;Notes on Power Management&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#conclusion&#34;&gt;Conclusion&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/nav&gt;
&lt;/div&gt;
&lt;h2 id=&#34;disclaimer&#34;&gt;Disclaimer&lt;/h2&gt;
&lt;p&gt;After &lt;a href=&#34;https://bubelov.com/blog/2023/airgradient-pro-kit-review/&#34;&gt;reviewing&lt;/a&gt; AirGradient Pro Kit, I was contacted by AirGradient, and they offered me two Open Air units for review. I was planning to buy and review an Open Air unit anyway, so I don&amp;rsquo;t think it biased my review, but I think it should be noted nevertheless.&lt;/p&gt;
&lt;h2 id=&#34;indoor-air-is-a-priority&#34;&gt;Indoor Air is a Priority&lt;/h2&gt;
&lt;p&gt;People spend most of their time indoors, and exposure time matters, which means that your bedroom is a perfect place to start your air quality improvement journey. I placed my first AirGradient Pro unit in my bedroom, and it helped me identify the following issues:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;CO2 concentration often reached 2,300 ppm by the early morning, which is considered unhealthy. Let me cite &lt;a href=&#34;https://www.canada.ca/en/health-canada/services/publications/healthy-living/residential-indoor-air-quality-guidelines-carbon-dioxide.html&#34;&gt;Canadian regulations&lt;/a&gt; as an example:&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;The recommended long-term exposure limit for CO2 is 1,000 ppm (based on a 24-hour average). The guidelines are based on effects observed in epidemiological studies in schools or offices and controlled exposure studies.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;PM 2.5 often exceeds 5 μg/m3, which is a &lt;a href=&#34;https://www.who.int/publications/i/item/9789240034228&#34;&gt;WHO safe air threshold&lt;/a&gt;. Those spikes often coincide with ventilation, which hints that the outdoor air isn&amp;rsquo;t always as clean as I thought.&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;The data obtained for cause-specific mortality also support a
long-term PM 2.5 AQG (Air Quality Guidelines) level of no more than 5 μg/m3.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;how-to-reduce-co2&#34;&gt;How to Reduce CO2&lt;/h3&gt;
&lt;p&gt;There are a few things which increase indoor CO2 concentration:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Human and animal breathing&lt;/li&gt;
&lt;li&gt;Gas-powered kitchen appliances&lt;/li&gt;
&lt;li&gt;Gas-powered heating&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I don&amp;rsquo;t have any gas appliances in my house, but my bedroom needs to accommodate two persons and a single dog every night. Sleeping alone would certainly help, but it would be nice to find more realistic and universal solution. That solution is ventilation.&lt;/p&gt;
&lt;p&gt;Before the Industrial Revolution, the outdoor air contained about 280 ppm of carbon dioxide. Our material well-being has reached unbelievable heights since then, but most of those improvements are based on cheap energy extraction, which happens to produce a lot of carbon dioxide. As a result, the current atmospheric CO2 level is already approaching 420 ppm.&lt;/p&gt;
&lt;p&gt;The good news is, 420 ppm is still safe for breathing, so you can simply let some outdoor air in if you want to reduce your indoor CO2 concentration. Targeting 420 ppm is rarely a good idea, since ventilation involves heat transfer, which adds more work for your AC or a heating system. I&amp;rsquo;d say anything below 750-1,000 ppm is probably fine.&lt;/p&gt;
&lt;h3 id=&#34;how-to-reduce-pm-25&#34;&gt;How to Reduce PM 2.5&lt;/h3&gt;
&lt;p&gt;As far as I understand, high PM 2.5 concentration is much more dangerous than high CO2 level, so I would probably choose being exposed to 2,000 ppm of CO2 over 50 ug/m3 of PM 2.5. Unfortunately, Thais often burn their garbage on the spot instead of utilizing it properly, and I&amp;rsquo;m not really in a position to change this culture. I often smell burning plastics and other nasty stuff when I&amp;rsquo;m walking my dog or tending my garden. Obviously, I don&amp;rsquo;t want to let any air into my house during those periods. This air is toxic, and it smells bad, too.&lt;/p&gt;
&lt;p&gt;Given the facts above, it&amp;rsquo;s pretty clear that ventilation is necessary, but you should only ventilate your house when the outdoor air is safe and clean. I guess it&amp;rsquo;s OK to let some slightly dirty air in, if you don&amp;rsquo;t have a choice and if you have an air filter, but filters aren&amp;rsquo;t cheap, and they can&amp;rsquo;t fully eradicate bad odors. The best filters are also pretty noisy, since pushing the air through a good filter is hard, so it&amp;rsquo;s better to avoid this step or at least to minimize the working time of your air treatment system.&lt;/p&gt;
&lt;h3 id=&#34;outdoor-air-monitoring&#34;&gt;Outdoor Air Monitoring&lt;/h3&gt;
&lt;p&gt;As we figured out earlier, ventilation can only improve your indoor air quality if the outdoor air is actually cleaner, but how do you know if it&amp;rsquo;s safe to ventilate? That&amp;rsquo;s the main issue I&amp;rsquo;m trying to solve and getting an outdoor air monitor seems like a good solution. CO2 and PM 2.5 aren&amp;rsquo;t the only things I&amp;rsquo;m interested in, I&amp;rsquo;d like to keep track of as much other metrics as possible. I&amp;rsquo;m using self-hosted Home Assistant as a backend, and it makes it easy to keep and review all the historical data.&lt;/p&gt;
&lt;h2 id=&#34;airgradient-open-air&#34;&gt;AirGradient Open Air&lt;/h2&gt;
&lt;p&gt;As I mentioned earlier, I&amp;rsquo;ve got two units, one of them being &lt;a href=&#34;https://www.airgradient.com/open-air/&#34;&gt;pre-assembled&lt;/a&gt; and another one is &lt;a href=&#34;https://www.airgradient.com/open-air/&#34;&gt;more of a DIY type&lt;/a&gt;. The DIY kit doesn&amp;rsquo;t require any soldering, which is good, since I don&amp;rsquo;t really know how to solder. Buying a &lt;a href=&#34;https://www.pine64.org/pinecil/&#34;&gt;Pinecil&lt;/a&gt; is on my TODO list, but I&amp;rsquo;m not sure when I&amp;rsquo;ll have time to pick up this valuable skill.&lt;/p&gt;
&lt;h3 id=&#34;unboxing&#34;&gt;Unboxing&lt;/h3&gt;
&lt;p&gt;The box itself is unremarkable, it contains the picture of a product, a brief summary of company&amp;rsquo;s goals and priorities and some contact details which can come handy if you need any assistance of if you have questions about the product.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
    
        
        
        
            
            
            
            &lt;a href=&#34;https://bubelov.com/blog/2023/airgradient-open-air/box-front_hu_5bf4c8de918e4ca9.webp&#34;&gt;
                &lt;img src=&#34;https://bubelov.com/blog/2023/airgradient-open-air/box-front_hu_c846b5efa2c9241.webp&#34; alt=&#34;&#34; /&gt;
            &lt;/a&gt;
        
    
    
    &lt;figcaption&gt;Front side of the box&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
    
        
        
        
            
            
            
            &lt;a href=&#34;https://bubelov.com/blog/2023/airgradient-open-air/box-back_hu_32f33492f2c85794.webp&#34;&gt;
                &lt;img src=&#34;https://bubelov.com/blog/2023/airgradient-open-air/box-back_hu_d5a2c4982bbe5b06.webp&#34; alt=&#34;&#34; /&gt;
            &lt;/a&gt;
        
    
    
    &lt;figcaption&gt;Back side of the box&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;For a pre-assembled version, the box itself only contains an Open Air unit and a 4 meter-long USB cable:&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
    
        
        
        
            
            
            
            &lt;a href=&#34;https://bubelov.com/blog/2023/airgradient-open-air/assembled_hu_22f687f9b63aa16e.webp&#34;&gt;
                &lt;img src=&#34;https://bubelov.com/blog/2023/airgradient-open-air/assembled_hu_2b2d4710c794c2ad.webp&#34; alt=&#34;&#34; /&gt;
            &lt;/a&gt;
        
    
    
    &lt;figcaption&gt;Assembled AirGradient Open Air&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;h3 id=&#34;diy-vs-pre-assembled&#34;&gt;DIY vs Pre-Assembled&lt;/h3&gt;
&lt;p&gt;The DIY kit looks almost identical to a pre-assembled unit, and it&amp;rsquo;s made from the same components. I&amp;rsquo;m pretty sure that Plantower has a sensible QA process, and it&amp;rsquo;s extremely unlikely to get a sensor which does not work at all, but AirGradient also has their own air chamber which they&amp;rsquo;re using to test the pre-assembled units, just to add an extra level of confidence.&lt;/p&gt;
&lt;p&gt;Here are the main distinctive features of the pre-assembled model:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Every pre-assembled uint is tested by AirGradient, and you can always fetch your test report from your AirGradient dashboard.&lt;/li&gt;
&lt;li&gt;There is a 1-year warranty period.&lt;/li&gt;
&lt;li&gt;The serial number is etched on the back side of the case, which makes it slightly more convenient to perform an initial setup.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;By the way, here is a test report which I got for my pre-assembled model:&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
    
        
        
        
            
            
            
            &lt;a href=&#34;https://bubelov.com/blog/2023/airgradient-open-air/test-report_hu_4bde4efafd538520.webp&#34;&gt;
                &lt;img src=&#34;https://bubelov.com/blog/2023/airgradient-open-air/test-report_hu_48b1faa8ab39607c.webp&#34; alt=&#34;&#34; /&gt;
            &lt;/a&gt;
        
    
    
    &lt;figcaption&gt;Test report&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;I contacted AirGradient for more details, and they claimed that about 3% of Plantower sensors fail their tests, but it&amp;rsquo;s only because those tests require 5 μg/m3 precision while the manufacturer only promises 10 μg/m3 precision. It looks like Plantower is very conservative in their claims regarding their sensor accuracy and most of their sensors are much more precise than stated in the specs.&lt;/p&gt;
&lt;h3 id=&#34;assembling-the-diy-model&#34;&gt;Assembling the DIY Model&lt;/h3&gt;
&lt;p&gt;There are a few misc tools to connect all the pieces together:&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
    
        
        
        
            
            
            
            &lt;a href=&#34;https://bubelov.com/blog/2023/airgradient-open-air/tools_hu_add6440160c83011.webp&#34;&gt;
                &lt;img src=&#34;https://bubelov.com/blog/2023/airgradient-open-air/tools_hu_bae29c60493207d1.webp&#34; alt=&#34;&#34; /&gt;
            &lt;/a&gt;
        
    
    
    &lt;figcaption&gt;Tools&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;The heart of this device is two identical Plantower sensors:&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
    
        
        
        
            
            
            
            &lt;a href=&#34;https://bubelov.com/blog/2023/airgradient-open-air/sensors_hu_1760d4d55f6d24bc.webp&#34;&gt;
                &lt;img src=&#34;https://bubelov.com/blog/2023/airgradient-open-air/sensors_hu_d79da0c1f21a5d44.webp&#34; alt=&#34;&#34; /&gt;
            &lt;/a&gt;
        
    
    
    &lt;figcaption&gt;Sensors&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s pretty easy to connect those sensors to the main board:&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
    
        
        
        
            
            
            
            &lt;a href=&#34;https://bubelov.com/blog/2023/airgradient-open-air/sensors-wired_hu_216b06e6e1a8a724.webp&#34;&gt;
                &lt;img src=&#34;https://bubelov.com/blog/2023/airgradient-open-air/sensors-wired_hu_59f7044e8109611a.webp&#34; alt=&#34;&#34; /&gt;
            &lt;/a&gt;
        
    
    
    &lt;figcaption&gt;Sensors with wires&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
    
        
        
        
            
            
            
            &lt;a href=&#34;https://bubelov.com/blog/2023/airgradient-open-air/sensors-connected_hu_740b81843c1e0983.webp&#34;&gt;
                &lt;img src=&#34;https://bubelov.com/blog/2023/airgradient-open-air/sensors-connected_hu_4f54c666015cdd3a.webp&#34; alt=&#34;&#34; /&gt;
            &lt;/a&gt;
        
    
    
    &lt;figcaption&gt;Sensors connected to the board&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
    
        
        
        
            
            
            
            &lt;a href=&#34;https://bubelov.com/blog/2023/airgradient-open-air/board-connected_hu_80ea2f800addb79.webp&#34;&gt;
                &lt;img src=&#34;https://bubelov.com/blog/2023/airgradient-open-air/board-connected_hu_6508194c2d0786e8.webp&#34; alt=&#34;&#34; /&gt;
            &lt;/a&gt;
        
    
    
    &lt;figcaption&gt;Sensors connected to the board&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;The case consists of two parts, and they fit together nicely:&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
    
        
        
        
            
            
            
            &lt;a href=&#34;https://bubelov.com/blog/2023/airgradient-open-air/case-parts_hu_150a2ff1cd74c6c.webp&#34;&gt;
                &lt;img src=&#34;https://bubelov.com/blog/2023/airgradient-open-air/case-parts_hu_130bfc262c5e4cbf.webp&#34; alt=&#34;&#34; /&gt;
            &lt;/a&gt;
        
    
    
    &lt;figcaption&gt;Case parts&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
    
        
        
        
            
            
            
            &lt;a href=&#34;https://bubelov.com/blog/2023/airgradient-open-air/case-connected_hu_f544af3ceb16842e.webp&#34;&gt;
                &lt;img src=&#34;https://bubelov.com/blog/2023/airgradient-open-air/case-connected_hu_a1d1c628ab160a1d.webp&#34; alt=&#34;&#34; /&gt;
            &lt;/a&gt;
        
    
    
    &lt;figcaption&gt;Grill with all the components connected&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
    
        
        
        
            
            
            
            &lt;a href=&#34;https://bubelov.com/blog/2023/airgradient-open-air/assembled_hu_22f687f9b63aa16e.webp&#34;&gt;
                &lt;img src=&#34;https://bubelov.com/blog/2023/airgradient-open-air/assembled_hu_2b2d4710c794c2ad.webp&#34; alt=&#34;&#34; /&gt;
            &lt;/a&gt;
        
    
    
    &lt;figcaption&gt;Assembled AirGradient Open Air&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;Assembling AirGradient Open Air is pretty easy, but you need to be careful when connecting the sensor wires, because they are quite thin, and it&amp;rsquo;s easy to damage them by applying more pressure that they can handle. I tried not to touch them and press on the plastic area around them in order to connect those wire plugs to their corresponding sockets.&lt;/p&gt;
&lt;h3 id=&#34;mounting&#34;&gt;Mounting&lt;/h3&gt;
&lt;p&gt;Mounting is the most complicated part of AirGradient Open Air setup, and there are two recommended methods:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Mounting on a pole&lt;/li&gt;
&lt;li&gt;Mounting on a wall&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I guess there aren&amp;rsquo;t many people who have a spare pole which also happens to be equipped with a power socket, so wall mount seems to be the only way for most of us. Basically, you need to find a place nearby an external power socket, and you might want to aim high, since hanging your sensors too close to the ground can expose them to the amounts of dust which are only present on the ground level, and it might not represent the air you inhale or feed to your ventilation system.&lt;/p&gt;
&lt;p&gt;Air quality can depend on the height at which you sample your outdoor air, and I think this problem can be approached from two angles:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Put your sensors where your nose is, just to be certain that the data best represents what you actually inhale. I can&amp;rsquo;t back this claim with any science, but is seems like the safe bet.&lt;/li&gt;
&lt;li&gt;If you have an automatic ventilation system, it might make sense to hang your sensors somewhere close to your inlet vent holes, just to make sure that the readings will represent the air which goes into your home.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I have a drill, but I only used it once, when I needed to hang a mailbox. I have a cheap wired model and almost no experience, so drilling two holes 3.5 meters high wasn&amp;rsquo;t exactly an easy job for me. To complicate matters, I knew that there is a hidden powerline going through the same spot, and I certainly didn&amp;rsquo;t want to damage it.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
    
        
        
        
            
            
            
            &lt;a href=&#34;https://bubelov.com/blog/2023/airgradient-open-air/mount-tools_hu_36b8e25c8c3c589e.webp&#34;&gt;
                &lt;img src=&#34;https://bubelov.com/blog/2023/airgradient-open-air/mount-tools_hu_2696c8f13d9b266b.webp&#34; alt=&#34;&#34; /&gt;
            &lt;/a&gt;
        
    
    
    &lt;figcaption&gt;Mounting tools&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
    
        
        
        
            
            
            
            &lt;a href=&#34;https://bubelov.com/blog/2023/airgradient-open-air/width_hu_b76b97e35e8ad957.webp&#34;&gt;
                &lt;img src=&#34;https://bubelov.com/blog/2023/airgradient-open-air/width_hu_1d012202e22deacb.webp&#34; alt=&#34;&#34; /&gt;
            &lt;/a&gt;
        
    
    
    &lt;figcaption&gt;Width&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
    
        
        
        
            
            
            
            &lt;a href=&#34;https://bubelov.com/blog/2023/airgradient-open-air/height_hu_f948ebceb79dba75.webp&#34;&gt;
                &lt;img src=&#34;https://bubelov.com/blog/2023/airgradient-open-air/height_hu_b29e549f8e30d9f6.webp&#34; alt=&#34;&#34; /&gt;
            &lt;/a&gt;
        
    
    
    &lt;figcaption&gt;Height&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;I choose a 10 cm padding from the roof and the wall on the right. I was pretty anxious about the powerline, so I turned off the corresponding switches and checked the wires with a non-invasive voltage detector. Also, I paused the drilling process a few times just to make sure there is no plastic fragments in the holes or among the dust. Needless to say, you should also make sure that the ladder is stable, and you should wear some protective equipment such as a dust mask and a pair of glasses.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
    
        
        
        
            
            
            
            &lt;a href=&#34;https://bubelov.com/blog/2023/airgradient-open-air/mounting-point_hu_5e1a48899785aaf1.webp&#34;&gt;
                &lt;img src=&#34;https://bubelov.com/blog/2023/airgradient-open-air/mounting-point_hu_80e9ac926074460c.webp&#34; alt=&#34;&#34; /&gt;
            &lt;/a&gt;
        
    
    
    &lt;figcaption&gt;Mounting point&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;I settled on this point because I have an outdoor power socket nearby, but I surely don&amp;rsquo;t like the aesthetics of an exposed USB cable and I will probably drill the roof and hide the cable there. The other option was to install it in a front yard, but there is a risk that a proximity to my car and the road can cause short term spikes which aren&amp;rsquo;t really actionable and I don&amp;rsquo;t see any good reasons to track them.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
    
        
        
        
            
            
            
            &lt;a href=&#34;https://bubelov.com/blog/2023/airgradient-open-air/mounted_hu_81999c8d32613754.webp&#34;&gt;
                &lt;img src=&#34;https://bubelov.com/blog/2023/airgradient-open-air/mounted_hu_7b49da81e39543b7.webp&#34; alt=&#34;&#34; /&gt;
            &lt;/a&gt;
        
    
    
    &lt;figcaption&gt;Mounted unit&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;h3 id=&#34;software-setup&#34;&gt;Software Setup&lt;/h3&gt;
&lt;p&gt;Setting up AirGradient products can be a bit tricky, here is a high level overview:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;You need to prepare your smartphone and make sure that your router is prepared to handle 2.4 GHz connections. Most routers default to 5 GHz because it&amp;rsquo;s much faster, but that extra speed comes at a cost of slightly reduced range and stability. I believe that&amp;rsquo;s the reason why most smart home devices prefer 2.4 GHz, but cost and availability might also be a factor there. Most Espressif microcontrollers aren&amp;rsquo;t 5 GHz capable, although there are a few new models which support both 2.4 GHz and 5 GHz frequencies.&lt;/li&gt;
&lt;li&gt;After powering on your device, you&amp;rsquo;ll have 90 seconds to find and join its Wi-Fi network. After joining that network, you&amp;rsquo;ll be redirected to a device Wi-Fi setup page, where you should type your 2.4 GHz home Wi-Fi network name and password. After that, your new AirGradient device will be able to connect to a cloud dashboard (which is completely optional but more on that later).&lt;/li&gt;
&lt;li&gt;AirGradient Open Air doesn&amp;rsquo;t have a display, so it&amp;rsquo;s not usable without a cloud dashboard or some other backend. You can use your own backend to store the sensor readings, but the easiest way to get started is to create an AirGradient cloud account and to add your device to the web dashboard. You&amp;rsquo;ll need to type your device serial number, which is etched on the back side of the unit.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;going-cloudless&#34;&gt;Going Cloudless&lt;/h3&gt;
&lt;p&gt;AirGradient hardware and software are fully open source and there is no vendor lock-in. The device is based on &lt;a href=&#34;https://www.espressif.com/sites/default/files/documentation/esp32-c3-mini-1_datasheet_en.pdf&#34;&gt;ESP32-C3-MINI-1&lt;/a&gt;, which can be fully reprogrammed with Arduino or ESP Home. You can also just use GCC to build a binary and flash it with the open source &lt;a href=&#34;https://github.com/espressif/esptool&#34;&gt;esptool&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;what-does-open-source-mean-exactly&#34;&gt;What Does Open Source Mean, Exactly?&lt;/h3&gt;
&lt;p&gt;When it comes to air quality sensors, AirGradient is the only open source software and hardware company I&amp;rsquo;m aware of, but I noticed that many people don&amp;rsquo;t really understand what it means in an IoT context.&lt;/p&gt;
&lt;p&gt;Smart home appliances are actually pretty complex, and they have many components sourced from different vendors. When an IoT company calls its software open source, they usually mean the code &lt;strong&gt;they&lt;/strong&gt; upload to the microcontroller. There are many microcontroller subsystems and external parts which may run their own software and that software is unlikely to be open source.&lt;/p&gt;
&lt;p&gt;In case of AirGradient, their firmware is &lt;a href=&#34;https://github.com/airgradienthq/arduino&#34;&gt;available on GitHub&lt;/a&gt;, and it contains pretty much everything which &lt;strong&gt;they&lt;/strong&gt; instruct their hardware to do. It doesn&amp;rsquo;t cover a Wi-Fi stack or a USB stack, for example, because it&amp;rsquo;s done by the microcontroller vendor (Espressif) and there is no way to see how it works, as far as I&amp;rsquo;m aware. I think Espressif has an open source SDK, and its Arduino core is open source, too, but there are always some lower-level subsystems which tend to be run by unverifiable code blobs.&lt;/p&gt;
&lt;p&gt;Same goes to many external modules, such as Plantower PMS5003T, which is used in Open Air products. Those sensor modules have their own firmware, and it can be very hard to figure out that it actually does. For instance, you can&amp;rsquo;t really assume how a light scatter measurement becomes a μg/m3 value which goes to the microcontroller. Some modules may hold a bunch of historical measurements and only report the average values. Fully open source software is currently a pipe dream, but not adding any more closed code on top of that mess is a good start.&lt;/p&gt;
&lt;p&gt;Open source hardware is also a tricky term. The hardware is not really open source all the way down to the atomic level, because it&amp;rsquo;s impossible to find fully transparent components with every physical piece being documented and shared with the public. Open source hardware just means that the way those components are wired is well known and easily reproducible. If you&amp;rsquo;re a software engineer like me, your can imagine it as a dependency graph, where some of your libs may depend on other lower-level libs, which themselves depend on some weird pre-compiled blobs, but everything seems to work as promised so no one takes an issue with that.&lt;/p&gt;
&lt;p&gt;Does it mean that open source is just a deceptive marketing trick? No, and there are two main reasons:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open source firmware makes it easier to debug your devices or point them to your own server, breaking the vendor lock. It also guarantees that AirGradient is not spying on you.&lt;/li&gt;
&lt;li&gt;Open source hardware design makes it easier to replicate the device and that&amp;rsquo;s the only protection you have from being ripped off in case the company decides to raise their prices to an unreasonable level. The ease of replication is the best guarantee of sensible pricing.&lt;/li&gt;
&lt;li&gt;Open source hardware tends to be easier to repair.&lt;/li&gt;
&lt;li&gt;It&amp;rsquo;s usually much easier to modify and extend open source hardware. Coupled with open source and equally modifiable firmware, it gives you the ultimate flexibility and a sense of being in control of your stuff.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Another important thing which must be noted is licensing. It&amp;rsquo;s not impossible to reverse engineer many closed IoT devices, but it&amp;rsquo;s still a waste of your time, and the manufacturers can always sue you if you try to copy their products. Open source licences tend to be very liberal about what you can do with the source code and hardware schematics alike.&lt;/p&gt;
&lt;h3 id=&#34;accuracy&#34;&gt;Accuracy&lt;/h3&gt;
&lt;p&gt;Obviously, this device is as accurate as its sensors, and the only sensors on board are two identical &lt;a href=&#34;https://www.plantower.com/en/products_33/74.html&#34;&gt;Plantower PMS5003T&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Particle Maximum Consistency Error (PM2.5 standard data):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;±10%@100~500µg/m3&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;±10µg/m3@0～100µg&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Which raises two questions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Is it true?&lt;/li&gt;
&lt;li&gt;If it&amp;rsquo;s true, is it good enough?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The first question can be answered by looking for tests and tear-downs online, here is a few interesting links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.nature.com/articles/s41598-019-43716-3&#34;&gt;Nature: Long-term field comparison of multiple low-cost particulate matter sensors in an outdoor urban environment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://goughlui.com/2021/03/14/review-teardown-plantower-pms5003-laser-particulate-monitor-sensor/&#34;&gt;Review, Teardown: Plantower PMS5003 Laser Particulate Monitor Sensor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://aqicn.org/sensor/pms5003-7003/hk/&#34;&gt;The Plantower PMS5003 and PMS7003 Air Quality Sensor experiment&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In short, it seems like Plantower, as well as many other low cost PM 2.5 sensors, is pretty accurate. Although low cost sensors might disagree within a single digit range, but they can quickly capture any spikes in PM concentration, so there is no lag, and you can act on that data right away.&lt;/p&gt;
&lt;p&gt;In my view, the stated accuracy is good enough, but you should understand that the manufacturer is basically saying that the sensor can report somewhat healthy 5 µg/m3 even if the real PM concentration is pretty unhealthy (up to 15 µg/m3). That&amp;rsquo;s an extreme example, but it&amp;rsquo;s the worst case you should know about. Personally, it&amp;rsquo;s not a big deal for me, because I&amp;rsquo;m interested in detecting much more dangerous PM concentrations (20-50 µg/m3 and more), and this sensor can do that if a fast and reliable fashion.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
    
        
        
        
            
            
            
            &lt;a href=&#34;https://bubelov.com/blog/2023/airgradient-open-air/dashboard_hu_ea63b024c43ed7b2.webp&#34;&gt;
                &lt;img src=&#34;https://bubelov.com/blog/2023/airgradient-open-air/dashboard_hu_73111c6bf6c76074.webp&#34; alt=&#34;&#34; /&gt;
            &lt;/a&gt;
        
    
    
    &lt;figcaption&gt;Dashboard&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;I also asked AirGradient if they have any data on the accuracy of the components used in Open Air production, and they told me that they run a &lt;a href=&#34;https://www.airgradient.com/research/&#34;&gt;global co-location test&lt;/a&gt; with the aim of completely understanding the performance of Open Air units. They maintain a list of their current research partners, and this list includes many of the world&amp;rsquo;s top educational institutions.&lt;/p&gt;
&lt;h3 id=&#34;components-case&#34;&gt;Components: Case&lt;/h3&gt;
&lt;p&gt;The case is really nice, and I like it very much. Everything fits well, and the plastic is nice and smooth. This kind of plastic is UV resistant, so it shouldn&amp;rsquo;t get brittle and change it&amp;rsquo;s color from white to yellow in a few months.&lt;/p&gt;
&lt;p&gt;You can also 3D print your own case if your damage the original one or if you just don&amp;rsquo;t like it for whatever reason. Unfortunately, I don&amp;rsquo;t have a 3D printer, so I can&amp;rsquo;t really experiment with my own enclosure designs. A friend of mine got a $500 3D printer, and I&amp;rsquo;m impressed with what it&amp;rsquo;s capable of, so maybe I&amp;rsquo;ll try it too.&lt;/p&gt;
&lt;h3 id=&#34;components-board&#34;&gt;Components: Board&lt;/h3&gt;
&lt;p&gt;Open Air board is a radical departure from a design approach used in an indoor Pro model. The Pro model basically has two boards, and only one of them is made by AirGradient:&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
    
        
        
        
            
            
            
            &lt;a href=&#34;https://bubelov.com/blog/2023/airgradient-open-air/pro_hu_ecc0e592c2cadeb4.webp&#34;&gt;
                &lt;img src=&#34;https://bubelov.com/blog/2023/airgradient-open-air/pro_hu_86ebd5521dd5dae.webp&#34; alt=&#34;&#34; /&gt;
            &lt;/a&gt;
        
    
    
    
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;As you can see, the big AirGradient Pro board has a slot for a &lt;a href=&#34;https://www.wemos.cc/en/latest/d1/d1_mini.html&#34;&gt;LOLIN D1 mini&lt;/a&gt; Espressif WiFi board. AirGradient Open Air uses a much smaller board with an SMT-mounted &lt;a href=&#34;https://www.espressif.com/sites/default/files/documentation/esp32-c3-mini-1_datasheet_en.pdf&#34;&gt;ESP32-C3-MINI-1&lt;/a&gt; microcontroller:&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
    
        
        
        
            
            
            
            &lt;a href=&#34;https://bubelov.com/blog/2023/airgradient-open-air/board_hu_4385ee79cc278205.webp&#34;&gt;
                &lt;img src=&#34;https://bubelov.com/blog/2023/airgradient-open-air/board_hu_9f1a531cfeae0fb4.webp&#34; alt=&#34;&#34; /&gt;
            &lt;/a&gt;
        
    
    
    
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;This board looks much more polished, but SMT-mounted components also have some downsides, such as reduced modularity. I really like the fact that I can take off that D1 mini and use is as a general purpose dev board in any other project. I also have many spare D1 mini boards, so I can easily replace the board if it fails.&lt;/p&gt;
&lt;p&gt;Although Open Air boards are less common, they are &lt;a href=&#34;https://www.airgradient.com/shop/&#34;&gt;available&lt;/a&gt; in the AirGradient online shop, and they can also be used as general purpose dev boards. I guess I&amp;rsquo;m okay with that, since AirGradient boards are open source, easy to use and affordable. In fact, they offer slightly better initial setup experience for Arduino users, because they work out of the box, unlike some common dev boards such as C3 mini, which &lt;a href=&#34;https://www.wemos.cc/en/latest/tutorials/c3/get_started_with_arduino_c3.html&#34;&gt;requires&lt;/a&gt; some weird button press combos and re-powering the board after the first reflash.&lt;/p&gt;
&lt;p&gt;The only thing I miss is board auto-detection when working with Arduino. Unfortunately, it&amp;rsquo;s a hardware issue, since Arduino board detection is based on USB vendor ID (VID) and USB product ID (PID) combination, which aren&amp;rsquo;t always re-programmable.&lt;/p&gt;
&lt;p&gt;Here is a part of &lt;code&gt;lsusb&lt;/code&gt; dump:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;idVendor: 0x303a&lt;/p&gt;
&lt;p&gt;idProduct: 0x1001&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You can check this &lt;a href=&#34;https://github.com/espressif/usb-pids&#34;&gt;Espressif repo&lt;/a&gt; to figure out what those numbers mean. In short, &lt;code&gt;0x303a&lt;/code&gt; is USB vendor ID which belongs to Espressif, and &lt;code&gt;0x1001&lt;/code&gt; is a default value which C3 controllers are unable to change. As a result, AirGradient board won&amp;rsquo;t be recognized by Arduino and there is no way to recognize it automatically, which means that you need to select the board manually before flashing new firmware. This issue affects all C3 boards and there is nothing special about AirGradient Open Air board, but I hope Espressif or any other manufacturer will make their future chips more flexible in that regard.&lt;/p&gt;
&lt;h3 id=&#34;components-sensors&#34;&gt;Components: Sensors&lt;/h3&gt;
&lt;p&gt;AirGradient Open Air has two identical Plantower sensors. It can also work with a single sensor, but having two sensors allows the firmware to average out the readings, which is supposed to reduce volatility. It also allows the firmware to perform some sanity checks since those sensors are supposed to produce similar readings. If there is a significant disagreement, it&amp;rsquo;s a clear indication of a hardware failure.&lt;/p&gt;
&lt;h3 id=&#34;components-external-hardware-watchdog&#34;&gt;Components: External Hardware Watchdog&lt;/h3&gt;
&lt;p&gt;The inclusion of &lt;a href=&#34;https://www.ti.com/product/TPL5110&#34;&gt;Texas Instruments TPL5010&lt;/a&gt; is probably the most mysterious part of Open Air board. I don&amp;rsquo;t know much about that chip, but it looks like an external timer which is used to improve power efficiency. Most IoT devices don&amp;rsquo;t really need to be awake all the time, so they can power off and let the external timer wake them up when necessary. Many microcontrollers can disable most of their subsystems when being asked nicely, so you can avoid using a separate timer chip, but external timers aren&amp;rsquo;t that uncommon.&lt;/p&gt;
&lt;p&gt;The website doesn&amp;rsquo;t say much about the purpose of that timer:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We integrated an external hardware watchdog chip that automatically reboots the unit in case something goes wrong and thus the monitor can achieve high uptimes.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So I decided to ask AirGradient and here is the reply I got:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It could be that voltage fluctuations crash the MCU or potentially memory leaks etc. Basically, on each successful data transmission to the server the watchdog is reset. If for whatever reason the transmission is not happening, the device will reboot. Before we used it we had sometimes monitors getting stuck after a few weeks and needed a reboot. The watchdog basically led to monitors running for years without any intervention needed.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It looks like this chip is solving a real problem, but it has nothing to do with power efficiency. Outdoor units can be mounted in pretty inconvenient places, so minimizing any manual interventions seems like a good priority.&lt;/p&gt;
&lt;h3 id=&#34;notes-on-power-management&#34;&gt;Notes on Power Management&lt;/h3&gt;
&lt;p&gt;AirGradient Open Air requires a power socket, which is a serious pain point, and it begs the following questions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Would it be better to power it from batteries, like a TV remote?&lt;/li&gt;
&lt;li&gt;Can&amp;rsquo;t it be equipped with a solar panel and a rechargeable battery?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Some devices, such as TV remotes, are supposed to be powered by a couple of AA or AAA batteries, which are usually non-rechargeable, and they can last for a few years. Those devices spend most of their time sleeping, so their power draw is extremely low. Rechargeable batteries may sound like a good idea, but they have a natural rate or discharge of about 10% a month, which would limit the device lifetime from a single charge. AirGradient Open Air is not a low power device as it draws hundreds of mA during transmissions, so it won&amp;rsquo;t even last a month when powered by batteries.&lt;/p&gt;
&lt;p&gt;More power-hungry devices such as smartphones or power tools are expected to drain their batteries many times a year, which makes it impractical to use non-rechargeable batteries. When you expect your battery to drain in a few hours of days, you&amp;rsquo;ll probably won&amp;rsquo;t even notice that it loses a tenth of its charge a month.&lt;/p&gt;
&lt;p&gt;I think it&amp;rsquo;s possible to reduce the power draw of AirGradient Open Air, but it would still require a pretty massive rechargeable battery. Solar panel output depends on environmental factors and there is too much uncertainty in using them as the only power source. Needless to say that both of those components add to costs and complexity, so I&amp;rsquo;m not convinced that it would be a good idea to make a &amp;ldquo;wireless&amp;rdquo; version.&lt;/p&gt;
&lt;p&gt;There is also some evidence that Plantower sensors work best when they&amp;rsquo;re powered on all the time, so it would be risky to use any aggressive optimizations without some serious testing.&lt;/p&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;AirGradient Open Air is the only open source air quality sensor I&amp;rsquo;m aware of, so there is nothing to compare it to. Although the mounting is a bit tricky, the device itself is accurate and very affordable.&lt;/p&gt;
&lt;p&gt;Open Air is aggressively optimized for reliability and as little maintenance as possible, which are sensible priorities. It&amp;rsquo;s clear that the company learned a lot since the release of the indoor model, and it shows. The design and quality of the case are really impressive, and I like the fact that they&amp;rsquo;re sharing their experience and findings with the public via their &lt;a href=&#34;https://www.airgradient.com/blog/&#34;&gt;corporate blog&lt;/a&gt;. I was always interested in how you can get from an idea to a mass-produced product, and I&amp;rsquo;ve learned a ton from AirGradient website and a community forum.&lt;/p&gt;
&lt;p&gt;Pros:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Open source&lt;/li&gt;
&lt;li&gt;Cheap&lt;/li&gt;
&lt;li&gt;Repairable&lt;/li&gt;
&lt;li&gt;Cloud is optional, so there is no lock-in&lt;/li&gt;
&lt;li&gt;Can be easily integrated with Home Assistant, which plays well with Espressif hardware&lt;/li&gt;
&lt;li&gt;Extremely resilient&lt;/li&gt;
&lt;li&gt;High quality case made from 2.5 mm ASA plastic&lt;/li&gt;
&lt;li&gt;Great support and community&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mounting is hard&lt;/li&gt;
&lt;li&gt;The repo is a bit messy&lt;/li&gt;
&lt;li&gt;There no mobile app which would make onboarding and device management easier for non-technical users&lt;/li&gt;
&lt;li&gt;While the device itself has a USB type C port, the other side of the included cable has an old style type A plug. There are plenty of wall adapters with type C ports and I think that type A shouldn&amp;rsquo;t be used in any new devices.&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
        <item>
            <title>AirGradient Pro Kit Review</title>
            <link>https://bubelov.com/blog/2023/airgradient-pro-kit-review/</link>
            <pubDate>Thu, 22 Jun 2023 00:00:00 +0000</pubDate>
            <guid>https://bubelov.com/blog/2023/airgradient-pro-kit-review/</guid>
            <description>&lt;div class=&#34;table-of-contents&#34;&gt;
    &lt;h2&gt;Table of Contents&lt;/h2&gt;
    &lt;nav id=&#34;TableOfContents&#34;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&#34;#the-problem&#34;&gt;The Problem&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#how-to-choose-an-air-quality-monitor&#34;&gt;How to Choose an Air Quality Monitor&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#delivery&#34;&gt;Delivery&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#onboarding&#34;&gt;Onboarding&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#assembly&#34;&gt;Assembly&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#accuracy&#34;&gt;Accuracy&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#conclusion&#34;&gt;Conclusion&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/nav&gt;
&lt;/div&gt;
&lt;h2 id=&#34;the-problem&#34;&gt;The Problem&lt;/h2&gt;
&lt;p&gt;Clean air is becoming a scarce for many reasons beyond the scope of this article, so it&amp;rsquo;s not surprising that the air purifier sales are on the rise. Although home ventilation and air purification are necessary, it can be easily overdone, which leads to higher electric bills and causes noise pollution (air treatment is a noisy process). The only way to know if your air is good enough is to have an air quality monitor, and there are plenty of good options on the market, although most of them have some &lt;a href=&#34;https://www.airgradient.com/blog/hidden-costs-of-air-quality-monitoring/&#34;&gt;serious downsides&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;how-to-choose-an-air-quality-monitor&#34;&gt;How to Choose an Air Quality Monitor&lt;/h2&gt;
&lt;p&gt;Unfortunately, unchecked profit seeking can lead to some perverse incentives, and smart home device market is one of the shadiest ones. Most air quality monitors above $200 are accurate enough to tell you if you have a problem with your indoor air quality, but they can&amp;rsquo;t control your air treatment systems, so they aren&amp;rsquo;t able to fix any issues they detect.&lt;/p&gt;
&lt;p&gt;Most private companies hate open protocols and interoperability, because giving users more freedom and flexibility can hurt their profits, but there are a few companies, such as &lt;a href=&#34;https://www.airgradient.com/&#34;&gt;AirGradient&lt;/a&gt;, which tend to restore my faith in humanity.&lt;/p&gt;
&lt;p&gt;AirGradient products seemed good and affordable enough (~$100 for a high accuracy monitor), so I decided to try their so-called Pro Kit, which is basically a reasonable accurate air quality monitor with an open source firmware and hardware.&lt;/p&gt;
&lt;h2 id=&#34;delivery&#34;&gt;Delivery&lt;/h2&gt;
&lt;p&gt;The delivery took seven days, and it wasn&amp;rsquo;t easy to figure out how to track it. That&amp;rsquo;s one of the things which can be improved and I let the company know about that issue. It&amp;rsquo;s a pretty small company, so I expected some minor issues and inconveniences, because it&amp;rsquo;s a small price to pay for a product with this level of transparency and repairability.&lt;/p&gt;
&lt;p&gt;As you can see, the box itself was manually prepared by someone, which gives the product an uncommon, hand-made feeling:&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
    
        
        
        
            
            
            
            &lt;a href=&#34;https://bubelov.com/blog/2023/airgradient-pro-kit-review/package_hu_3320b3346749a682.webp&#34;&gt;
                &lt;img src=&#34;https://bubelov.com/blog/2023/airgradient-pro-kit-review/package_hu_67ac549786124f52.webp&#34; alt=&#34;&#34; /&gt;
            &lt;/a&gt;
        
    
    
    
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;The box itself had minor bumps here and there, but there was no damage to its contents:&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
    
        
        
        
            
            
            
            &lt;a href=&#34;https://bubelov.com/blog/2023/airgradient-pro-kit-review/box_hu_346ecf156d9b9930.webp&#34;&gt;
                &lt;img src=&#34;https://bubelov.com/blog/2023/airgradient-pro-kit-review/box_hu_31bf3ded46244e63.webp&#34; alt=&#34;&#34; /&gt;
            &lt;/a&gt;
        
    
    
    
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
    
        
        
        
            
            
            
            &lt;a href=&#34;https://bubelov.com/blog/2023/airgradient-pro-kit-review/sustainability_hu_5d29a689cc7fd007.webp&#34;&gt;
                &lt;img src=&#34;https://bubelov.com/blog/2023/airgradient-pro-kit-review/sustainability_hu_2c7b5f9a48f7880e.webp&#34; alt=&#34;&#34; /&gt;
            &lt;/a&gt;
        
    
    
    
&lt;/figure&gt;&lt;/p&gt;
&lt;h2 id=&#34;onboarding&#34;&gt;Onboarding&lt;/h2&gt;
&lt;p&gt;I expected to find an assembly instructions in the package, but I found a QR code instead. Scanning that code redirects you to AirGradient website, where you can find the assembly instructions. Websites are more ephemeral than the physical boxes, so I don&amp;rsquo;t really like the idea of introducing such a dependency, but it makes total sense if you want to cut costs and be able to edit the assembly instructions after shipping the product.&lt;/p&gt;
&lt;p&gt;Anyway, I hope there will be a way of getting a printed manual in the future.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
    
        
        
        
            
            
            
            &lt;a href=&#34;https://bubelov.com/blog/2023/airgradient-pro-kit-review/welcome_hu_c44b75a3f7666ecb.webp&#34;&gt;
                &lt;img src=&#34;https://bubelov.com/blog/2023/airgradient-pro-kit-review/welcome_hu_9a2dfa1bdac0f9bc.webp&#34; alt=&#34;&#34; /&gt;
            &lt;/a&gt;
        
    
    
    
&lt;/figure&gt;&lt;/p&gt;
&lt;h2 id=&#34;assembly&#34;&gt;Assembly&lt;/h2&gt;
&lt;p&gt;I ordered a pre-soldered kit, so the only thing I needed to do is to connect a few components to the mainboard and close the case. Some components, such as display and PM 2.5 sensor, were already connected, so I only had to connect a microcontroller, a CO2 sensor, and the unified temperature and humidity sensor:&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
    
        
        
        
            
            
            
            &lt;a href=&#34;https://bubelov.com/blog/2023/airgradient-pro-kit-review/board_hu_908bbced4cd1b27c.webp&#34;&gt;
                &lt;img src=&#34;https://bubelov.com/blog/2023/airgradient-pro-kit-review/board_hu_daee3a2f11968057.webp&#34; alt=&#34;&#34; /&gt;
            &lt;/a&gt;
        
    
    
    
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
    
        
        
        
            
            
            
            &lt;a href=&#34;https://bubelov.com/blog/2023/airgradient-pro-kit-review/sensors_hu_f597844c294ff7f5.webp&#34;&gt;
                &lt;img src=&#34;https://bubelov.com/blog/2023/airgradient-pro-kit-review/sensors_hu_51e4fe540433bceb.webp&#34; alt=&#34;&#34; /&gt;
            &lt;/a&gt;
        
    
    
    
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
    
        
        
        
            
            
            
            &lt;a href=&#34;https://bubelov.com/blog/2023/airgradient-pro-kit-review/assembled_hu_5511f2e6013b4aec.webp&#34;&gt;
                &lt;img src=&#34;https://bubelov.com/blog/2023/airgradient-pro-kit-review/assembled_hu_6df56f025849487f.webp&#34; alt=&#34;&#34; /&gt;
            &lt;/a&gt;
        
    
    
    
&lt;/figure&gt;&lt;/p&gt;
&lt;h2 id=&#34;accuracy&#34;&gt;Accuracy&lt;/h2&gt;
&lt;p&gt;AirGradient Pro only uses well-known and affordable sensors, which are accurate and reliable enough to be used to monitor air quality at home. Those sensors are far more accurate than the stuff you would find in an average sub $100 air quality monitor. Here is a picture of one of the most popular budget air quality monitors standing nearby AirGradient Pro:&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
    
        
        
        
            
            
            
            &lt;a href=&#34;https://bubelov.com/blog/2023/airgradient-pro-kit-review/diff_hu_ae7304c252bef997.webp&#34;&gt;
                &lt;img src=&#34;https://bubelov.com/blog/2023/airgradient-pro-kit-review/diff_hu_3a355e542538a92b.webp&#34; alt=&#34;&#34; /&gt;
            &lt;/a&gt;
        
    
    
    
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;I just stepped into a well-ventilated room before taking that photo, and the other sensor immediately jumped from ~400 to ~1,300 CO2 ppm, which is simply impossible. AirGradient numbers felt a bit off, too, since I expected ~450 ppm, but it&amp;rsquo;s known to show somewhat less accurate readings till it self-calibrates, which is happening automatically once a week. I checked the readings after the first self-calibration, and they were within the advertised +- 70 ppm precision.&lt;/p&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m happy with my AirGradient Pro, and I&amp;rsquo;ll probably order more monitors, because I want to monitor every room as well as the air quality outside my house. I enjoyed assembling this kit, and it also reinvigorated my interest in microcontrollers. It reminded me that I have an old Arduino kit, which I bought ten years ago, and I was finally motivated enough to check it out and finish all the projects described in its official guide.&lt;/p&gt;
</description>
        </item>
        
        <item>
            <title>AirGradient</title>
            <link>https://bubelov.com/blog/2023/airgradient/</link>
            <pubDate>Fri, 09 Jun 2023 00:00:00 +0000</pubDate>
            <guid>https://bubelov.com/blog/2023/airgradient/</guid>
            <description>&lt;p&gt;I&amp;rsquo;m renovating my house in Thailand and one of my goals is to make the house more airtight. Better heat insulation cuts my energy bills, and it also separates the internal and external air, which means that the external air pollution can&amp;rsquo;t affect my house. Opening your windows to ventilate your house can sometimes do more harm than good, because it&amp;rsquo;s wrong to assume that the outside air is always better than the air inside your house.&lt;/p&gt;
&lt;p&gt;The most popular air quality markers are &lt;a href=&#34;https://en.wikipedia.org/wiki/Carbon_dioxide&#34;&gt;CO2&lt;/a&gt; and &lt;a href=&#34;https://en.wikipedia.org/wiki/Particulates&#34;&gt;PM2.5&lt;/a&gt;, and the goal of a good ventilation system is keepling both of those measurements within a safe range.&lt;/p&gt;
&lt;p&gt;If you want to have a safe level of CO2, you need to ventilate your house somehow. We&amp;rsquo;re all need to breathe and the act of breathing generates CO2 which needs to exit your house somehow. Disposing the old air isn&amp;rsquo;t that trivial, and you also need to replace is with the new air to keep your air pressure in balance, and the new air coming from the street can have an unsafe level of PM2.5 and other pollutants.&lt;/p&gt;
&lt;p&gt;As you can see, CO2 and PM2.5 are slightly at odds, and excessive ventilation can also increase your energy bills, so it&amp;rsquo;s impossible to design a good ventilation system without measuring the air quality somehow. If your CO2 level is healthy, there aren&amp;rsquo;t any good reasons to ventilate your house, it&amp;rsquo;s just a waste of energy and money.&lt;/p&gt;
&lt;p&gt;Measuring the air quality is tricky, since most air quality monitors are crap. I heard a lot of good things about &lt;a href=&#34;https://aranet.com/products/aranet4/&#34;&gt;Aranet4&lt;/a&gt;, but it&amp;rsquo;s pretty expensive, so I was looking for a cheaper alternative which can be as accurate as that product. A few days ago, I stumbled upon an &lt;a href=&#34;https://www.airgradient.com/&#34;&gt;AirGradient&lt;/a&gt; website, and the products listed there look too good to be true. I decided to order a pre-soldered kit and test its performance, and I hope I won&amp;rsquo;t be disappointed.&lt;/p&gt;
</description>
        </item>
        
        <item>
            <title>Philips Hue</title>
            <link>https://bubelov.com/blog/2023/hue/</link>
            <pubDate>Sun, 28 May 2023 00:00:00 +0000</pubDate>
            <guid>https://bubelov.com/blog/2023/hue/</guid>
            <description>&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Matter_(standard)&#34;&gt;Matter&lt;/a&gt; is an open and privacy-friendly protocol which allows smart home devices to communicate with each other. I&amp;rsquo;ve been reading a lot of good things about it, and I finally decided to buy a few of those Matter-enabled things, namely a &lt;a href=&#34;https://en.wikipedia.org/wiki/Philips_Hue&#34;&gt;Hue&lt;/a&gt; Bridge and a bunch of Hue light bulbs.&lt;/p&gt;
&lt;p&gt;Those toys aren&amp;rsquo;t cheap, so my expectations were high, and I must say, I&amp;rsquo;m really impressed with the quality of those light bulbs. Everything works like a charm, and I really like the flexibility of that system. I set my outdoor lights to turn on automatically fifteen minutes before sunset and then turn off right after midnight.&lt;/p&gt;
&lt;p&gt;My bedroom doesn&amp;rsquo;t really need any timers, but I often change the light temperature and intensity based on what I&amp;rsquo;m doing. I like to start my evening with a bright cold light and then gradually move to a dimmed down warm light as I&amp;rsquo;m preparing for sleep.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>