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

node-red-contrib-ring-intercom

v0.1.0

Published

Node-RED nodes for a Ring Intercom (unlock + ding events), message-compatible with NRCHKB.

Downloads

131

Readme

node-red-contrib-ring-intercom

Node-RED nodes for a Ring Intercom: unlock control and ding events, shaped to plug straight into NRCHKB nodes for HomeKit exposure. No video (see project docs for why).

Nodes

  • ring-account (config): holds a Ring refresh token and the shared API client. Generate a dedicated token once with npx -p ring-client-api ring-auth-cli (do not reuse the token from homebridge or any other install -- see Troubleshooting).
  • ring-intercom (in+out): one per physical intercom.
    • Input: { payload: { LockTargetState: 0 } } triggers unlock (same shape as NRCHKB's Lock Mechanism node output -- wire it directly).
    • Output: { payload: { LockCurrentState } } (msg.event: 'lock') and { payload: { ProgrammableSwitchEvent: 0 } } (msg.event: 'ding').

How dings are delivered

Dings arrive in realtime via Ring's push notification channel (FCM), the same mechanism the Ring app and homebridge-ring use: the account node's shared RingApi registers one push receiver, and ring-intercom subscribes to the device's onDing stream.

A 15-second event-history poll runs behind push purely as a watchdog: any ding that push already delivered is recognised (by event timestamp) and suppressed; a ding that push missed is still emitted -- at most 15s late, never lost -- together with a loud warning that push is unhealthy.

Troubleshooting realtime push

If dings only ever arrive via the fallback (yellow node status, "push missed a ding" warnings), work through these in order:

  1. Use a dedicated refresh token. A token copied from another install (e.g. homebridge-ring) is a base64 "wrapped" token embedding that install's hardware id and FCM push credentials; two installs sharing it invalidate each other's sessions and steal each other's push registration. This package strips the wrapper defensively, but the underlying OAuth token is still shared -- generate a fresh one with npx -p ring-client-api ring-auth-cli.
  2. Avoid duplicate push receivers. The account node keeps one RingApi alive across redeploys precisely so only one FCM socket exists per account. Restart Node-RED fully after upgrading this package so no receiver from an old version lingers (ring-client-api never closes its push socket, so a full deploy on the old version leaks one per deploy).
  3. Enable "Verbose Ring logging" on the ring-account node and redeploy. Push-subsystem failures then show in the Node-RED log prefixed [ring]:
    • PHONE_REGISTRATION_ERROR -- FCM registration is failing. It is retried 5 times, then the library gives up until the next restart. If it persists, delete <userDir>/node-red-contrib-ring-intercom/ring-<node-id>.token and re-paste your token so a fresh push identity is registered.
    • Connection to the push notification server has failed -- outbound TCP/5228 to mtalk.google.com is blocked (firewall/IDS/DNS adblock). Allow it; push cannot work without it.
  4. Check the device subscription. ring-intercom re-asserts the server-side ding subscription on every deploy; a warning Failed to subscribe to ding events means Ring rejected it -- check the account has full access to the intercom (shared users can lack event access).

Testing

  • npm test -- unit + node-load tests, no network.
  • npm run smoke:ring -- env-gated, read-only live check (RING_REFRESH_TOKEN or a gitignored test/.token file). Never calls unlock.