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

@jagcesar/yalesyncalarm

v2.1.11

Published

Yale Sync Smart Home Alarm System API for Node.js, written in Typescript.

Downloads

12

Readme

Yale Sync & Smart Home Alarm API

npm Known Vulnerabilities npm

API wrapper for the undocumented API used by the Yale Sync Smart Home Alarm and Yale Smart Home Alarm.

The state of the alarm system (the panel) is exposed, along with contact and motion sensors.

Installation

npm install --save yalesyncalarm

Usage

Typescript

The NPM module ships pre-compiled js files, and d.ts files so it still can be used from typescript directly.

// File.ts

import { Yale } from 'yalesyncalarm'

const yale = new Yale(username, password)
await yale.update() // fetches panel and sensor state

const panel = await yale.panel()
const panelState = await yale.getPanelState()
const updatedPanelState = await yale.setPanelState(Panel.State.Armed)

const motionSensors = await yale.motionSensors()
const contactSensors = await yale.contactSensors()

const updatedMotionSensor = await yale.updateMotionSensor(motionSensor)
const updatedContactSensor = await yale.updateMotionSensor(contactSensor)

Yale.AccessToken contains both the token itself and an expiry date, after which the token is no longer valid. Clients are expected to verify the token is valid before calling other methods, or handle errors thrown by API calls that use the access token.

Yale.Panel.Mode is an enum consisting of .arm, .disarm and .home cases. The Yale alarms do not discrimiate between home and night modes as some other alarm systems do.

Yale.Devices.Sensor is a discriminated union for Door Contact Sensors and Passive IR Sensors. The states of these are conveniently expressed as enums. Each sensor has an identifier which can be used to track the state of a sensor across multiple calls to Yale.Devices.getSensors().

Javascript

The installed NPM module ships pre-compiled js files. Therefore you are not required to build the js from the original typescript source in order to use the package.

// File.js

var Yale = require('yalesyncalarm')

var yale = new Yale.Yale(username, password)
await yale.update() // fetches panel and sensor state

var panel = await yale.panel()
var panelState = await yale.getPanelState()
var updatedPanelState = await yale.setPanelState('arm)

var motionSensors = await yale.motionSensors()
var contactSensors = await yale.contactSensors()

var updatedMotionSensor = await yale.updateMotionSensor(motionSensor)
var updatedContactSensor = await yale.updateMotionSensor(contactSensor)

Limitations

The undocumented Yale API can change on a whim, so this may break at any time. If it does, please submit a pull request if you can work out what right changes should be to make it work again.

My best guess is that the Yale Home app itself uses a non-HTTP-based protocol like XMPP/MQTT to both send and recieve state changes. The HTTP API used in this project works for pulling state for Yale Sync and Yale Smart Home APIs, but there's no way (yet) to subscribe to state changes.

Building from Source

git clone https://github.com/jonathandann/yalesyncalarm.git && cd yalesyncalarm && npm install

After running npm install, npm should automatically run npm run build, which runs node_modules/typescript/bin/tsc to compile the typescript files. If it doesn't then you can run either node_modules/typescript/bin/tsc or npm run build.

There are useful configs already included for prettier and Visual Studio Code.

Visual Studio Code is configured to use the version of typescript installed as a development dependency in the npm package.