Availability stop pining when device leaves. #6281

This commit is contained in:
Koen Kanters
2021-08-25 19:14:48 +02:00
parent 8bb296f3f7
commit 5b6b4c1736
4 changed files with 30 additions and 1 deletions
+9
View File
@@ -128,6 +128,15 @@ class AvailabilityNew extends ExtensionTS {
this.zigbee.on('lastSeenChanged', this.lastSeenChanged);
}
override onZigbeeEvent(type: ZigbeeEventType, data: ZigbeeEventData, resolvedEntity: ResolvedEntity): void {
resolvedEntity;
/* istanbul ignore else */
if (type === 'deviceLeave') {
clearTimeout(this.timers[data.ieeeAddr]);
}
}
private publishAvailability(re: ResolvedEntity, logLastSeen: boolean): void {
if (logLastSeen) {
const ago = Date.now() - re.device.lastSeen;
+1 -1
View File
@@ -44,7 +44,7 @@ abstract class ExtensionTS {
*/
/* istanbul ignore next */
/* eslint-disable-next-line @typescript-eslint/no-unused-vars */
onZigbeeEvent(type: string, data: unknown, resolvedEntity: ResolvedEntity): void {}
onZigbeeEvent(type: ZigbeeEventType, data: ZigbeeEventData, resolvedEntity: ResolvedEntity): void {}
/**
* Is called when a MQTT message is received
+6
View File
@@ -3,6 +3,12 @@ import type {Device as ZHDevice} from 'zigbee-herdsman/dist/controller/model';
declare global {
type Device = ZHDevice;
type ZigbeeEventType = 'deviceLeave';
interface ZigbeeEventData {
ieeeAddr: string;
}
/* eslint-disable */
// Controller
interface KeyValue {
+14
View File
@@ -196,4 +196,18 @@ describe('Availability', () => {
await advancedTime(minutes(7));
expect(devices.bulb_color.ping).toHaveBeenCalledTimes(1);
});
it('Should stop pinging device when it leaves', async () => {
await resetExtension();
MQTT.publish.mockClear();
await advancedTime(minutes(9));
expect(devices.bulb_color.ping).toHaveBeenCalledTimes(0);
await zigbeeHerdsman.events.deviceLeave({ieeeAddr: devices.bulb_color.ieeeAddr});
await flushPromises();
await advancedTime(minutes(3));
expect(devices.bulb_color.ping).toHaveBeenCalledTimes(0);
});
});