OnAirScreen accepts the same command strings over UDP (default port 3310), HTTP (default port 8010), MQTT, OSC, SNMP, and the Web UI. Raspberry Pi GPIO and Axia Livewire GPIO map mixer contacts to the same LED/AIR commands locally; they are not a network API.
Complete manuals: User Manual §7 · Bedienungsanleitung §7 · SNMP MIB · Hotkeys
Replace the IP address with the IP of your OnAirScreen. It is shown in the first footer line after start (press I to show it again).
Set LED1 text and switch it on:
echo "CONF:LED1:text=FOO" > /dev/udp/127.0.0.1/3310 echo "CONF:CONF:APPLY=TRUE" > /dev/udp/127.0.0.1/3310 echo "LED1:ON" > /dev/udp/127.0.0.1/3310
On Windows, shop builds include oas_send.exe (UDP client):
oas_send.exe --ip 192.168.23.5 "LED1:ON"
oas_send-noconsole.exe does the same without opening a console window (use it from playout scripts):
oas_send-noconsole.exe --ip 192.168.23.5 "LED1:ON"
Strings must be URL-encoded:
curl "http://127.0.0.1:8010/?cmd=LED1:ON" curl "http://127.0.0.1:8010/?cmd=NOW:You%20are%20listening%20to%20Queen%20-%20Show%20must%20go%20on"
Status (JSON: LEDs, AIR timers, NOW/NEXT/WARN, silence, loudness I+LRA, instance, version):
curl http://127.0.0.1:8010/api/status
For AIR3, topOfHour is the Top-of-Hour countdown and countDown is true while the radio timer is counting down. silence is independent of the on-screen WARN. lufsI and lra are null until enough audio has been measured.
Command:
curl "http://127.0.0.1:8010/api/command?cmd=LED1:ON"
Web settings (optional PIN via X-Settings-Token after POST /api/settings/auth): see the manuals. HTTP CMD:REBOOT / CMD:SHUTDOWN require that PIN when one is set. UDP, MQTT, OSC, GPIO, and SNMP stay unauthenticated.
Open http://127.0.0.1:8010/ (or the instance IP) in a browser.
1–4 toggle LEDs (ignored while typing)Configure MQTT under Settings → Network (server, port, username, password, device name).
The base topic is onairscreen plus the last 6 hex characters of the MAC address, e.g. onairscreen_a1b2c3. Autodiscovery creates LED and AIR switches, AIR time sensors, AIR3/AIR4 reset, AIR3 Top-of-Hour, NOW/NEXT/WARN text, Warning/Silence binary sensors, instance sensor, and loudness I+LRA switch/reset/sensors. The Home Assistant device name becomes OnAirScreen (Studio-1) unless the instance name is already in the MQTT device name.
Command topics (payload as shown):
| Topic | Payload |
|---|---|
{base_topic}/led{1-4}/set | ON / OFF / TOGGLE |
{base_topic}/air{1-4}/set | ON / OFF / TOGGLE |
{base_topic}/air{3-4}/reset | PRESS |
{base_topic}/air3/toh | ON / OFF / TOGGLE |
{base_topic}/lufs/integrated/set | ON / OFF / TOGGLE / RESET |
{base_topic}/lufs/integrated/reset | PRESS |
{base_topic}/text/now/set | text |
{base_topic}/text/next/set | text |
{base_topic}/text/warn/set | text |
Status topics (published automatically):
| Topic | Payload |
|---|---|
{base_topic}/led{1-4}/state | ON / OFF |
{base_topic}/air{1-4}/state | ON / OFF |
{base_topic}/air{1-4}/time | seconds (integer) |
{base_topic}/air3/toh/state | true / false |
{base_topic}/text/{now,next,warn}/state | text |
{base_topic}/warning/active | true / false |
{base_topic}/silence/active | true / false |
{base_topic}/lufs/integrated/state | ON / OFF |
{base_topic}/lufs/i | I in LUFS (empty if unknown) |
{base_topic}/lufs/lra | LRA in LU (empty if unknown) |
{base_topic}/instance/state | instance name |
mosquitto_pub -h mqtt-broker -t onairscreen_a1b2c3/led1/set -m "ON" mosquitto_pub -h mqtt-broker -t onairscreen_a1b2c3/air3/toh -m "TOGGLE" mosquitto_pub -h mqtt-broker -t onairscreen_a1b2c3/lufs/integrated/set -m "ON" mosquitto_pub -h mqtt-broker -t onairscreen_a1b2c3/text/now/set -m "Current Song"
The astrastudio OnAirScreen module drives Stream Decks over HTTP (GET /api/command) and live status over WebSocket (HTTP port + 1) with poll fallback to /api/status. OSC is not required. See the manuals §7.6. Generic OSC remains a fallback.
Enable OSC under Settings → Network. Prefix is /oas. Integers 1/0 mean ON/OFF; no argument means TOGGLE. Text uses a string argument. Full address list: manuals §7.7.
python3 utils/oas_osc_send.py /oas/led1 python3 utils/oas_osc_send.py /oas/led1 1
Enable SNMP under Settings → Network. SNMPv2c and SNMPv3 (SHA-256, AES-128). Default listen port 1161. MIB, OIDs, and SET/trap notes: onairscreen:mib-en.
These strings work on UDP, HTTP ?cmd=, REST /api/command, MQTT (via the mapped topics or raw command), OSC /oas/command, and SNMP oasCommand.
| Command | Function |
|---|---|
LED{1-4}:[ON/OFF/TOGGLE] | Switch LED |
NOW:TEXT | Set NOW (first footer line) |
NEXT:TEXT | Set NEXT (second footer line) |
WARN:TEXT | Warning, priority 0 |
WARN:1:TEXT | Warning, priority Medium |
WARN:2:TEXT | Warning, priority High |
WARN: | Clear priority 0 |
WARN:1: | Clear priority 1 |
WARN:2: | Clear priority 2 |
AIR1:[ON/OFF/TOGGLE] | Microphone timer |
AIR2:[ON/OFF/TOGGLE] | Phone timer |
AIR3:[ON/OFF/RESET/TOGGLE] | Radio timer |
AIR3TIME:seconds | Set radio timer (seconds) |
AIR3TOH:[ON/OFF/TOGGLE] | Top-of-Hour countdown on AIR3 |
AIR4:[ON/OFF/RESET/TOGGLE] | Stream timer |
LUFSI:[START/STOP/TOGGLE/RESET] | Programme I + LRA (reset restarts if running, hides I+LRA if stopped) |
FULLSCREEN:[ON/OFF/TOGGLE] | Main window fullscreen |
CMD:REBOOT | OS reboot (HTTP requires Web Settings PIN when set) |
CMD:SHUTDOWN | OS shutdown (HTTP requires Web Settings PIN when set) |
CMD:QUIT | Quit OnAirScreen |
Format: CONF:GROUP:PARAMETER=VALUE. Changes are applied and saved only after CONF:CONF:APPLY=TRUE.
| Command | Description |
|---|---|
CONF:General:stationname=TEXT | Station name |
CONF:General:instancename=TEXT | Instance name (DNS label) |
CONF:General:slogan=TEXT | Slogan |
CONF:General:stationcolor=COLOR | Station color |
CONF:General:slogancolor=COLOR | Slogan color |
CONF:General:replacenow=[True/False] | Replace IPs after 10 s |
CONF:General:replacenowtext=TEXT | Replacement text |
CONF:LED[1-4]:used=[True/False] | Enable LED |
CONF:LED[1-4]:text=TEXT | LED text |
CONF:LED[1-4]:activebgcolor=COLOR | LED active background |
CONF:LED[1-4]:activetextcolor=COLOR | LED active text |
CONF:LED[1-4]:autoflash=[True/False] | Autoflash |
CONF:LED[1-4]:timedflash=[True/False] | 20-second flash |
CONF:Clock:face=FACE | digital, analog, analog_numbers, analog_studio, analog_railway, analog_24h_smooth, analog_24h_ticking |
CONF:Clock:digital=[True/False] | Digital / classic analog (legacy) |
CONF:Clock:showseconds=[True/False] | Show seconds |
CONF:Clock:secondsinoneline=[True/False] | Seconds on one line |
CONF:Clock:staticcolon=[True/False] | Static colon |
CONF:Clock:digitalhourcolor=COLOR | Hour color |
CONF:Clock:digitalsecondcolor=COLOR | Seconds color |
CONF:Clock:digitaldigitcolor=COLOR | Digit color |
CONF:Clock:logopath=PATH | Logo path |
CONF:Clock:logoupper=[True/False] | Logo on top |
CONF:Network:udpport=PORT | UDP port |
CONF:Network:tcpport=PORT | HTTP port |
CONF:Audio:enabled=[True/False] | Audio meters on/off |
CONF:Audio:source=[device/livewire/aes67] | Audio source |
CONF:Audio:input_device=DEVICE_NAME | Local input device |
CONF:Audio:livewire_channel=N | Livewire channel |
CONF:Audio:livewire_iface=IP_OR_EMPTY | AoIP interface IP |
CONF:Audio:aes67_id=ORIGIN_HASH | AES67 stream id |
CONF:Audio:aes67_addr=MULTICAST | AES67 multicast |
CONF:Audio:aes67_port=PORT | AES67 RTP port |
CONF:Audio:aes67_name=NAME | AES67 display name |
CONF:Audio:aes67_codec=[L16/L24] | AES67 codec |
CONF:Audio:aes67_rate=48000 | AES67 sample rate |
CONF:Audio:aes67_channels=2 | AES67 channel count |
CONF:Audio:aes67_manual=[True/False] | AES67 pasted SDP |
CONF:Audio:unit=[dbfs/dbtp/bbc_ppm] | L/R display unit |
CONF:Audio:layout=[lr/lufs/both] | Meter layout |
CONF:Audio:display_style=[solid/bargraph] | Meter style |
CONF:Audio:meter_width=79 | Meter width (pixels) |
CONF:Audio:lufs_reference_preset=PRESET | LUFS preset |
CONF:Audio:lufs_reference=-23.0 | LUFS target |
CONF:Audio:peak_hold=[True/False] | Peak hold on/off |
CONF:Audio:peak_hold_seconds=1.5 | Peak hold duration |
CONF:Audio:tooloud=[True/False] | TooLoud on/off |
CONF:Audio:tooloudtext=TEXT | TooLoud text |
CONF:Audio:tooloud_threshold_dbtp=-1.0 | TooLoud threshold |
CONF:Audio:tooloud_action=[warning/led] | TooLoud action |
CONF:Audio:tooloud_led=[1/2/3/4] | TooLoud LED |
CONF:Audio:silence=[True/False] | Silence Detection |
CONF:Audio:silence_warn=[True/False] | Silence WARN on/off |
CONF:Audio:silence_on_absent=[True/False] | Absent as silence |
CONF:Audio:silence_text=TEXT | Silence WARN text |
CONF:Audio:silence_threshold_dbfs=-50.0 | Silence threshold |
CONF:Audio:silence_duration_s=10.0 | Silence duration (s) |
CONF:Audio:silence_recovery_s=2.0 | Silence recovery (s) |
CONF:Audio:silence_http_url=URL | Silence HTTP GET URL |
CONF:Timers:TimerAIR[1-4]Enabled=[True/False] | Enable AIR |
CONF:Timers:TimerAIR[1-4]Text=TEXT | AIR label |
CONF:Timers:TimerTOTHText=TEXT | TOTH timer label |
CONF:Timers:AIR[1-4]activebgcolor=COLOR | AIR active background |
CONF:Timers:AIR[1-4]activetextcolor=COLOR | AIR active text |
CONF:Timers:AIR[1-4]iconpath=PATH | AIR icon path |
CONF:Timers:TimerAIRMinWidth=PIXELS | AIR minimum width |
CONF:CONF:APPLY=TRUE | Apply configuration |
CONF:Audio:unit=lufs is still accepted as an alias that sets layout to lufs (L/R unit stays dbtp).
Colors: web hex (#00FF00), 0x00FF00, or SVG named colors.
HTTP GET or UDP NOW: / NEXT: — see the howtos on the wiki start page (mAirList, Myriad, PlayoutONE, ProppFrexx, RadioBOSS, RadioDJ, StationPlaylist, RCS Zetta).