From b777f4fd00a7fe8c4e22abdbec36fb9697531ca2 Mon Sep 17 00:00:00 2001 From: Wolfgang Kulhanek Date: Fri, 17 Oct 2025 17:33:04 +0200 Subject: [PATCH] Setup docs --- UPDATES.md | 45 ++++++++++ sonos_service/SONOS_SERVICE.md | 82 ++++++++++++++++++ sonos_service/images/about.png | Bin 0 -> 37496 bytes .../sonos_artwork}/navidrome 112x112.png | Bin .../sonos_artwork}/navidrome 200x200.png | Bin .../sonos_artwork}/navidrome 20x20.png | Bin .../sonos_artwork}/navidrome 400x400.png | Bin .../sonos_artwork}/navidrome 40x40.png | Bin .../sonos_artwork}/navidrome 80x80.png | Bin .../sonos_artwork}/service_logo_200x800.svg | 0 .../sonos_artwork}/service_logo_20x180.svg | 0 .../sonos_artwork}/service_logo_40x40.svg | 0 12 files changed, 127 insertions(+) create mode 100644 UPDATES.md create mode 100644 sonos_service/SONOS_SERVICE.md create mode 100644 sonos_service/images/about.png rename {sonos_artwork => sonos_service/sonos_artwork}/navidrome 112x112.png (100%) rename {sonos_artwork => sonos_service/sonos_artwork}/navidrome 200x200.png (100%) rename {sonos_artwork => sonos_service/sonos_artwork}/navidrome 20x20.png (100%) rename {sonos_artwork => sonos_service/sonos_artwork}/navidrome 400x400.png (100%) rename {sonos_artwork => sonos_service/sonos_artwork}/navidrome 40x40.png (100%) rename {sonos_artwork => sonos_service/sonos_artwork}/navidrome 80x80.png (100%) rename {sonos_artwork => sonos_service/sonos_artwork}/service_logo_200x800.svg (100%) rename {sonos_artwork => sonos_service/sonos_artwork}/service_logo_20x180.svg (100%) rename {sonos_artwork => sonos_service/sonos_artwork}/service_logo_40x40.svg (100%) diff --git a/UPDATES.md b/UPDATES.md new file mode 100644 index 0000000..fc645a0 --- /dev/null +++ b/UPDATES.md @@ -0,0 +1,45 @@ +# Updates for SMAPI + +Run Bonob on your server. + +Bonob now needs a volume to store OAuth Tokens. In the example below that directory is `/var/containers/bonob`. Adapt as needed. +Also the example below uses a `bonob` user on the system with ID `1210` and group `100`. The directory should be owned by that user. + +Example systemd file (`/usr/lib/systemd/system/bonob.service`): +==== +[Unit] +Description=bonob Container Service +Wants=network.target +After=network-online.target + +[Service] +Environment=PODMAN_SYSTEMD_UNIT=%n +Restart=always +ExecStartPre=-/usr/bin/podman rm -f bonob +ExecStart=/usr/bin/podman run --rm \ + --name bonob \ + --label "io.containers.autoupdate=image" \ + --user 1210:100 \ + --env BNB_SONOS_SERVICE_NAME="Navidrome" \ + --env BNB_PORT=8200 \ + --env BNB_URL="https://bonob.mydomain.com" \ + --env BNB_SECRET="" \ + --env BNB_SONOS_SERVICE_ID= \ + --env BNB_SUBSONIC_URL=https://music.mydomain.com \ + --env BNB_ICON_FOREGROUND_COLOR="black" \ + --env BNB_ICON_BACKGROUND_COLOR="#65d7f4" \ + --env BNB_SONOS_AUTO_REGISTER=false \ + --env BNB_SONOS_DEVICE_DISCOVERY=false \ + --env BNB_LOG_LEVEL="info" \ + --env TZ="Europe/Vienna" \ + --volume /var/containers/bonob:/config:Z \ + --publish 8200:8200 \ + quay.io/wkulhanek/bonob:latest +ExecStop=/usr/bin/podman rm -f bonob +StandardOutput=syslog +StandardError=syslog +SyslogIdentifier=bonob + +[Install] +WantedBy=multi-user.target default.target +==== diff --git a/sonos_service/SONOS_SERVICE.md b/sonos_service/SONOS_SERVICE.md new file mode 100644 index 0000000..2626da8 --- /dev/null +++ b/sonos_service/SONOS_SERVICE.md @@ -0,0 +1,82 @@ +# Setting up Sonos Service + +* Prerequisites +** In your Sonos App get your Sonos ID (About my Sonos System) ++ image::images/about.png + +** Navidrome running and available from the Internet. E.g. via https://music.mydomain.com +** Bonob running and available from the Internet. E.g. via https://bonob.mydomain.com + +You can use any method to make these URLs available. Cloudflare Tunnels, Pangolin, reverse proxy, etc. + +* Log into https://play.sonos.com +* Once logged in go to https://developer.sonos.com/s/integrations + +* Create a *New Content Integration* + +** General Information +*** Service Name: Navidrome +*** Service Availability: Global +*** Checkbox checked +*** Website/Social Media URLs: https://music.mydomain.com (Some URL - e.g. your Navidrome server) + +** Sonos Music API +*** Integration ID: com.mydomain.music (your domain in reverse) +*** Configuration Label: 1.0 +*** SMAPI Endpoint: https://bonob.mydomain.com/ws/sonos +*** SMAPI Endpoint Version: 1.1 +*** Radio Endpoint: empty +*** Reporting Endpoint: https://bonob.mydomain.com/report/v1 +*** Reporting Endpoint Version: 2.3 +*** Authentication Method: OAuth +*** Redirect: https://bonob.mydomain.com/login +*** Auth Token Time To Life: Empty +*** Browse/Search Results Page Size: 100 +*** Polling Interval: 60 + +** Brand Assets + +Just upload the various assets from the `sonos_artwork` directory. + +** Localization Resources + +Write something about your service in the various fields (except Explicit Filter Description). + +** Integration Capabilities + +Check the first two (*Enable Extended Metadata* and *Enable Extended Metadata for Playlists*) and nothing else. + +** Image Replacement Rules + +No changes + +** Browse Options + +No changes + +** Search Capabilities + +*** API Catalog Type: SMAPI Catalog +*** Catalog Title: Music +*** Catalog Type: GLOBAL + +Add Three Categories with ID and Mapped ID: + +Albums - albums +Artists - artists +Tracks - tracks + +** Content Actions + +No changes + +** Service Deployment Settings + +*** Sonos ID: Your Sonos ID (from About my system). This is how only your controller sees the new service. +*** System Name: Whatever you want + +** Service Configuration + +Click on *Refresh* and then *Send*. You should get a success message that you can dismiss with *Done*. + +* In your app search for your service name and add Service in your app as usual. diff --git a/sonos_service/images/about.png b/sonos_service/images/about.png new file mode 100644 index 0000000000000000000000000000000000000000..7063b99aa0a47cc667c66d2f157ac1d16b601d83 GIT binary patch literal 37496 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 JPDHLkV1gyaa)|%{ literal 0 HcmV?d00001 diff --git a/sonos_artwork/navidrome 112x112.png b/sonos_service/sonos_artwork/navidrome 112x112.png similarity index 100% rename from sonos_artwork/navidrome 112x112.png rename to sonos_service/sonos_artwork/navidrome 112x112.png diff --git a/sonos_artwork/navidrome 200x200.png b/sonos_service/sonos_artwork/navidrome 200x200.png similarity index 100% rename from sonos_artwork/navidrome 200x200.png rename to sonos_service/sonos_artwork/navidrome 200x200.png diff --git a/sonos_artwork/navidrome 20x20.png b/sonos_service/sonos_artwork/navidrome 20x20.png similarity index 100% rename from sonos_artwork/navidrome 20x20.png rename to sonos_service/sonos_artwork/navidrome 20x20.png diff --git a/sonos_artwork/navidrome 400x400.png b/sonos_service/sonos_artwork/navidrome 400x400.png similarity index 100% rename from sonos_artwork/navidrome 400x400.png rename to sonos_service/sonos_artwork/navidrome 400x400.png diff --git a/sonos_artwork/navidrome 40x40.png b/sonos_service/sonos_artwork/navidrome 40x40.png similarity index 100% rename from sonos_artwork/navidrome 40x40.png rename to sonos_service/sonos_artwork/navidrome 40x40.png diff --git a/sonos_artwork/navidrome 80x80.png b/sonos_service/sonos_artwork/navidrome 80x80.png similarity index 100% rename from sonos_artwork/navidrome 80x80.png rename to sonos_service/sonos_artwork/navidrome 80x80.png diff --git a/sonos_artwork/service_logo_200x800.svg b/sonos_service/sonos_artwork/service_logo_200x800.svg similarity index 100% rename from sonos_artwork/service_logo_200x800.svg rename to sonos_service/sonos_artwork/service_logo_200x800.svg diff --git a/sonos_artwork/service_logo_20x180.svg b/sonos_service/sonos_artwork/service_logo_20x180.svg similarity index 100% rename from sonos_artwork/service_logo_20x180.svg rename to sonos_service/sonos_artwork/service_logo_20x180.svg diff --git a/sonos_artwork/service_logo_40x40.svg b/sonos_service/sonos_artwork/service_logo_40x40.svg similarity index 100% rename from sonos_artwork/service_logo_40x40.svg rename to sonos_service/sonos_artwork/service_logo_40x40.svg