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 🙏

© 2024 – Pkg Stats / Ryan Hefner

@mkellsy/leap-client

v1.7.1

Published

Publishes device states using the Lutron LEAP protocol

Downloads

173

Readme

Lutron LEAP Client

Publishes devices, states and actions to an event emitter using the Lutron LEAP protocol.

API

API Documentation

Pairing a processor or bridge

import { pair } from "@mkellsy/leap-client";

console.log("Press the pairing button on the main processor or smart bridge");

await pair();

This will autopmatically discover processors. You will need to press the pairing button on your processor or bridge.

If you have multiple systems Caseta and RA3, you can pair other processors or bridges by runnging the pair command again, and pressing the pairing button on the other device.

Systems that have more than one processor, such as RA3, you will only need to pair the first bridge. Devices programed for other bridges are vended from all processors.

After you have a processor or bridge paired, you can connect.

import { connect } from "@mkellsy/leap-client";

const location = connect();

location.on("Available", (processor): void => {
    // event fired when all devices are available
});

location.on("Update", (device, state): void => {
    // event fired when the device state updates
});

location.on("Action", (device, button, action): void => {
    // event fired when a device action occurs
});

The processor will cache slow changing data, to refresh the areas, zones, remotes, etc... you can set the refresh flag when calling connect connect(true).

Fetch a list of processors.

for (const id of location.processors) {
    // the id is the processor id string
}

Accessing the processor

const processor = location.processor(id);

Pinging the a processor or bridge

const response = await processor.ping();

Processor details.

const system = await processor.system();
const project = await processor.project();

Fetch a list of areas

const areas = await processor.areas();

Fetch all statuses

const statuses = await processor.statuses();

Fetch zones in an area

const zones = await processor.zones(area);

Fetch a zone or area status

const areaStatus = await processor.status(area);
const zoneStatus = await processor.status(zone);

Fetch an area's controls

const controls = await processor.controls(area);

Fetching ganged controls

const controls = await processor.controls(area);

for (const gangedDevice of control.AssociatedGangedDevices) {
    const address = gangedDevice.Device;

    // the the address can be used to fetch the pico remote, sensor, keypad
}

Fetching a device

const device = await processor.device(address);

Fetching a devices buttons

const buttons = await processor.buttons(device);

Executing a command

await processor.command(deviceOrZone, commandObject);

Fetching a discovered device

const device = processor.devices.get(id);

Update the status of a device

device.update(state);

Set a property(s) of a device

device.set(state);