Ultimeter $ULTW Format for Amateur Radio APRS

123 views
Skip to first unread message

ke4...@gmail.com

unread,
Aug 30, 2022, 4:30:12 PM8/30/22
to weewx-user
I don't know if this has been brought up yet, but in amateur radio we use weather data with a mode called APRS (Automatic Packet Reporting System).  We can report weather data through the APRS packet network over the radio using 1200 baud AFSK packet.  One of the things that has fallen away over the years is APRS weather station because there are not that many weather stations available that output a serial stream to parse and transmit.  Ultimeter is pretty much the only one left that I know of, but they start around $400.  It's a bit much.

I dove into starting to build my own weather station around an ESP32 that would basically take in simple sensor data (temp, humidity, pressure, wind speed and direction) and format into the classic Ultimeter format, but I have really not gotten anywhere with it.  Then it dawned on me, WeeWX is already bringing this data in, why couldn't it format a $ULTW string and spit it back out?  I am looking at a few different AcuRite stations with USB interface (mostly what I see listed on the WeeWX list) and I think I have settled on the 1036M.  I want to use this station to gather the data, feed it to WeeWX on a Pi and have it spit out the $ULTW formatted string on the UART pins so I can feed that into a TNC/Tracker for the APRS/packet side.  Am I reinventing the wheel?  Has someone already done this?  Googling didn't really turn anything up.

A side note, my wife is a meteorologist for NOAA and also an amateur radio operator.  She recently got the OK to set up an APRS Weather station at her office, so this has kick started me to look for a solution.  I'm a radio guy by day, so I have the radio and TNC stuff covered.  It's getting the weather data formatted and to the radio that I am stuck on.

Thanks for any help!

Jason K4APR

p q

unread,
Aug 30, 2022, 4:45:42 PM8/30/22
to weewx...@googlegroups.com
I haven't done this, but I'm willing to help out if you need it.

What I would do with that set of requirements is to run Weewx normally, with a skin of your choice and the regular SQlite DB. I'd write a little piece of python code to read the db every 2 minutes (or whatever your interval is) and then do the formatting and writing to UART. I've done something similar for myself where I have a piece of python code that reads the db every 2 minutes and sends out a MQTT message that I use elsewhere. The code to do it should be pretty trivial. Turning the python into a daemon that runs automatically is also easy to do. 

I'm sure you could do it with a custom skin and some javascript.

--
You received this message because you are subscribed to the Google Groups "weewx-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email to weewx-user+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/weewx-user/4e6d4b07-7ccf-4156-a006-164a21df7ef3n%40googlegroups.com.


--
Peter Quinn
(415)794-2264

Tom Keffer

unread,
Aug 30, 2022, 5:55:26 PM8/30/22
to weewx-user
Unless there is something unduly complex about the $ULTW string, it's highly likely that it can be formatted using the existing Cheetah tags. That means it's just another file to be generated. No need to write any code.

Susan Mackay

unread,
Aug 30, 2022, 10:39:16 PM8/30/22
to weewx-user
Looking at my weewx.conf file at the 'StdRESTfull' and 'CWOP' sections, I have 'enable' set to the, the 'station' is my callsign and the 'passcode' is my APRS passcode.
IIRC that was all that I needed to do. It is all documented in the Weewx user guide. My weather data appears on the 'aprs.fi' site.
Or am I missing something.
Susan VK3ANZ

Greg Troxel

unread,
Aug 31, 2022, 7:21:54 AM8/31/22
to Susan Mackay, weewx-user

Susan Mackay <vk3...@gmail.com> writes:

> Looking at my weewx.conf file at the 'StdRESTfull' and 'CWOP' sections, I
> have 'enable' set to the, the 'station' is my callsign and the 'passcode'
> is my APRS passcode.
> IIRC that was all that I needed to do. It is all documented in the Weewx
> user guide. My weather data appears on the 'aprs.fi' site.

There are two parts to APRS:

transmitting messages over Amateur Radio

sending those messages to the "APRS Internet System", abbreviated
APRS-IS

The second can happen by an "igate" which receives messages by radio and
forwards them, or by someone sending direct to APRS-IS nodes over the
Internet.

I think the OP wants to send messages by radio.

Your comment is hugely helpful; it points out that formatting is already
done. But that's fully-baked APRS format, not format to be read by a
device that translates Ultimeter to APRS. Maybe that would help the OP
though as it may be possible to send AX.25 frames instead?

Greg, N1DAM
signature.asc

ke4...@gmail.com

unread,
Aug 31, 2022, 8:14:12 AM8/31/22
to weewx-user
> Looking at my weewx.conf file at the 'StdRESTfull' and 'CWOP' sections, I have 'enable' set to the, the 'station' is my callsign and the 'passcode' is my APRS passcode.
> IIRC that was all that I needed to do. It is all documented in the Weewx user guide. My weather data appears on the 'aprs.fi' site.
> Or am I missing something.

Susan, part of the problem I have is that everyone in amateur radio are removing the radio part and just doing everything through the internet.  I'm trying to get more people BACK on the radio, including feeding WX data to the APRS network through a traditional APRS radio/TNC site.

Jason K4APR

ke4...@gmail.com

unread,
Aug 31, 2022, 8:17:37 AM8/31/22
to weewx-user
> Your comment is hugely helpful; it points out that formatting is already
> done. But that's fully-baked APRS format, not format to be read by a
> device that translates Ultimeter to APRS. Maybe that would help the OP
> though as it may be possible to send AX.25 frames instead?

Are you saying that WeeWX is already creating AX.25 frames with the $UTLW format?  If so and it's KISS, then that's exactly what I need to feed to a TNC for the station.  In a perfect world, that's exactly what I would need.  WeeWX brings in the data from the AcuRite, formats it to $UTLW, builds the KISS AX.25 frame and spits it out either via USB (/ttyAMA0 or whatever) or through the UART pins to a serial interface.

Jason K4APR

ke4...@gmail.com

unread,
Aug 31, 2022, 8:19:23 AM8/31/22
to weewx-user
I found a breakdown of the $ULTW string format.  It's built up in four byte HEX strings:

Header = $ULTW (this identifies the report as a Ultimeter Weather Station)

All values are reported in hex format

Field #1, 0000 = Wind Speed Peak over last 5 min. ( reported as 0.1 kph increments)
Field #2, 0000 = Wind Direction of Wind Speed Peak (0-255)
Field #3, 01FF = Current Outdoor Temp (reported as 0.1 deg F increments) i.e. 01FF = 511 decimal * 0.1 = 51.1 deg F
Field #4, 0004 = Rain Long Term Total (reported in 0.01 in. increments) 0.04 inches in this example
Field #5, 27C7 = Current Barometer (reported in 0.1 mbar increments) 27C7 = 10183 decimal = 1018.3
Field #6, 0002 = Barometer Delta Value(reported in 0.1 mbar increments)
Field #7, CCD3 = Barometer Corr. Factor(LSW)
Field #8, 0001 = Barometer Corr. Factor(MSW)
Field #9, 026E = Current Outdoor Humidity (reported in 0.1% increments) You know the drill now...
Field #10, 003A = 10. Date (day of year since January 1) 58 decimal in this case... it was February 28th, 30 + 28 for Jan and Feb.
Field #11, 050F = Time (minute of day) 1295 in this case after conversion to decimal.
Field #12, 0004 = Today's Rain Total (reported as 0.01 inch increments)* 0.04 inches in this example
Field #13, 0000 = 1 Minute Wind Speed Average (reported in 0.1kph increments)*

Example:   $ULTW0000000001FF000427C70002CCD30001026E003A050F00040000

Jason K4APR

Tom Keffer

unread,
Aug 31, 2022, 8:31:21 AM8/31/22
to weewx-user
It is technically possible to format that using tags, but it would be a challenge. For example, first three fields would be

#set windgust = "%04x" % $current.windGust
#set windgustdir = "%04x" % $current.windGustDir
#set temperature="%04x" % ($current.outTemp*10)

and so on.

Then to produce the final string:

$ULTW$windgust$windgustdir$temperature...

There will be complications, particularly with null values, but it might not be too hard to pull it off. 

Alternatively, use a search list extension.

-tk

--
You received this message because you are subscribed to the Google Groups "weewx-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email to weewx-user+...@googlegroups.com.

Greg Troxel

unread,
Aug 31, 2022, 8:57:22 AM8/31/22
to ke4...@gmail.com, weewx-user

"ke4...@gmail.com" <ke4...@gmail.com> writes:

>> Your comment is hugely helpful; it points out that formatting is already
>> done. But that's fully-baked APRS format, not format to be read by a
>> device that translates Ultimeter to APRS. Maybe that would help the OP
>> though as it may be possible to send AX.25 frames instead?
>
> Are you saying that WeeWX is already creating AX.25 frames with the $UTLW
> format? If so and it's KISS, then that's exactly what I need to feed to a
> TNC for the station. In a perfect world, that's exactly what I would
> need. WeeWX brings in the data from the AcuRite, formats it to $UTLW,
> builds the KISS AX.25 frame and spits it out either via USB (/ttyAMA0 or
> whatever) or through the UART pins to a serial interface.

No, I am saying that I think WeeWX is already creating APRS weather
frames that get carried in AX.25, and that both over-the-air and CWOP
use this format. I am a bit fuzzy on details, but I think you have a
situation where you have a device (TNC) that wants to read $ULTW format
and translate that to APRS format and then put that string in an AX.25
frame and modulate it over radio.

I am wondering if you could use the TNC in KISS mode and have weewx
generate the AX.25 frame content, by modifying the CWOP transmitter,
and skip ULTW.
signature.asc

ke4...@gmail.com

unread,
Aug 31, 2022, 9:14:17 AM8/31/22
to weewx-user
> It is technically possible to format that using tags, but it would be a challenge.

This is an interesting concept for the solution.  My problem is, I'm a hardware guy, not a code guy, so I have to rely on those who can do this part of the task.

Jason K4APR

ke4...@gmail.com

unread,
Aug 31, 2022, 9:22:41 AM8/31/22
to weewx-user
> No, I am saying that I think WeeWX is already creating APRS weather
> frames that get carried in AX.25, and that both over-the-air and CWOP
> use this format

That would be ideal, if the heavy lifting is already being done.


> I am a bit fuzzy on details, but I think you have a
> situation where you have a device (TNC) that wants to read $ULTW format
> and translate that to APRS format and then put that string in an AX.25
> frame and modulate it over radio.

Yes, that is essentially it.  Traditionally, it was this:

WX Station ($ULTW format in serial TTL or RS232) > TNC or APRS Specific Modem Device > VHF Radio (Transmits 1200 baud AX.25 over the air)


> I am wondering if you could use the TNC in KISS mode and have weewx
> generate the AX.25 frame content, by modifying the CWOP transmitter,
> and skip ULTW.

I mentioned in a previous message that I am NOT a good code guy.  I hack my way through things.  I'm a hardware guy.  However, years ago I did mange to write some ok working KISS routines in Visual Basic.  I learned A LOT about the AX.25 frame structure and adding the KISS wrapper to the frames.  Basically, it's an AX.25 frame with <C0> tags on each end to show the start and end of the frame.  The destination and source call, as well as the path are all encoded in a bit shifted format.  The payload it's self is not changed and can be human read without any translation.  If you look at a KISS AX.25 frame in a terminal, it looks like garbage until it gets the PID character and then you can read the payload.  In this case, it would be the $UTLW string in HEX.

<C0><destination><source><path><PID>:<payload><C0>

If we can produce these frames with the $ULTW payload already inserted and then just feed that directly to the TNC over USB, that would be ideal and I can tell you a lot of APRS guys wanting to run a WX station on APRS would use this feature.  There was an APRS specific WX station years ago that did just this.  Even had the TNC/modem built in.  Just hook up sensors and a radio and you were on the air.  I think it was uWeather or something like that.

Jason K4APR

Reply all
Reply to author
Forward
0 new messages