diff --git a/api/location.ts b/api/location.ts index 54738294..2064bc21 100644 --- a/api/location.ts +++ b/api/location.ts @@ -1,28 +1,28 @@ import { connect as connectSocketIo } from 'socket.io-client' import { BehaviorSubject, Subject } from 'rxjs' import { - filter, - take, - map, concatMap, distinctUntilChanged, + filter, + map, publishReplay, + refCount, scan, - refCount + take } from 'rxjs/operators' import { delay, logError, logInfo } from './util' import { AlarmMode, - RingDeviceData, + AssetSession, deviceTypesWithVolume, + LocationEvent, + MessageDataType, + MessageType, + RingDeviceData, RingDeviceType, SocketIoMessage, - MessageType, - UserLocation, TicketAsset, - MessageDataType, - AssetSession, - LocationEvent + UserLocation } from './ring-types' import { clientApi, RingRestClient } from './rest-client' import { RingCamera } from './ring-camera' diff --git a/api/ring-types.ts b/api/ring-types.ts index eaa94a1f..9903cc1a 100644 --- a/api/ring-types.ts +++ b/api/ring-types.ts @@ -122,8 +122,9 @@ export interface RingDeviceData { name: string deviceType: RingDeviceType batteryLevel?: number - batteryStatus: 'full' | 'ok' | 'low' | 'none' | 'charging' - batteryBackup?: 'charged' | 'charging' + batteryStatus: 'full' | 'charged' | 'ok' | 'low' | 'none' | 'charging' + batteryBackup?: 'charged' | 'charging' | 'inUse' + acStatus?: 'error' | 'ok' manufacturerName?: string serialNumber?: string tamperStatus: 'ok' | 'tamper' diff --git a/homebridge/base-device-accessory.ts b/homebridge/base-device-accessory.ts index cf96d516..255cc466 100644 --- a/homebridge/base-device-accessory.ts +++ b/homebridge/base-device-accessory.ts @@ -1,15 +1,12 @@ import { RingDevice, RingDeviceData } from '../api' import { HAP, hap } from './hap' -import Service = HAP.Service -import { debounceTime, distinctUntilChanged, map } from 'rxjs/operators' -import { Subject } from 'rxjs' import { RingPlatformConfig } from './config' import { BaseAccessory } from './base-accessory' function getBatteryLevel({ batteryLevel, batteryStatus }: RingDeviceData) { if (batteryLevel !== undefined) { return batteryLevel - } else if (batteryStatus === 'full') { + } else if (batteryStatus === 'full' || batteryStatus === 'charged') { return 100 } else if (batteryStatus === 'ok') { return 50 @@ -28,18 +25,25 @@ function getStatusLowBattery(data: RingDeviceData) { function getBatteryChargingState({ batteryStatus, - batteryBackup + batteryBackup, + acStatus }: RingDeviceData) { const { ChargingState } = hap.Characteristic if ( batteryStatus === 'charging' || + batteryStatus === 'charged' || batteryBackup === 'charged' || - batteryBackup === 'charging' + batteryBackup === 'charging' || + acStatus === 'ok' ) { return ChargingState.CHARGING } + if (batteryBackup === 'inUse' || acStatus === 'error') { + return ChargingState.NOT_CHARGING + } + return ChargingState.NOT_CHARGEABLE }