LHS Episode #601: Automated Certificates Deep Dive
Hello and welcome to Episode 601 of Linux in the Ham Shack. In this episode, the hosts discuss the RFC2136 for remote, authenticated DNS updates and how it can be used to automate an SSL certificate infrastructure with Let's Encrypt. We hope you enjoy this episode and have a great week coming up!
73 de The LHS Crew
Russ Woodman, K5TUX, co-hosts the Linux in the Ham Shack podcast which is available for download in both MP3 and OGG audio format. Contact him at russ@bluecows.com.
Python and what I have been up too.
![]() |
| A snippet of the shutdown python script as actions are taken. |
Python and what I’ve been up to… well, let me tell you!
I’ve honestly surprised myself with the automation I’ve built for starting up and shutting down my contesting setup. Before Python, the startup routine was a long chain of manual steps: launching VSPE and waiting, then clicking on Win4Icom Suite and waiting again, then starting N1MM+ and waiting some more, then opening Firefox, navigating to the Reverse Beacon Network, entering my call, checking that I was spotted, and refreshing it every 10 minutes.
Now? Thanks to Python, all of that happens with a single mouse click. I LOVE IT!
With one mouse click my Kasa plug turns on, powers on my Astron power supply and Pi4B and it begins its startup. Then VSPE starts, then Win4icom starts, N1MM+ starts and finally Firefox opens to Reverse beacon network were it logs in and then enters my call sign to show who is hearing my CQ contest calling and will refresh every 10 minutes.
Now If you’re curious about the hiccups and challenges I ran into along the way, keep reading. Or, if you’d rather skip ahead, feel free to jump to the end where I share some of my upcoming Python-and-amateur-radio project—you might be surprised!
Let’s start with the Wi-Fi plug that kicks off the entire startup process. I needed a Python library to communicate with my Kasa plug—easy enough. Then I needed to find the plug’s IP address—again, no problem. But one day, my Python terminal that handles the whole start-and-stop sequence suddenly threw an error related to the Wi-Fi plug. After some investigating, I realized our router had restarted and reassigned the plug a new IP address. That completely broke my script.
More research led me to a great solution: I could assign a name to the plug and have Python search for the device by name, then automatically discover whatever IP address the router had given it. Problem solved—elegantly.
With the Wi-Fi plug sorted out, I moved on to scripting the rest of the startup sequence. I added every program I needed, in the exact order they had to launch, and it worked beautifully… until I noticed that some programs loaded slower than others. That meant certain tasks weren’t finished before the next program in the chain started, and everything just froze. The fix turned out to be simple: insert time delays between launches to give each program the breathing room it needs.
Next came Win4Icom. Tom, VE2FSQ, does an incredible job keeping his software updated—there’s a new version roughly every month with improvements and bug fixes. But once a new version came out, my Python script kept opening the old one. To fix that, I wrote code that automatically checks for the latest installed version every time and launches that one instead.
Then I ran into another issue: occasionally Python wasn’t shutting down my Icom 7610 correctly through the Win4Icom software. That meant the radio was being abruptly disconnected when the Wi-Fi plug powered off my power supply. NOT GOOD. So instead of relying on Win4Icom for shutdown, I added the Icom CI-V shutdown command directly into my Python script. That ensured the 7610 powered down properly every single time.
My Pi4B is also tied into the Wi-Fi plug, but that part is simple—when the plug turns on, the Pi boots normally, no Python needed. Shutting the Pi down, however, is a different adventure involving Windows and Python… and I’ll save that story for the next post.
As promised, here’s a preview of what I’m working on next. When a contest is over, I normally have to:
Go to the 3830 scoring site and manually enter my score.
Generate a CAB file and submit it to the contest sponsor.
Generate an ADIF file within N1MM+.
Submit that ADIF to my logging program Amateur Radio Contest Log then do the same for LOTW, Club Log, CWops, and QRZ.com.
I’m developing a Python program that will do all of that automatically:
• Login to 3830, fill in the band breakdowns, multipliers, total contacts and multipliers and final score.
• Generate a CAB file from within N1MM+.
• Generate an ADIF file from N1MM+ and load it into Amateur Radio Contest Log.
• From within Amateur Contest Log program, automatically open Club Log and LOTW and submit the logs.
• Then log into QRZ.com and CWops and submit the score there as well.
All with one mouse click—while I sit back and watch it happen.
My next post will be dealing with the contest shutdown process. At this point I am just starting the new project I mentioned above.
Mike Weir, VE9KK, is a regular contributor to AmateurRadio.com and writes from New Brunswick, Canada. Contact him at ve9kk@hotmail.com.
Confirming K0NR Does Have HF Equipment
A few days ago, someone told me that a rumor is circulating that I don’t own any gear capable of operating on the high-frequency (HF) bands. I laughed out loud, wondering where this came from.

Actually, I know where this comes from: most of my postings here at k0nr.com are oriented towards VHF operating, often from the top of a summit. I fully admit that VHF/UHF has always been my favorite part of the amateur radio spectrum.
And I do operate on the HF bands.
Home Station
The photo above shows my ham shack set up at home. The primary transceiver is an ICOM IC-7610, which covers the HF bands and 6 meters. To the left is an ICOM IC-9700 that I use for 2m, 70cm, and 23cm. An ACOM 1000 linear amplifier sits at the far left. It is usually configured for 6m, just waiting for the band to open.

Here is a closer look at the two transceivers. Hey, look at that, the IC-7610 is listening to 20m CW. Yes, I even operate CW.
My antenna farm includes two towers but they are used for VHF/UHF antennas. For the HF bands, I use wire antennas. This article describes the end-fed wire antenna I have been using for the past 5 years. It covers 40m through 6m with one antenna.
Operating Results
I run hot and cold on chasing DX, but over time, I have made many DX contacts and worked quite a few countries. I favor the DX potential of the higher bands: 20m, 17m, 15m, 12m, and 10m. Recently, I discovered that the 30m band can be a lot of fun, too. My current stats are: 205 DXCC Entities and 39 (out of 40) CQ Zones. Still looking to work Zone 34, Northeastern Africa. I’ve also been working on Worked All States (WAS) for each band, having completed 40m, 30m, 20m, 17m, and 6m.
Going Portable with HF

Joyce/K0JJW and I often operate portable on the HF bands, almost always a Parks On The Air (POTA) activation. Our favorite radio for POTA is a Yaesu FT-991, which covers the HF bands along with VHF/UHF. Almost all of the POTA work is on HF but sometimes we do make a few VHF contacts.
We also have an ICOM IC-705, also covering all bands, and is especially useful for backpack portability. We favor VHF/UHF for SOTA but sometimes we will use the IC-705 to make some HF SOTA contacts. We have a variety of wire antennas, all different types of end-fed designs. The IC-705 does not have a built-in antenna tuner, so we take along a small manual tuner.

Wrap Up
So there you have it, I do have some HF gear and I do use it!
Remember, the universal purpose of amateur radio is to have fun messing around with radios. Using whatever amateur band you choose.
73 Bob K0NR
The post Confirming K0NR Does Have HF Equipment appeared first on The KØNR Radio Site.
Bob Witte, KØNR, is a regular contributor to AmateurRadio.com and writes from Colorado, USA. Contact him at bob@k0nr.com.
Welcome back KE9V
Jeff welcome back to the blog sphere I for one have missed your insight, my morning coffee has been enhanced by your read on things....even though at this end I may be to much tech.....:)
Mike Weir, VE9KK, is a regular contributor to AmateurRadio.com and writes from New Brunswick, Canada. Contact him at ve9kk@hotmail.com.
ICQPodcast Episode 470 – Going to Bouvet Island
In this episode, we join Martin Butler M1MRB, Chris Howard (M0TCH), Martin Rothwell (M0SGL), Frank Howell (K4FMH) and Leslie Butterfields (G0CIB) to discuss the latest Amateur / Ham Radio news. Colin Butler (M6BOY) rounds up the news in brief, and the episode's feature is Going to Bouvet Island.
We would like to thank Koos Van Den Hout (PE4KH), Anonymous Donor, Dave Renton (G1REN), Michael Nutt (K3LOE) and Michael Currier-Casavant (N1XRR) and our monthly and annual subscription donors for keeping the podcast advert free. To donate, please visit - http://www.icqpodcast.com/donate
- Eakinomics: Time to Jettison Legacy FCC Rules
- 2025 "Dream Rig" Essay Contest for Young Ham Radio Operators
- Australian Band Plan Gets Sweeping Review
- Mountain Radio Challenge Tests Skills, Propagation
- DRM Says It's the Best Choice for Digital Radio in India
- ISS SSTV Event to Celebrate 25 Years of the International Space Station
- NARA Hosts Club Week Special Event
Colin Butler, M6BOY, is the host of the ICQ Podcast, a weekly radio show about Amateur Radio. Contact him at info@icqpodcast.com.
AmateurLogic 211: More Tales From The Transmitter
AmateurLogic.TV Episode 211 is now available for download.
Fixing a transmitter with a rubber mallet (it’s not what you think). Installing Windows 11 on a Raspberry Pi could be worth it. HackRF firmware goodies. Mike’s new toy.
George Thomas, W5JDX, is co-host of AmateurLogic.TV, an original amateur radio video program hosted by George Thomas (W5JDX), Tommy Martin (N5ZNO), Peter Berrett (VK3PB), and Emile Diodene (KE5QKR). Contact him at george@amateurlogic.tv.
Step one in my Python coding adventure
In my first post regarding my Python adventure, I shared how I wanted
to use python coding in the shack. As my readers know I am an avid CW
contester and before a contest begins I have 5 programs that need to be
launched. The issue is if I launch them out of order or if one program has an issue things get all
screwed up, and I have to start all over again. In doing so, most of the
time I need to go into some programs and reconnect some com ports and
clear lots of error messages. My first Python project will be one
double-click on a desktop icon that will get all my contest stuff up and
running smoothly in the right order.
The approach I am using is
to write python code to start each individual program. Then save those in a file. This will get my whistle wet with python coding, both
with success and some head scratching. At this point I have coded out
most of my programs so they start. Once that is fully completed, it will
be grouping them all together into one process.
In a nutshell, here is the plan:
– Turn on a Wi-Fi plug which powers on my power supply and Pi4B power supply
– Start my VSPE virtual com port program and minimize it.
– Start my Wn4icom program which also starts my Icom 7610 radio.
– Start my N1MM contest software.
–
Then finally Firefox will start, open Reverse Beacon Network, log me
in, set up search for my call and set it to refresh my call sign spots
every 10 minutes.
Lets take a fast look at the python coding for the WiFi plug.
import asyncio
from kasa import SmartPlug
async def main():
plug = SmartPlug(“10.0.0.71”) # Replace with your plug’s IP address
await plug.update()
await plug.turn_on()
print(“Plug turned on”
asyncio.run(main())
For the Kasa smart WiFi plug by TP link to work I had to first download into python the kasa library. I opened up python and entered the code below…well actually cut and paste.
pip install python-kasa
Now below in a nut shell is what the code is all about for the Kasa WiFi plug to turn on.
1. Python loads the needed modules. (asyncio and SmartPlug)
2. Program defines async functions or in English connecting to the wifi plug could take time and this allows things not to freeze if the process takes time.
So now modules are loaded and it knows some actions could take time.
3. Now asyncio.run(main()) runs and this is what happens.
Smart plug is created for IP address 10.0.071
The plugs state is defined (on or off)
The plug is turned on via network command
A message printed in python code window “plug turned on”
Program closes.
In closing I am not by any means a pythonista regarding code and I am sure many who are can poke holes in the coding or what I left out regarding what to explain. This is my first attempt at this game and I was actually shocked that it worked. BUT your input will and always is welcomed.
Next post is about the learning curve, hiccups and added lines of code for smoothness and reliable start up.
Mike Weir, VE9KK, is a regular contributor to AmateurRadio.com and writes from New Brunswick, Canada. Contact him at ve9kk@hotmail.com.















