Skip to content

Commit

Permalink
feat(dingz): actively identify config changes
Browse files Browse the repository at this point in the history
- use the `config` timestap in state endpoint
- only call `updateAccessory()` in case timestamp differs
- save timestamp to accessory cache
- reduced hitting and updating
  • Loading branch information
johannrichard committed Dec 6, 2020
1 parent be67aea commit 55c8326
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 15 deletions.
21 changes: 7 additions & 14 deletions src/dingzAccessory.ts
Expand Up @@ -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';
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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;
});
}
},
)
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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({
Expand Down
2 changes: 1 addition & 1 deletion src/lib/commonTypes.ts
Expand Up @@ -48,7 +48,7 @@ export interface DeviceInfo {
dimmerConfig?: DingzDeviceDimmerConfig;
windowCoveringConfig?: DingzWindowCoveringConfigItem[];
dingzInputInfo?: DingzInputInfoItem[];
lastUpdate?: Date;
configTimestamp?: number;
accessoryClass?:
| 'DingzDaAccessory'
| 'MyStromSwitchAccessory'
Expand Down

0 comments on commit 55c8326

Please sign in to comment.