Skip to content

Unfolded Circle integration driver for the Oppo Blu-ray players

License

Notifications You must be signed in to change notification settings

henrikwidlund/unfoldedcircle-oppo

Repository files navigation

Unfolded Circle Oppo Integration Driver

Release CI CodeQL Docker

This repository contains the server code for hosting an Oppo Blu-ray integration driver for the Unfolded Circle Remotes.

Supported devices

  • Oppo BDP-83
  • Oppo BDP-93
  • Oppo BDP-95
  • Oppo BDP-103
  • Oppo BDP-105
  • Oppo UDP-203
  • Oppo UDP-205

Supported features limitations

  • All features are supported for the UDP-20X series.
Feature Oppo BDP-83/93/95 Oppo UDP-10X
Option Command ✔️
3D Switching ✔️
Picture Adjustment ✔️
HDR Mode ❌️
Info Hold ❌️
Resolution Hold ❌️
A/V Sync ❌️
Gapless Playback ❌️
Track Name ❌️
Album Name ❌️
Album Cover ❌️
Artist Name ❌️

Prerequisites

Running

  • The published binary is self-contained and doesn't require any additional software. It's compiled for Linux ARM64 and is meant to be running on the remote.
  • Use the Docker Image in the Core Simulator

Network

Service Port Protocol
Server 9001* HTTP (TCP)
Oppo UDP-83 19999 TCP
Oppo UDP-10X 48360 TCP
Oppo UDP-20X 23 TCP

* Server port can be adjusted by specifying the desired port with the UC_INTEGRATION_HTTP_PORT environment variable.

Development

Installing on the remote

  1. Download the latest release.
  2. Browse to your remote's IP address.
  3. Click on Core-API REST.
  4. Find the POST endpoint /intg/install
  5. Click on Try it out.
  6. Choose the file you downloaded (unfoldedcircle-oppo.tar.gz).
  7. Click on Execute and wait for the integration to be uploaded and installed.
  8. Go to the regular page in the web configurator for integrations and configure the integration.

Configuration

The application can be configured using the appsettings.json file or environment variables. Additionally, the application saves configured entities to the configured_entities.json file, which will be saved to the directory specified by the UC_CONFIG_HOME environment variable.

Logging

By default, the application logs to stdout. It can also be customized to send the logs over HTTP to a remote server. You can customize the log levels by either modifying the appsettings.json file or by setting environment variables.

Log levels

  • Trace
  • Debug
  • Information
  • Warning
  • Error

Trace log level will log the contents of all the incoming and outgoing requests and responses. This includes both Websockets and Telnet.

appsettings.json

{
    "Logging": {
        "LogLevel": {
          "UnfoldedCircle.Server": "Information",
          "Oppo": "Information",
          "Makaretu.Dns": "Warning"
        }
    }
}

Environment variables

Same adjustments to log levels can be made by setting environment variables.

  • Logging__LogLevel__UnfoldedCircle.Server = Information
  • Logging__LogLevel__Oppo = Information
  • Logging__LogLevel__Makaretu.Dns = Warning

HTTP logging

Change appsettings.json to send logs over HTTP.

{
    "HttpLogger": {
        "Enabled": true,
        "Endpoint": "https://YOUR_HOST:PORT/OPTIONAL_PATH"
    }
}

Similarly you can configure it using environment variables:

  • HttpLogger__Enabled = true
  • HttpLogger__Endpoint = https://YOUR_HOST:PORT/OPTIONAL_PATH

Note that when using HTTP logging the application will default to Trace log level.

Building from source code

Building for the remote

Execute publish.sh script to build the application for the remote. This will produce a tar.gz file in the root of the repository.

Building for Docker

Execute the following from the root of the repository:

docker build -f src/UnfoldedCircle.Server/Dockerfile -t oppo .

dotnet CLI

dotnet publish ./src/UnfoldedCircle.Server/UnfoldedCircle.Server.csproj -c Release --self-contained -o ./publish

This will produce a self-contained binary in the publish directory in the root of the repository.

Limitations

  • Selecting input on the player can only be done when the player reports that it is on, this means that you have to place a delay between the Switch on and Input source commands if you want to use this in the On sequence, or the remote will think the start sequence fails.
  • The artist, album and track information might not always be available or accurate. This can't be helped as it's the information the player provides.
  • The album cover might be incorrect or missing. This is because the CDDB database no longer exists, as such, the application tries to get covers by matching the current artist and album. This is not always accurate enough.

Licenses / Copyright

About

Unfolded Circle integration driver for the Oppo Blu-ray players

Topics

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Languages