Let me explain what this is all about.
I have ASL running on a VPS, with MMDVM_Bridge and Analog_Bridge parked on a private ASL node connected to the publicly accessible node.
This public node also has a pair of streams -- one to my personal Icecast server, the other to Broadcastify.
I have enabled telemetry on the public node, so that anyone listening to the stream gets courtesy tones and connect/disconnect messages. These, of course, don't propogate to DMR and D-STAR, because that's just a terrible idea.
Here's what I want to do next.
It would be nice if the ASL node could announce the call sign of anyone who keys up on DMR, but, say, only once per hour. Otherwise, quick keys and QSOs would be really, really annoying.
There is a script from HamVoIP which can be used to easily speak call signs, and I have replaced the sound pack with a much faster, more efficient set, so it takes about 70% less time to get through a call sign than with Allison.
My thought was to try and write something that would grep a relevant line from MMDVM_Bridge.log for a pattern, store the last call sign as a variable, look for that call sign in a file that would be deleted once an hour. If that call exists in the file, do nothing. Otherwise, pass the call sign as an argument to the speaktext script, then append it to the end of the file so that it isn't spoken again until the file is flushed.
The one thing I am unsure of is how to make this script fire at the right point in time. I want to run this script, ideally, after someone keys or unkeys, which ever would work out best. Failing that, configure Asterisk to use the tailmessage at a very short interval, pointing it at a specific file which is deleted after being played, and running the script in a loop in the background, with checks for the existence of files so it doesn't do unnecessary stuff, using /tmp so as to avoid lots of disk reads and writes.
I doubt anyone has done this before, but mostly what I'm looking for is best practices, and if this is even feasible, or if I'm going about this all the wrong way.