Skip to content

jamiehull/OATIS

Repository files navigation

OATIS - On Air Tally Indicator System

logo

Overview

OATIS is a tally indicator system for use in Radio and TV that is platform agnostic, designed to run on Mac OSX and Linux, support is not gauranteed for Windows as it has not currently been tested (I don't own a Windows PC...).

Designed to operate in a server-client model, multiple displays can be centrally managed using a lightweight server application and configuration tool.

Tally's can be triggered either from Physical GPI's or via OSC commands.

Features

Customizable displays:

  • Configure the number of indicators to display(currently up to 6), their colour and text. (More indicators will be available in the next release)
  • Customizable logos.
  • Choose between Analogue and Studio Style Clocks.
  • Choice of a variety of display layouts.
Layout Layout Layout Layout

Messaging:

  • Client displays can be used to show short messages by way of a scrolling ticker at the top of the screen.
  • The background colour of each message can be chosen by the user.
  • Clients are segregated into logical Messaging groups for sending messages to a group of clients.
  • Message console application for sending messages to clients.
Client Showing Messaging Function Message Console

Physical and Network triggers:

  • Support for physical GPI's using the Arduino Uno R3 - (Arduino Mega support to be added in next release)
  • Support for network triggers using the OSC Protocol

Remote management of Display Devices:

  • Device settings can be changed remotley using the configuration tool
  • Display customizations can be sent to the device for rendering
  • Devices can be idented using the configuration tool, bringing up a device information screen showing the clients configuration.
Identify Screen

Terminology

Controllers - Physical GPIO Controllers used for inputs / outputs.
Trigger Group - A logical group of OSC Network Triggers and Physical Controller triggers used to change the state of client widgets.
Message Group - A logical group of devices messages can be sent to.
Display Template - A template used to render a client display with the correct colours, labels and layout.
Devices - A client display device.

Setup

This version of OATIS is built to run on Python 3.11.8.

Install the Dependencies in the requirements.txt file

pip3 install -r requirements.txt

Install SQlite

sudo apt-get install sqlite3

Microcontroller Setup

If you are using Physical GPI's the Arduino needs to be flashed with the Firmata code to enable communication via serial with OATIS. See below for steps how to do this.
Currently the application has been designed to use the Arduino Uno R3 Microcontroller for GPI's using the Firmata protocol to notify the application of GPI state changes.

Open Arduino IDE, navigate to Tools > Manage Libraries

logo

In the search box type "firmata express"

Select version 1.2.0 and hit install, you will probably get a prompt asking if you want to install with dependencies, select yes!

logo

Open Arduino IDE and navigate to File > Examples > FirmataExpress > FirmataExpress

logo

Upload the Sketch to your Board, your now ready to use the microcontroller with OATIS.

Build the Database - It's not as scrary as it sounds...I promise!

OATIS will not run without a valid database file. The database needs to be built using the config tool.
Launch the Config tool using the main_config_tool.py script.
A prompt will show on the first run as below, select yes. The required tables and default data the application needs to run will be built and added. Config tool will then continue to boot.

Screenshot 2025-09-22 at 21 47 50

Set Server IP Address

Launch the Config tool using the main_config_tool.py script, navigate to the Server Config tab.
Select IP Settings.
Use the dropdown to select the interface you would like to use for server communication. Each entry in the dropdown will be an ip address of an active interface on the machine.
A loopback IP address will also be shown which can be used for system testing if you want to run the client and server on the same machine.

logo

Once selected hit save.

Adding Microcontrollers

Navigate to the GPIO Config tab.
Hit Add Controller.
Enter a name for the controller.
If the controller is running on the same machine as the server - select local
If the controller is running on another machine - select remote (Not yet implemented - Will be in next release)

logo

Use the COM port dropdown to select the USB-Serial port to use to communicate with the Arduino

logo

Use the Controller type dropdown to select the Arduino Board you are using. At the moment there is only support for the Uno R3.
Under GPIO Configuration select the pins you are going to use as inputs and mark any unused pins as disabled.

logo

Once done, hit save.

PLEASE NOTE: Any changes to the COM Port, or Pin configuration will require a server restart for these changes to take effect.
Controller config is uploaded to the Arduino on Server boot.

Creating Trigger Groups

Trigger Groups are used to group physical and logical triggers to target indicator lights.
Trigger Types:

  • Controller: A Physical GPI on a microcontroller
  • Network: An inbound OSC Message

Go to the Trigger Groups Tab
Set a name for the Trigger Group.
For each indicator choose the controller that will be the source trigger.
If the network controller is selected, an OSC address for triggering that indicator will automatically populate.
If a physical controller is selected select the source GPI.
If you are not planning on using all the indicators leave these set to Network.

Screenshot 2025-09-19 at 08 21 30

Creating Message Groups

Message groups are used to logically group displays when sending messages to them.
Go to the Messaging Groups tab, enter a name for your message group and hit save.

Screenshot 2025-09-19 at 08 29 43

Adding logos to the database

Logos should have an aspect ratio of 30:9 to avoid scaling issues, e.g. 300 x 90 or 600x180, add an appropriatley sized logo depending on your intended display resolution.
Images must be in PNG format.
To add a logo image head to the Image Store tab.
Click add image then click select an image file.
Once the preview is shown, hit save.

Screenshot 2025-09-19 at 08 40 57

Creating Display Templates

Head to the Display Templates tab.
Name the display template.
Select the desired layout, currently the options are fullscreen clock or clock with indicators.
Select the logo you want to use, the ones uploaded should appear in the dropdown.
Select your clock type.
Select the number of indicators to display. Screenshot 2025-09-19 at 23 30 41

In the indicators section, set the label for the indicator.
The True / False dropdown is used to determine whether the indicator flashes or not. True = Flash, False = No Flash, Steady On.
Select "Click to choose colour" to select the indicator on colour.
Do this for each indicator then hit save.

Screenshot 2025-09-19 at 23 34 33

Adding a Client Display Device

Click on the Device Config tab.
Name the device.
Set it's IP address.
Set it's location, this is used for logical grouping.
Select the Messaging and Trigger Group from the dropdown.
Select the Display Template from the dropdown.
Hit save.

When a client has been added three buttons will be available below the device settings allowing the user to reload the display template if changes are made, and identify the device.

Screenshot 2025-09-19 at 23 38 14

Launching the Server

Launch the server using the main_server.py script.
Make sure any physical GPIO controllers are plugged in when launching hte server application and that you have set the server IP address in config tool before launching.
If you don't set the IP address the server will default to the loopback address of 127.0.0.1.
If you change the server IP address when the server is running, you will need to restart the server for this to take affect.

The server will report it's status at regular intervals, if everything is ok the terminal output should look similar to below:

Screenshot 2025-09-20 at 18 33 09

Launching the Remote Client

Launch the main_client.py script. On the first run the terminal window will prompt you to set the IP address to use for the client and the server, follow the prompts.
Once these IP's have been set the client will boot straight up in future.
If you need to change these in the future amend the settings file in /client/data/settings.json and reboot the client.

Screenshot 2025-09-20 at 20 16 45

If the client has a successfull connection to the server, the small circular indicator in the bottom of the clockface will remain grey. If the server cannot be reached this will flash red.

Launching the Message Console

Launch the main_message_console.py script.
On first run it will default to the loopback address and will probably show Server Offline if the server is using a different IP.

Screenshot 2025-09-20 at 20 29 48

To set the IP of the Message Console, hit ESC to bring up the configuration window.
Use the dropdown to set the device IP and enter the Server IP.
Hit Save, you will automatically return to the Message Console main screen.

Screenshot 2025-09-20 at 20 33 06

If you've set everything correctly, Message Groups assigned ot devices will populate in the GUI.
The status bar will show as below: Screenshot 2025-09-20 at 20 34 11

Sending a Message

Use the top free-text field to enter your message.
Choose a background colour.
Select which message groups you want to send the message to and move these to the selected groups column using the arrow.
Once happy click the green arrow to make the message active.
The message groups will move to the active messages column.

Screenshot 2025-09-20 at 21 16 21

Stopping a message

Select from the active messages column the messages you want to stop.
Hit the red arrow button.

API's

Server API - For Interaction by external devices and software - OSC Protocol - UDP Port 1337

Triggering a Signal Light on or off

/{trigger_group_name}/signal-lights/{indicator_number} => Args: ("state")

state = 1 => Signal Light On
state = 0 => Signal Light Off

About

On Air Tally Indicator System

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages