ring-alarm
This is an unofficial TypeScript api for Ring Doorbells,
Ring Cameras,
the Ring Alarm System,
Ring Smart Lighting,
and third party devices that connect to the Ring Alarm System.
Built to support the homebridge-ring-alarm Plugin
Installation
npm i @dgreif/ring-alarm
Setup and Config
import { RingApi } from '@dgreif/ring-alarm'
const ringApi = new RingApi({
email: 'some.one@website.com',
password: 'abc123!#',
locationIds: ['488e4800-fcde-4493-969b-d1a06f683102', '4bbed7a7-06df-4f18-b3af-291c89854d60'],
cameraStatusPollingSeconds: 20,
cameraDingsPollingSeconds: 1
});
Optional Parameters
locationIds
: Allows you to limit the results to a specific set of locations.
This is mainly useful for the homebridge-ring-alarm Plugin, but can also be used if you only care about
listening for events at a subset of your locations and don't want to create websocket connections to all of your locations.
This will also limit the results for ringApi.getCameras()
to the configured locations.
If this option is not included, all locations will be returned.
cameraStatusPollingSeconds
: How frequently to poll for updates to your cameras. Information like
light/siren status do not update in real time and need to be requested periodically
cameraDingsPollingSeconds
: How frequently to poll for new events from your cameras. These include motion and
doorbell presses. Without this option, cameras will not emit any information about motion and doorbell presses.
Locations
const locations = await ringApi.getLocations()
const location = locations[0]
location.hasHubs
location.disarm()
location.armHome([])
location.armAway([])
location.soundSiren()
location.silenceSiren()
location.cameras
const rooms = await location.getRoomList()
locations
is an array of your Ring locations. Each location can be armed or disarmed,
and used to interact with all devices in that location.
Devices
Once you have acquired the desired location, you can start
to interact with associated devices. These devices include ring alarm, ring lighting,
and third party devices connected to ring alarm
import { RingDeviceType } from '@dgreif/ring-alarm'
const devices = await location.getDevices()
const baseStation = devices.find(device => device.data.deviceType === RingDeviceType.BaseStation)
baseStation.setVolume(.75)
console.log(baseStation.data)
baseStation.onData.subscribe(data => {
})
Cameras
You can get all cameras using await ringApi.getCameras()
or cameras for a particular
location with location.cameras
const camera = location.cameras[0]
camera.data
camera.onData.subscribe(data => {
})
camera.setLight(true)
camera.setSiren(true)
camera.getHealth()
camera.startVideoOnDemand()
camera.getHistory(50)
camera.getRecording()
camera.getSnapshot()
Camera also includes the following observables:
onNewDing
: this will include the sip info and ding information every time a new ding is createdonActiveDings
: dings created within the last 65 secondsonDoorbellPressed
: emits a ding every time the doorbell is pressedonMotionDetected
: true
or false
based on onActiveDings
containing a motion ding
Some other useful propeties
id
name
: same as description
from data
hasLight
: does this camera have a lighthasSiren
: does this camera have a sirenisDoorbot
: is this camera a doorbell
See the examples
directory for additional code examples.
Breaking changes from v2 to v3
v3 exports a full RingApi
object instead of a single getLocations
method.
import { getLocations } from '@dgreif/ring-alarm'
const locations = await getLocations(options)
import { RingApi } from '@dgreif/ring-alarm'
const ringApi = new RingApi(options),
locations = await ringApi.getLocations(),
cameras = await ringApi.getCameras()
v3 also exposes some other top level methods like ringApi.getHistory()
and ringApi.fetchRingDevices()
.
Since these are global across all locations, it no longer made sense to export a single getLocations
method.
homebridge-ring-alarm
The homebridge-ring-alarm
is also maintained in this repo. It's readme can be found in the homebridge
directory
Credits
I'd like to give a big thanks to a number developers who have put a lot of hard work into analyzing the
Ring api and building similar libraries which were extremely valuable in my creation of this project. Thank you all
for your hard work!