{"id":16525619,"url":"https://github.com/andrewn/neue-radio","last_synced_at":"2025-09-21T23:32:53.012Z","repository":{"id":11442203,"uuid":"69693683","full_name":"andrewn/neue-radio","owner":"andrewn","description":"Neue Radio: Prototype connected object using web technologies","archived":false,"fork":false,"pushed_at":"2022-12-07T12:50:58.000Z","size":3729,"stargazers_count":9,"open_issues_count":26,"forks_count":6,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-04-14T02:21:39.814Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andrewn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-09-30T18:56:57.000Z","updated_at":"2020-10-09T13:10:12.000Z","dependencies_parsed_at":"2023-01-11T20:16:38.789Z","dependency_job_id":null,"html_url":"https://github.com/andrewn/neue-radio","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewn%2Fneue-radio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewn%2Fneue-radio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewn%2Fneue-radio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewn%2Fneue-radio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andrewn","download_url":"https://codeload.github.com/andrewn/neue-radio/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":233704850,"owners_count":18717028,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-11T17:04:19.838Z","updated_at":"2025-09-21T23:32:47.500Z","avatar_url":"https://github.com/andrewn.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Neue Radio\n\nSummary: An introduction to the architecture, available apps and services and useful debugging info. \n\n## What is this?\n\nA reimagining of the [Radiodan Architecture](http://radiodan.net), focusing on\nweb standards and ease of prototyping across programming environments.\n\n## User's Guide\n\nWe'd recommend the [User's Guide](https://docs.google.com/document/d/1EK3uVpX3aAUypNCLpxTcyp-1OTKuV67lFyXnuxzXXLA/edit?usp=sharing) that takes you step-by-step through installing the system and creating your first app.\n\n## Installation\n\nSee [INSTALL.md](docs/INSTALL.md) for detailed instructions.\n\n## Debugging\n\nBecause these internal apps are run internally on the Pi, it can be difficult to\ndebug. To enable this, a remote Web Inspector is available and is accessible from other machines on the network. This allows you to use the full [Chrome\nDevTools](https://developers.google.com/web/tools/chrome-devtools/) to inspect\nwhat's running on the device.\n\nIn order to aid this process, a remote web inspector is available on\nhttp://raspberrypi.local:9222 and is accessible from other machines on the\nnetwork.\n\nThere are some complications when it comes to accessing the DevTools remotely.\nWe have found two methods of getting started:\n\n1.  Visit http://raspberrypi.local:5004 where a list of all available pages will\n    be waiting.\n2.  Copy/paste the given link into Chrome on your computer to launch the\n    inspector.\n\n## Architecture\n\nThis Architecture comprises of several moving parts. Most of these - as\npotential developer - you will not have to worry about or update. Having said\nthat, it's useful to have an understanding of what they do and how they\ninteract.\n\n![Architecture diagram](docs/architecture-structure.png)\n\n### Apps\n\nApps are the most visible section of the architecture - if you're developing\nnew radio ideas, they'll be in form of apps.\n\nAn app takes the form of two single-page web apps that communicate over\nWebSockets. These two parts are named `internal` and `external`. The `internal`\npage is loaded by a headless instance of Chromium running on the Raspberry Pi.\n\nAny audio that's played from this `internal` web page will play out the Pi's\naudio port i.e. the headphone jack, the HDMI port or a connected USB audio\ncard.\n\nThe `external` web page can be loaded by a browser on another machine and is\nused as the User Interface or Remote Control for the app.\n\nThe `internal` and `external` parts of an app are automatically mounted by\ntheir `id` on different ports. So, for an app named `radio`, the `internal`\npart will be mounted at `http://localhost:5001/radio` and the `external` part\nwill be available at `http://localhost:5000/radio`. All radiodan apps must have\nan `index.html` file in each part so that they can be loaded on mount.\n\nOn a radiodan system, we proxy port `5000` to port `80` so you load the `radio`\napp's `external` page at `http://raspberrypi.local/radio`.\n\nA list of available apps are [available below](#available-apps).\n\n### Manager Service\n\nThis service takes care of mounting and running your apps, as well as running\nthe WebSockets server and client that they communicate over. By default, all\navailable apps are mounted. You can limit which apps run by using the [setup\nservice][#setup-service].\n\nThe `internal` section of the application has a special `index.html` page that\nloads the `internal` part of each app into an IFrame.\n\n### Manager-Web\n\nOnce all apps are mounted by the Manager, this process loads the web page\navailable on the `internal` port into a headless version of Chromium.\n\n## Available Apps\n\n### Radio\n\nThis initial implementation doesn't do very much.\n[radio/index.html](radio/index.html) plays a live HLS radio stream using\n[HLS.js](https://github.com/dailymotion/hls.js) in a web page.\n\nIn a future version it would be good to present a simple remote control that\nallows you to play/pause the stream.\n\n### YouTube\n\nPlays and controls a YouTube video, using either [YouTube's IFrame\nAPI](https://developers.google.com/youtube/iframe_api_reference), or the\n[Downloader Service](#downloader-service) for offline support.\n\n## Available Services\n\n### Setup Service\n\nA web service, available at `http://localhost:5020`, allows configuration of\nwhich apps and services run when your Pi is started. Some essential services -\nsuch as [Manager](#manager-service), [Debug](#debug-service), and the Setup\nService itself - cannot be removed.\n\n### Physical Interface Service\n\nA very rough implementation for controlling connected lights and buttons exists\nin `physical`. When run it connects to the peripherals specified in\n`physical/config/physical-config.json`.\n\nSupported components:\n\n* Buttons, RGB LEDs, LED Matrices ([Johnny-Five](http://johnny-five.io))\n* Rotary Encoders ([andrewn/raspi-rotary-encoder](https://github.com/andrewn/raspi-rotary-encoder))\n* Capacitive touch sensor (CAP1188) ([andrewn/raspi-cap](https://github.com/andrewn/raspi-cap))\n\n### Downloader Service\n\nUses the `youtube-dl` binary to produce audio files in\n[WebM](https://www.webmproject.org/) format for consumption by apps.\n\nThere is a basic http interface available on http://localhost:5002.\n\n### RFID Service\n\nListens for a connected MFC522 card reader and publishes found cards across the\nWebSocket server.\n\nThere is a basic http interface available on http://localhost:5003.\n\n## Contributors\n\n* [Andrew Nicolaou](https://github.com/andrewn)\n* [Libby Miller](https://github.com/libbymiller)\n* [Dan Nuttall](https://github.com/pixelblend)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrewn%2Fneue-radio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandrewn%2Fneue-radio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrewn%2Fneue-radio/lists"}