npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

homebridge-dual-cs529

v0.1.1

Published

Homebridge plugin for controlling a Dual CS 529 vinyl turntable over Bluetooth LE

Readme

homebridge-dual-cs529

npm version npm downloads license

Homebridge dynamic platform plugin for controlling a Dual CS 529 vinyl turntable / record player over Bluetooth LE.

The plugin exposes HomeKit switches for start/stop, turntable speed, repeat mode, and loop mode. It uses the BLE control protocol observed in the official Dual BLE Remoter Android APK.

Status

This plugin is a reverse-engineered implementation with automated tests for protocol formatting, BLE discovery, reconnect, and state restore.

Features

  • Auto-discovers the first connectable Dual CS 529 / Dual CS turntable using the Nordic UART BLE service.
  • Optional pinning by BLE peripheral ID or peripheral name prefix.
  • Power / Start-Stop switch.
  • Speed switches for 33, 45, and 78 RPM.
  • Repeat mode switch.
  • Loop mode switch.
  • Periodic status polling using APK-visible query commands.
  • Automatic reconnect with desired-state restoration after BLE errors or disconnects.
  • Homebridge Plugin Settings GUI via config.schema.json.

Installation

Homebridge UI

  1. Open Homebridge UI.
  2. Go to Plugins.
  3. Search for homebridge-dual-cs529.
  4. Install the plugin.
  5. Configure it from the plugin settings screen.

The package appears in Homebridge plugin search after it is published to npm with the homebridge-plugin keyword.

npm

npm install -g homebridge-dual-cs529

Configuration

Minimal configuration:

{
  "platform": "DualCS529",
  "name": "Dual CS529",
  "deviceName": "Dual CS529"
}

Advanced configuration:

{
  "platform": "DualCS529",
  "name": "Dual CS529",
  "deviceName": "Dual CS529",
  "peripheralId": "AA:BB:CC:DD:EE:FF",
  "peripheralName": "Dual",
  "serviceUuid": "6e400001-b5a3-f393-e0a9-e50e24dcca9e",
  "commandCharacteristicUuid": "6e400002-b5a3-f393-e0a9-e50e24dcca9e",
  "notifyCharacteristicUuid": "6e400003-b5a3-f393-e0a9-e50e24dcca9e",
  "pollIntervalMs": 120000,
  "reconnectDelayMs": 2000,
  "reconnectMaxAttempts": 15
}

| Setting | Required | Default | Description | | --- | --- | --- | --- | | platform | yes | DualCS529 | Homebridge platform alias. | | name | yes | Dual CS529 | Platform name shown in Homebridge. | | deviceName | yes | Dual CS529 | HomeKit accessory display name. | | peripheralId | no | empty | BLE address / ID to pin a specific turntable. Leave empty for auto-discovery. | | peripheralName | no | empty | BLE name prefix to pin discovery, for example Dual or CS529. | | serviceUuid | no | Nordic UART service | BLE service UUID used for control. | | commandCharacteristicUuid | no | Nordic UART RX | BLE characteristic used to write commands. | | notifyCharacteristicUuid | no | Nordic UART TX | BLE characteristic used to receive notifications. | | pollIntervalMs | no | 120000 | Status polling interval. | | reconnectDelayMs | no | 2000 | Delay before reconnect attempts. | | reconnectMaxAttempts | no | 15 | Maximum reconnect attempts before giving up until Homebridge restarts. |

Discovery

By default, the plugin creates one HomeKit accessory and connects it to the first matching Dual CS 529 / Dual CS turntable it can successfully use over BLE. It scans for the Nordic UART service UUID found in the APK. If an early candidate cannot connect or does not expose the expected command/notify characteristics, scanning continues until another candidate works or the scan times out.

Use peripheralId or peripheralName only when you want to pin the plugin to a specific record player.

HomeKit Controls

The Dual CS 529 is represented as a group of HomeKit switches:

  • Power / Start-Stop
  • Speed 33
  • Speed 45
  • Speed 78
  • Repeat Mode
  • Loop Mode

HomeKit does not have a native vinyl turntable service, so switches are used for reliable control and automation support.

BLE Protocol Notes

Commands are based on strings found in the official Android APK:

@0PTTTRS33
@0PTTTRS45
@0PTTTRS78
@0PTTTST00
@0PTTTST01
@0PTTTST02
@0PTTTRP%02d
@0PTTTLS%02d

Query commands use the APK-visible form:

@0?PTTTRS
@0?PTTTST
@0?PTTTLS
@0?PTTTRP

The default BLE UUIDs are the Nordic UART service and RX/TX characteristics found in the APK. Override them only if your device exposes different values.

Bluetooth Requirements

@abandonware/noble may require OS-level Bluetooth permissions and native BLE dependencies, especially on Linux/Raspberry Pi. Make sure the user running Homebridge can access the Bluetooth adapter. The plugin does not use post-install scripts and does not modify the host system.

Development

npm install
npm run build
npm test
npm pack --dry-run

For local Homebridge testing:

npm link
homebridge -D

Publishing Checklist

  1. Create a public GitHub repository with issues enabled.
  2. Push this repository to https://github.com/yudin-s/homebridge-dual-cs529.
  3. Confirm npm run build, npm test, and npm pack --dry-run pass.
  4. Publish to npm:
npm publish
  1. Create a GitHub release with release notes for the published version.
  2. Install from Homebridge UI by searching for homebridge-dual-cs529.

Verified by Homebridge Readiness

This package is structured for the Homebridge verification path:

  • dynamic platform plugin;
  • npm package named homebridge-dual-cs529;
  • homebridge-plugin npm keyword;
  • Homebridge Settings GUI via config.schema.json;
  • no analytics;
  • no post-install scripts;
  • GitHub repository metadata in package.json;
  • tests and dry-run packaging commands documented.

Verification should wait until the plugin has been tested with a real Dual CS 529 vinyl turntable.

License

MIT