Skip to main content

xonox

An alternative infrastructure-service for legacy NOXON(tm) devices.

Prerequisites

You need a device that is always-on, reachable by your radios and capable to run Python-scripts. Additionally, you need to redirect DNS entries to the device that runs xonox.

Compatible Devices

The following devices were reported as compatible:

  • Noxon(tm) iRadio 300/360
  • Noxon(tm) iRadio 400
  • Noxon(tm) iRadio (no support for podcasts or favorites)
  • Noxon(tm) 2 Audio (no support for podcasts or favorites)

Getting Started

Installation

Install the module and all of its dependencies via pip:

pip install xonox

Start Service

If you want xonox to listen on all bound IP-addresses:

python -m xonox

If you want xonox to listen only on a single IP-address you can use the --host parameter to specify it.

python -m xonox --host 192.168.3.3

Configure Your Environment

The NOXON(tm) devices locate their services via DNS. To allow them to find the alternative service, you need to configure your local DNS so that the following names point to the host that runs xonox.

  • legacy.noxonserver.eu
  • gate1.noxonserver.eu

Manage Your Station List

Add Stations

You can add stations to xonox by POSTing its metadata to the /station endpoint.

curl --location --request POST 'http://legacy.noxonserver.eu/station' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "Radio Swiss Pop",
    "description": "Radio Swiss Pop Live Stream",
    "streamUrl": "http://stream.srg-ssr.ch/m/rsp/mp3_128"
}'

Please note that streamUrl needs to point to the MP3 stream and not to a playlist (M3U). If you don't know how to get this information for your favorite station, have a look at station list of the RadioBrowser project. Remember that the Noxon(tm) iRadios do not support HTTPS. Therefore you need to supply an HTTP-URL.

Get the List

curl --location --request GET 'http://legacy.noxonserver.eu/station'

Remove a Station

curl --location --request DELETE 'http://legacy.noxonserver.eu/station/0'

Bookmark/Preset/Favorite Support

Since version 0.0.7.2 xonox supports the preset-buttons of the iRadios. Due to technical challenges (see this comment) only one preset-list is created for all devices by default. This means that a created preset is available on all devices which are connected to the same server. Separate preset-lists per device are supported experimentally. If you want to try it, you can find more information in the 'Experimental Features' section later in this document.

Configuration File

By default, xonox writes its configuration and station-list to a file called xonox.conf inside the user's home directory. If this causes problems on your system, you can specify the storage directory using the --config-dir parameter.

Experimental Features

Per-Device Bookmarks/Favorites/Presets

You can disable the global preset-list by setting the property useGlobalPresetList to false:

curl --location --request POST 'http://legacy.noxonserver.eu/settings' \
--header 'Content-Type: application/json' \
--data-raw '{ "useGlobalPresetList": false }'

If you find want to re-enable the global preset list, set useGlobalPresetList to true.

Development

Poetry is used to build and package this project:

# install dependencies
poetry install
# run tests
poetry run pytest
# run xonox
poetry run python -m xonox
# create package
poetry build

Changelog

1.1.0

  • Add support for Noxon(tm) 2 Audio and Noxon iRadio #13

1.0.1

1.0.0

0.0.7.2

0.0.6

0.0.5

  • BREAKING CHANGE If the service shall bound to a specific ip-address, it must be provided via --host and not the positional parameter like in previous versions.
  • Added possibility to configure the location of xonox.config via command-line parameter --config-dir.
  • Fixed 'config not found'

0.0.4 (Withdrawn)

  • Added persistence of the station list.

0.0.3

  • First publicly available release

(c) 2024 TillW - Licensed to you under the AGPL v3.0

Metadata

Release files for xonox 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for xonox 1.1.0
File Size Uploaded Provenance Actions
xonox-1.1.0.tar.gz 20.6 kB Without provenance Details for xonox-1.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for xonox 1.1.0
File Interpreter ABI Platform Actions
xonox-1.1.0-py3-none-any.whl Python 3 none any Details for xonox-1.1.0-py3-none-any.whl

Total release size: 42.4 kB

Release files / xonox-1.1.0.tar.gz

Download URL xonox-1.1.0.tar.gz
Size 20.6 kB
Tags Source
SHA-256 checksum
How to use checksums
17fd6d1df95c6d5c8dd5b214f7ffd707814cf620648d28950314a1b3bd251948
BLAKE2b-256 checksum
How to use checksums
56d77ec0ba07583a63fe43efdf3b95aac8b4959d4d10b0ce3b7aa8ea5ff7e417
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.7.0 CPython/3.10.11 Windows/10

Release files / xonox-1.1.0-py3-none-any.whl

Download URL xonox-1.1.0-py3-none-any.whl
Size 21.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
69ed0f5b25a524cdfb2eb0d49540363599d38cd68de44f756e074ac1a8675a90
BLAKE2b-256 checksum
How to use checksums
f93800a081dcf91b374a374068dd8fefcccc2d820587552bfbf5bc9f1948c5b9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.7.0 CPython/3.10.11 Windows/10

Security for xonox 1.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page