feat(ansible): audio-endpoint role for Yamaha HS5 (Phase 0) #114

Merged
kblack0610 merged 1 commit from feat/audio-endpoint-hs5 into master 2026-07-10 02:03:51 +00:00
Owner

Summary

Board-agnostic Ansible role that turns a dedicated always-on box into a home-cluster audio endpoint for a pair of Yamaha HS5 powered monitors. Phase 0: bring up a USB balanced interface as the default ALSA sink. Foundation for the staged roadmap (AirPlay -> Music Assistant -> Snapcast multi-room).

What it does

  • Installs alsa-utils, autodetects the USB audio card from aplay -l, pins it as the default sink by card name (survives reboots) via /etc/asound.conf, and offers an opt-in speaker-test tone to verify L/R cabling.
  • Works unchanged on Raspberry Pi OS (Pi) or Armbian (Libre Computer / BigTreeTech boards) - board choice only affects the OS image, not this role.
  • Bound in site.yml to a new empty audio_endpoints group, so the play is a no-op until the box is added. Adding the host is the only activation step.

Verification

  • ansible-playbook playbooks/site.yml --syntax-check passes.
  • Card-detection Jinja tested against sample aplay -l output: correctly skips onboard bcm2835 Headphones and extracts the USB card id (U192k) + index.

Plan: ~/.claude/plans/yamaha-hs5-cluster-audio-endpoint.md

## Summary Board-agnostic Ansible role that turns a dedicated always-on box into a home-cluster audio endpoint for a pair of Yamaha HS5 powered monitors. Phase 0: bring up a USB balanced interface as the default ALSA sink. Foundation for the staged roadmap (AirPlay -> Music Assistant -> Snapcast multi-room). ## What it does - Installs `alsa-utils`, autodetects the USB audio card from `aplay -l`, pins it as the default sink by card **name** (survives reboots) via `/etc/asound.conf`, and offers an opt-in `speaker-test` tone to verify L/R cabling. - Works unchanged on Raspberry Pi OS (Pi) or Armbian (Libre Computer / BigTreeTech boards) - board choice only affects the OS image, not this role. - Bound in `site.yml` to a new **empty** `audio_endpoints` group, so the play is a no-op until the box is added. Adding the host is the only activation step. ## Verification - `ansible-playbook playbooks/site.yml --syntax-check` passes. - Card-detection Jinja tested against sample `aplay -l` output: correctly skips onboard `bcm2835 Headphones` and extracts the USB card id (`U192k`) + index. Plan: `~/.claude/plans/yamaha-hs5-cluster-audio-endpoint.md`
Board-agnostic Ansible role that brings up a USB balanced interface as the
default ALSA sink on a dedicated always-on box, so the cluster/HA can drive a
pair of Yamaha HS5 powered monitors. Foundation for the staged plan: AirPlay
(shairport-sync) -> Music Assistant -> Snapcast multi-room.

Works on Raspberry Pi OS or Armbian (Libre Computer / BigTreeTech boards) with
no logic change - autodetects the USB card from `aplay -l`, pins the default
sink by card name (survives reboots) via /etc/asound.conf, and offers an opt-in
speaker-test tone to verify L/R cabling into the speakers.

Bound in site.yml to a new, empty audio_endpoints inventory group, so the play
is a no-op until the box is added - adding the host is the only activation step.

Verified: playbook syntax-check passes; card-detection Jinja (select + regex)
correctly skips onboard audio and extracts the USB card id/index from sample
aplay -l output.
kblack0610 deleted branch feat/audio-endpoint-hs5 2026-07-10 02:03:51 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
kblack0610/home-config!114
No description provided.