<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://mikedanko.me/feed.xml" rel="self" type="application/atom+xml" /><link href="https://mikedanko.me/" rel="alternate" type="text/html" /><updated>2026-10-10T18:09:25+00:00</updated><id>https://mikedanko.me/feed.xml</id><title type="html">mikedanko.me</title><subtitle>This is the website for Mike Danko, a software developer in the Columbus Ohio Area. I&apos;m also a father, a radio amateur (KD8ORQ), and a musician.</subtitle><entry><title type="html">New Bike Day</title><link href="https://mikedanko.me/general/2026/10/08/new-bike-day.html" rel="alternate" type="text/html" title="New Bike Day" /><published>2026-10-08T15:00:00+00:00</published><updated>2026-10-08T15:00:00+00:00</updated><id>https://mikedanko.me/general/2026/10/08/new-bike-day</id><content type="html" xml:base="https://mikedanko.me/general/2026/10/08/new-bike-day.html"><![CDATA[<p>New bike day. Say hello to the Kona Sutra.</p>

<p>Also, I said goodbye to the <a href="/bicycles/">Roll Adventure A:1R</a>. I’d dropped off the A:1R at my favorite Local Bike Shop, <a href="https://www.johnnyvelobikes.com">Johnny Velo’s</a> to have some work done on it. The thing needed a new chain, cassette, cables, a wheel truing, grip tape, heavy brake work… well, and some more.</p>

<p>When they had it on the stand going over what needed to be done I just had this moment where I realized that I would not be excited to get this bike back and working for me. I went home to sleep on it and came back and got this aspirational dream ride and made it my own. I never really was in love with the thing and the place went out of business before they could fix the problems I had with it. I’m not mad at all, I got a lot of use out of the thing, but I wasn’t going to sink money into something I wasn’t in love with.</p>

<p>I knew this was a bike for me as soon got on it for a test ride. My neck no longer was in a weird position, I didn’t feel like I was on a rack and it just felt right.</p>

<p>I’ll update the bicycles page to indicate the A1:R is retired at some point, but I’ll keep the entry for anyone else who has one and might need any information about it someday with Roll being out of business and all.</p>]]></content><author><name></name></author><category term="general" /><summary type="html"><![CDATA[New bike day. Say hello to the Kona Sutra.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://mikedanko.me/assets/images/photos/IMG_0316.jpeg" /><media:content medium="image" url="https://mikedanko.me/assets/images/photos/IMG_0316.jpeg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Updates: June 2026</title><link href="https://mikedanko.me/general/updates/2026/06/06/site-updates-june-2026.html" rel="alternate" type="text/html" title="Updates: June 2026" /><published>2026-06-06T12:00:00+00:00</published><updated>2026-06-06T12:00:00+00:00</updated><id>https://mikedanko.me/general/updates/2026/06/06/site-updates-june-2026</id><content type="html" xml:base="https://mikedanko.me/general/updates/2026/06/06/site-updates-june-2026.html"><![CDATA[<p>Things that happened in May 2026…</p>

<p>I took a week off of work and just did normal human things. This was extremely unusual for me, but it was really good for my brain.</p>

<p>I wired up a gallery for this site. That was interesting.</p>

<p>I wrote about my <a href="/bicycles/">Bikes</a>. Well two of them at least. This involved digging up some information about them because the Roll Bicycle Company went out of business. This was a fun journey about something that I use every day.</p>

<p>I built a <a href="/books/">bookshelf</a> so to speak. My Goodreads shelf gets synced here via a <a href="https://github.com/skord/kd8orqnet/blob/main/bin/sync-books">Ruby script</a>.</p>

<p>In life, I ran a 5K. Specifically, <a href="https://www.nationwidechildrens.org/giving/get-involved/events-calendar/2026/05/kmhf">The 5K for Children’s Mental Health</a>. I had never run in my life prior to late February and have worked up to a 45 minute or so 5K. In June I’ll be running the <a href="https://www.usaracetiming.com/donut/">Columbus Donut Run &amp; Walk</a>.</p>

<p>I’ve added a couple recipes to the recipes page.</p>]]></content><author><name></name></author><category term="general" /><category term="updates" /><summary type="html"><![CDATA[Things that happened in May 2026…]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://mikedanko.me/assets/images/photos/IMG_6546.jpeg" /><media:content medium="image" url="https://mikedanko.me/assets/images/photos/IMG_6546.jpeg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">May 9th, 2026 Photos</title><link href="https://mikedanko.me/photos/2026/05/09/may-photos.html" rel="alternate" type="text/html" title="May 9th, 2026 Photos" /><published>2026-05-09T22:57:00+00:00</published><updated>2026-05-09T22:57:00+00:00</updated><id>https://mikedanko.me/photos/2026/05/09/may-photos</id><content type="html" xml:base="https://mikedanko.me/photos/2026/05/09/may-photos.html"><![CDATA[<p>Just some pictures I took. Mostly just testing the gallery functionality I just added.</p>]]></content><author><name></name></author><category term="photos" /><summary type="html"><![CDATA[Just some pictures I took. Mostly just testing the gallery functionality I just added.]]></summary></entry><entry><title type="html">Week Off Plan</title><link href="https://mikedanko.me/general/2026/05/08/week-off-plan.html" rel="alternate" type="text/html" title="Week Off Plan" /><published>2026-05-08T16:00:00+00:00</published><updated>2026-05-08T16:00:00+00:00</updated><id>https://mikedanko.me/general/2026/05/08/week-off-plan</id><content type="html" xml:base="https://mikedanko.me/general/2026/05/08/week-off-plan.html"><![CDATA[<p>Taking a week off work, bookended by weekends, so nine days. Here’s the plan:</p>

<ul>
  <li>Write a bit</li>
  <li>Go to a new restaurant</li>
  <li>Go test ride a new bike</li>
  <li>Do not buy a new bike</li>
  <li>No really, do not buy a new bike</li>
  <li>Cook something great</li>
  <li>Read a book</li>
  <li>Ride my bike. Not a new bike, my existing bike</li>
  <li>Get the spring planting done</li>
  <li>Go take some pictures somewhere</li>
  <li>Run 10K. I’m only doing about 6 now on runs</li>
  <li>Try a new grocery store</li>
</ul>

<p>Additions:</p>
<ul>
  <li>Dayton Hamvention</li>
  <li>Visit Family</li>
</ul>]]></content><author><name></name></author><category term="general" /><summary type="html"><![CDATA[Taking a week off work, bookended by weekends, so nine days. Here’s the plan:]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://mikedanko.me/assets/images/photos/IMG_6459.jpeg" /><media:content medium="image" url="https://mikedanko.me/assets/images/photos/IMG_6459.jpeg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Updates: May 2026</title><link href="https://mikedanko.me/general/updates/2026/05/01/site-updates-may-2026.html" rel="alternate" type="text/html" title="Updates: May 2026" /><published>2026-05-01T16:00:00+00:00</published><updated>2026-05-01T16:00:00+00:00</updated><id>https://mikedanko.me/general/updates/2026/05/01/site-updates-may-2026</id><content type="html" xml:base="https://mikedanko.me/general/updates/2026/05/01/site-updates-may-2026.html"><![CDATA[<p>I’ve got a lot of content to add here, much of it meta about writing but for now I’m adding the bones and filling in things when I can. Yes, I’m deferring to AI to handle layouts and such but I’m doing the writing. I have a post on that I’ll have up later. As always, the source for this is here: <a href="https://github.com/skord/kd8orqnet">kd8orqnet</a>.</p>

<p>I’ll be updating the recipes and such first and hopefully my bookshelf next. I have a request from my son to coment on my 700+ youtube subscriptions one at a time and review them, but that might take some time to get written.</p>]]></content><author><name></name></author><category term="general" /><category term="updates" /><summary type="html"><![CDATA[I’ve got a lot of content to add here, much of it meta about writing but for now I’m adding the bones and filling in things when I can. Yes, I’m deferring to AI to handle layouts and such but I’m doing the writing. I have a post on that I’ll have up later. As always, the source for this is here: kd8orqnet.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://mikedanko.me/assets/images/photos/cornflowers.jpg" /><media:content medium="image" url="https://mikedanko.me/assets/images/photos/cornflowers.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">This sentence</title><link href="https://mikedanko.me/general/2025/07/02/this-sentence.html" rel="alternate" type="text/html" title="This sentence" /><published>2025-07-02T23:12:00+00:00</published><updated>2025-07-02T23:12:00+00:00</updated><id>https://mikedanko.me/general/2025/07/02/this-sentence</id><content type="html" xml:base="https://mikedanko.me/general/2025/07/02/this-sentence.html"><![CDATA[<p>I do not hate this sentence.</p>

<p>This is an exercise.</p>]]></content><author><name></name></author><category term="general" /><summary type="html"><![CDATA[I do not hate this sentence.]]></summary></entry><entry><title type="html">KiwiSDR Project Part 6: Final Thoughts</title><link href="https://mikedanko.me/radio/2025/06/30/kiwisdr-project-pt6-final-thoughts.html" rel="alternate" type="text/html" title="KiwiSDR Project Part 6: Final Thoughts" /><published>2025-06-30T00:00:00+00:00</published><updated>2025-06-30T00:00:00+00:00</updated><id>https://mikedanko.me/radio/2025/06/30/kiwisdr-project-pt6-final-thoughts</id><content type="html" xml:base="https://mikedanko.me/radio/2025/06/30/kiwisdr-project-pt6-final-thoughts.html"><![CDATA[<h1 id="review">Review</h1>
<p>It was certainly interesting to throw the KiwiSDR project together. Now that it’s almost a year later I definitely have some thoughts on this.</p>

<p>If you haven’t read, I have a five part set of posts about how I got it working.</p>

<ul>
  <li><a href="/radio/2024/08/23/kiwisdr-project-pt1.html">KiwiSDR Part 1</a></li>
  <li><a href="/radio/2024/08/24/kiwisdr-project-pt2.html">KiwiSDR Part 2</a></li>
  <li><a href="/radio/2024/09/04/kiwisdr-project-pt3.html">KiwiSDR Part 3</a></li>
  <li><a href="/radio/2024/09/06/kiwisdr-project-pt4.html">KiwiSDR Part 4</a></li>
  <li><a href="/radio/2024/09/07/kiwisdr-project-pt5.html">KiwiSDR Part 5</a></li>
</ul>

<p>Here’s what ended up in the garage:</p>

<ul>
  <li><a href="http://www.kiwisdr.com">KiwiSDR</a> v1 - <a href="http://kiwisdr.com/info/">Operating Information Guide</a></li>
  <li><a href="https://www.w6lvp.com">W6LVP Receive Only Magloop</a></li>
  <li><a href="https://www.digikey.com/en/products/detail/mean-well-usa-inc/GST25A05-P1J/7703645?s=N4IgTCBcDaIOIGUAqYCsBBADKgtABQEYApEAXQF8g">Mean Well, 5V 4A, 2.1mm plug, 85 - 264 VAC IEC C14 input connector</a></li>
  <li><a href="https://turnislandsystems.com/sdr-front-end-filter/">Turn Island Systems 30 MHz Low-pass filter</a></li>
  <li><a href="https://samsontech.com/products/studio-tools/powerbrite/powerbrite/">Samson PowerBrite PB9</a></li>
</ul>

<p>I am very happy I took the time to do all this. I struggled with aspects of RF, networking, and general placement but learned a lot about all those things. I know what I would do different next time now.</p>

<p>The entire setup is truly remarkable, considering it’s a full-fledged internet appliance, especially considering its price point. It is a very good thing, it is just not for me.</p>

<p>When I first laid eyes on the KiwiSDR, I was completely blown away by its capabilities. Tuning in to signals from DC to 30 MHz was impressive, analyzing the waterfall for all of it was awe-inspiring, and decoding digital signals in a single package was mind-boggling at the time. There’s some great engineering in there for what this thing is.</p>

<p>But as I said, there are aspects that didn’t quite work for me.</p>

<h3 id="not-for-me-1-my-home-internet">Not for Me #1: My Home Internet</h3>

<p>The first issue actually had nothing to do with the SDR itself, but with what I learned setting it up. I’ve had T-Mobile Home Internet for a while, and honestly, it’s been great: fast, easy to set up (just put it by a window), and way more reliable and cheaper than my old Spectrum connection. As an existing T-Mobile customer, I even get an extra discount.</p>

<p>But after working through the RF and networking headaches, I ran into a bigger problem: T-Mobile uses CGNAT (Carrier Grade NAT), which means I don’t get a public IP address at home. To access the KiwiSDR remotely, I had to jump through a lot of hoops.</p>

<p>My options were:</p>

<ul>
  <li>Set up some kind of reverse proxy on the BeagleBone Black itself (not really practical given its specs)</li>
  <li>Use the built-in reverse proxy service, but the documentation is lacking and, given other issues I’ll get into later, it wasn’t appealing</li>
  <li>Funnel traffic through a service I control in the cloud or on other hardware at home</li>
</ul>

<p>I went with option #3: I put a Raspberry Pi on my home network, set up nginx as a reverse proxy, and used Tailscale Funnel on the Pi to route traffic to the KiwiSDR. It works, but it’s fragile. If any piece of that chain fails, things break, and now there are just too many moving parts to troubleshoot easily.</p>

<p>I may revisit my home internet setup, since there are now faster providers in my neighborhood that actually offer a public IP. That would make remote access a lot more straightforward if I ever want to pick up projects like the KiwiSDR again. Still, the internet issue was only one piece of the puzzle; there are a few other hurdles I’d have to address before I’d consider jumping back in.</p>

<h3 id="not-for-me-2-its-a-complete-package">Not for Me #2: It’s a Complete Package</h3>

<p>Looking back, most of the headaches I had with the KiwiSDR were learning experiences or just the reality of setting up any sensitive RF gear. The bigger issue is more fundamental: the KiwiSDR is a radio for radio people, not for computer people. It’s built to be a turnkey appliance: just plug it in and you’re supposed to be on the air.</p>

<p>But as someone who thinks in terms of networks, operating systems, and security, the “complete package” approach started to feel like a liability. The software is closed, the platform is opaque, and there have been real-world security incidents (<a href="https://arstechnica.com/gadgets/2021/07/for-years-a-backdoor-in-popular-kiwisdr-product-gave-root-to-project-developer/" target="_blank">like this one on Ars Technica</a>). That’s just not something I’m comfortable plugging into my network for the long term. I don’t want root-level mystery code running 24/7 in my garage.</p>

<p>This isn’t just a minor quibble; it’s a philosophical mismatch. The project makes a lot of sense for people who want to use a radio, not run a secure server. But if you’re coming at it as a computer person—someone who wants to control, audit, or tinker with the underlying system—you’re going to run into friction, and possibly even a little distrust.</p>

<h3 id="not-for-me-3-too-integrated-too-limited-for-power-users">Not for Me #3: Too Integrated, Too Limited for Power Users</h3>

<p>I quickly discovered that KiwiSDR’s “all-in-one” web interface is great for beginners, but crippling once you want real flexibility. If you want to stream audio or IQ data outside that browser, you’re stuck with third-party hacks, command-line wrappers, or reverse engineering efforts. For instance, achieving live audio output requires using a remote WebSocket client like <code class="language-plaintext highlighter-rouge">kiwi_nc.py</code> or <code class="language-plaintext highlighter-rouge">kiwisound.py</code>—none of which are officially documented or tightly integrated.</p>

<p>Meanwhile, the built-in UI is simply not built for power users: trying to automate access, batch-record streams, or integrate with custom DSP workflows meant either reverse engineering the undocumented WebSocket API or leaning on fragile, third-party tools that may not support frequency hopping or “camping” on channels.</p>

<p><strong>Bottom line:</strong> KiwiSDR feels like it’s for people who want a radio appliance on their network, not for those who want a radio tool they can truly <em>build with</em>. If you’re a computer person who wants open, documented APIs, modular workflows, or deep automation, this is a fundamental mismatch.</p>

<h3 id="my-next-sdr-setup">My Next SDR Setup</h3>

<p>Moving forward, I think what I really want is an SDR setup that’s decoupled from the rest of the system. I’d much rather use hardware that simply delivers raw IQ data, and then run my own server (like OpenWebRx) on hardware I control. That way, I get full transparency, the ability to audit or tweak the stack as I see fit, and the flexibility to swap out software as new tools emerge. Basically, I want a system where the radio is just a radio, and the computing is just computing—no black boxes, no closed firmware, and no appliances I have to trust by default. The KiwiSDR is an impressive “all-in-one,” but I’d rather have more control and fewer unknowns.</p>]]></content><author><name></name></author><category term="radio" /><category term="radio" /><summary type="html"><![CDATA[Review It was certainly interesting to throw the KiwiSDR project together. Now that it’s almost a year later I definitely have some thoughts on this.]]></summary></entry><entry><title type="html">Back to Jekyll</title><link href="https://mikedanko.me/general/2025/06/28/back-to-jekyll.html" rel="alternate" type="text/html" title="Back to Jekyll" /><published>2025-06-28T00:00:00+00:00</published><updated>2025-06-28T00:00:00+00:00</updated><id>https://mikedanko.me/general/2025/06/28/back-to-jekyll</id><content type="html" xml:base="https://mikedanko.me/general/2025/06/28/back-to-jekyll.html"><![CDATA[<p>I tried the whole “everything in one place” note-taking experiment for a while. Obsidian, second brain, Zettelkasten, whatever you want to call it. There are plenty of nerds on the internet who will tell you it’s the answer to all your problems if you just get enough plugins and hotkeys sorted out. I bought in for a bit.</p>

<p>It didn’t do much for me. At least, not in the way people seem to promise.</p>

<p>For meeting notes, Agenda.app works better. I don’t need to explain it—calendar, notes, decent search, and it’s designed for meetings, not for people who want to build a private wiki about their lives.</p>

<p>Obsidian is fine for longer stuff or project notes. But dumping everything in there just made a mess. Instead of having lots of places to lose track of things, I just had one big one. The “second brain” just became a bigger, dumber version of the first.</p>

<p>Obsidian Publish was supposed to make it easy to share some notes online, but it turns out I barely remembered it existed most of the time. It costs more than it should, can’t really handle multiple domains, and you don’t get much control over how things are published. If you’re used to tweaking your own static site, it feels like going backwards.</p>

<p>The other problem, and this is one I don’t see talked about much, is that all the content I had on Obsidian Publish made for a terrible blog. It wasn’t structured as posts. Formatting was all over the place. Most of it was unfinished, or personal, or just not something anyone else should ever see. If I want to bring anything over to Jekyll, it’s going to be a project. I’ll have to pick through, see if anything’s worth saving, and clean it up before it even resembles a blog post. Most of it probably won’t make the cut.</p>

<p>So, back to Jekyll. I write in Markdown, I push to GitHub, and the site updates. I point whatever domains I want at it, set things up how I like, and don’t have to think about monthly subscriptions or if some new app is about to break my workflow. It’s not magic, but it works, and it’s not pretending to be anything more than a pile of text files and some templates.</p>

<p>I’m sure I’ll get annoyed with this setup eventually and try something else. But for now, this is good enough.</p>]]></content><author><name></name></author><category term="general" /><summary type="html"><![CDATA[I tried the whole “everything in one place” note-taking experiment for a while. Obsidian, second brain, Zettelkasten, whatever you want to call it. There are plenty of nerds on the internet who will tell you it’s the answer to all your problems if you just get enough plugins and hotkeys sorted out. I bought in for a bit.]]></summary></entry><entry><title type="html">KiwiSDR Project Part 5</title><link href="https://mikedanko.me/radio/2024/09/07/kiwisdr-project-pt5.html" rel="alternate" type="text/html" title="KiwiSDR Project Part 5" /><published>2024-09-07T00:00:00+00:00</published><updated>2024-09-07T00:00:00+00:00</updated><id>https://mikedanko.me/radio/2024/09/07/kiwisdr-project-pt5</id><content type="html" xml:base="https://mikedanko.me/radio/2024/09/07/kiwisdr-project-pt5.html"><![CDATA[<p>Well hell. The documentation for the reverse proxy for the Kiwi does not exist and the UI’s explanation is completely lacking. Fine, I’d much rather have this under my control anyway. But I ran into a snag with my home Internet service.</p>

<p>I absolutely love having T-Mobile’s 5G home internet service. It’s got a great price point, outages have been non-existent (no wires!), it’s fast with low latency and it was cheaper and faster than cable here. I just ran across my first snag with the service through — there’s absolutely no settings on it. Meaning, I can’t turn on u-pnp or make a NAT for the SDR so I can access it remotely. There are<a href="https://forum.kiwisdr.com/index.php?p=/discussion/3005/tailscale-install-on-kiwi"> reports of running Tailscale directly on the device</a>, but there are reasons I don’t want to do that:</p>

<ul>
  <li>The Beaglebone is already often running at high CPU utilization. The Kiwi server code has realtime requirements (per the comment from the guy that made it in the link above) and it could be a problem.</li>
  <li>I’d rather not screw around with dynamic DNS clients.</li>
</ul>

<p>So I already have a Tailnet from <a href="[https://tailscale.com](https://tailscale.com/)">Tailscale</a> on most of the devices I own and it would make it possible for me to put up a reverse proxy in the cloud, route it into the home network and straight to the KiwiSDR’s private address. This ended up being much easier than that. It was as simple as setting up a reverse proxy from a raspberry pi directly wired to the AP to proxy to the KiwiSDR and running <code class="language-plaintext highlighter-rouge">tailscale funnel 80</code> on the raspberry pi.</p>

<p>I’m now in the directory! Project completed.</p>

<p><img src="/assets/images/graphics/kiwisdr/Pasted image 20240907161609.png" alt="KiwiSDR Listing" /></p>

<p>Well, as much as I can be done with it. It’s a very noisy day electrically and I feel like I’ll constantly be adjusting things, but I’m done with all the hard stuff for now.</p>

<p>However…</p>

<p>I have been experiencing issues with network connectivity, or at least it seems like I have. Often the waterfall will stutter and audio will drop. The Wifi signal is usually hanging out ~ 50% quality so I’ve ordered a higher gain, directional, outdoor antenna for the thing. I’ve noticed in the system log that it tends to range a lot, so I’m hoping that at least that can be stopped.</p>

<p>I never wanted to be a guy that had <code class="language-plaintext highlighter-rouge">node_exporter</code> installed on machines in his house and my own Grafana/Prometheus setup, but I really don’t see many other ways to try and solve some of the issues I’m having. I mostly don’t want to do this because it’s what I do for a living and it is a bad thing to do the same thing for your hobby that you do for a living.</p>

<p>The new antenna should arrive tomorrow, if it’s remarkably better I’ll consider it a success, otherwise I feel like this is going to turn into a data center.</p>

<p>I am still having problems with noise and I feel like this may be related to my antenna choice. Yes, I need to get a better ferrite setup for the thing, but while the noise is still much better than it was, it’s still not great. I’m going to try and solve the networking problems first because it’s extremely frustrating to try and solve the RF problems when you can’t get the waterfall working or the thing has gone completely offline. I may look into an antenna switcher and maybe something like a long wire since I nearly have the space for it.</p>

<p>After the 15dBi directional WiFi antenna arrived a few days ago, which replaces the 7dBi omnidirectional antenna. Due to an appendectomy getting in the way, I just got it installed last night. The new antenna is only temporarily setup, as it didn’t come with all the mounting hardware it needed to come with, but it’s a fix. According to <code class="language-plaintext highlighter-rouge">wavemon</code> the signal is just 5-10% better but the drop outs are totally gone.</p>]]></content><author><name></name></author><category term="radio" /><category term="radio" /><summary type="html"><![CDATA[Well hell. The documentation for the reverse proxy for the Kiwi does not exist and the UI’s explanation is completely lacking. Fine, I’d much rather have this under my control anyway. But I ran into a snag with my home Internet service.]]></summary></entry><entry><title type="html">KiwiSDR Project Part 4</title><link href="https://mikedanko.me/radio/2024/09/06/kiwisdr-project-pt4.html" rel="alternate" type="text/html" title="KiwiSDR Project Part 4" /><published>2024-09-06T00:00:00+00:00</published><updated>2024-09-06T00:00:00+00:00</updated><id>https://mikedanko.me/radio/2024/09/06/kiwisdr-project-pt4</id><content type="html" xml:base="https://mikedanko.me/radio/2024/09/06/kiwisdr-project-pt4.html"><![CDATA[<p>Ok! So I’ve powered up the noisy as heck wifi bridge but also plugged in the USB wifi adapter with a 8dB antenna attached. I’m going to try to get the adapter working from the comfort of inside the house then go power down everything attached to the ethernet, especially the bridge because it is VERY noisy in the environment even when it’s not plugged into anything but power.</p>

<p>So first things first, let’s see what’s on the USB bus:</p>

<div class="language-shell-session highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="gp">debian@kiwisdr:~$</span><span class="w"> </span>lsusb
<span class="go">-bash: lsusb: command not found
</span></code></pre></div></div>

<p>Well that’s no good, but expected. Let’s install USB utils so we can take a look</p>

<div class="language-shell-session highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="gp">debian@kiwisdr:~$</span><span class="w"> </span><span class="nb">sudo </span>apt <span class="nb">install </span>usbutils
</code></pre></div></div>
<p>After installing usbutils, we’ll see what’s on the USB bus and install the appropriate firmware.</p>

<div class="language-shell-session highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="gp">debian@kiwisdr:~$</span><span class="w"> </span>lsusb
<span class="go">Bus 001 Device 002: ID 0cf3:9271 Qualcomm Atheros Communications AR9271 802.11n
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

</span><span class="gp">debian@kiwisdr:~$</span><span class="w"> </span>apt search atheros
<span class="go">Sorting... Done
Full Text Search... Done
firmware-atheros/unknown 20170823-1rcnee1~jessie+20180328 all
  Binary firmware for Atheros wireless cards

</span><span class="gp">debian@kiwisdr:~$</span><span class="w"> </span><span class="nb">sudo </span>apt <span class="nb">install </span>firmware-atheros
</code></pre></div></div>

<p>Ok, so let’s install some tools for wireless networking.</p>

<div class="language-shell-session highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="gp">debian@kiwisdr:~$</span><span class="w"> </span><span class="nb">sudo </span>apt <span class="nb">install </span>iw wireless-tools wpasupplicant wavemon
</code></pre></div></div>

<p>Now at this point I could go outside and unplug and re-plug the USB adapter, but it’s hot and gross so I’ll reboot and log back in. After that:</p>

<div class="language-shell-session highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="gp">debian@kiwisdr:~$</span><span class="w"> </span>ip <span class="nb">link</span>
<span class="gp">1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt;</span><span class="w"> </span>mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
<span class="go">    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
</span><span class="gp">2: eth0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt;</span><span class="w"> </span>mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
<span class="go">    link/ether e4:15:f6:f7:4d:a8 brd ff:ff:ff:ff:ff:ff
</span><span class="gp">3: wlan0: &lt;BROADCAST,MULTICAST&gt;</span><span class="w"> </span>mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
<span class="go">    link/ether e8:de:27:09:0a:55 brd ff:ff:ff:ff:ff:ff
</span><span class="gp">4: usb0: &lt;NO-CARRIER,BROADCAST,MULTICAST,UP&gt;</span><span class="w"> </span>mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
<span class="go">    link/ether e4:15:f6:f7:4d:a0 brd ff:ff:ff:ff:ff:ff
</span></code></pre></div></div>

<p>Sweet! <code class="language-plaintext highlighter-rouge">wlan0</code> is alive, but down! Let’s bring it up so we can look at the spectrum / networks:</p>

<div class="language-shell-session highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="gp">debian@kiwisdr:~$</span><span class="w"> </span><span class="nb">sudo </span>ip <span class="nb">link set </span>wlan0 up
</code></pre></div></div>

<p>Now we should be able to use <code class="language-plaintext highlighter-rouge">wavemon</code> to scan for networks. <code class="language-plaintext highlighter-rouge">wavemon</code> is an ncurses based way to more conveniently browse wireless networks. We’ll run <code class="language-plaintext highlighter-rouge">sudo wavemon</code> and check things out.</p>

<p><img src="/assets/images/graphics/kiwisdr/Pasted image 20240906100506.png" alt="Wavemon on KiwiSDR" /></p>

<p>Ok, so nothing yet, we’ll have to hit <code class="language-plaintext highlighter-rouge">F3</code> and initiate a scan:</p>

<p><img src="/assets/images/graphics/kiwisdr/Pasted image 20240906100608.png" alt="Wavemon Scan on KiwiSDR" /></p>

<p>So this is where it’s wild. Let’s explore with a not-to-scale KD8ORQ home diagram:</p>

<p><img src="/assets/images/graphics/kiwisdr/Untitled-2024-09-06-1017.png" alt="KD8ORQ Home Diagram" /></p>

<p>The <code class="language-plaintext highlighter-rouge">dankostan_EXT</code> extender was installed because the extender in the garage didn’t get enough signal to connect to the modem in the front of the house. According to <code class="language-plaintext highlighter-rouge">wavemon</code>, the USB stick+antenna averages a 10dB better signal than the intermediary extender (dankostan_EXT) I was intending to use. So we’ll setup the KiwiSDR to use the original AP in the front of the house and once the Wifi is working on the KiwiSDR, all the extenders can be removed[^1]!</p>

<p>I was about to edit <code class="language-plaintext highlighter-rouge">/etc/network/interfaces</code> to bring up the wireless interface, but according to a comment in it, I should be using <code class="language-plaintext highlighter-rouge">connman</code> to manage the network connection. So…</p>

<div class="language-shell-session highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="gp">debian@kiwisdr:/etc/network$</span><span class="w"> </span><span class="nb">sudo </span>apt <span class="nb">install </span>connman
</code></pre></div></div>

<p>And the network drops. The device is no longer ping-able, etc. The screen stopped updating when connman was 80% of the way through being installed. So let’s go power cycle the thing after a good wait to ensure the apt operation completed. I thought something might happen with both interfaces being live on the same network, but we haven’t even set the thing up yet.</p>

<p>Everything was fine after the power cycle and connman was installed. Let’s make sure it runs at startup:</p>

<div class="language-shell-session highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="gp">debian@kiwisdr:~$</span><span class="w"> </span><span class="nb">sudo </span>systemctl <span class="nb">enable </span>connman
<span class="gp">debian@kiwisdr:~$</span><span class="w"> </span><span class="nb">sudo </span>systemctl start connman
</code></pre></div></div>

<p>Let’s run it:</p>

<div class="language-shell-session highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="gp">debian@kiwisdr:~$</span><span class="w"> </span><span class="nb">sudo </span>connmanctl
</code></pre></div></div>

<p>We’ll get a new prompt and run three commands:</p>

<div class="language-shell-session highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="gp">connmanctl&gt;</span><span class="w"> </span><span class="nb">enable </span>wifi
<span class="gp">connmanctl&gt;</span><span class="w"> </span>scan wifi
<span class="gp">connmanctl&gt;</span><span class="w"> </span>services
</code></pre></div></div>

<p>To connect to our network, we’ll use the results from the second column of the output of <code class="language-plaintext highlighter-rouge">services</code>:</p>

<div class="language-shell-session highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="gp">connmanctl&gt;</span><span class="w"> </span>connect wifi_e8de27090a55_64616e6b6f7374616e_managed_psk
</code></pre></div></div>

<p>I got an error:</p>

<div class="language-shell-session highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="gp">connmanctl&gt;</span><span class="w"> </span>connect wifi_e8de27090a55_64616e6b6f7374616e_managed_psk
<span class="go">Error /net/connman/service/wifi_e8de27090a55_64616e6b6f7374616e_managed_psk: Not registered
</span></code></pre></div></div>

<p>Turns out the link wasn’t up after the reboot, let’s try again:</p>

<div class="language-shell-session highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="gp">debian@kiwisdr:~$</span><span class="w"> </span><span class="nb">sudo </span>ip <span class="nb">link set </span>wlan0 up
</code></pre></div></div>

<p>Still broken. Googling says the agent wasn’t running, so</p>

<div class="language-shell-session highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="gp">debian@kiwisdr:~$</span><span class="w"> </span><span class="nb">sudo </span>connmanctl
<span class="gp">connmanctl&gt;</span><span class="w"> </span>agent on
<span class="gp">connmanctl&gt;</span><span class="w"> </span>connect wifi_e8de27090a55_64616e6b6f7374616e_managed_psk
</code></pre></div></div>

<p>Boom! Asked for a passphrase and it worked:</p>

<div class="language-shell-session highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="gp">debian@kiwisdr:~$</span><span class="w"> </span>ip addr show wlan0
<span class="gp">3: wlan0: &lt;BROADCAST,MULTICAST,DYNAMIC,UP,LOWER_UP&gt;</span><span class="w"> </span>mtu 1500 qdisc mq state UP group default qlen 1000
<span class="go">    link/ether e8:de:27:09:0a:55 brd ff:ff:ff:ff:ff:ff
    inet 192.168.12.170/24 brd 192.168.12.255 scope global wlan0
       valid_lft forever preferred_lft forever
    inet6 fd8b:cfb9:3269:6cc7:eade:27ff:fe09:a55/64 scope global mngtmpaddr dynamic
       valid_lft 1698sec preferred_lft 1698sec
    inet6 fd24:8142:392f:0:eade:27ff:fe09:a55/64 scope global mngtmpaddr dynamic
       valid_lft forever preferred_lft forever
    inet6 2607:fb91:16ad:4968:eade:27ff:fe09:a55/64 scope global mngtmpaddr dynamic
       valid_lft forever preferred_lft forever
    inet6 fe80::eade:27ff:fe09:a55/64 scope link
       valid_lft forever preferred_lft forever
</span></code></pre></div></div>

<p>So let’s go detach the ethernet, reboot and try this (not in that order, but yes):</p>

<p><img src="/assets/images/graphics/kiwisdr/Pasted image 20240906111045.png" alt="Waterfall on KiwiSDR" /></p>

<p>AWWWW YEAH! I zoomed in and the carrier noise from before is gone. The part that is wild is that the noise floor is 1-2 dB off from where the KiwiSDR would be with no antenna attached!</p>

<p>After a little bit of browsing around the bands, this is a night and day change – I am now successfully picking up signals I could not have imagined picking up before since I’m in the low noise garage. I love this!</p>

<p>Someday soon I’ll have to consolidate all these notes so they make more sense to future readers, but I am finally happy with my KiwiSDR setup.</p>]]></content><author><name></name></author><category term="radio" /><category term="radio" /><summary type="html"><![CDATA[Ok! So I’ve powered up the noisy as heck wifi bridge but also plugged in the USB wifi adapter with a 8dB antenna attached. I’m going to try to get the adapter working from the comfort of inside the house then go power down everything attached to the ethernet, especially the bridge because it is VERY noisy in the environment even when it’s not plugged into anything but power.]]></summary></entry></feed>