Mutara

Announcements inside

Announcements go through one queue. The queue waits for the idle slot: a short quiet time after the last talker. Nothing that the node sends by itself plays over a talker, except the timeout warning.

Kinds of announcement #

KindExamples
linkA link connects or disconnects.
status*70 and the other status commands.
timeThe time that someone asks for, with *722.
commandThe reply to a DTMF command.
weatherA new weather alert or the all clear.
Timed reportsThe hourly time and the current weather at an interval.
Station IDThe ID at id_interval.

The queue #

Figure 1. How the node holds and plays announcements.
Text version of figure 1
  1. An announcement goes into the queue.
  2. If an announcement of the same kind (time, tail or timed report) is already in the queue, the new one replaces it.
  3. The announcement waits for the idle slot. The slot opens when nobody has talked for announce_idle (2 seconds): no local receive, no link audio to local users and no web or app talker.
  4. In the slot, the node keys up, waits keyup_delay and plays the station ID if it is due. Then it plays all the waiting announcements, in order.

An announcement does not expire. If a talker starts before the slot opens, the announcement waits for the next slot. If a talker starts before an announcement starts to play, the node holds it again. The node makes the words when the announcement plays, so the time and the weather are correct then.

Only the timeout warning plays over a talker. Link and command answers, weather alerts, the alert tail, timed reports and the ID all wait for the slot, in duplex and in simplex mode. When the hourly time and the current weather are due at the same time, the node says them in one report.

In simplex mode (duplex 0 or 1), the node never keys the transmitter while it receives a local signal. This applies to the ID, the announcements, the courtesy tone and the ack tone. The hang time also stops when a local signal starts.

Timed reports play only in report_hours, which is 7-22 when empty.

Voices #

  • Built-in voice. The node has the Allison clips from the Asterisk and app_rpt prompts. It needs no network.
  • CW. With telemetry: cw, the node sends the announcements in CW, at cw_wpm and cw_freq.
  • Voice server. With voice_server.url, the node asks a Kokoro voice server for speech. It can then say node names, callsigns and weather alerts. The node keeps a copy of each answer in voice-cache/ in the state folder. To set up a voice server, read the voice server guide.

The node asks the voice server for most speech before it plays: the ID, the timed reports, the node names and the time. These requests can wait. They go one at a time. Each one has a time limit: the time when its announcement plays, or 10 minutes. A request that a listener waits for goes at once. There is no setting for this.

If the voice server does not answer in time, the node says the announcement with the built-in voice. Text that only the voice server can say, such as a weather alert, is dropped. The Health page counts both cases.

Caution: The voice server has no password. Keep it on your own network.

Station ID #

The ID comes due 1 minute before id_interval, or at 90% of a short interval (for example at 9 minutes of 10). It then waits for the idle slot and plays first in it. Other announcements in the slot also bring the ID if it is due. If no slot comes before the full id_interval, the node sends a CW ID over the talker on a duplex repeater. In simplex mode, the node sends this CW ID immediately after the local signal stops.

id_mode is cw, voice (the callsign spelled out) or both. id_text changes the text, for example N0CALL/R. With a voice server, voice_server.id_text is the spoken ID. It must contain the callsign.

Node names and callsigns #

With a voice server, allstar.node_names lets the node say a name in place of a number. With say_callsigns and the node database, the node spells the callsign of a node.

Weather alerts #

  • The node gets the alerts from api.weather.gov every 60 seconds. This works in the United States only.
  • It uses the county and zone codes in weather.zones. Keep both codes, because some warnings come by county.
  • weather.groups selects the alert types: tornado, thunderstorm, flood, tropical, tsunami, winter, wind, cold_heat, fire, dust and fog.
  • A new alert is the kind weather. all_clear says when the last alert ends.
  • tail_interval repeats the alerts in effect after a conversation, at most at that interval.
  • report_interval gives the current weather from weather.station, or the nearest station, as a timed report.
  • *76 gives the current weather and the alerts at any time.

The weather service is for the whole install. Each node can set enabled, tail_interval and report_interval in its module file.