IcedRaktajino

joined 8 months ago

I was surprised by that, too. When I went looking for a way to decode them with RTL-SDR, I assumed it wouldn't be parsing the audio but a narrowband data stream. TIL also.

 

EAS (emergency alert system) alerts are issued for various local and/or national emergencies, and are frequently issued for severe weather events. I wanted to be able to receive and relay those over Meshtastic, specifically severe weather alerts, as an extra precaution since cell service often goes out after big storms.

I first setup a prototype setup on my laptop, but am planning to move the setup to a PiZeroW2 or a Banana Pi if the Raspi isn't up to the task. In addition to monitoring/relaying EAS alerts, I'm also going to pipe the audio to an Icecast source and then to an Icecast server so anyone on the local network can listen to it.

Got lucky in that today was the day they did the weekly EAS alert test and that I happened to have this running during the test. Everything surprisingly worked, which was nice. However, I wanted to tweak some things and needed a way to run my own tests. So I grabbed the audio sample from the Wikipedia page for SAME and piped that in which worked beautifully.

Requirements

  • A Pi or other computer than can run rtl_fm
  • A RTL-SDR dongle and antenna that can receive in the ~160-170 MHZ range
  • A Meshtastic node connected over USB or TCP

Sending Test Alerts

If you want to test the setup without having to wait for a weekly test, you can download a sample SAME audio clip from Wikipedia (https://en.wikipedia.org/wiki/File:Same.wav). You'll need to convert the sample rate before you can use it, though.

$ ffmpeg -i Same.wav -ar 48000 same48.wav
$ cat same48.wav | Meshtastic-SAME-EAS-Alerter --test-channel 0
2026-04-02T15:32:31.172Z INFO  [Meshtastic_SAME_EAS_Alerter] Successfully connected to the node.
2026-04-02T15:32:31.175Z INFO  [Meshtastic_SAME_EAS_Alerter] Loaded locations CSV
2026-04-02T15:32:31.175Z INFO  [Meshtastic_SAME_EAS_Alerter] Monitoring for alerts
2026-04-02T15:32:31.175Z INFO  [Meshtastic_SAME_EAS_Alerter] Alerts will be sent to channel: 0
2026-04-02T15:32:31.175Z INFO  [Meshtastic_SAME_EAS_Alerter] Test alerts will be sent to channel: 0
2026-04-02T15:32:31.201Z INFO  [Meshtastic_SAME_EAS_Alerter] Begin SAME voice message: MessageHeader { message: "ZCZC-EAS-RWT-012057-012081-012101-012103-012115+0030-2780415-WTSP/TV-", offset_time: 47, parity_error_count: 0, voting_byte_count: 69 }
2026-04-02T15:32:31.201Z INFO  [Meshtastic_SAME_EAS_Alerter] No location filter applied (locations empty) or no locations in alert
2026-04-02T15:32:31.201Z INFO  [Meshtastic_SAME_EAS_Alerter] Attempting to send message over the mesh: 📖Received Required Weekly Test from WTSP/TV, Issued By: Broadcast station or cable system, Locations: Hillsborough, Manatee, Pasco, Pinellas, Sarasota
Connected to radio
Sending text message 📖Received Required Weekly Test from WTSP/TV, Issued By: Broadcast to ^all on channelIndex:0 
Waiting for an acknowledgment from remote node (this could take a while)
Received an implicit ACK. Packet will likely arrive, but cannot be guaranteed.
Connected to radio
Sending text message  station or cable system, Locations: Hillsborough, Manatee, Pasco, to ^all on channelIndex:0 
Waiting for an acknowledgment from remote node (this could take a while)
Received an implicit ACK. Packet will likely arrive, but cannot be guaranteed.
2026-04-02T15:33:11.227Z INFO  [Meshtastic_SAME_EAS_Alerter] End SAME voice message
2026-04-02T15:33:11.251Z WARN  [Meshtastic_SAME_EAS_Alerter] Program stopped, no longer monitoring

Working Prototype

This is the bash one-liner to start rtl_fm, tune it to the local NOAA frequency, and set the rate. That gets piped to tee which does 2 things currently:

  1. The audio is piped to play so that I can listen to the broadcast on the laptop's speakers. This will eventually be piped to an Icecast source
  2. Pipes the audio to the Meshtastic SAME EAS Alerter program (the project linked in this post) and configures its settings

When a SANE message is detected, the program decodes it and broadcasts it to the configured channel. Fun fact: the Screech. Screech. Screech you hear before a severe weather alert is actually the encoded version of the emergency alert and what this program decodes.

When I move this all to whatever flavor of Pi I end up using, that'll be wrapped in a systemd unit file so it can run headless and unattended.

$ rtl_fm -f 162.400M -s 48000 -r 48000 | tee >(play -q -r 48000 -t raw -e s -b 16 -c 1 -V1 -v 4 - sinc 125-3.2k) >(Meshtastic-SAME-EAS-Alerter --host 192.168.1.236 --test-channel 0) > /dev/null

Found 1 device(s):
  0:  Realtek, RTL2838UHIDIR, SN: 00000001

Using device 0: Generic RTL2832U OEM
Found Rafael Micro R820T tuner
Tuner gain set to automatic.
Tuned to 162652000 Hz.
Oversampling input by: 21x.
Oversampling output by: 1x.
Buffer size: 8.13ms
Exact sample rate is: 1008000.009613 Hz
Sampling at 1008000 S/s.
Output at 48000 Hz.
2026-04-02T14:20:49.702Z INFO  [Meshtastic_SAME_EAS_Alerter] Successfully connected to the node.
2026-04-02T14:20:49.704Z INFO  [Meshtastic_SAME_EAS_Alerter] Loaded locations CSV
2026-04-02T14:20:49.704Z INFO  [Meshtastic_SAME_EAS_Alerter] Monitoring for alerts
2026-04-02T14:20:49.704Z INFO  [Meshtastic_SAME_EAS_Alerter] Alerts will be sent to channel: 0
2026-04-02T14:20:49.704Z INFO  [Meshtastic_SAME_EAS_Alerter] Test alerts will be sent to channel: 0

[–] IcedRaktajino@startrek.website 2 points 18 hours ago (1 children)

I don't use MQTT currently, but there's several things you can do with it:

  • Pass some messages as plaintext for use in, say, HomeAssistant
  • Bridge meshes over the internet
  • Send/receive ProtoBuf messages from an MQTT client to the Meshtastic node and the mesh
  • Plugging in some of the mesh mapping programs to visualize the mesh

I tried setting up MQTT with HomeAssistant but couldn't get messages to come in correctly. Most likely my own fault but I just never got back to it as I didn't have a specific need in mind when I was setting it up.

[–] IcedRaktajino@startrek.website 2 points 19 hours ago* (last edited 19 hours ago) (3 children)

Most of what I've dealt with were ESP32-based devices like the Heltec V3 (now V4) that have integrated LoRa radios. It should be possible to add on a SX1262 LoRa radio via SPI and flash Meshtastic firmware, but most people just start with a pre-built kit since they're pretty inexpensive and have battery charging circuitry and everything already onboard (which you'd otherwise have to handle yourself with a vanilla ESP32).

I started with the Heltec V3, and the V4 improves several gripes I had with it. They're easy to get started with, lots of case designs available, and generally good entry points.

SeeedStudio has a lot of pre-built options as well. My new daily driver is the SenseCap T1000e which is about the size of a few credit cards stacked together. Posted about it here: https://startrek.website/post/34105873

There's two main flavors of Meshtastic devices: ESP32-based and nRF-based. The former are generally a little less expensive and have WiFi but are a lot more power hungry.

The nRF-based ones are more power efficient and can run longer from smaller batteries. The tradeoff is those only have Bluetooth and lack WiFi. I don't really use WiFi with these, but it can be useful if you want to connect a node to MQTT.

Check out Seeed to see some of their pre-made options: https://www.seeedstudio.com/LoRa-and-Meshtastic-and-4G-c-2423.html

[–] IcedRaktajino@startrek.website 3 points 20 hours ago* (last edited 19 hours ago) (5 children)

Definitely one of the "throw it on the pile" projects for me, too, but I'm for sure throwing it on the top of the pile. Have had quite a few severe storm warnings this year already and this could be pretty useful. I was originally just looking for a way to forward NWS/EAS alerts to Meshtastic from the internet, but getting them direct over-the-air is even better.

Only complicating factor is I have to fashion or buy an antenna for ~150 Mhz since I don't have any adapters that will fit the RTL-SDR (I've just used the little stock UHF TV antenna that came with it for ADS-B and other playing around).

 

I have an RTL-SDR tuner that has been begging for a use, and I may have just found it.

Update: Got a prototype setup on my laptop. Letting it run to see if I can catch a test alert to see if it gets passed to the mesh. Then gonna try to deploy it to a PiZeroW2. Also plan to tee the output to an Icecast sender so other devices on the network can listen to the weather reports. Right now, it's piped to a player to listen to it on the laptop.

Update 2: Managed to catch a weekly test, and it picked it up and forwarded it. Nice. The only problem was the mesh "ate" the first message. Might just be that node I'm using as it's always been problematic using it over TCP/WiFi (the USB-serial chip is broken in this one). So next step is to package this up in a PiZero2W. (Confirmed that specific node is just wonky. Hooked a node up direct to USB and all message parts were successfully received).

Update 3: If you want to test the setup without having to wait for a weekly test, you can download a sample SAME audio clip from Wikipedia (https://en.wikipedia.org/wiki/File:Same.wav). You'll need to convert the sample rate before you can use it, though.

$ ffmpeg -i Same.wav -ar 48000 same48.wav
$ cat same48.wav | Meshtastic-SAME-EAS-Alerter --test-channel 0
2026-04-02T15:32:31.172Z INFO  [Meshtastic_SAME_EAS_Alerter] Successfully connected to the node.
2026-04-02T15:32:31.175Z INFO  [Meshtastic_SAME_EAS_Alerter] Loaded locations CSV
2026-04-02T15:32:31.175Z INFO  [Meshtastic_SAME_EAS_Alerter] Monitoring for alerts
2026-04-02T15:32:31.175Z INFO  [Meshtastic_SAME_EAS_Alerter] Alerts will be sent to channel: 0
2026-04-02T15:32:31.175Z INFO  [Meshtastic_SAME_EAS_Alerter] Test alerts will be sent to channel: 0
2026-04-02T15:32:31.201Z INFO  [Meshtastic_SAME_EAS_Alerter] Begin SAME voice message: MessageHeader { message: "ZCZC-EAS-RWT-012057-012081-012101-012103-012115+0030-2780415-WTSP/TV-", offset_time: 47, parity_error_count: 0, voting_byte_count: 69 }
2026-04-02T15:32:31.201Z INFO  [Meshtastic_SAME_EAS_Alerter] No location filter applied (locations empty) or no locations in alert
2026-04-02T15:32:31.201Z INFO  [Meshtastic_SAME_EAS_Alerter] Attempting to send message over the mesh: 📖Received Required Weekly Test from WTSP/TV, Issued By: Broadcast station or cable system, Locations: Hillsborough, Manatee, Pasco, Pinellas, Sarasota
Connected to radio
Sending text message 📖Received Required Weekly Test from WTSP/TV, Issued By: Broadcast to ^all on channelIndex:0 
Waiting for an acknowledgment from remote node (this could take a while)
Received an implicit ACK. Packet will likely arrive, but cannot be guaranteed.
Connected to radio
Sending text message  station or cable system, Locations: Hillsborough, Manatee, Pasco, to ^all on channelIndex:0 
Waiting for an acknowledgment from remote node (this could take a while)
Received an implicit ACK. Packet will likely arrive, but cannot be guaranteed.
2026-04-02T15:33:11.227Z INFO  [Meshtastic_SAME_EAS_Alerter] End SAME voice message
2026-04-02T15:33:11.251Z WARN  [Meshtastic_SAME_EAS_Alerter] Program stopped, no longer monitoring

Working Prototype

$ rtl_fm -f 162.400M -s 48000 -r 48000 | tee >(play -q -r 48000 -t raw -e s -b 16 -c 1 -V1 -v 4 - sinc 125-3.2k) >(Meshtastic-SAME-EAS-Alerter --host 192.168.1.236 --test-channel 0) > /dev/null

Found 1 device(s):
  0:  Realtek, RTL2838UHIDIR, SN: 00000001

Using device 0: Generic RTL2832U OEM
Found Rafael Micro R820T tuner
Tuner gain set to automatic.
Tuned to 162652000 Hz.
Oversampling input by: 21x.
Oversampling output by: 1x.
Buffer size: 8.13ms
Exact sample rate is: 1008000.009613 Hz
Sampling at 1008000 S/s.
Output at 48000 Hz.
2026-04-02T14:20:49.702Z INFO  [Meshtastic_SAME_EAS_Alerter] Successfully connected to the node.
2026-04-02T14:20:49.704Z INFO  [Meshtastic_SAME_EAS_Alerter] Loaded locations CSV
2026-04-02T14:20:49.704Z INFO  [Meshtastic_SAME_EAS_Alerter] Monitoring for alerts
2026-04-02T14:20:49.704Z INFO  [Meshtastic_SAME_EAS_Alerter] Alerts will be sent to channel: 0
2026-04-02T14:20:49.704Z INFO  [Meshtastic_SAME_EAS_Alerter] Test alerts will be sent to channel: 0

I don't want to repeat what others have already said as that's all pretty accurate. As a rule of thumb, just look at the site sidebar for various instances and just avoid any that base themselves around any form of identity politics. Sadly, that's a lot of them, but life is better without those kinds of attitudes in your face all the time.

I still can't believe one of my favorite Simpsons gags is from a clip show.

[–] IcedRaktajino@startrek.website 1 points 1 day ago (3 children)

AFAIK, yes, memory. There are a lot more packets than just text messages. Telemetry, node info, positions/waypoints, etc.

 
[–] IcedRaktajino@startrek.website 2 points 1 day ago (5 children)

This is from memory and anecdotal, so take it with a grain of salt.

On firmwares below 2.7, I think it only stored the last-received message on the node itself. 2.7+ may store the latest message from up to a few different contacts, but not more than that (if even that). Either way, it's not really meant to operate as a "mailbox" where you can retrieve the messages later; they basically need to go somewhere as they're received.

There's a store-and-forward mode that can be enabled, but it stores all messages for everyone and is more of an infrastructure node role. It also requires hardware that has PSRAM which the Heltec V3's don't have.

[–] IcedRaktajino@startrek.website 7 points 2 days ago (2 children)

There's sound?!

[–] IcedRaktajino@startrek.website 10 points 2 days ago (6 children)

I saved mine for 20 minutes, finally saw my chance, and was immediately slapped down by Purple lol.

[–] IcedRaktajino@startrek.website 9 points 2 days ago (3 children)

I don't have an EV yet, but I already refuse (prefuse? pre-refuse?) to use an app to charge my car which pretty much locks me out of most fast chargers.

I've been WFH since COVID and only drive a few times a week. When I do get an EV hopefully in the next 1-3 years, it's probably going to basically trickle-charge from a modest PV setup. If it takes 3 days to fully charge, so be it; it'd just be sitting there anyway. Though I'll probably wire in a 220v level 2 charger (or whatever they're classified as) on the rare occasion I need a faster charge.

 
33
(Angry Lwaxana Noises) (startrek.website)
submitted 3 days ago* (last edited 3 days ago) by IcedRaktajino@startrek.website to c/risa@startrek.website
 

I know it's not the same dress, but it's definitely something Lwaxana would wear (but surprisingly never did).

Edit: The dress:

 

Just noticed they're used by both Bajorans and Cardassians.

Text in the first panel is irrelevant - it was just the best quality picture I could find for that scene.

 
48
Flashback Friday (startrek.website)
submitted 6 days ago* (last edited 5 days ago) by IcedRaktajino@startrek.website to c/risa@startrek.website
 

Edit: Added part 2

 

Mead is essentially just water mixed with honey that is left to ferment after adding yeast, resulting in what is also called ‘honey wine’, with an ethanol content of usually between 3.5% and 20%. Since soda is mostly water and comes with its own supply of sugar for yeast to feast on, this isn’t such a crazy choice in that respect. Just make sure to remove the carbonation, as the CO2 makes the soda too acidic for the yeast to be happy.

Instead of straight honey, caramelized honey was used for extra flavor after which the brew was left to ferment for a while. For extra flavor notes aged oak, vanilla and cinnamon were added as well, to ensure that the fermentation didn’t erase those core notes of the coke. The result was apparently rather flavorful, with about a 10.5% ethanol content, receiving the full approval of both tame test tasters.

Via Hack-a-Day

 
 

Regardless of the circumstances around its cancelation, the latest 'Star Trek' series has been robbed of the chance almost every other show in the franchise has been given.

[R]egardless of what you believe about Starfleet Academy‘s ending, one thing is certainly true: the series wasn’t given the chance to grow that it deserved.

Although it’s become something of a common belief among Star Trek fans that no series has a great first season (they’re often mixed, sure, but there are definitely diamonds even among the seasons assumed to be the roughest), something the vast majority of Star Trek shows have all been given is time to find their footing. It’s arguably only Prodigy that has faced a similarly unfortunate fate, booted from Paramount’s own streaming service to come to an end on Netflix after just two seasons—and that show likewise faced similar challenges of trying to find a new audience and likely was a predecessor to the ramifications of Paramount preparing itself for acquisition. Even Lower Decks, which faced a similar kind of cultural backlash when it first launched, was given the time to grow into one of the strongest series of Trek‘s latest era.

view more: next ›