From 55c832655db1bfc33e7feef73d8afdbfbedb8145 Mon Sep 17 00:00:00 2001 From: Johann Richard <189003+johannrichard@users.noreply.github.com> Date: Sun, 6 Dec 2020 23:05:15 +0100 Subject: [PATCH] feat(dingz): actively identify config changes - use the `config` timestap in state endpoint - only call `updateAccessory()` in case timestamp differs - save timestamp to accessory cache - reduced hitting and updating --- src/dingzAccessory.ts | 21 +++++++-------------- src/lib/commonTypes.ts | 2 +- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/src/dingzAccessory.ts b/src/dingzAccessory.ts index 1193e7f..d1b2570 100644 --- a/src/dingzAccessory.ts +++ b/src/dingzAccessory.ts @@ -8,7 +8,6 @@ import { } from 'homebridge'; import { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios'; -import { Policy } from 'cockatiel'; import simpleColorConverter from 'simple-color-converter'; import qs from 'qs'; import semver from 'semver'; @@ -45,12 +44,6 @@ import { PlatformEvent } from './lib/platformEventBus'; import { DingzDaBaseAccessory } from './lib/dingzDaBaseAccessory'; import { AccessoryEvent } from './lib/accessoryEventBus'; -// Policy for long running tasks, retry every hour -const retrySlow = Policy.handleAll() - .orWhenResult((retry) => retry === true) - .retry() - .exponential({ initialDelay: 10000, maxDelay: 60 * 60 * 1000 }); - /** * Platform Accessory * An instance of this class is created for each accessory your platform registers @@ -173,12 +166,6 @@ export class DingzAccessory extends DingzDaBaseAccessory { this.addLEDService(); this.addLightSensorService(); this.addButtonServices(); - - // Retry at least once every day - retrySlow.execute(() => { - this.updateAccessory(); - return true; - }); } }, ) @@ -278,6 +265,12 @@ export class DingzAccessory extends DingzDaBaseAccessory { // TODO: assign right values this.dingzStates.WindowCovers = state.blinds; + if (this.device.configTimestamp !== state.config.timestamp) { + // Push config change + this.device.configTimestamp = state.config.timestamp; + this.log.debug('Config changes, update accessories'); + this.updateAccessory(); + } // Push the Update to HomeBridge this.eb.emit(AccessoryEvent.PUSH_STATE_UPDATE); return Promise.resolve(); @@ -1049,7 +1042,7 @@ export class DingzAccessory extends DingzDaBaseAccessory { this.log.info( 'Update accessory', this.device.address, - '-> Check for changed config.', + '-> config changed.', ); DingzAccessory.getConfigs({ diff --git a/src/lib/commonTypes.ts b/src/lib/commonTypes.ts index 803804f..0a81dc3 100644 --- a/src/lib/commonTypes.ts +++ b/src/lib/commonTypes.ts @@ -48,7 +48,7 @@ export interface DeviceInfo { dimmerConfig?: DingzDeviceDimmerConfig; windowCoveringConfig?: DingzWindowCoveringConfigItem[]; dingzInputInfo?: DingzInputInfoItem[]; - lastUpdate?: Date; + configTimestamp?: number; accessoryClass?: | 'DingzDaAccessory' | 'MyStromSwitchAccessory'