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.
- 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.
- 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.
- 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
- 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.
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.
This version of OATIS is built to run on Python 3.11.8.
pip3 install -r requirements.txt
sudo apt-get install sqlite3
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
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!
Open Arduino IDE and navigate to File > Examples > FirmataExpress > FirmataExpress
Upload the Sketch to your Board, your now ready to use the microcontroller with OATIS.
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.
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.
Once selected hit save.
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)
Use the COM port dropdown to select the USB-Serial port to use to communicate with the Arduino
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.
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.
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.
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.
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.
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.
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.
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.
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:
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.
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.
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.
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.
If you've set everything correctly, Message Groups assigned ot devices will populate in the GUI.
The status bar will show as below:
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.
Select from the active messages column the messages you want to stop.
Hit the red arrow button.
/{trigger_group_name}/signal-lights/{indicator_number} => Args: ("state")
state = 1 => Signal Light On
state = 0 => Signal Light Off