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-systemline-s62-usb

v1.0.0

Published

Homebridge plugin for the Systemline S6.2 multi-room audio system over a direct USB-to-RS232 serial cable. Each zone appears as a TV accessory with source selection and volume control. No network-to-serial adapter required.

Readme

homebridge-systemline-s62-usb

A Homebridge plugin for the Systemline S6.2 multi-room audio system over a direct USB-to-RS232 serial cable. Each zone appears as a TV accessory in HomeKit with source selection and volume control.

npm Homebridge v2


Which plugin do I want?

| Plugin | Connection | HomeKit presentation | |--------|-----------|---------------------| | this one | USB-to-RS232 cable | TV accessory with source picker + volume | | homebridge-systemline-s62-control | Global Cache iTach IP2SL (network) | TV accessory with source picker + volume | | homebridge-globalcache-gc100-kiro | Global Cache iTach IP2SL (network) | Simple on/off switches + volume |

If Homebridge runs on a machine physically near the amplifier, this plugin is the simplest and fastest option — a low-cost USB serial cable replaces a network-to-serial adapter, and the round-trip latency is a fraction of the networked equivalent.


Overview

The Systemline S6.2 is an 8-zone multi-room audio matrix amplifier with an RS232 control interface but no network connectivity.

This plugin drives that interface directly from a USB serial adapter, exposing each zone to HomeKit so you can control whole-home audio from the Home app, Siri, or any automation.

From HomeKit you can:

  • Turn zones on and off
  • Select the source per zone using the TV input picker
  • Set volume with a slider, or step it with the TV remote volume buttons
  • Include zones in scenes and automations

Requirements

  • Homebridge v1 or v2
  • USB-to-RS232 cable (FTDI FT232R chipset recommended)
  • Systemline S6.2 amplifier, cable connected to its RS232 control port
  • The Homebridge user must be in the dialout group

Installation

npm install -g homebridge-systemline-s62-usb

Or install via the Homebridge UI plugin search.

The serialport dependency compiles natively — on a Raspberry Pi this happens automatically but may take a minute.


Finding your serial port

ls /dev/ttyUSB*
udevadm info /dev/ttyUSB0 | grep ID_USB_SERIAL

Stable device paths (recommended)

USB serial numbering (ttyUSB0, ttyUSB1, …) depends on enumeration order and can change after a reboot. If you have more than one USB serial device, pin them with udev rules so the right cable is always used.

  1. Get the cable's serial number:
udevadm info /dev/ttyUSB0 | grep ID_USB_SERIAL_SHORT
  1. Create /etc/udev/rules.d/99-usb-serial.rules:
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{serial}=="YOUR_SERIAL", SYMLINK+="ttyUSB_S62_CTRL"
  1. Reload:
sudo udevadm control --reload-rules && sudo udevadm trigger
  1. Use /dev/ttyUSB_S62_CTRL as the serial_port in your config.

Configuration

{
  "platform": "SystemlineS62USB",
  "name": "Systemline S6.2",
  "serial_port": "/dev/ttyUSB_S62_CTRL",
  "baud_rate": 9600,
  "maxVolume": 25,
  "sources": [
    { "id": 1, "name": "Sky Q Mini" },
    { "id": 2, "name": "Sky Q" },
    { "id": 6, "name": "Apple TV" }
  ],
  "zones": [
    { "id": 1, "name": "Bedroom 1" },
    { "id": 2, "name": "Kitchen" },
    { "id": 8, "name": "Winter Lounge" }
  ]
}

Options

| Option | Required | Default | Description | |--------|----------|---------|-------------| | serial_port | Yes | — | USB serial device path | | baud_rate | No | 9600 | S6.2 control port baud rate | | maxVolume | No | 25 | Slider maps 0–100% onto 0–maxVolume (hardware max 30). Lower = finer control | | sources | Yes | — | Sources by S6.2 source number (1–6) and name. List only the ones you use | | zones | Yes | — | Zones by S6.2 zone number (1–8) and name |

Zones appear as accessories in the Homebridge UI after a restart — add each to HomeKit from there. No separate pairing is required.


How it works

Each zone is a TV accessory containing:

| Service | Purpose | |---------|---------| | Television | Power and source selection | | InputSource (one per source) | Entries in the source picker | | TelevisionSpeaker | Volume up/down in the TV remote UI | | Lightbulb | Brightness slider used as the volume control |

State is read from the amplifier at startup and cached. HomeKit reads are answered from cache so they return instantly, and the cache is updated after every command. Volume changes are debounced by 400 ms so dragging the slider sends one command rather than a flood.

Doubled commands

Every command is written to the port twice. The S6.2 holds its response in an output buffer and only flushes it when further incoming bytes arrive — send a single command and the reply sits there until the next command shows up, which desynchronises every request/response pair after it. Writing the command twice supplies the flush trigger, so the reply comes straight back.

This was originally assumed to be a quirk of the Global Cache iTach. It is not — it is the amplifier's behaviour, and it applies equally over direct serial.

Reconnection

If the USB device drops off the bus — cable unplugged, power glitch, hub hiccup — the plugin detects it, retries every 10 seconds, and re-reads every zone's state once the device returns. No Homebridge restart needed. If the cable is missing at startup the accessories still register and begin working once it appears.


S6.2 RS232 protocol

| Action | Command | Response | |--------|---------|----------| | Select source | $s<zone>src<source>\r | $r<zone>src<source> | | Zone off | $s<zone>srcoff\r | $r<zone>srcoff | | Query source | $g<zone>src\r | $r<zone>src<source> or $r<zone>srcoff | | Set volume | $s<zone>vol<0-30>\r | $r<zone>vol<n> | | Query volume | $g<zone>vol\r | $r<zone>vol<n> or $r<zone>volmute | | Mute | $s<zone>volmute\r | $r<zone>volmute | | Unmute | $s<zone>volmoff\r | $r<zone>vol<n> |

Commands are serialised through a single queue so only one is ever in flight.


Troubleshooting

Permission denied opening the port

sudo usermod -a -G dialout $USER

Then restart Homebridge. On a Homebridge UI install the service user may differ — check which user the service runs as.

Response timeouts

  • Confirm the baud rate matches your amplifier's control port
  • Check the wiring: TX to RX, RX to TX. A straight-through cable where a null modem is needed will not work
  • Confirm the cable is on the control RS232 port, not a data/feedback port

Zones show the wrong state

  • State is read at startup; if the amplifier is changed from a wall keypad the plugin will not see it until the next restart or reconnect
  • Restart Homebridge to force a re-read

Wrong device opened after reboot

  • Use udev symlinks — see "Stable device paths" above

Credits

Systemline S6.2 RS232 protocol — documented in the S6.2 installation manual.

Predecessorhomebridge-globalcache-itach by Paul Wieland, which the original iTach-based version was derived from.

Built with Kiro AI — https://kiro.dev


License

MIT