Skip to content

Commit

Permalink
feat: rename npm modules to match functionality
Browse files Browse the repository at this point in the history
BREAKING CHANGE: `homebridge-ring-alarm` renamed to `homebridge-ring`.  The config for homebridge should now be `"platform": "Ring"` instead of `"platform": "RingAlarm"`.  This config change will happen automatically the first time you start homebridge with the new version, but it will cause homebridge to error out after the config is changed.  You will see a log that the config has changed and you can restart homebridge.
BREAKING CHANGE: `@dgreif/ring-alarm` renamed to `ring-client-api`.  The exported class is now `RingApi` instead of `RingAlarmApi`.  Proper usage now looks like `import { RingApi } from "ring-client-api"`.
  • Loading branch information
dgreif committed Jul 12, 2019
1 parent d6734ce commit 8e7c387
Show file tree
Hide file tree
Showing 25 changed files with 112 additions and 65 deletions.
20 changes: 10 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# ring-alarm
# ring-client-api

[![CircleCI](https://circleci.com/gh/dgreif/ring.svg?style=svg)](https://circleci.com/gh/dgreif/ring)
[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=HD9ZPB34FY428&currency_code=USD&source=url)
Expand All @@ -8,16 +8,16 @@ This is an unofficial TypeScript api for [Ring Doorbells](https://shop.ring.com/
the [Ring Alarm System](https://shop.ring.com/pages/security-system),
[Ring Smart Lighting](https://shop.ring.com/pages/smart-lighting),
and third party devices that connect to the Ring Alarm System.
Built to support the [homebridge-ring-alarm Plugin](./homebridge)
Built to support the [homebridge-ring Plugin](./homebridge)

## Installation

`npm i @dgreif/ring-alarm`
`npm i ring-client-api`


## Setup and Config
```js
import { RingApi } from '@dgreif/ring-alarm'
import { RingApi } from 'ring-client-api'

const ringApi = new RingApi({
email: '[email protected]',
Expand All @@ -32,7 +32,7 @@ const ringApi = new RingApi({

### 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](./homebridge), but can also be used if you only care about
This is mainly useful for the [homebridge-ring Plugin](./homebridge), 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.
Expand Down Expand Up @@ -65,7 +65,7 @@ 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
```js
import { RingDeviceType } from '@dgreif/ring-alarm'
import { RingDeviceType } from 'ring-client-api'

const devices = await location.getDevices()
const baseStation = devices.find(device => device.data.deviceType === RingDeviceType.BaseStation)
Expand Down Expand Up @@ -116,11 +116,11 @@ v3 exports a full `RingApi` object instead of a single `getLocations` method.

```typescript
// v2
import { getLocations } from '@dgreif/ring-alarm'
import { getLocations } from 'ring-client-api'
const locations = await getLocations(options)

// v3
import { RingApi } from '@dgreif/ring-alarm'
import { RingApi } from 'ring-client-api'
const ringApi = new RingApi(options),
locations = await ringApi.getLocations(), // same locations object form v2
cameras = await ringApi.getCameras() // new! all cameras from all locations
Expand All @@ -129,9 +129,9 @@ const ringApi = new RingApi(options),
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
## homebridge-ring

The `homebridge-ring-alarm` is also maintained in this repo. It's readme can be found in [the `homebridge` directory](./homebridge)
The `homebridge-ring` is also maintained in this repo. It's readme can be found in [the `homebridge` directory](./homebridge)

## Credits

Expand Down
4 changes: 2 additions & 2 deletions api/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import { RingCamera } from './ring-camera'
import { EMPTY, merge, Subject } from 'rxjs'
import { debounceTime, switchMap, throttleTime } from 'rxjs/operators'

export interface RingAlarmOptions {
export interface RingApiOptions {
locationIds?: string[]
cameraStatusPollingSeconds?: number
cameraDingsPollingSeconds?: number
Expand All @@ -23,7 +23,7 @@ export class RingApi {

private locations = this.fetchAndBuildLocations()

constructor(public readonly options: RingAlarmOptions & RingAuth) {}
constructor(public readonly options: RingApiOptions & RingAuth) {}

async fetchRingDevices() {
const {
Expand Down
2 changes: 1 addition & 1 deletion api/util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { red } from 'colors'
import { randomBytes } from 'crypto'
import { createInterface } from 'readline'

const logger = debug('ring-alarm')
const logger = debug('ring')

export function delay(milliseconds: number) {
return new Promise(resolve => {
Expand Down
8 changes: 4 additions & 4 deletions homebridge/README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# homebridge-ring-alarm
# homebridge-ring

[![CircleCI](https://circleci.com/gh/dgreif/ring.svg?style=svg)](https://circleci.com/gh/dgreif/ring)
[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=HD9ZPB34FY428&currency_code=USD&source=url)
Expand All @@ -14,17 +14,17 @@ and third party devices that connect to the Ring Alarm System.

Assuming a global installation of `homebridge`:

`npm i -g homebridge-ring-alarm`
`npm i -g homebridge-ring`

## Homebridge Configuration

Add the `RingAlarm` platform in your homebridge `config.json` file.
Add the `Ring` platform in your homebridge `config.json` file.

```js
{
"platforms": [
{
"platform": "RingAlarm",
"platform": "Ring",
"email": "[email protected]",
"password": "abc123!#",

Expand Down
4 changes: 2 additions & 2 deletions homebridge/base-accessory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ import { HAP } from './hap'
import Service = HAP.Service
import { debounceTime, distinctUntilChanged, map, take } from 'rxjs/operators'
import { Observable, Subject } from 'rxjs'
import { RingAlarmPlatformConfig } from './config'
import { RingPlatformConfig } from './config'

export abstract class BaseAccessory<T extends RingDevice | RingCamera> {
abstract readonly device: T
abstract readonly accessory: HAP.Accessory
abstract readonly logger: HAP.Log
abstract readonly config: RingAlarmPlatformConfig
abstract readonly config: RingPlatformConfig

getService(serviceType: HAP.Service, name = this.device.name) {
if (process.env.RING_DEBUG) {
Expand Down
4 changes: 2 additions & 2 deletions homebridge/base-device-accessory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { HAP, hap } from './hap'
import Service = HAP.Service
import { debounceTime, distinctUntilChanged, map } from 'rxjs/operators'
import { Subject } from 'rxjs'
import { RingAlarmPlatformConfig } from './config'
import { RingPlatformConfig } from './config'
import { BaseAccessory } from './base-accessory'

function getBatteryLevel({ batteryLevel, batteryStatus }: RingDeviceData) {
Expand Down Expand Up @@ -51,7 +51,7 @@ export abstract class BaseDeviceAccessory extends BaseAccessory<RingDevice> {
abstract readonly device: RingDevice
abstract readonly accessory: HAP.Accessory
abstract readonly logger: HAP.Log
abstract readonly config: RingAlarmPlatformConfig
abstract readonly config: RingPlatformConfig

protected constructor() {
super()
Expand Down
4 changes: 2 additions & 2 deletions homebridge/base-station.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import { BaseDeviceAccessory } from './base-device-accessory'
import { RingDevice } from '../api'
import { HAP } from './hap'
import { RingAlarmPlatformConfig } from './config'
import { RingPlatformConfig } from './config'

export class BaseStation extends BaseDeviceAccessory {
constructor(
public readonly device: RingDevice,
public readonly accessory: HAP.Accessory,
public readonly logger: HAP.Log,
public readonly config: RingAlarmPlatformConfig
public readonly config: RingPlatformConfig
) {
super()
}
Expand Down
4 changes: 2 additions & 2 deletions homebridge/beam.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { RingDevice, RingDeviceType } from '../api'
import { HAP, hap } from './hap'
import { RingAlarmPlatformConfig } from './config'
import { RingPlatformConfig } from './config'
import { BaseDeviceAccessory } from './base-device-accessory'

export class Beam extends BaseDeviceAccessory {
Expand All @@ -12,7 +12,7 @@ export class Beam extends BaseDeviceAccessory {
public readonly device: RingDevice,
public readonly accessory: HAP.Accessory,
public readonly logger: HAP.Log,
public readonly config: RingAlarmPlatformConfig
public readonly config: RingPlatformConfig
) {
super()

Expand Down
4 changes: 2 additions & 2 deletions homebridge/camera.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { HAP, hap } from './hap'
import { RingAlarmPlatformConfig } from './config'
import { RingPlatformConfig } from './config'
import { RingCamera } from '../api'
import { BaseAccessory } from './base-accessory'
import { map, mapTo } from 'rxjs/operators'
Expand All @@ -10,7 +10,7 @@ export class Camera extends BaseAccessory<RingCamera> {
public readonly device: RingCamera,
public readonly accessory: HAP.Accessory,
public readonly logger: HAP.Log,
public readonly config: RingAlarmPlatformConfig
public readonly config: RingPlatformConfig
) {
super()
const { Characteristic, Service } = hap,
Expand Down
4 changes: 2 additions & 2 deletions homebridge/co-alarm.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import { BaseDeviceAccessory } from './base-device-accessory'
import { RingDevice } from '../api'
import { HAP, hap } from './hap'
import { RingAlarmPlatformConfig } from './config'
import { RingPlatformConfig } from './config'

export class CoAlarm extends BaseDeviceAccessory {
constructor(
public readonly device: RingDevice,
public readonly accessory: HAP.Accessory,
public readonly logger: HAP.Log,
public readonly config: RingAlarmPlatformConfig
public readonly config: RingPlatformConfig
) {
super()

Expand Down
4 changes: 2 additions & 2 deletions homebridge/config.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { RingAlarmOptions } from '../api'
import { RingApiOptions } from '../api'

export interface RingAlarmPlatformConfig extends RingAlarmOptions {
export interface RingPlatformConfig extends RingApiOptions {
alarmOnEntryDelay?: boolean
beamDurationSeconds?: number
hideLightGroups?: boolean
Expand Down
4 changes: 2 additions & 2 deletions homebridge/contact-sensor.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import { BaseDeviceAccessory } from './base-device-accessory'
import { RingDevice } from '../api'
import { HAP, hap } from './hap'
import { RingAlarmPlatformConfig } from './config'
import { RingPlatformConfig } from './config'

export class ContactSensor extends BaseDeviceAccessory {
constructor(
public readonly device: RingDevice,
public readonly accessory: HAP.Accessory,
public readonly logger: HAP.Log,
public readonly config: RingAlarmPlatformConfig
public readonly config: RingPlatformConfig
) {
super()

Expand Down
55 changes: 48 additions & 7 deletions homebridge/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
import { RingAlarmPlatform } from './ring-alarm-platform'
import { RingPlatform } from './ring-platform'
import { hap } from './hap'
import { readFileSync, writeFileSync } from 'fs'
import { join as joinPath } from 'path'
import {
platformName,
pluginName,
oldPlatformName,
oldPluginName
} from './plugin-info'

export default function(homebridge: any) {
hap.PlatformAccessory = homebridge.platformAccessory
Expand All @@ -9,10 +17,43 @@ export default function(homebridge: any) {
hap.AccessoryCategories = homebridge.hap.Accessory.Categories
hap.StreamController = homebridge.hap.StreamController

homebridge.registerPlatform(
'homebridge-ring-alarm',
'RingAlarm',
RingAlarmPlatform,
true
)
try {
// This plugin was changed from homebridge-ring-alarm to homebridge-ring
// This code cleans up the config/cache files to point to the new plugin

const cachedAccessoriesPath = joinPath(
homebridge.user.cachedAccessoryPath(),
'cachedAccessories'
),
cachedAccessories = readFileSync(cachedAccessoriesPath).toString(),
updatedAccessories = cachedAccessories
.replace(new RegExp(oldPluginName, 'g'), pluginName)
.replace(new RegExp(oldPlatformName, 'g'), platformName),
configPath = homebridge.user.configPath(),
config = readFileSync(configPath).toString(),
updatedConfig = config.replace(
`"${oldPlatformName}"`,
`"${platformName}"`
)
let filesChanged = false

if (cachedAccessories !== updatedAccessories) {
writeFileSync(cachedAccessoriesPath, updatedAccessories)
filesChanged = true
}

if (config !== updatedConfig) {
writeFileSync(configPath, updatedConfig)
filesChanged = true
}

if (filesChanged) {
console.error(
'Your Ring Alarm config has been updated to new Ring config. This is a one time thing, and you do not need to do anything. Just restart homebridge and everything should start normally.'
)
process.exit(1)
}
} catch (_) {}

homebridge.registerPlatform(pluginName, platformName, RingPlatform, true)
}
4 changes: 2 additions & 2 deletions homebridge/keypad.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import { BaseDeviceAccessory } from './base-device-accessory'
import { RingDevice } from '../api'
import { HAP } from './hap'
import { RingAlarmPlatformConfig } from './config'
import { RingPlatformConfig } from './config'

export class Keypad extends BaseDeviceAccessory {
constructor(
public readonly device: RingDevice,
public readonly accessory: HAP.Accessory,
public readonly logger: HAP.Log,
public readonly config: RingAlarmPlatformConfig
public readonly config: RingPlatformConfig
) {
super()
}
Expand Down
4 changes: 2 additions & 2 deletions homebridge/lock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { BaseDeviceAccessory } from './base-device-accessory'
import { RingDevice, RingDeviceData } from '../api'
import { distinctUntilChanged } from 'rxjs/operators'
import { HAP, hap } from './hap'
import { RingAlarmPlatformConfig } from './config'
import { RingPlatformConfig } from './config'

function getCurrentState({ locked }: RingDeviceData) {
const {
Expand All @@ -28,7 +28,7 @@ export class Lock extends BaseDeviceAccessory {
public readonly device: RingDevice,
public readonly accessory: HAP.Accessory,
public readonly logger: HAP.Log,
public readonly config: RingAlarmPlatformConfig
public readonly config: RingPlatformConfig
) {
super()

Expand Down
4 changes: 2 additions & 2 deletions homebridge/motion-sensor.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import { BaseDeviceAccessory } from './base-device-accessory'
import { RingDevice } from '../api'
import { HAP, hap } from './hap'
import { RingAlarmPlatformConfig } from './config'
import { RingPlatformConfig } from './config'

export class MotionSensor extends BaseDeviceAccessory {
constructor(
public readonly device: RingDevice,
public readonly accessory: HAP.Accessory,
public readonly logger: HAP.Log,
public readonly config: RingAlarmPlatformConfig
public readonly config: RingPlatformConfig
) {
super()

Expand Down
4 changes: 2 additions & 2 deletions homebridge/multi-level-switch.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import { BaseDeviceAccessory } from './base-device-accessory'
import { RingDevice } from '../api'
import { HAP, hap } from './hap'
import { RingAlarmPlatformConfig } from './config'
import { RingPlatformConfig } from './config'

export class MultiLevelSwitch extends BaseDeviceAccessory {
constructor(
public readonly device: RingDevice,
public readonly accessory: HAP.Accessory,
public readonly logger: HAP.Log,
public readonly config: RingAlarmPlatformConfig
public readonly config: RingPlatformConfig
) {
super()

Expand Down
Loading

0 comments on commit 8e7c387

Please sign in to comment.