<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: 朱连兴</title>
    <description>The latest articles on DEV Community by 朱连兴 (@annest).</description>
    <link>https://dev.to/annest</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4240030%2F1a6a0dbd-31d7-4893-9669-8860719f1909.jpg</url>
      <title>DEV Community: 朱连兴</title>
      <link>https://dev.to/annest</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/annest"/>
    <language>en</language>
    <item>
      <title>A presence display for a parent living alone, built on Wi-Fi signal disturbance</title>
      <dc:creator>朱连兴</dc:creator>
      <pubDate>Thu, 12 Nov 2026 01:41:21 +0000</pubDate>
      <link>https://dev.to/annest/a-presence-display-for-a-parent-living-alone-built-on-wi-fi-signal-disturbance-1ac3</link>
      <guid>https://dev.to/annest/a-presence-display-for-a-parent-living-alone-built-on-wi-fi-signal-disturbance-1ac3</guid>
      <description>&lt;p&gt;My father-in-law lives alone. What my wife actually wants to know, ten times a day, is one boring thing: &lt;em&gt;is he up and moving around the flat?&lt;/em&gt; Not his pulse. Not a video feed. Just: did the shape of the room change in the last few minutes.&lt;/p&gt;

&lt;p&gt;Every product we looked at solved it with a camera or a wearable. Both fail for the same reason: he will not wear a watch to bed, and he unplugged the camera on day three because he does not want to be watched in his own home.&lt;/p&gt;

&lt;p&gt;So we built the thing around the constraint instead of around the sensor. &lt;strong&gt;No lens, no microphone, no device on the body.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What we actually measure
&lt;/h2&gt;

&lt;p&gt;Wi-Fi is not just a carrier, it is a probe. A body in a room changes the multipath between two fixed nodes: some subcarriers get absorbed, some arrive out of phase. Sample the channel state at a fixed rate and the room's "signature" drifts as someone moves through it.&lt;/p&gt;

&lt;p&gt;The display is deliberately dumb about this. It does not classify activities, and it does not try to name what you are doing. It answers one question with a bucket:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;moving&lt;/strong&gt; — disturbance above the idle noise floor within the last few minutes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;still, present&lt;/strong&gt; — the room signature is stable but not equal to the empty-room baseline&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;no one&lt;/strong&gt; — signature matches the empty baseline&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;no signal&lt;/strong&gt; — the sensor itself stopped reporting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That fourth state is the one everyone forgets, and it is the most important one. A dashboard that shows "all quiet" when the sensor is offline is worse than no dashboard at all — it manufactures false reassurance. We render it in a different colour, with an explicit "last seen" timestamp.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the sensor is not in the cloud
&lt;/h2&gt;

&lt;p&gt;The pipeline is: sensor node → local broker → our API → server-sent events → dashboard. The node never uploads raw CSI; it uploads a small feature vector at ~1 Hz. Over a day that is on the order of tens of kilobytes, which matters because the flat is on a 4G router with a data cap.&lt;/p&gt;

&lt;p&gt;Keeping the inference on the node also means the answer does not depend on our uptime. If our API is down, the node keeps its own state and replays on reconnect.&lt;/p&gt;

&lt;h2&gt;
  
  
  The parts we cut
&lt;/h2&gt;

&lt;p&gt;We removed more than we added:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No video, so no recording to leak.&lt;/strong&gt; There is no frame to subpoena, no clip to accidentally share.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No wearable, so nothing to charge.&lt;/strong&gt; The failure mode of every elderly-monitoring wearable is a dead battery nobody noticed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No gateway requirement.&lt;/strong&gt; It joins the existing Wi-Fi; we do not ask anyone to replace their router.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No account for the parent.&lt;/strong&gt; They do not have to install, pair, or learn anything. That was non-negotiable for us.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Honest limits
&lt;/h2&gt;

&lt;p&gt;The physics is the spec. Same room, line of sight, roughly 10 metres. Through one ordinary interior wall, about 5 metres. Two brick walls and you get "no signal", which the display says out loud rather than guessing.&lt;/p&gt;

&lt;p&gt;It also does not tell you &lt;em&gt;what&lt;/em&gt; happened, only that the room's pattern changed or did not. There is no fall classification here, and we do not pretend otherwise — a display that cries wolf gets unplugged, and then it protects no one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live dashboard (a real device in a real apartment, updating about once per second):&lt;/strong&gt; &lt;a href="https://annest.cn/live/" rel="noopener noreferrer"&gt;https://annest.cn/live/&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;AnNest is a consumer safety display, not a medical device. It does not detect falls, does not measure vitals, and does not call for help. If something is an emergency, call your local emergency number.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>iot</category>
      <category>privacy</category>
      <category>hardware</category>
      <category>design</category>
    </item>
  </channel>
</rss>
