Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| onairscreen:manual-en [04.09.2026 00:57] – external edit 127.0.0.1 | onairscreen:manual-en [27.09.2026 02:22] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 2: | Line 2: | ||
| # OnAirScreen – User Manual | # OnAirScreen – User Manual | ||
| - | **Version: | + | **Version: |
| **Author:** Sascha Ludwig, [astrastudio.de](http:// | **Author:** Sascha Ludwig, [astrastudio.de](http:// | ||
| **Project: | **Project: | ||
| Line 11: | Line 11: | ||
| ## Table of Contents | ## Table of Contents | ||
| - | 1. [Overview](# | + | 1. [Overview](# |
| - | 2. [Installation and Startup](#2-installation-and-startup) | + | 2. [Installation and Startup](#installation_and_startup) |
| - | 3. [Main Screen](#3-main-screen) | + | 3. [Main Screen](#main_screen) |
| - | 4. [Keyboard Shortcuts (Hotkeys)](# | + | 4. [Keyboard Shortcuts (Hotkeys)](# |
| - | 5. [Settings Dialog](#5-settings-dialog) | + | 5. [Settings Dialog](#settings_dialog) |
| - | 6. [Features in Detail](#6-features-in-detail) | + | 6. [Features in Detail](#features_in_detail) |
| - | 7. [Remote Control and API](#7-remote-control-and-api) | + | 7. [Remote Control and API](#remote_control_and_api) |
| - | 8. [Presets (Profiles)](# | + | 8. [Presets (Profiles)](# |
| - | 9. [Command-Line Options](#9-command-line-options) | + | 9. [Command-Line Options](# |
| - | 10. [Configuration Storage Location](#10-configuration-storage-location) | + | 10. [Configuration Storage Location](#configuration_storage_location) |
| - | 11. [Troubleshooting](# | + | 11. [Troubleshooting](# |
| --- | --- | ||
| Line 39: | Line 39: | ||
| - **Text lines** NOW, NEXT, and WARN (with priority system) | - **Text lines** NOW, NEXT, and WARN (with priority system) | ||
| - **Weather widget** (OpenWeatherMap) | - **Weather widget** (OpenWeatherMap) | ||
| - | - **Remote control** via keyboard, mouse (double-click/ | + | - **Remote control** via keyboard, mouse (double-click/ |
| - **Home Assistant integration** via MQTT Autodiscovery | - **Home Assistant integration** via MQTT Autodiscovery | ||
| - | - **GPIO inputs** on Raspberry Pi (mixer GPI via optocoupler | + | - **GPIO inputs** on Raspberry Pi (mixer GPI via optocoupler), **Axia Livewire GPIO** (multicast or LWRP TCP 93, e.g. mic ON lamp), |
| + | - **Instance links**: 1→n replicas (full LED/AIR/ | ||
| The application starts in **fullscreen mode** by default with the mouse cursor hidden, making it suitable for dedicated studio monitors, Raspberry Pi setups, and touch-free operation. | The application starts in **fullscreen mode** by default with the mouse cursor hidden, making it suitable for dedicated studio monitors, Raspberry Pi setups, and touch-free operation. | ||
| Line 53: | Line 54: | ||
| ## 2. Installation and Startup | ## 2. Installation and Startup | ||
| + | Ready-to-run builds for Windows, macOS, Linux, and Raspberry Pi are available from the [astrastudio shop](https:// | ||
| + | OnAirScreen starts in **fullscreen** with the mouse cursor hidden. Open Settings with `Ctrl+S` (macOS: `Cmd+S`). Changes apply only after **Apply**. | ||
| - | ### Requirements | + | ### Windows |
| - | - **Python 3.11+** with PySide6 | + | 1. Download `OnAirScreen_*_Win_x64.msi` |
| - | - Dependencies: see `requirements.txt` | + | 2. Double-click the MSI and follow the installer. A per-machine install needs administrator rights. |
| - | - Network access for UDP/ | + | 3. OnAirScreen is installed to `C:\Program Files\OnAirScreen`. |
| + | 4. Start it from the **Start** menu or the desktop shortcut. | ||
| + | The Start menu folder also contains **OAS Send** (command sender) and **OAS Send (no console)**. Settings live in the Windows Registry; logs under `%LOCALAPPDATA%\astrastudio\OnAirScreen\logs\`. | ||
| + | An older portable `.exe` is **not** removed by the MSI. Delete that copy yourself after installing. | ||
| - | ### Starting | + | Windows only syncs internet time about once a week by default, which can show the wrong clock if the time source is **Local**. Shorten the OS sync interval, or use NTP / PTP / LTC in OnAirScreen (see [5.8 Time Source](#time_source)). |
| + | |||
| + | ### macOS | ||
| + | |||
| + | 1. Download `OnAirScreen_*_macOS.dmg`. | ||
| + | 2. Open the DMG and drag **OnAirScreen.app** into **Applications**. Do not run it from the DMG. | ||
| + | 3. Start OnAirScreen from Applications, | ||
| + | |||
| + | Shop builds are signed with an Apple Developer ID and notarized. After you copy the app to Applications, | ||
| + | |||
| + | ### Linux (Debian / Ubuntu / Raspberry Pi OS) | ||
| + | |||
| + | Official builds are a `.deb`. After install the app lives in `/ | ||
| + | |||
| + | |||
| + | | Shop ZIP | Package inside | ||
| + | | --------------------------- | ------------------------------------ | ------------ | ---------------------- | | ||
| + | | `OnAirScreen_Linux_x64.zip` | `OnAirScreen_*_Linux_x64.deb` | ||
| + | | `OnAirScreen_PiOS_x64.zip` | ||
| + | |||
| + | |||
| + | Check with `dpkg --print-architecture`. The two packages are not interchangeable. | ||
| + | |||
| + | Raspberry Pi: 64-bit OS on Zero 2 W, Pi 3 / 4 / 400, CM4, Pi 5 / 500, CM5. Not supported: Pi 1 and classic Zero. You need a graphical desktop, not Lite without a GUI. | ||
| + | |||
| + | Unzip the download, then install with **apt** (not `dpkg -i` alone) so PortAudio, OpenGL, and Xcb are pulled in. The `./` in front of the file is required: | ||
| ```bash | ```bash | ||
| - | python start.py | + | unzip OnAirScreen_Linux_x64.zip |
| + | cd ~/ | ||
| + | sudo apt update | ||
| + | sudo apt install ./ | ||
| ``` | ``` | ||
| + | Start from the application menu or run `onairscreen`. Updates: install the new `.deb` the same way; settings are kept. Uninstall with `sudo apt remove onairscreen` (config in `~/.config` stays). | ||
| + | |||
| + | If you used `dpkg -i` and dependencies are missing: `sudo apt -f install`. | ||
| + | |||
| + | Packages are OpenPGP-signed. Optional verification: | ||
| + | |||
| + | ### Fedora | ||
| + | |||
| + | The Fedora RPM is built on Fedora 44 (Fedora 44+). Older RHEL, Rocky, or Alma may fail because of glibc. | ||
| + | |||
| + | ```bash | ||
| + | sudo rpm --import https:// | ||
| + | sudo dnf install ./ | ||
| + | ``` | ||
| + | |||
| + | `dnf` pulls in PortAudio and other system libraries. Check the signature with `rpm -K OnAirScreen_*_Fedora_x64.rpm` (expected: `digests signatures OK`). | ||
| + | |||
| + | ### Raspberry Pi SD-card image | ||
| + | |||
| + | The [SD-card image](https:// | ||
| + | |||
| + | Use [Raspberry Pi Imager](https:// | ||
| + | |||
| + | - [macOS](https:// | ||
| + | - [Windows](https:// | ||
| + | - [Ubuntu x86](https:// | ||
| + | |||
| + | 1. Insert a microSD card. | ||
| + | 2. Start Raspberry Pi Imager. | ||
| + | 3. **Choose OS** → **Use custom** → select the OnAirScreen `.img` file (not the `.zip`). | ||
| + | 4. **Choose storage** (or **Choose SD Card**) and select the card. | ||
| + | 5. **Write**. | ||
| + | Default user: `pi` / password `OnAirScreen1!`. Hostname: `onairscreen`. Change the password after first boot. SSH is enabled. Host reboot and shutdown from OnAirScreen (Settings, Web UI, or `CMD: | ||
| - | ### Precompiled Versions | + | On the desktop: **OnAirScreen**, |
| - | Ready-to-run binaries for Windows, Linux, macOS, and Raspberry Pi are available at [astrastudio.de/shop](https:// | + | If you already |
| ### First Startup | ### First Startup | ||
| Line 87: | Line 154: | ||
| The main screen is divided into the following areas: | The main screen is divided into the following areas: | ||
| - |  | ||
| + | |||
| + | Shop builds must be activated. Self-built OpenSource builds are not. | ||
| + | |||
| + | 1. Copy the update key from the customer portal into **Update Key**. | ||
| + | 2. **Activate** (needs internet) or copy the **Hardware ID**, download a license file in the portal, and **Import license file**. | ||
| + | 3. The activation is valid for one year unless your order is set differently. The Updates tab shows whether this computer can renew online now. If the license server is not reachable, download a new license file in the portal and import it before the activation expires. The update key stays the same. You do not buy a new key. | ||
| + | 4. To move the license, choose **Return license**, then redeem the return code in the portal (or it is redeemed automatically when this computer is online). Activate the new computer. A dead computer can only be released by astrastudio support. | ||
| + | 5. Without a license, OnAirScreen runs fully for 14 days. After that it stays visible but cannot go fullscreen, use GPIO or audio meters, or save settings. The window is limited to 1280×800 and the app closes after 15 minutes. The same limits apply when a license has expired. | ||
| + | 6. At startup the update key is checked with the license server even when **Check for Updates** is off. If the server rejects the key, the license on this computer is removed at once and the same limits apply. Later starts do not repeat that automatic check or the notice. **Check now** still runs. A missing network connection does not remove the license. A new activation checks the key again. | ||
| + | |||
| + | If this activation does not fit your use case, contact us via the [contact form](https:// | ||
| + | |||
| + | The same actions are in the Web UI settings overlay. | ||
| --- | --- | ||
| - | ### 5.2 Network | + | |
| + | |||
| + | ### 5.3 Network | ||
| Line 346: | Line 450: | ||
| - | | Setting | + | | Setting |
| - | | ----------------- | --------------------------- | ------------- | ------------------------- | | + | | ----------------- | --------------------------- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |
| - | | UDP Port | `Network/ | + | | UDP Port | `Network/ |
| - | | HTTP Port | `Network/ | + | | HTTP Port | `Network/ |
| - | | Multicast Address | `Network/ | + | | Multicast Address | `Network/ |
| - | | Web Settings PIN | `Network/ | + | | Web Settings PIN | `Network/ |
| + | |||
| Line 374: | Line 480: | ||
| - | | Setting | + | | Setting |
| - | | ------------------ | ------------------ | --------- | -------------------------------------------------------- | | + | | ------------------ | ----------------- | --------- | -------------------------------------------------------- | |
| - | | enable OSC support | + | | enable OSC support | `OSC/ |
| - | | OSC Listen Port | `OSC/ | + | | OSC Listen Port | `OSC/ |
| - | | OSC Send Host | `OSC/ | + | | OSC Send Host | `OSC/ |
| - | | OSC Send Port | `OSC/ | + | | OSC Send Port | `OSC/ |
| Send Host is only needed for unsolicited status push (Companion button feedback). Queries always reply to the UDP sender. | Send Host is only needed for unsolicited status push (Companion button feedback). Queries always reply to the UDP sender. | ||
| - | --- | + | #### SNMP |
| - | ### 5.3 Time Source | ||
| - | The display clock can follow | + | | Setting |
| + | | ------------------- | ------------------------- | --------- | ---------------------------------------------------- | | ||
| + | | enable SNMP support | `SNMP/ | ||
| + | | SNMP Listen Port | `SNMP/ | ||
| + | | sysContact | ||
| + | | sysLocation | ||
| + | | v2c Read Community | ||
| + | | v2c Write Community | `SNMP/ | ||
| + | | v3 User | `SNMP/ | ||
| + | | v3 Auth Password | ||
| + | | v3 Priv Password | ||
| + | | enable SNMP traps | ||
| + | | Trap Host | `SNMP/ | ||
| + | | Trap Port | `SNMP/ | ||
| + | | Trap Version | ||
| + | | Trap Community | ||
| + | | trap on silence | ||
| + | | trap on warning | ||
| + | | trap on LED change | ||
| - | Date, text clock, and AIR3 top-of-hour follow the same wall time as the large clock when the source is Local, NTP, or PTP. With LTC they keep using the system date/time, because LTC has no calendar date. | ||
| + | At least a v2c community or a v3 user must be set, or the agent will not start. Community and v3 passwords are masked. | ||
| - | | Setting | + | --- |
| - | | ---------------- | ---------------------- | -------------- | ----------- | | + | |
| - | | Time Source | + | |
| - | | Enable NTP-Check | `NTP/ | + | |
| - | | NTP Server | + | |
| - | | PTP Interface | + | |
| - | | PTP Domain | + | |
| - | | LTC Input | `TimeSource/ | + | |
| - | | LTC Serial Port | `TimeSource/ | + | |
| - | | LTC Audio Device | `TimeSource/ | + | |
| - | | LTC Channel | + | |
| - | | LTC unlock warning | `TimeSource/ | + | |
| - | **Local System Clock:** The display uses the OS clock. With NTP-Check enabled, the OS clock is compared to the NTP server (deviation > 0.3 s or errors → warning, priority -1). | ||
| - | **NTP Server:** OnAirScreen queries the NTP Server field and steers its own clock. The OS time is not used after the first successful sample. The field stays editable even when NTP-Check is off. Loss of NTP: last time keeps running and a warning is shown. | + | ### 5.4 Links |
| - | **PTPv2 IEEE 1588-2008:** Software slave on multicast `224.0.1.129` UDP 319/320 (event/ | + | Link several OnAirScreens on the LAN (multicast discovery by **instance name**) or by typing a host and HTTP port. Instance names must be unique; a collision is flagged in Settings and the Web UI, and Apply is rejected. There are no exclusive master/slave roles: any instance can publish replicas **and** subscribe to sources. |
| - | **LTC:** One time source with two inputs. Frame rate is inferred from incoming frames | + | **Replicas** (this screen is the source): add nearby instances. Apply writes a Follow on each target and pushes the full **runtime** status: LED1–4 |
| - | **LBE-1110 Serial:** USB CDC virtual serial port of a [Leo Bodnar LBE-1110](https://www.leobodnar.com/ | + | **Sources** (this screen is the destination): map `Studio-1 |
| - | **Audio Input:** Decodes SMPTE LTC (biphase-mark) from a **local** PortAudio capture device, independent | + | A screen may have only **one** full Follow. If it is already |
| - | The clock lock LED (bottom right) is green when the selected source is locked | + | Discovery uses multicast `239.194.0.2` UDP **3311** |
| + | |||
| + | |||
| + | | Setting | ||
| + | | ----------------------- | ----------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ||
| + | | Enable instance linking | `Links/ | ||
| + | | Replica *n* | `Links/ | ||
| + | | Map *n* | ||
| + | | Replica of | `Links/ | ||
| - | > **Recommendation: | ||
| --- | --- | ||
| - | ### 5.4 Advanced | + | |
| + | |||
| + | ### 5.5 Advanced | ||
| Line 463: | Line 583: | ||
| - | Type a city name next to **City ID**, press **Find** (or Return), and pick a match from the dropdown. The City ID is filled automatically; | + | Type a city name next to **City ID**, press **Find** (or Return), and pick a match from the dropdown. The City ID is filled automatically; |
| **Test API:** Button to test the API connection with current settings. | **Test API:** Button to test the API connection with current settings. | ||
| Line 475: | Line 595: | ||
| - | ### 5.5 Timers | + | ### 5.6 Timers |
| For each AIR timer (group `Timers`): | For each AIR timer (group `Timers`): | ||
| Line 501: | Line 621: | ||
| - | | Setting | + | | Setting |
| - | | --------------- | ------------------ | ------------- | -------------------------------------------------------- | | + | | --------------- | ------------------ | ------------ | ---------------------------------------------------- | |
| - | | TOTH Timer Text | `TimerTOTHText` | + | | TOTH Timer Text | `TimerTOTHText` |
| - | | AIR Min Width | `TimerAIRMinWidth` | `200` | + | | AIR Min Width | `TimerAIRMinWidth` | `200` | Minimum width of AIR displays (pixels) |
| Line 511: | Line 631: | ||
| - | ### 5.6 Fonts | + | ### 5.7 Fonts |
| Font family, size, and weight can be set individually for each UI element: | Font family, size, and weight can be set individually for each UI element: | ||
| - | | Element | + | | Element |
| - | | ------------ | --------------------------------- | -------------------- | | + | | ------------ | --------------------------------- | ------------------ | |
| | LED1–4 | | LED1–4 | ||
| | AIR1–4 | | AIR1–4 | ||
| Line 532: | Line 652: | ||
| - | ### 5.7 About | + | ### 5.8 Time Source |
| + | The display clock can follow the local system clock, an NTP server, a PTPv2 (IEEE 1588-2008) master, or SMPTE LTC (Leo Bodnar LBE-1110 USB serial **or** decoded from a local audio input). **OnAirScreen never changes the operating-system clock.** NTP and PTP steer an independent timebase (`time.monotonic()`), | ||
| - | | Element | + | Date, text clock, and AIR3 top-of-hour follow the same wall time as the large clock when the source is Local, NTP, or PTP. With LTC they keep using the system |
| - | | ------------------ | ------------------------------------------------------- | | + | |
| - | | Version | + | |
| - | | Distribution | + | |
| - | | Settings Path | Path to the configuration file on this system | + | |
| - | | Log Folder | + | |
| - | | Open log folder | + | |
| - | | Loglevel | + | |
| - | | Enable Reset | Checkbox to enable the reset button | + | |
| - | | Reset all settings | Resets **all** settings to defaults (cannot be undone) | + | |
| + | |||
| + | | Setting | ||
| + | | ------------------ | ------------------------------ | -------------- | ------------------------------------------------------------------------- | | ||
| + | | Time Source | ||
| + | | Enable NTP-Check | ||
| + | | NTP Server | ||
| + | | PTP Interface | ||
| + | | PTP Domain | ||
| + | | LTC Input | `TimeSource/ | ||
| + | | LTC Serial Port | `TimeSource/ | ||
| + | | LTC Audio Device | ||
| + | | LTC Channel | ||
| + | | LTC unlock warning | `TimeSource/ | ||
| + | |||
| + | |||
| + | **Local System Clock:** The display uses the OS clock. With NTP-Check enabled, the OS clock is compared to the NTP server (deviation > 0.3 s or errors → warning, priority -1). | ||
| + | |||
| + | **NTP Server:** OnAirScreen queries the NTP Server field and steers its own clock. The OS time is not used after the first successful sample. The field stays editable even when NTP-Check is off. Loss of NTP: last time keeps running and a warning is shown. | ||
| + | |||
| + | **PTPv2 IEEE 1588-2008: | ||
| + | |||
| + | **LTC:** One time source with two inputs. Frame rate is inferred from incoming frames (24 / 25 / 30). Loss of LTC: last timecode is frozen (`LTC NOT LOCKED`). The large WARN messages (`waiting for LTC lock`, `Clock not LTC synchronized`, | ||
| + | |||
| + | **LBE-1110 Serial:** USB CDC virtual serial port of a [Leo Bodnar LBE-1110](https:// | ||
| + | |||
| + | **Audio Input:** Decodes SMPTE LTC (biphase-mark) from a **local** PortAudio capture device, independent of Audio Meters (not Livewire/ | ||
| + | |||
| + | The clock lock LED (bottom right) is green when the selected source is locked and red when it is not. Next to it: `PTP LOCK` / `PTP NOT LOCKED` / `PTP ERROR`, `NTP LOCK` / `NTP NOT LOCKED`, `LTC LOCK` / `LTC NOT LOCKED`, or `LOCAL`. | ||
| + | |||
| + | > **Recommendation: | ||
| --- | --- | ||
| Line 551: | Line 693: | ||
| - | ### 5.8 Audio Meters | + | ### 5.9 Audio Meters |
| - | Stereo level meters on the left side of the screen: L/R (sample peak, true peak, or BBC PPM), a single programme LUFS bar (EBU R128), or both. L/R bars fill with RMS and overlay the current peak. Programme LUFS is one bar (momentary M, short-term S tick). Integrated I and loudness range (LRA) are off by default and start with `LUFSI: | + | Stereo level meters on the left side of the screen: L/R (sample peak, true peak, or BBC PPM), a single programme LUFS bar (EBU R128), or both. L/R bars fill with RMS and overlay the current peak. Programme LUFS is one bar (momentary M, short-term S tick). Integrated I and loudness range (LRA) are off by default and start with `LUFSI: |
| Existing configs with `Audio/ | Existing configs with `Audio/ | ||
| - | | Setting | + | | Setting |
| - | | --------------------- | ---------------------------- | + | | ------------------------------------ | ------------------------------ |
| - | | Enable Audio Meters | + | | Enable Audio Meters |
| - | | Audio Source | + | | Audio Source |
| - | | Audio Input | + | | Audio Input | `Audio/ |
| - | | Livewire Channel | + | | Livewire Channel |
| - | | AoIP Interface | + | | AoIP Interface |
| - | | AES67 Stream ID | + | | AES67 Stream ID | `Audio/ |
| - | | AES67 Address | + | | AES67 Address |
| - | | AES67 Port | `Audio/ | + | | AES67 Port |
| - | | AES67 Name | `Audio/ | + | | AES67 Name |
| - | | AES67 Codec | + | | AES67 Codec | `Audio/ |
| - | | AES67 Sample Rate | + | | AES67 Sample Rate | `Audio/ |
| - | | AES67 Channels | + | | AES67 Channels |
| - | | AES67 Pasted SDP | `Audio/ | + | | AES67 Pasted SDP |
| - | | Meter Layout | + | | Meter Layout |
| - | | Display Unit | `Audio/ | + | | Display Unit |
| - | | Display Style | + | | Display Style | `Audio/ |
| - | | Meter Width | + | | Meter Width | `Audio/ |
| - | | LUFS Reference Preset | `Audio/ | + | | LUFS Reference Preset |
| - | | LUFS Reference | + | | LUFS Reference |
| - | | Peak Hold | + | | Peak Hold | `Audio/ |
| - | | Peak Hold Seconds | + | | Peak Hold Seconds |
| - | | TooLoud | + | | TooLoud |
| - | | TooLoud Text | `Audio/ | + | | TooLoud Text |
| - | | TooLoud Threshold | + | | TooLoud Threshold |
| - | | TooLoud Action | + | | TooLoud Action |
| - | | TooLoud LED | + | | TooLoud LED | `Audio/ |
| - | | Enable Silence Detection | `Audio/ | + | | Enable Silence Detection |
| - | | Show WARN in OAS | `Audio/ | + | | Show WARN in OAS |
| - | | Trigger when Device/ | + | | Trigger when Device/ |
| - | | Silence Message | + | | Silence Message |
| - | | Silence Threshold | + | | Silence Threshold |
| - | | Max. Silence duration | `Audio/ | + | | Max. Silence duration |
| - | | Recovery time | + | | Recovery time | `Audio/ |
| - | | HTTP GET URL | `Audio/ | + | | HTTP GET URL |
| Silence Detection uses the **same audio source** as the meters (Local Input, Livewire, or AES67). The threshold is always **sample-peak dBFS**, independent of the meter display unit. Capture keeps running when Silence Detection is on, even if the meters are hidden. | Silence Detection uses the **same audio source** as the meters (Local Input, Livewire, or AES67). The threshold is always **sample-peak dBFS**, independent of the meter display unit. Capture keeps running when Silence Detection is on, even if the meters are hidden. | ||
| Line 608: | Line 751: | ||
| **Local input:** on macOS grant microphone permission to OnAirScreen. | **Local input:** on macOS grant microphone permission to OnAirScreen. | ||
| - | |||
| --- | --- | ||
| Line 614: | Line 756: | ||
| - | ### 5.9 GPIO | + | ### 5.10 GPIO / MIDI |
| - | Raspberry Pi GPIO inputs map mixer GPI contacts to the same LED and AIR commands as the network API. Configure under **Settings → GPIO**. | + | GPIO maps contacts, Livewire source pins, and MIDI messages |
| - | Pi GPIO is **3.3 V**. Mixer GPI is often 5–24 V or open collector — **always use an optocoupler isolation board**. Dry relay contacts to GND may be wired directly (internal pull-up, Invert on). | + | #### Raspberry |
| - | | Setting | + | Raspberry Pi GPIO inputs map mixer GPI contacts. Available on Raspberry Pi only; other platforms show “not available” |
| - | | -------------- | ---------------------- | ------- | ----------- | | + | |
| - | | Enable | + | |
| - | | Debounce | + | |
| - | | GPI*n* Enable | + | |
| - | | GPI*n* BCM pin | `GPIO/ | + | |
| - | | GPI*n* Invert | + | |
| - | | GPI*n* Mode | `GPIO/ | + | |
| - | | GPI*n* Action | + | |
| - | | GPI*n* Command | `GPIO/ | + | |
| - | **Level** (typical tally / fader): closed sends `LED1:ON` / `AIR3:ON`, open sends `OFF`. **Rising / Falling / Both** send `TOGGLE` | + | Pi GPIO is **3.3 V**. Mixer GPI is often 5–24 V or open collector — **always use a PC817 isolation module**. Dry relay contacts to GND may be wired directly |
| - | Factory mapping for a two-wire mixer GPI: GPI1 BCM 17 → LED1 (ON AIR), GPI2 BCM 27 → AIR3 (radio timer). Enable GPIO and connect the contacts through | + | |
| + | | Setting | ||
| + | | -------------- | ------------------- | ---------------------------- | ---------------------------------------------------------------- | | ||
| + | | Enable GPIO | `GPIO/ | ||
| + | | Debounce | ||
| + | | GPI*n* Enable | ||
| + | | GPI*n* Name | `GPIO/ | ||
| + | | GPI*n* BCM pin | `GPIO/ | ||
| + | | GPI*n* Invert | ||
| + | | GPI*n* Mode | `GPIO/ | ||
| + | | GPI*n* Actions | `GPIO/ | ||
| + | | GPI*n* Command | `GPIO/ | ||
| + | |||
| + | |||
| + | **Level** (typical tally / fader): closed sends `LED1:ON` / `AIR3:ON` for each selected action, open sends `OFF`. Custom commands fire only while the contact is closed. **Rising / Falling / Both** send `TOGGLE` (or Reset / the custom commands) on that edge. Legacy `CUSTOM` in the action field still means “custom commands only”. | ||
| + | |||
| + | Factory mapping for a two-wire mixer GPI: GPI1 BCM 17 → LED1 (ON AIR), GPI2 BCM 27 → AIR3 (radio timer). Enable GPIO and connect the contacts through | ||
| Safe BCM pins: `5, 6, 12, 13, 16, 17, 22, 23, 24, 25, 26, 27` (not I2C 2/3 or UART 14/15). | Safe BCM pins: `5, 6, 12, 13, 16, 17, 22, 23, 24, 25, 26, 27` (not I2C 2/3 or UART 14/15). | ||
| Line 641: | Line 790: | ||
| The 40-pin GPIO header is the same on Raspberry Pi **3, 4, 400, 5, 500, Zero 2 W**, and the **CM4/CM5** IO-board header. Settings use **BCM** numbers, not physical pin numbers. | The 40-pin GPIO header is the same on Raspberry Pi **3, 4, 400, 5, 500, Zero 2 W**, and the **CM4/CM5** IO-board header. Settings use **BCM** numbers, not physical pin numbers. | ||
| - | **Optocoupler | + | **PC817 module |
| </ | </ | ||
| - | <kroki mermaid> | + | < |
| + | raw | ||
| flowchart LR | flowchart LR | ||
| - | Mixer[" | + | Mixer[" |
| - | | + | |
| - | | + | |
| - | | + | |
| - | </kroki> | + | </mermaid> |
| < | < | ||
| - | Typical cheap 8-channel PC817 boards: | + | |
| + | |||
| + | Each mixer GPI is two wires: that channel’s `IN1`–`IN8` and the input-side `GND`. On the Pi side the matching | ||
| **Dry relay contact only** (already isolated, no voltage on the mixer GPI): | **Dry relay contact only** (already isolated, no voltage on the mixer GPI): | ||
| </ | </ | ||
| - | <kroki mermaid> | + | < |
| + | raw | ||
| flowchart LR | flowchart LR | ||
| Relay[" | Relay[" | ||
| Relay --> PiGnd[" | Relay --> PiGnd[" | ||
| - | </kroki> | + | </mermaid> |
| < | < | ||
| + | |||
| + | |||
| Line 671: | Line 826: | ||
| **Factory defaults on the header** (board oriented with the USB/ | **Factory defaults on the header** (board oriented with the USB/ | ||
| - | | OAS input | BCM | Header pin | Typical use | | + | |
| - | | --------- | --- | ---------- | ----------- | | + | | OAS input | BCM | Header pin |
| - | | GPI1 | 17 | 11 | + | | --------- | --- | ---------------------------- | ------------------ | |
| - | | GPI2 | 27 | 13 | + | | GPI1 | 17 | 11 |
| - | | Ground | + | | GPI2 | 27 | 13 |
| + | | Ground | ||
| Safe BCM pins and their header pins (use these in **BCM pin**): | Safe BCM pins and their header pins (use these in **BCM pin**): | ||
| + | |||
| | BCM | Header | BCM | Header | BCM | Header | | | BCM | Header | BCM | Header | BCM | Header | | ||
| Line 685: | Line 843: | ||
| | 16 | 36 | 17 | 11 | 24 | 18 | | | 16 | 36 | 17 | 11 | 24 | 18 | | ||
| | 26 | 37 | 27 | 13 | 25 | 22 | | | 26 | 37 | 27 | 13 | 25 | 22 | | ||
| + | |||
| **Pinout references** (40-pin header, BCM numbering): | **Pinout references** (40-pin header, BCM numbering): | ||
| Line 692: | Line 851: | ||
| - Pi 5 overview: [Raspberry Pi 5](https:// | - Pi 5 overview: [Raspberry Pi 5](https:// | ||
| - Compute Module IO boards: [Compute Module](https:// | - Compute Module IO boards: [Compute Module](https:// | ||
| + | |||
| + | |||
| + | |||
| + | #### Axia Livewire | ||
| + | |||
| + | Axia Livewire GPIO follows source pins (Operator Mic, Guest Mic, Line, …) and maps them to the same LED and AIR commands. OnAirScreen only **reads** GPIO (it does not write GPI back to the console). Available on all platforms. Use the **Axia Livewire** inner tab. | ||
| + | |||
| + | Two modes: | ||
| + | |||
| + | - **Multicast** (default): CMsg2 on `239.192.255.4`. The mapping **Channel** is the Livewire **audio channel** of that source. Put the machine on the AoIP / Livewire VLAN with IGMP, and pick the same interface as the Livewire audio meters (empty = default route). | ||
| + | - **LWRP (TCP)**: connect to a device (xNode GPIO, iPort, console, …) at **IP:93**. The mapping column is **Port** — the GPIO port on that device, not a Livewire audio channel. No IGMP join; the host must be reachable on the Livewire/ | ||
| + | |||
| + | Typical microphone ON-AIR profile: **GPO pin 1** is the ON lamp (latched while the channel is ON; often off during TALK/MUTE). GPI 1 would be the ON command *to* the console — OAS does not send that. | ||
| + | |||
| + | |||
| + | | Setting | ||
| + | | -------------------- | ---------------------- | ------------------ | ----------------------------------------------------------------------- | | ||
| + | | Enable Livewire GPIO | `GPIO/ | ||
| + | | Mode | `GPIO/ | ||
| + | | Host | `GPIO/ | ||
| + | | Port | `GPIO/ | ||
| + | | Password | ||
| + | | AoIP interface | ||
| + | | Debounce | ||
| + | | GPI*n* Enable | ||
| + | | GPI*n* Name | `GPIO/ | ||
| + | | GPI*n* Channel/ | ||
| + | | GPI*n* Direction | ||
| + | | GPI*n* Pin | `GPIO/ | ||
| + | | GPI*n* Invert | ||
| + | | GPI*n* Mode | `GPIO/ | ||
| + | | GPI*n* Actions | ||
| + | | GPI*n* Command | ||
| + | |||
| + | |||
| + | Factory mapping (master **Enable Livewire GPIO** stays off): row 1 channel/ | ||
| + | |||
| + | Multicast is `239.192.255.4` UDP **2055** (GPIO node → console) and **2060** (console → node). OAS joins both. After the join, OAS requests the current pin state so a microphone that is already ON at start lights the LED. | ||
| + | |||
| + | **LWRP:** OAS opens TCP 93, sends `LOGIN` (with password if set), `ADD GPI`, `ADD GPO`, then queries each watched port so a microphone that is already ON at start lights the LED. Reconnects if the socket drops. | ||
| + | |||
| + | **Level** (typical ON lamp): GPO 1 low sends `LED1:ON`, high sends `OFF`. Invert stays **off** unless the console polarity is reversed. | ||
| + | |||
| + | #### MIDI | ||
| + | |||
| + | **MIDI** reads one input interface (Settings → GPIO → MIDI) and maps Note or CC messages to the same LED and AIR commands. **Learn** waits up to 10 seconds for the next Note or CC and fills channel, type, and number. Clock, Active Sensing, and SysEx are ignored. | ||
| + | |||
| + | |||
| + | | Setting | ||
| + | | ----------------- | ----------------------- | --------- | ------------------------------------------------------------------- | | ||
| + | | Enable MIDI | `GPIO/ | ||
| + | | Interface | ||
| + | | Debounce | ||
| + | | MIDI*n* Enable | ||
| + | | MIDI*n* Name | `GPIO/ | ||
| + | | MIDI*n* Channel | ||
| + | | MIDI*n* Type | `GPIO/ | ||
| + | | MIDI*n* Number | ||
| + | | MIDI*n* Threshold | `GPIO/ | ||
| + | | MIDI*n* Behavior | ||
| + | | MIDI*n* Invert | ||
| + | | MIDI*n* Actions | ||
| + | | MIDI*n* Command | ||
| + | |||
| + | |||
| + | **On/Off** holds the level: Note On (velocity > 0) or a CC at the threshold sends `LED1:ON`, Note Off or a CC below the threshold sends `OFF`. **Oneshot** sends `LED1:ON` once per press, or `LED1:OFF` when Invert is on. **Toggle** sends `LED1: | ||
| + | |||
| + | **Only On/Off rows appear in Logic.** Oneshot and Toggle are missing from the Logic input menu even when the row is enabled and named, because they do not hold a level. Every On/Off row is listed, including rows whose Enable box is off. That disabled input counts as off inside a rule. Unnamed On/Off rows are labeled MIDI1 … MIDI8. A name is shown as `PAD (MIDI1)`. To use a MIDI row in Logic, set Behavior to On/Off. | ||
| + | |||
| + | #### Logic | ||
| + | |||
| + | **Logic** combines Raspberry Pi, Livewire, and MIDI On/Off inputs. Each rule has one operator, one or more inputs, and one or more outputs. The outputs follow the combined level: a command is sent only when that result changes. The input menu lists every Pi input, every Livewire input, and every MIDI row set to On/Off. MIDI Oneshot and Toggle rows are left out. A MIDI On/Off row stays in the menu when Enable is off. | ||
| + | |||
| + | |||
| + | | Operator | Outputs turn on | Outputs turn off | | ||
| + | | -------- | ------------------------------ | -------------------------------- | | ||
| + | | OR | any selected input is active | ||
| + | | AND | every selected input is active | any selected input is inactive | ||
| + | |||
| + | |||
| + | Example: name Pi GPI1 `MIC1` and Pi GPI2 `MIC2`. Rule `OR` with those two inputs and outputs LED1 and AIR1 stays on while either microphone is open, and turns both off only when both are closed. | ||
| + | |||
| + | Inputs that are disabled, missing, or not yet seen count as off. An empty input list stays off. Resets and custom commands fire when the rule becomes true, not when it becomes false. Direct row actions (including edge modes) keep working beside the rules. If the same LED or AIR timer is also set on a row or on another rule, that Logic row shows a warning. | ||
| + | |||
| + | |||
| + | | Setting | ||
| + | | ----------------- | --------------------- | --------- | --------------------------------------------- | | ||
| + | | Rule *n* Enable | ||
| + | | Rule *n* Operator | `GPIO/ | ||
| + | | Rule *n* Inputs | ||
| + | | Rule *n* Outputs | ||
| + | | Rule *n* Command | ||
| + | |||
| + | |||
| + | Eight rules. A microphone that is already on when OnAirScreen starts turns a matching rule on as soon as that input level is known. | ||
| + | |||
| + | --- | ||
| + | |||
| + | |||
| + | |||
| + | ### 5.11 About | ||
| + | |||
| + | |||
| + | | Element | ||
| + | | ------------------ | ----------------------------------------------------------- | | ||
| + | | Version | ||
| + | | Distribution | ||
| + | | Settings Path | Path to the configuration file on this system | ||
| + | | Log Folder | ||
| + | | Open log folder | ||
| + | | Loglevel | ||
| + | | Enable Reset | Checkbox to enable the reset button | ||
| + | | Reset all settings | Resets **all** settings to defaults (cannot be undone) | ||
| + | | Reboot | ||
| + | | Shutdown | ||
| Line 744: | Line 1018: | ||
| - | | Input | Meaning | + | | Input | Meaning |
| - | | ---------------- | --------------------------------- | | + | | ------------------------ | --------------------------------- | |
| - | | `2,10` or `2.10` | 2 minutes 10 seconds (count-down) | | + | | `2: |
| - | | `30` | + | | `30` |
| - | | `0` | Count-up mode | | + | | `0` | Count-up mode | |
| Line 807: | Line 1081: | ||
| - **Digital: | - **Digital: | ||
| - | - **Analog:** Classic clock face | + | - **Analog:** Classic |
| + | - **Analog Numbers:** Classic analog face with 1–12 | ||
| + | - **Analog Studio:** White face, black ticks, numerals 1–12 | ||
| + | - **Analog Railway:** White station face without numerals, pointed black hands, sweeping red second hand with a ring | ||
| + | - **Analog 24h smooth:** Cream face, black 1–12 and red 13–24, sweeping second hand | ||
| + | - **Analog 24h ticking:** Same cream 24h face with a ticking second hand | ||
| + | |||
| + | ](https:// | ||
| - **Text clock:** Spoken time display (e.g. " | - **Text clock:** Spoken time display (e.g. " | ||
| - | - **Time source:** Local, NTP, PTPv2, or LTC — see [5.3 Time Source](#53-time-source); the OS clock is never set | + | - **Time source:** Local, NTP, PTPv2, or LTC — see [5.8 Time Source](#time_source); the OS clock is never set |
| - **Lock LED** bottom right: green = locked, red = not locked (`PTP LOCK` / `NTP LOCK` / `LTC LOCK`, or `LOCAL`) | - **Lock LED** bottom right: green = locked, red = not locked (`PTP LOCK` / `NTP LOCK` / `LTC LOCK`, or `LOCAL`) | ||
| - **Weather widget:** Optionally displayed next to the clock (OpenWeatherMap) | - **Weather widget:** Optionally displayed next to the clock (OpenWeatherMap) | ||
| Line 815: | Line 1107: | ||
| - | ### 6.6 System Commands | + | ### 6.6 System Commands |
| Line 825: | Line 1117: | ||
| - | > These commands | + | Reboot and Shutdown |
| - | ### 6.7 GPIO Inputs | + | ### 6.7 GPIO Inputs |
| - | Mixer GPI (contact closure) can drive LEDs and AIR timers through Raspberry Pi GPIO. See [5.9 GPIO](#59-gpio) for the wiring | + | Mixer GPI (contact closure) can drive LEDs and AIR timers through |
| --- | --- | ||
| Line 837: | Line 1129: | ||
| ## 7. Remote Control and API | ## 7. Remote Control and API | ||
| - | OnAirScreen supports remote control via UDP, HTTP, Web UI, MQTT, OSC, REST API, and Bitfocus Companion. | + | OnAirScreen supports remote control via UDP, HTTP, Web UI, MQTT, OSC, SNMP, REST API, and Bitfocus Companion. |
| ### 7.1 UDP (Port 3310) | ### 7.1 UDP (Port 3310) | ||
| Line 885: | Line 1177: | ||
| - Persistent connection badge (Live / Polling / Offline) plus error modal | - Persistent connection badge (Live / Polling / Offline) plus error modal | ||
| - Settings gear (top right): tabbed overlay for all editable settings, optional PIN, Apply, and preset load/save | - Settings gear (top right): tabbed overlay for all editable settings, optional PIN, Apply, and preset load/save | ||
| + | - Links in the overlay: same Nearby list, Add as replica / Use as source, and Replicas / Sources grids as the desktop Settings | ||
| - Audio Meters in the overlay: Livewire Source and AES67 Stream dropdowns (live discovery while the overlay is open) plus Paste SDP | - Audio Meters in the overlay: Livewire Source and AES67 Stream dropdowns (live discovery while the overlay is open) plus Paste SDP | ||
| + | |||
| Line 909: | Line 1203: | ||
| " | " | ||
| " | " | ||
| - | " | + | " |
| - | " | + | " |
| + | " | ||
| } | } | ||
| ``` | ``` | ||
| Line 921: | Line 1216: | ||
| curl " | curl " | ||
| ``` | ``` | ||
| + | |||
| + | **Instance links** (no Web Settings PIN): | ||
| + | |||
| + | ```bash | ||
| + | curl http:// | ||
| + | curl -X POST http:// | ||
| + | -d ' | ||
| + | curl -X POST http:// | ||
| + | -d ' | ||
| + | ``` | ||
| + | |||
| + | `link` in `/ | ||
| **Web settings** (optional PIN via `X-Settings-Token` after `POST / | **Web settings** (optional PIN via `X-Settings-Token` after `POST / | ||
| Line 933: | Line 1240: | ||
| Secrets (`updatekey`, | Secrets (`updatekey`, | ||
| - | |||
| ### 7.5 MQTT | ### 7.5 MQTT | ||
| Line 940: | Line 1246: | ||
| - | | Topic | Payload | + | | Topic |
| - | | ---------------- | ----------------------- | ---------------- | | + | | ----------------------- | --------------------------------- | ---------------------- | |
| - | | `led{1-4}/ | + | | `led{1-4}/ |
| - | | `air{1-4}/ | + | | `air{1-4}/ |
| - | | `air{3-4}/ | + | | `air{3-4}/ |
| - | | `air3/ | + | | `air3/ |
| - | | `lufs/ | + | | `lufs/ |
| - | | `lufs/ | + | | `lufs/ |
| - | | `text/ | + | | `text/ |
| - | | `text/ | + | | `text/ |
| - | | `text/ | + | | `text/ |
| Line 956: | Line 1262: | ||
| - | | Topic | Payload | + | | Topic | Payload |
| - | | ------------------ | ----------------- | | + | | ---------------------------- | --------------------------- | |
| - | | `led{1-4}/ | + | | `led{1-4}/ |
| - | | `air{1-4}/ | + | | `air{1-4}/ |
| - | | `air{1-4}/ | + | | `air{1-4}/ |
| - | | `air3/ | + | | `air3/ |
| - | | `text/ | + | | `text/ |
| - | | `warning/ | + | | `warning/ |
| - | | `silence/ | + | | `silence/ |
| - | | `lufs/ | + | | `lufs/ |
| - | | `lufs/ | + | | `lufs/ |
| - | | `lufs/ | + | | `lufs/ |
| - | | `instance/ | + | | `instance/ |
| Line 986: | Line 1292: | ||
| The Home Assistant device name becomes `OnAirScreen (Studio-1)` unless the instance name is already part of the MQTT Device Name. | The Home Assistant device name becomes `OnAirScreen (Studio-1)` unless the instance name is already part of the MQTT Device Name. | ||
| - | |||
| - | |||
| ### 7.6 Bitfocus Companion (recommended) | ### 7.6 Bitfocus Companion (recommended) | ||
| Line 1004: | Line 1308: | ||
| Drag presets for LED1–4 (toggle + colour), AIR1–4 with live caption and time on the button (MIC = AIR1), TOTH, Reset AIR3/4, NOW / NEXT / WARN, Silence, Loudness I+LRA, and Reset I+LRA. | Drag presets for LED1–4 (toggle + colour), AIR1–4 with live caption and time on the button (MIC = AIR1), TOTH, Reset AIR3/4, NOW / NEXT / WARN, Silence, Loudness I+LRA, and Reset I+LRA. | ||
| - | Variables such as `$(oas: | + | Variables such as `$(oas: |
| If you cannot load a custom module, **Generic OSC** remains available (next section). Status push over OSC is slower (every 5 seconds) than the HTTP poll / WebSocket. | If you cannot load a custom module, **Generic OSC** remains available (next section). Status push over OSC is slower (every 5 seconds) than the HTTP poll / WebSocket. | ||
| Line 1015: | Line 1319: | ||
| - | | Address | + | | Address |
| - | | -------------------- | + | | ---------------------------- |
| - | | `/ | + | | `/ |
| - | | `/ | + | | `/ |
| - | | `/ | + | | `/ |
| - | | `/ | + | | `/ |
| - | | `/ | + | | `/ |
| - | | `/ | + | | `/ |
| - | | `/ | + | | `/ |
| - | | `/ | + | | `/ |
| - | | `/ | + | | `/ |
| - | | `/ | + | | `/ |
| - | | `/ | + | | `/ |
| Line 1044: | Line 1348: | ||
| python3 utils/ | python3 utils/ | ||
| ``` | ``` | ||
| + | |||
| + | |||
| #### Alternative: | #### Alternative: | ||
| Line 1063: | Line 1369: | ||
| Query-reply to the command socket is **not** used by Companion (it listens on a different UDP port). | Query-reply to the command socket is **not** used by Companion (it listens on a different UDP port). | ||
| + | ### 7.8 SNMP (Port 1161) | ||
| - | ### 7.8 Command Reference | + | Enable SNMP under **Settings → Network**. The agent speaks **SNMPv2c** and **SNMPv3** (USM, SHA-256, AES-128). The default listen port is **1161** (unprivileged). Port 161 is possible but needs OS privileges on Linux/ |
| + | |||
| + | The MIB is `mibs/ | ||
| + | |||
| + | **GET / WALK** (same status as `/ | ||
| + | |||
| + | **SET** (same semantics as OSC): LED state `0/1/2` = OFF/ | ||
| + | |||
| + | **Traps:** silence, WARN text change, optional LED change. Version `v2c` or `v3` (v3 uses the same USM user). | ||
| + | |||
| + | ```bash | ||
| + | # Status walk (v2c) | ||
| + | snmpwalk -v2c -c public localhost: | ||
| + | |||
| + | # Turn LED1 on | ||
| + | snmpset -v2c -c private localhost: | ||
| + | |||
| + | # Walk with SNMPv3 authPriv | ||
| + | snmpwalk -v3 -l authPriv -u nms -a SHA-256 -A ' | ||
| + | ``` | ||
| + | |||
| + | With an empty write community (the default), v2c is read-only. noAuthNoPriv is for testing only. | ||
| + | |||
| + | ### 7.9 Command Reference | ||
| Line 1071: | Line 1401: | ||
| - | | Command | + | | Command |
| - | | ---------------------------- | -------------------------------- | | + | | --------------------------------- | ----------------------------------------------------------------------------- | |
| - | | `LED{1-4}: | + | | `LED{1-4}: |
| - | | `NOW: | + | | `NOW: |
| - | | `NEXT: | + | | `NEXT: |
| - | | `WARN: | + | | `WARN: |
| - | | `WARN: | + | | `WARN: |
| - | | `WARN: | + | | `WARN: |
| - | | `WARN: | + | | `WARN: |
| - | | `WARN: | + | | `WARN: |
| - | | `WARN: | + | | `WARN: |
| - | | `AIR1: | + | | `AIR1: |
| - | | `AIR2: | + | | `AIR2: |
| - | | `AIR3: | + | | `AIR3: |
| - | | `AIR3TIME: | + | | `AIR3TIME: |
| - | | `AIR3TOH: | + | | `AIR3TOH: |
| - | | `AIR4: | + | | `AIR4: |
| | `LUFSI: | | `LUFSI: | ||
| - | | `CMD: | + | | `FULLSCREEN: |
| - | | `CMD: | + | | `CMD: |
| - | | `CMD: | + | | `CMD: |
| + | | `CMD: | ||
| Line 1103: | Line 1434: | ||
| - | | Command | + | | Command |
| - | | ----------------------------------------------- | --------------------- | | + | | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| - | | `CONF: | + | | `CONF: |
| + | | `CONF: | ||
| `CONF: | `CONF: | ||
| Line 1207: | Line 1540: | ||
| python start.py --loglevel DEBUG | python start.py --loglevel DEBUG | ||
| python start.py -l WARNING | python start.py -l WARNING | ||
| + | python start.py --start-time 2026-09-14T12: | ||
| ``` | ``` | ||
| - | | Option | + | | Option |
| - | | ------------------ | ----------------------------------------------- | ------------------------------ | | + | | ------------------ | ----------------------------------------------- | ---------------------------------------------------- | |
| - | | `-l`, `--loglevel` | `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL` | Override log level (not saved) | | + | | `-l`, `--loglevel` | `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL` | Override log level (not saved) |
| + | | `--start-time` | ||
| Line 1241: | Line 1576: | ||
| - | | Platform | Log folder | + | | Platform | Log folder |
| - | | -------- | ----------------------------------------------- | | + | | -------- | ---------------------------------------------- | |
| | Linux | `~/ | | Linux | `~/ | ||
| - | | macOS | `~/ | + | | macOS | `~/ |
| - | | Windows | + | | Windows |
| Line 1255: | Line 1590: | ||
| Crash files are always written, even if the log level is `NONE`. Send the log folder to support when asked; do not post it publicly (DEBUG logs may contain host names or commands). After a process crash, the next start shows a dialog with **Open log folder**; it closes automatically after 30 seconds. | Crash files are always written, even if the log level is `NONE`. Send the log folder to support when asked; do not post it publicly (DEBUG logs may contain host names or commands). After a process crash, the next start shows a dialog with **Open log folder**; it closes automatically after 30 seconds. | ||
| - | |||
| --- | --- | ||
| Line 1274: | Line 1608: | ||
| ### Remote control not working | ### Remote control not working | ||
| - | - Check firewall rules for UDP/ | + | - Check firewall rules for UDP/ |
| - Use correct IP address and ports | - Use correct IP address and ports | ||
| - Test locally with `curl http:// | - Test locally with `curl http:// | ||
| Line 1282: | Line 1616: | ||
| ### GPIO not switching LEDs or timers | ### GPIO not switching LEDs or timers | ||
| - | - GPIO works on Raspberry Pi only. Check **Settings → GPIO** status | + | **Raspberry Pi** (inner tab **Raspberry Pi**): |
| - | - Use an optocoupler; never feed mixer 5–24 V into Pi pins | + | |
| + | - Pi GPIO works on Raspberry Pi only. Other platforms show “not available” on that sub-tab | ||
| + | - Check **Settings → GPIO → Raspberry Pi** status | ||
| + | - Use a PC817 module; never feed mixer 5–24 V into Pi pins | ||
| - Confirm Invert (default on for contacts to GND) and Level vs edge mode | - Confirm Invert (default on for contacts to GND) and Level vs edge mode | ||
| - | - Enable GPIO and the individual GPI row, then Apply` | + | - Enable GPIO and the individual GPI row, then Apply |
| + | |||
| + | **Axia Livewire** (inner tab **Axia Livewire**): | ||
| + | |||
| + | - Enable Livewire GPIO and the mapping row, then Apply | ||
| + | - Typical mic ON lamp: direction **GPO**, pin **1**, Invert **off**, mode **level** | ||
| + | - **Multicast: | ||
| + | - **LWRP:** set Mode to **LWRP (TCP)**, enter the device **Host** (TCP 93). Mapping **Port** is the GPIO port on the device, not a Livewire audio channel. Status “host is empty” / “LWRP failed”: missing IP or the device is not reachable. VLAN still applies; IGMP is not used | ||
| + | - No packets / LED stays off: confirm the console/ | ||
| + | - Mic already ON at OAS start: OAS requests the current state after join/ | ||
| Line 1365: | Line 1711: | ||
| The reports do not include settings, MQTT passwords, or API keys. Prefer `--loglevel DEBUG` only for a short reproduction run before sending logs. After a crash, OnAirScreen also shows this dialog on the next start (auto-closes after 30 seconds). | The reports do not include settings, MQTT passwords, or API keys. Prefer `--loglevel DEBUG` only for a short reproduction run before sending logs. After a crash, OnAirScreen also shows this dialog on the next start (auto-closes after 30 seconds). | ||
| - | |||
| --- | --- | ||
| Line 1377: | Line 1722: | ||
| - LED changes (source: manual, autoflash, timedflash, API) | - LED changes (source: manual, autoflash, timedflash, API) | ||
| - AIR timer start/ | - AIR timer start/ | ||
| - | - Received commands (UDP/ | + | - Received commands (UDP/ |
| - Warnings added/ | - Warnings added/ | ||
| - Settings changes | - Settings changes | ||