APRS Weather
Quote from Sean Wilson on November 27, 2023, 12:50 pmOne of the facets of amateur radio that has interested me of late is APRS. APRS can be used for a variety of information sharing like position, messages, and weather. It was this last aspect that caught my fancy, as it were.
When looking at the website, aprs.fi, I noticed a bunch of stations were placing localized weather information. I've always been interested in installing a local weather information station that would give me information on what we going on around me. My nearest "internet" weather comes from the local airport, but that's ten miles north of me, in a different town. On one of the morning nets I frequent, one of the pieces of daily information we collect is the local weather where we're at. Plus, surprisingly, I'm a bit of a nerd.
In doing some research beforehand, I discovered a handful of open source projects that would "read" the RF radio transmissions from the various manufacturers of weather sensors out there, and parse the telemetry therein. A plan forward started to emerge.
I split the project into three phases:
1. Functional APRS fixed-location beacon
2. Weather Reporting to APRS
3. APRS Repeater1. Functional APRS fixed-location beacon
The first decision I had to make was which platform to set this up on. Although several choices would work, I decided to throw this project onto an Innovato Quadra (mini) computer. This is roughly equivalent, in performance to a Raspberry Pi 3... but currently MUCH cheaper. It's priced roughly where RPi 3s used to be, when they first came out... but without having to purchase a couple of components separately! There are a couple of minor downsides to them, but nothing that can't be worked through (except their inability to act as a media machine, in my opinion).
I found this script: https://github.com/EvanVS/APRS-Python
This Python script was very easy to adapt, and before long, I was successfully able to send a beacon to APRS, and see myself on the map!
I did modify it a bit. The main thing I did was to remove the loop functionality to have it only send a beacon and then exit. Instead, I created a cron job to run it every 30 minutes.
2. Weather Reporting to APRS
Step 2a: Get a weather station
Having determined that most common weather stations/sensors would be compatible with my process, I purchased a La Crosse weather station (V21-WTHv4) from Menards for roughly $70. This included two sensors:
- a wind speed sensor
- a temperature/humidity sensorThis system was pretty easy to set up. I mounted the temperature sensor outside in the entryway, under the shade. I mounted the wind sensor up on the southwest corner of the house, where most of our wind comes from. Optimally, you're supposed to mount that 50' from any obstacle, but that wasn't reasonable in my situation. The Display was able to find these two sensors easily, connect to the internet for its forecasting and wind direction, and start displaying useful information. Even this, by itself, improved my nerd-cred dramatically!
Step 2b: Parse the weather stream from the sensors
There were two popular methods for grabbing the weather reporting streams from the sensors: RTL_433 script or WeeWX. I chose the first option, because it seemed aimed toward my DIY approach. WeeWX looks cool, though, and I may revisit this option later.
Either one uses an SDR USB tuner. I chose the NooElec NESDR Mini for around $30 at Amazon.
The RTL_433 project is located here: https://github.com/merbanan/rtl_433
You can install the package using: apt-get update; apt-get install rtl_433
In fact, I recommend this approach. It will ask you for some configuration information, which you can pretty much ignore, at least in my case.
To have it start monitoring, you can run it from the command prompt: rtl_433 -f 915M -s 280k
It will initialize, and then start listening. 915MHz is the frequency that La Crosse sensors transmit at, and the 280k sample rate was something I picked up from several users After several seconds, you'll start to see entries being displayed:
Success! Now, how to parse it?
According to the documentation, there are several output file formats available. The one that worked best for me, was the JSON format. This made the resulting command: rtl_433 -f 915M -s 280k -F json:/home/sean/rtl.log
The resulting output file entries were in the much more parse-able JSON format.
Step 2c: Inject the weather data into APRS
I wrote a Python script to grab the latest telemetry from this output file, and also added the ability to trim the output file. I modified the APRS-Python script to grab the telemetry from my script, and inject it into the stream. That took a bit of reading of the APRS design document, and some viewing of the raw data coming through APRS.fi. The end result was an automated beacon showing my localized weather every 30 minutes!
3. APRS Repeater
This has not been started yet. I need to determine what the goals, requirements, equipment, etc., needed for this. Stay tuned!
One of the facets of amateur radio that has interested me of late is APRS. APRS can be used for a variety of information sharing like position, messages, and weather. It was this last aspect that caught my fancy, as it were.
When looking at the website, aprs.fi, I noticed a bunch of stations were placing localized weather information. I've always been interested in installing a local weather information station that would give me information on what we going on around me. My nearest "internet" weather comes from the local airport, but that's ten miles north of me, in a different town. On one of the morning nets I frequent, one of the pieces of daily information we collect is the local weather where we're at. Plus, surprisingly, I'm a bit of a nerd.
In doing some research beforehand, I discovered a handful of open source projects that would "read" the RF radio transmissions from the various manufacturers of weather sensors out there, and parse the telemetry therein. A plan forward started to emerge.
I split the project into three phases:
1. Functional APRS fixed-location beacon
2. Weather Reporting to APRS
3. APRS Repeater
1. Functional APRS fixed-location beacon
The first decision I had to make was which platform to set this up on. Although several choices would work, I decided to throw this project onto an Innovato Quadra (mini) computer. This is roughly equivalent, in performance to a Raspberry Pi 3... but currently MUCH cheaper. It's priced roughly where RPi 3s used to be, when they first came out... but without having to purchase a couple of components separately! There are a couple of minor downsides to them, but nothing that can't be worked through (except their inability to act as a media machine, in my opinion).
I found this script: https://github.com/EvanVS/APRS-Python
This Python script was very easy to adapt, and before long, I was successfully able to send a beacon to APRS, and see myself on the map!
I did modify it a bit. The main thing I did was to remove the loop functionality to have it only send a beacon and then exit. Instead, I created a cron job to run it every 30 minutes.
2. Weather Reporting to APRS
Step 2a: Get a weather station
Having determined that most common weather stations/sensors would be compatible with my process, I purchased a La Crosse weather station (V21-WTHv4) from Menards for roughly $70. This included two sensors:
- a wind speed sensor
- a temperature/humidity sensor
This system was pretty easy to set up. I mounted the temperature sensor outside in the entryway, under the shade. I mounted the wind sensor up on the southwest corner of the house, where most of our wind comes from. Optimally, you're supposed to mount that 50' from any obstacle, but that wasn't reasonable in my situation. The Display was able to find these two sensors easily, connect to the internet for its forecasting and wind direction, and start displaying useful information. Even this, by itself, improved my nerd-cred dramatically!
Step 2b: Parse the weather stream from the sensors
There were two popular methods for grabbing the weather reporting streams from the sensors: RTL_433 script or WeeWX. I chose the first option, because it seemed aimed toward my DIY approach. WeeWX looks cool, though, and I may revisit this option later.
Either one uses an SDR USB tuner. I chose the NooElec NESDR Mini for around $30 at Amazon.
The RTL_433 project is located here: https://github.com/merbanan/rtl_433
You can install the package using: apt-get update; apt-get install rtl_433
In fact, I recommend this approach. It will ask you for some configuration information, which you can pretty much ignore, at least in my case.
To have it start monitoring, you can run it from the command prompt: rtl_433 -f 915M -s 280k
It will initialize, and then start listening. 915MHz is the frequency that La Crosse sensors transmit at, and the 280k sample rate was something I picked up from several users After several seconds, you'll start to see entries being displayed:
Success! Now, how to parse it?
According to the documentation, there are several output file formats available. The one that worked best for me, was the JSON format. This made the resulting command: rtl_433 -f 915M -s 280k -F json:/home/sean/rtl.log
The resulting output file entries were in the much more parse-able JSON format.
Step 2c: Inject the weather data into APRS
I wrote a Python script to grab the latest telemetry from this output file, and also added the ability to trim the output file. I modified the APRS-Python script to grab the telemetry from my script, and inject it into the stream. That took a bit of reading of the APRS design document, and some viewing of the raw data coming through APRS.fi. The end result was an automated beacon showing my localized weather every 30 minutes!
3. APRS Repeater
This has not been started yet. I need to determine what the goals, requirements, equipment, etc., needed for this. Stay tuned!