homebridge-netatmo-security-mk 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,11 +1,13 @@
1
1
  import { PlatformAccessory, CharacteristicValue } from 'homebridge';
2
- import { NetatmoSecurityPlatform } from '../platform';
3
- export declare class IndoorSirenAccessory {
2
+ import { NetatmoSecurityPlatform, NetatmoAccessory } from '../platform';
3
+ export declare class IndoorSirenAccessory implements NetatmoAccessory {
4
4
  private readonly platform;
5
5
  private readonly accessory;
6
6
  private service;
7
+ private device;
7
8
  private state;
8
9
  constructor(platform: NetatmoSecurityPlatform, accessory: PlatformAccessory);
10
+ update(device: any): void;
9
11
  isMuted(): Promise<CharacteristicValue>;
10
12
  }
11
13
  //# sourceMappingURL=indoorSirenAccessory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"indoorSirenAccessory.d.ts","sourceRoot":"","sources":["../../src/accessory/indoorSirenAccessory.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEtD,qBAAa,oBAAoB;IAS7B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAT5B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,KAAK,CAGX;gBAIiB,QAAQ,EAAE,uBAAuB,EACjC,SAAS,EAAE,iBAAiB;IA0DzC,OAAO,IAAI,OAAO,CAAC,mBAAmB,CAAC;CAM9C"}
1
+ {"version":3,"file":"indoorSirenAccessory.d.ts","sourceRoot":"","sources":["../../src/accessory/indoorSirenAccessory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAExE,qBAAa,oBAAqB,YAAW,gBAAgB;IAQzD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAR5B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,KAAK,CAEX;gBAGiB,QAAQ,EAAE,uBAAuB,EACjC,SAAS,EAAE,iBAAiB;IAmB/C,MAAM,CAAC,MAAM,EAAE,GAAG;IAcZ,OAAO,IAAI,OAAO,CAAC,mBAAmB,CAAC;CAI9C"}
@@ -2,64 +2,41 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.IndoorSirenAccessory = void 0;
4
4
  class IndoorSirenAccessory {
5
- // Load device
6
5
  constructor(platform, accessory) {
7
6
  this.platform = platform;
8
7
  this.accessory = accessory;
9
8
  this.state = {
10
9
  SoundStatus: 'no_sound',
11
- TamperStatus: 0,
12
10
  };
11
+ this.device = accessory.context.device;
13
12
  this.accessory.getService(this.platform.Service.AccessoryInformation)
14
13
  .setCharacteristic(this.platform.Characteristic.Manufacturer, 'Netatmo-Security')
15
14
  .setCharacteristic(this.platform.Characteristic.Model, 'Indoor-Siren')
16
- .setCharacteristic(this.platform.Characteristic.SerialNumber, this.accessory.context.device.id);
15
+ .setCharacteristic(this.platform.Characteristic.SerialNumber, this.device.id);
17
16
  this.service = this.accessory.getService(this.platform.Service.Speaker)
18
17
  || this.accessory.addService(this.platform.Service.Speaker);
19
- this.service.setCharacteristic(this.platform.Characteristic.Name, this.accessory.context.device.name);
18
+ this.service.setCharacteristic(this.platform.Characteristic.Name, this.device.name);
20
19
  this.service.getCharacteristic(this.platform.Characteristic.Mute)
21
- /*.onSet(this.setMuted.bind(this))*/
22
20
  .onGet(this.isMuted.bind(this));
23
- setInterval(() => {
24
- try {
25
- const soundDetected = this.accessory.context.device.status !== 'no_sound';
26
- if (this.accessory.context.device.status !== this.state.SoundStatus) {
27
- this.platform.log.info(accessory.displayName + ' Sound Status: ' + soundDetected + ' (' + this.state.SoundStatus + ' -> ' + this.accessory.context.device.status + ')');
28
- }
29
- this.state.SoundStatus = this.accessory.context.device.status;
30
- this.service.updateCharacteristic(this.platform.Characteristic.Mute, !soundDetected);
31
- }
32
- catch (error) {
33
- this.platform.log.error('Failed to update siren sound status', error);
34
- }
35
- try {
36
- const timeTampered = this.accessory.context.device.activity ? this.accessory.context.device.activity : 0;
37
- const minimumTime = (new Date().getTime() / 1000) - 90;
38
- const tamperingDetected = timeTampered > this.state.TamperStatus || timeTampered > minimumTime;
39
- if (this.accessory.context.device.activity !== this.state.TamperStatus) {
40
- this.platform.log.info(accessory.displayName + ' Tampered Status: ' + tamperingDetected + ' (' + this.state.TamperStatus + ' -> ' + this.accessory.context.device.activity + ')');
41
- }
42
- else if (tamperingDetected === true) {
43
- this.platform.log.debug(accessory.displayName + ' Tampered Status: ' + tamperingDetected + ' (' + this.state.TamperStatus + ' -> ' + this.accessory.context.device.activity + ')');
44
- }
45
- }
46
- catch (error) {
47
- this.platform.log.error('Failed to update tampered sensor status', error);
21
+ }
22
+ // Push fresh device data from the platform's single poll loop.
23
+ update(device) {
24
+ this.device = device;
25
+ try {
26
+ const soundDetected = device.status !== 'no_sound';
27
+ if (device.status !== this.state.SoundStatus) {
28
+ this.platform.log.info(`${this.accessory.displayName} Sound Status: ${soundDetected} (${this.state.SoundStatus} -> ${device.status})`);
48
29
  }
49
- }, 5000);
30
+ this.state.SoundStatus = device.status;
31
+ this.service.updateCharacteristic(this.platform.Characteristic.Mute, !soundDetected);
32
+ }
33
+ catch (error) {
34
+ this.platform.log.error('Failed to update siren sound status', error);
35
+ }
50
36
  }
51
- /*async setMuted(value: CharacteristicValue) {
52
- const sound = value ? 'no_sound' : 'warning';
53
- this.platform.log.info(this.accessory.displayName + ' Sound Characteristic: ' + sound + ' (' + this.state.SoundStatus + ' / ' + this.accessory.context.device.status + ')');
54
- this.platform.netatmoAPI.setState(this.accessory.context.device, sound).then(() => {
55
- this.state.SoundStatus = sound;
56
- this.service.updateCharacteristic(this.platform.Characteristic.Mute, value);
57
- });
58
- }*/
59
37
  async isMuted() {
60
- const playing = this.state.SoundStatus === 'no_sound' && this.accessory.context.device.status === 'no_sound';
61
- this.platform.log.debug(this.accessory.displayName + ' Sound Characteristic: ' + playing + ' (' + this.state.SoundStatus + ' / ' + this.accessory.context.device.status + ')');
62
- return playing;
38
+ var _a;
39
+ return ((_a = this.device) === null || _a === void 0 ? void 0 : _a.status) === 'no_sound';
63
40
  }
64
41
  }
65
42
  exports.IndoorSirenAccessory = IndoorSirenAccessory;
@@ -1 +1 @@
1
- {"version":3,"file":"indoorSirenAccessory.js","sourceRoot":"","sources":["../../src/accessory/indoorSirenAccessory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"indoorSirenAccessory.js","sourceRoot":"","sources":["../../src/accessory/indoorSirenAccessory.ts"],"names":[],"mappings":";;;AAKA,MAAa,oBAAoB;IAO/B,YACmB,QAAiC,EACjC,SAA4B;QAD5B,aAAQ,GAAR,QAAQ,CAAyB;QACjC,cAAS,GAAT,SAAS,CAAmB;QANvC,UAAK,GAAG;YACd,WAAW,EAAE,UAAU;SACxB,CAAC;QAMA,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;QAEvC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAE;aACnE,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,EAAE,kBAAkB,CAAC;aAChF,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,cAAc,CAAC;aACrE,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEhF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;eACpE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE5D,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEpF,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC;aAC9D,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,+DAA+D;IAC/D,MAAM,CAAC,MAAW;QAChB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI;YACF,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC;YACnD,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;gBAC5C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,kBAAkB,aAAa,KAAK,IAAI,CAAC,KAAK,CAAC,WAAW,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;aACxI;YACD,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;YACvC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,CAAC;SACtF;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;SACvE;IACH,CAAC;IAED,KAAK,CAAC,OAAO;;QACX,OAAO,CAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,MAAM,MAAK,UAAU,CAAC;IAC5C,CAAC;CAEF;AA9CD,oDA8CC"}
@@ -1,12 +1,20 @@
1
1
  import { PlatformAccessory, CharacteristicValue } from 'homebridge';
2
- import { NetatmoSecurityPlatform } from '../platform';
3
- export declare class TagSensorAccessory {
2
+ import { NetatmoSecurityPlatform, NetatmoAccessory } from '../platform';
3
+ export declare class TagSensorAccessory implements NetatmoAccessory {
4
4
  private readonly platform;
5
5
  private readonly accessory;
6
- private service;
7
- private state;
6
+ private contactService;
7
+ private motionService;
8
+ private device;
9
+ private sensorStatus;
10
+ private lastSmallMoveSeen;
11
+ private motionDetected;
12
+ private motionTimer?;
8
13
  constructor(platform: NetatmoSecurityPlatform, accessory: PlatformAccessory);
9
- isTampered(): Promise<CharacteristicValue>;
14
+ update(device: any): void;
15
+ private handleVibration;
16
+ private pulseVibration;
17
+ private contactState;
10
18
  isOpen(): Promise<CharacteristicValue>;
11
19
  }
12
20
  //# sourceMappingURL=tagSensorAccessory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tagSensorAccessory.d.ts","sourceRoot":"","sources":["../../src/accessory/tagSensorAccessory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEtD,qBAAa,kBAAkB;IAS3B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAT5B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,KAAK,CAGX;gBAIiB,QAAQ,EAAE,uBAAuB,EACjC,SAAS,EAAE,iBAAiB;IAqDzC,UAAU,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAO1C,MAAM,IAAI,OAAO,CAAC,mBAAmB,CAAC;CAM7C"}
1
+ {"version":3,"file":"tagSensorAccessory.d.ts","sourceRoot":"","sources":["../../src/accessory/tagSensorAccessory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAMxE,qBAAa,kBAAmB,YAAW,gBAAgB;IAavD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAb5B,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,YAAY,CAAa;IAIjC,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,WAAW,CAAC,CAAgC;gBAGjC,QAAQ,EAAE,uBAAuB,EACjC,SAAS,EAAE,iBAAiB;IA+B/C,MAAM,CAAC,MAAM,EAAE,GAAG;IAqBlB,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,YAAY;IAKd,MAAM,IAAI,OAAO,CAAC,mBAAmB,CAAC;CAI7C"}
@@ -1,66 +1,93 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TagSensorAccessory = void 0;
4
+ // How long the vibration MotionSensor stays "detected" after a tag_small_move,
5
+ // so HomeKit reliably fires the false->true notification edge.
6
+ const VIBRATION_PULSE_MS = 10000;
4
7
  class TagSensorAccessory {
5
- // Load device
6
8
  constructor(platform, accessory) {
7
9
  this.platform = platform;
8
10
  this.accessory = accessory;
9
- this.state = {
10
- SensorStatus: 'unknown',
11
- TamperStatus: 0,
12
- };
11
+ this.sensorStatus = 'unknown';
12
+ this.motionDetected = false;
13
+ this.device = accessory.context.device;
13
14
  this.accessory.getService(this.platform.Service.AccessoryInformation)
14
15
  .setCharacteristic(this.platform.Characteristic.Manufacturer, 'Netatmo-Security')
15
16
  .setCharacteristic(this.platform.Characteristic.Model, 'Tag-Sensor')
16
- .setCharacteristic(this.platform.Characteristic.SerialNumber, this.accessory.context.device.id);
17
- this.service = this.accessory.getService(this.platform.Service.ContactSensor)
17
+ .setCharacteristic(this.platform.Characteristic.SerialNumber, this.device.id);
18
+ // Contact sensor: open/closed from the device status.
19
+ this.contactService = this.accessory.getService(this.platform.Service.ContactSensor)
18
20
  || this.accessory.addService(this.platform.Service.ContactSensor);
19
- this.service.setCharacteristic(this.platform.Characteristic.Name, this.accessory.context.device.name);
20
- this.service.getCharacteristic(this.platform.Characteristic.ContactSensorState)
21
+ this.contactService.setCharacteristic(this.platform.Characteristic.Name, this.device.name);
22
+ this.contactService.getCharacteristic(this.platform.Characteristic.ContactSensorState)
21
23
  .onGet(this.isOpen.bind(this));
22
- this.service.getCharacteristic(this.platform.Characteristic.StatusTampered)
23
- .onGet(this.isTampered.bind(this));
24
- setInterval(() => {
25
- try {
26
- const contactDetected = this.accessory.context.device.status === 'open';
27
- if (this.accessory.context.device.status !== this.state.SensorStatus) {
28
- this.platform.log.info(accessory.displayName + ' Sensor Status: ' + contactDetected + ' (' + this.state.SensorStatus + ' -> ' + this.accessory.context.device.status + ')');
29
- }
30
- this.state.SensorStatus = this.accessory.context.device.status;
31
- this.service.updateCharacteristic(this.platform.Characteristic.ContactSensorState, contactDetected);
32
- }
33
- catch (error) {
34
- this.platform.log.error('Failed to update contact sensor status', error);
35
- }
36
- try {
37
- const timeTampered = this.accessory.context.device.activity ? this.accessory.context.device.activity : 0;
38
- const minimumTime = (new Date().getTime() / 1000) - 90;
39
- const tamperingDetected = timeTampered > this.state.TamperStatus || timeTampered > minimumTime;
40
- if (this.accessory.context.device.activity !== this.state.TamperStatus) {
41
- this.platform.log.info(accessory.displayName + ' Tampered Status: ' + tamperingDetected + ' (' + this.state.TamperStatus + ' -> ' + this.accessory.context.device.activity + ')');
42
- }
43
- else if (tamperingDetected === true) {
44
- this.platform.log.debug(accessory.displayName + ' Tampered Status: ' + tamperingDetected + ' (' + this.state.TamperStatus + ' -> ' + this.accessory.context.device.activity + ')');
45
- }
46
- this.state.TamperStatus = this.accessory.context.device.activity;
47
- this.service.updateCharacteristic(this.platform.Characteristic.StatusTampered, tamperingDetected);
48
- }
49
- catch (error) {
50
- this.platform.log.error('Failed to update tampered sensor status', error);
24
+ // Vibration: a separate MotionSensor so HomeKit can notify when someone
25
+ // taps/knocks the door (tag_small_move) without it being a normal open/close.
26
+ this.motionService = this.accessory.getService(this.platform.Service.MotionSensor)
27
+ || this.accessory.addService(this.platform.Service.MotionSensor, this.device.name + ' Vibration', 'vibration');
28
+ this.motionService.setCharacteristic(this.platform.Characteristic.Name, this.device.name + ' Vibration');
29
+ this.motionService.getCharacteristic(this.platform.Characteristic.MotionDetected)
30
+ .onGet(() => this.motionDetected);
31
+ // Present the two services as one cohesive accessory: the door contact is the
32
+ // primary function, the vibration motion sensor is linked to it.
33
+ this.contactService.setPrimaryService(true);
34
+ this.contactService.addLinkedService(this.motionService);
35
+ }
36
+ // Push fresh device data from the platform's single poll loop.
37
+ update(device) {
38
+ this.device = device;
39
+ try {
40
+ const open = device.status === 'open';
41
+ if (device.status !== this.sensorStatus) {
42
+ this.platform.log.info(`${this.accessory.displayName} Sensor Status: ${open} (${this.sensorStatus} -> ${device.status})`);
51
43
  }
52
- }, 5000);
44
+ this.sensorStatus = device.status;
45
+ this.contactService.updateCharacteristic(this.platform.Characteristic.ContactSensorState, this.contactState());
46
+ }
47
+ catch (error) {
48
+ this.platform.log.error('Failed to update contact sensor status', error);
49
+ }
50
+ try {
51
+ this.handleVibration(device.lastSmallMove || 0);
52
+ }
53
+ catch (error) {
54
+ this.platform.log.error('Failed to update vibration sensor', error);
55
+ }
56
+ }
57
+ handleVibration(lastSmallMove) {
58
+ // First update after (re)start: adopt the current value without firing, so an
59
+ // old event still in the backlog doesn't trigger a false alert.
60
+ if (this.lastSmallMoveSeen === undefined) {
61
+ this.lastSmallMoveSeen = lastSmallMove;
62
+ return;
63
+ }
64
+ const now = new Date().getTime() / 1000;
65
+ const isNew = lastSmallMove > this.lastSmallMoveSeen;
66
+ const isRecent = lastSmallMove > now - 60;
67
+ this.lastSmallMoveSeen = lastSmallMove;
68
+ if (isNew && isRecent) {
69
+ this.pulseVibration();
70
+ }
71
+ }
72
+ pulseVibration() {
73
+ this.platform.log.info(`${this.accessory.displayName} Vibration detected`);
74
+ this.motionDetected = true;
75
+ this.motionService.updateCharacteristic(this.platform.Characteristic.MotionDetected, true);
76
+ if (this.motionTimer) {
77
+ clearTimeout(this.motionTimer);
78
+ }
79
+ this.motionTimer = setTimeout(() => {
80
+ this.motionDetected = false;
81
+ this.motionService.updateCharacteristic(this.platform.Characteristic.MotionDetected, false);
82
+ }, VIBRATION_PULSE_MS);
53
83
  }
54
- async isTampered() {
55
- const minimumTime = (new Date().getTime() / 1000) - 90;
56
- const isTampered = this.state.TamperStatus > minimumTime || this.accessory.context.device.activity > minimumTime;
57
- this.platform.log.debug(this.accessory.displayName + ' Tampered Characteristic: ' + isTampered + ' (' + this.state.TamperStatus + ' / ' + this.accessory.context.device.activity + ')');
58
- return isTampered;
84
+ contactState() {
85
+ var _a;
86
+ const C = this.platform.Characteristic.ContactSensorState;
87
+ return ((_a = this.device) === null || _a === void 0 ? void 0 : _a.status) === 'open' ? C.CONTACT_NOT_DETECTED : C.CONTACT_DETECTED;
59
88
  }
60
89
  async isOpen() {
61
- const isOpen = this.state.SensorStatus === 'open' || this.accessory.context.device.status === 'open';
62
- this.platform.log.debug(this.accessory.displayName + ' Sensor Characteristic: ' + isOpen + ' (' + this.state.SensorStatus + ' / ' + this.accessory.context.device.status + ')');
63
- return isOpen;
90
+ return this.contactState();
64
91
  }
65
92
  }
66
93
  exports.TagSensorAccessory = TagSensorAccessory;
@@ -1 +1 @@
1
- {"version":3,"file":"tagSensorAccessory.js","sourceRoot":"","sources":["../../src/accessory/tagSensorAccessory.ts"],"names":[],"mappings":";;;AAKA,MAAa,kBAAkB;IAO7B,cAAc;IACd,YACmB,QAAiC,EACjC,SAA4B;QAD5B,aAAQ,GAAR,QAAQ,CAAyB;QACjC,cAAS,GAAT,SAAS,CAAmB;QARvC,UAAK,GAAG;YACd,YAAY,EAAE,SAAS;YACvB,YAAY,EAAE,CAAC;SAChB,CAAC;QAOA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAE;aACnE,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,EAAE,kBAAkB,CAAC;aAChF,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC;aACnE,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAElG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC;eAC1E,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAElE,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEtG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC;aAC5E,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEjC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC;aACxE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAErC,WAAW,CAAC,GAAG,EAAE;YACf,IAAI;gBACF,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC;gBAExE,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;oBACpE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,kBAAkB,GAAG,eAAe,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;iBAC7K;gBAED,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC/D,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAAC;aAErG;YAAC,OAAO,KAAK,EAAE;gBACd,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;aAC1E;YAED,IAAI;gBACF,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzG,MAAM,WAAW,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACvD,MAAM,iBAAiB,GAAG,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,YAAY,GAAG,WAAW,CAAC;gBAE/F,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;oBACtE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,oBAAoB,GAAG,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;iBACnL;qBAAM,IAAI,iBAAiB,KAAK,IAAI,EAAE;oBACrC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,oBAAoB,GAAG,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;iBACpL;gBAED,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;gBACjE,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;aAEnG;YAAC,OAAO,KAAK,EAAE;gBACd,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;aAC3E;QACH,CAAC,EAAE,IAAI,CAAC,CAAC;IACX,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,WAAW,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,WAAW,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,GAAG,WAAW,CAAC;QACjH,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,4BAA4B,GAAG,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;QACxL,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,KAAK,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC;QACrG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,0BAA0B,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;QAChL,OAAO,MAAM,CAAC;IAChB,CAAC;CAEF;AA5ED,gDA4EC"}
1
+ {"version":3,"file":"tagSensorAccessory.js","sourceRoot":"","sources":["../../src/accessory/tagSensorAccessory.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,8 @@
1
1
  import { API, DynamicPlatformPlugin, PlatformAccessory, Logger, PlatformConfig, Service, Characteristic } from 'homebridge';
2
2
  import NetatmoAPI from './util/NetatmoAPI';
3
+ export interface NetatmoAccessory {
4
+ update(device: any): void;
5
+ }
3
6
  export declare class NetatmoSecurityPlatform implements DynamicPlatformPlugin {
4
7
  readonly log: Logger;
5
8
  readonly config: PlatformConfig;
@@ -7,11 +10,13 @@ export declare class NetatmoSecurityPlatform implements DynamicPlatformPlugin {
7
10
  readonly Service: typeof Service;
8
11
  readonly Characteristic: typeof Characteristic;
9
12
  readonly accessories: PlatformAccessory[];
13
+ private readonly handlers;
10
14
  netatmoAPI: NetatmoAPI;
11
15
  constructor(log: Logger, config: PlatformConfig, api: API);
12
16
  configureAccessory(accessory: PlatformAccessory): void;
13
- discoverDevices(): void;
17
+ private createHandler;
18
+ discoverDevices(): Promise<void>;
14
19
  startRefreshTask(): void;
15
- refreshStatus(): void;
20
+ pollDevices(): Promise<void>;
16
21
  }
17
22
  //# sourceMappingURL=platform.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5H,OAAO,UAAU,MAAM,mBAAmB,CAAC;AAG3C,qBAAa,uBAAwB,YAAW,qBAAqB;aAQjD,GAAG,EAAE,MAAM;aACX,MAAM,EAAE,cAAc;aACtB,GAAG,EAAE,GAAG;IAT1B,SAAgB,OAAO,EAAE,OAAO,OAAO,CAAwB;IAC/D,SAAgB,cAAc,EAAE,OAAO,cAAc,CAA+B;IACpF,SAAgB,WAAW,EAAE,iBAAiB,EAAE,CAAM;IAC/C,UAAU,EAAE,UAAU,CAAC;gBAIZ,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,GAAG;IAoB1B,kBAAkB,CAAC,SAAS,EAAE,iBAAiB;IAe/C,eAAe;IA+Bf,gBAAgB;IAWhB,aAAa;CAmBd"}
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5H,OAAO,UAAU,MAAM,mBAAmB,CAAC;AAM3C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC;CAC3B;AASD,qBAAa,uBAAwB,YAAW,qBAAqB;aAQjD,GAAG,EAAE,MAAM;aACX,MAAM,EAAE,cAAc;aACtB,GAAG,EAAE,GAAG;IAT1B,SAAgB,OAAO,EAAE,OAAO,OAAO,CAAwB;IAC/D,SAAgB,cAAc,EAAE,OAAO,cAAc,CAA+B;IACpF,SAAgB,WAAW,EAAE,iBAAiB,EAAE,CAAM;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuC;IACzD,UAAU,EAAE,UAAU,CAAC;gBAGZ,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,GAAG;IAiB1B,kBAAkB,CAAC,SAAS,EAAE,iBAAiB;IAW/C,OAAO,CAAC,aAAa;IAYf,eAAe;IAkCrB,gBAAgB;IASV,WAAW;CAmBlB"}
package/dist/platform.js CHANGED
@@ -8,8 +8,13 @@ const settings_1 = require("./settings");
8
8
  const tagSensorAccessory_1 = require("./accessory/tagSensorAccessory");
9
9
  const NetatmoAPI_1 = __importDefault(require("./util/NetatmoAPI"));
10
10
  const indoorSirenAccessory_1 = require("./accessory/indoorSirenAccessory");
11
+ const SUPPORTED_TYPES = ['NACamDoorTag', 'NIS'];
12
+ // homesdata is cached after first fetch (see NetatmoAPI.getHomeData), so each
13
+ // poll costs 2 API calls (homestatus + getevents). At 15s that's ~480 req/h,
14
+ // just under Netatmo's ~500 req/h per-user limit. Don't go below 15s without
15
+ // also reducing calls per poll.
16
+ const POLL_INTERVAL_MS = 15000;
11
17
  class NetatmoSecurityPlatform {
12
- // Load platform
13
18
  constructor(log, config, api) {
14
19
  this.log = log;
15
20
  this.config = config;
@@ -17,91 +22,108 @@ class NetatmoSecurityPlatform {
17
22
  this.Service = this.api.hap.Service;
18
23
  this.Characteristic = this.api.hap.Characteristic;
19
24
  this.accessories = [];
25
+ this.handlers = new Map();
20
26
  log.debug('Finished loading platform:', this.config.name);
21
27
  this.netatmoAPI = new NetatmoAPI_1.default(log, this.api.user.storagePath());
22
- log.debug('Finished initializing platform:', this.config.name);
23
28
  this.api.on('didFinishLaunching', () => {
24
29
  log.debug('Executed didFinishLaunching callback');
25
- log.debug('Authenticating with provider:', this.config.name);
26
- this.netatmoAPI.init(config).then(() => {
30
+ this.netatmoAPI.init(config).then(async () => {
27
31
  log.debug('Authenticated with provider:', this.config.name);
28
- this.discoverDevices();
32
+ await this.discoverDevices();
29
33
  this.startRefreshTask();
30
- log.debug('Config loaded: ' + JSON.stringify({ ...config, refresh_token: '******', client_secret: '********' }));
31
34
  }).catch((error) => {
32
35
  var _a;
33
36
  log.error('Netatmo authentication failed, plugin disabled until restart: ' + ((_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : error));
34
37
  });
35
38
  });
36
39
  }
37
- // Configure device
40
+ // Restore a cached accessory: build its handler so the platform can push updates.
38
41
  configureAccessory(accessory) {
39
- if (accessory.context.device.type === 'NIS') {
42
+ var _a;
43
+ const handler = this.createHandler(accessory);
44
+ if (handler) {
40
45
  this.log.debug('Loading accessory from cache:', accessory.displayName);
41
- new indoorSirenAccessory_1.IndoorSirenAccessory(this, accessory);
42
- this.accessories.push(accessory);
43
- }
44
- else if (accessory.context.device.type === 'NACamDoorTag') {
45
- this.log.debug('Loading accessory from cache:', accessory.displayName);
46
- new tagSensorAccessory_1.TagSensorAccessory(this, accessory);
46
+ this.handlers.set(accessory.UUID, handler);
47
47
  this.accessories.push(accessory);
48
48
  }
49
49
  else {
50
- this.log.debug('Device type not supported: ' + accessory.context.device.type);
50
+ this.log.debug('Device type not supported: ' + ((_a = accessory.context.device) === null || _a === void 0 ? void 0 : _a.type));
51
51
  }
52
52
  }
53
- // Load devices
54
- discoverDevices() {
55
- this.netatmoAPI.getHomeDevices().then((devices) => {
56
- for (const device of devices) {
57
- if (device.type !== 'NACamDoorTag' && device.type !== 'NIS') {
58
- this.log.debug('Skipped unsupported accessory: ' + device.name);
53
+ createHandler(accessory) {
54
+ var _a;
55
+ switch ((_a = accessory.context.device) === null || _a === void 0 ? void 0 : _a.type) {
56
+ case 'NIS':
57
+ return new indoorSirenAccessory_1.IndoorSirenAccessory(this, accessory);
58
+ case 'NACamDoorTag':
59
+ return new tagSensorAccessory_1.TagSensorAccessory(this, accessory);
60
+ default:
61
+ return undefined;
62
+ }
63
+ }
64
+ // Discover devices once: register new accessories, build handlers, push initial state.
65
+ async discoverDevices() {
66
+ var _a, _b;
67
+ let devices;
68
+ try {
69
+ devices = await this.netatmoAPI.getHomeDevices();
70
+ }
71
+ catch (error) {
72
+ this.log.error('Failed to discover devices: ' + ((_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : error));
73
+ return;
74
+ }
75
+ for (const device of devices) {
76
+ if (!SUPPORTED_TYPES.includes(device.type)) {
77
+ this.log.debug('Skipped unsupported accessory: ' + device.name);
78
+ continue;
79
+ }
80
+ device.name = (device.name || '').trimEnd();
81
+ const uuid = this.api.hap.uuid.generate(device.id);
82
+ const existing = this.accessories.find(a => a.UUID === uuid);
83
+ if (existing) {
84
+ existing.context.device = device;
85
+ }
86
+ else {
87
+ this.log.info('Adding new accessory: ' + device.name);
88
+ const accessory = new this.api.platformAccessory(device.name, uuid);
89
+ accessory.context.device = device;
90
+ const handler = this.createHandler(accessory);
91
+ if (!handler) {
59
92
  continue;
60
93
  }
61
- device.name = device.name.trimEnd();
62
- const uuid = this.api.hap.uuid.generate(device.id);
63
- const existingAccessory = this.accessories.find(accessory => accessory.UUID === uuid);
64
- if (existingAccessory) {
65
- this.log.debug('Existing accessory discovered: ' + existingAccessory.displayName);
66
- this.configureAccessory(existingAccessory);
67
- existingAccessory.context.device = device;
68
- }
69
- else {
70
- this.log.debug('Adding newly discovered accessory: ' + device.name);
71
- const accessory = new this.api.platformAccessory(device.name, uuid);
72
- accessory.context.device = device;
73
- this.configureAccessory(accessory);
74
- this.api.registerPlatformAccessories(settings_1.PLUGIN_NAME, settings_1.PLATFORM_NAME, [accessory]);
75
- }
94
+ this.handlers.set(uuid, handler);
95
+ this.accessories.push(accessory);
96
+ this.api.registerPlatformAccessories(settings_1.PLUGIN_NAME, settings_1.PLATFORM_NAME, [accessory]);
76
97
  }
77
- });
98
+ (_b = this.handlers.get(uuid)) === null || _b === void 0 ? void 0 : _b.update(device);
99
+ }
78
100
  }
79
- // Refresh task
80
101
  startRefreshTask() {
81
102
  setInterval(() => {
82
- try {
83
- this.refreshStatus();
103
+ this.pollDevices().catch((error) => {
104
+ var _a;
105
+ this.log.error('Failed to refresh status: ' + ((_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : error));
106
+ });
107
+ }, POLL_INTERVAL_MS);
108
+ }
109
+ // Single poll loop: fetch all devices and push fresh data to each handler.
110
+ async pollDevices() {
111
+ const devices = await this.netatmoAPI.getHomeDevices();
112
+ for (const device of devices) {
113
+ if (!SUPPORTED_TYPES.includes(device.type)) {
114
+ continue;
84
115
  }
85
- catch (error) {
86
- this.log.error('Failed to refresh status: ' + this.config.name, error);
116
+ const uuid = this.api.hap.uuid.generate(device.id);
117
+ const handler = this.handlers.get(uuid);
118
+ if (!handler) {
119
+ continue;
87
120
  }
88
- }, 20000);
89
- }
90
- // Refresh status
91
- refreshStatus() {
92
- this.netatmoAPI.getHomeDevices().then((devices) => {
93
- for (const device of devices) {
94
- if (device.type !== 'NACamDoorTag' && device.type !== 'NIS') {
95
- continue;
96
- }
97
- const uuid = this.api.hap.uuid.generate(device.id);
98
- const existingAccessory = this.accessories.find(accessory => accessory.UUID === uuid);
99
- if (existingAccessory) {
100
- existingAccessory.context.device = device;
101
- this.accessories.push(existingAccessory);
102
- }
121
+ const accessory = this.accessories.find(a => a.UUID === uuid);
122
+ if (accessory) {
123
+ accessory.context.device = device;
103
124
  }
104
- });
125
+ handler.update(device);
126
+ }
105
127
  }
106
128
  }
107
129
  exports.NetatmoSecurityPlatform = NetatmoSecurityPlatform;
@@ -1 +1 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ export default class NetatmoAPI {
7
7
  refreshToken: null;
8
8
  tokenExpire: number;
9
9
  _authPromise: null;
10
+ homeStructure: null;
10
11
  get tokenFile(): string;
11
12
  loadPersistedRefreshToken(): any;
12
13
  persistRefreshToken(): void;
@@ -16,7 +17,7 @@ export default class NetatmoAPI {
16
17
  client(): import("axios").AxiosInstance;
17
18
  setState(device: any, status: any): Promise<any>;
18
19
  getEvents(homeId: any): Promise<any>;
19
- getHomeData(): Promise<any>;
20
+ getHomeData(force?: boolean): Promise<any>;
20
21
  getHomeStatus(homeId: any): Promise<any>;
21
22
  getHomeDevices(): Promise<any[]>;
22
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"NetatmoAPI.d.ts","sourceRoot":"","sources":["../../src/util/NetatmoAPI.js"],"names":[],"mappings":"AAWA;IASE,2CAIC;IAZD,UAAW;IACX,aAAc;IACd,kBAAmB;IACnB,kBAAmB;IACnB,mBAAoB;IACpB,oBAAgB;IAChB,mBAAoB;IAQpB,wBAEC;IAED,iCAaC;IAED,4BAQC;IAED,wCAWC;IAED,8BAgCC;IAID,wCAYC;IAED,wCAMC;IAED,iDAiBC;IAED,qCAMC;IAED,4BAMC;IAED,yCAMC;IAED,iCAqBC;CAEF"}
1
+ {"version":3,"file":"NetatmoAPI.d.ts","sourceRoot":"","sources":["../../src/util/NetatmoAPI.js"],"names":[],"mappings":"AAWA;IAUE,2CAIC;IAbD,UAAW;IACX,aAAc;IACd,kBAAmB;IACnB,kBAAmB;IACnB,mBAAoB;IACpB,oBAAgB;IAChB,mBAAoB;IACpB,oBAAqB;IAQrB,wBAEC;IAED,iCAaC;IAED,4BAQC;IAED,wCAWC;IAED,8BAgCC;IAID,wCAYC;IAED,wCAMC;IAED,iDAiBC;IAED,qCAMC;IAKD,2CAaC;IAED,yCAMC;IAED,iCAyBC;CAEF"}
@@ -22,6 +22,7 @@ class NetatmoAPI {
22
22
  this.refreshToken = null;
23
23
  this.tokenExpire = 0;
24
24
  this._authPromise = null;
25
+ this.homeStructure = null;
25
26
  this.log = logger;
26
27
  this.storagePath = storagePath;
27
28
  this.log.info('Netatmo API constructed.');
@@ -144,11 +145,21 @@ class NetatmoAPI {
144
145
  const events = data.events;
145
146
  return events;
146
147
  }
147
- async getHomeData() {
148
+ // The home structure (device list, names, types) is essentially static, so we
149
+ // fetch /homesdata once and cache it. This keeps the poll loop down to 2 API
150
+ // calls (homestatus + getevents) instead of 3, leaving room for a faster poll.
151
+ async getHomeData(force = false) {
152
+ if (this.homeStructure && !force) {
153
+ return this.homeStructure;
154
+ }
148
155
  await this.ensureAuth();
149
156
  const response = await this.client().get('/homesdata');
150
157
  const data = response.data.body;
151
- const home = data.homes[0];
158
+ const home = data.homes && data.homes[0];
159
+ if (!home) {
160
+ throw new Error('No Netatmo home found for this account.');
161
+ }
162
+ this.homeStructure = home;
152
163
  return home;
153
164
  }
154
165
  async getHomeStatus(homeId) {
@@ -165,16 +176,20 @@ class NetatmoAPI {
165
176
  const devices = [];
166
177
  home.modules.map((moduleInfo) => {
167
178
  const moduleStatus = status.modules.find((module) => moduleInfo.id === module.id);
168
- const minimumTime = (new Date().getTime() / 1000) - 90;
169
- const moduleEvents = events.filter((event) => moduleInfo.id === event.module_id && event.time > minimumTime);
170
- const lastActivity = moduleEvents.length > 0 ? Math.max.apply(Math, moduleEvents.map((event) => event.time)) : 0;
179
+ const moduleEvents = events.filter((event) => moduleInfo.id === event.module_id);
180
+ const lastEventTime = (type) => {
181
+ const matching = moduleEvents.filter((event) => event.type === type);
182
+ return matching.length > 0 ? Math.max.apply(Math, matching.map((event) => event.time)) : 0;
183
+ };
171
184
  const device = { ...moduleStatus,
172
185
  name: moduleInfo.name,
173
186
  category: moduleInfo.category,
174
187
  setup_date: moduleInfo.setup_date,
175
188
  room_id: moduleInfo.room_id,
176
189
  home_id: home.id,
177
- activity: lastActivity,
190
+ // tag_small_move = a light vibration/tap without opening (someone knocking);
191
+ // tag_big_move accompanies a normal open/close, so we don't surface it.
192
+ lastSmallMove: lastEventTime('tag_small_move'),
178
193
  };
179
194
  devices.push(device);
180
195
  });
@@ -1 +1 @@
1
- {"version":3,"file":"NetatmoAPI.js","sourceRoot":"","sources":["../../src/util/NetatmoAPI.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NetatmoAPI.js","sourceRoot":"","sources":["../../src/util/NetatmoAPI.js"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "displayName": "Homebridge Netatmo Security MK",
3
3
  "name": "homebridge-netatmo-security-mk",
4
- "version": "1.0.2",
4
+ "version": "1.0.4",
5
5
  "description": "Extended HomeKit support for Netatmo Security products (door/window tags, siren). Fork of Anzure/homebridge-netatmo-security.",
6
6
  "author": "maximekduval",
7
7
  "license": "Apache-2.0",
@@ -39,13 +39,9 @@
39
39
  ],
40
40
  "dependencies": {
41
41
  "axios": "^0.25.0",
42
- "body-parser": "^1.20.1",
43
- "express": "^4.18.2",
44
42
  "form-data": "^4.0.0"
45
43
  },
46
44
  "devDependencies": {
47
- "@types/body-parser": "^1.19.2",
48
- "@types/express": "^4.17.14",
49
45
  "@types/node": "^16.10.9",
50
46
  "@typescript-eslint/eslint-plugin": "^5.0.0",
51
47
  "@typescript-eslint/parser": "^5.0.0",
@@ -1,2 +0,0 @@
1
- export default function NetatmoAPI(config: any): import("axios").AxiosInstance;
2
- //# sourceMappingURL=LegacyAPI.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LegacyAPI.d.ts","sourceRoot":"","sources":["../../src/util/LegacyAPI.js"],"names":[],"mappings":"AAGA,+EAqBC"}
@@ -1,28 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const axios_1 = __importDefault(require("axios"));
7
- const querystring_1 = require("querystring");
8
- function NetatmoAPI(config) {
9
- if (axios_1.default.defaults.headers.common['Authorization'] === null || axios_1.default.defaults.headers.common['Authorization'] === undefined) {
10
- const credentials = {
11
- client_id: config.client_id,
12
- client_secret: config.client_secret,
13
- grant_type: 'password',
14
- username: config.username,
15
- password: config.password,
16
- scope: 'read_camera write_camera',
17
- };
18
- const response = axios_1.default.post('https://api.netatmo.com/oauth2/token', (0, querystring_1.stringify)(credentials));
19
- const token = response.data.access_token;
20
- axios_1.default.defaults.headers.common['Authorization'] = `Bearer ${token}`;
21
- }
22
- return axios_1.default.create({
23
- baseURL: 'https://api.netatmo.com/api/',
24
- responseType: 'json',
25
- });
26
- }
27
- exports.default = NetatmoAPI;
28
- //# sourceMappingURL=LegacyAPI.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LegacyAPI.js","sourceRoot":"","sources":["../../src/util/LegacyAPI.js"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAC1B,6CAAwC;AAExC,SAAwB,UAAU,CAAC,MAAM;IAEvC,IAAI,eAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,IAAI,IAAI,eAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,SAAS,EAAE;QAC3H,MAAM,WAAW,GAAG;YAClB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,UAAU,EAAE,UAAU;YACtB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,0BAA0B;SAClC,CAAC;QACF,MAAM,QAAQ,GAAG,eAAK,CAAC,IAAI,CAAC,sCAAsC,EAAE,IAAA,uBAAS,EAAC,WAAW,CAAC,CAAC,CAAC;QAC5F,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;QACzC,eAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,UAAU,KAAK,EAAE,CAAC;KACpE;IAED,OAAO,eAAK,CAAC,MAAM,CAAC;QAClB,OAAO,EAAE,8BAA8B;QACvC,YAAY,EAAE,MAAM;KACrB,CAAC,CAAC;AAEL,CAAC;AArBD,6BAqBC"}
@@ -1 +0,0 @@
1
- //# sourceMappingURL=Webhook.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Webhook.d.ts","sourceRoot":"","sources":["../../src/util/Webhook.js"],"names":[],"mappings":""}
@@ -1,25 +0,0 @@
1
- "use strict";
2
- // todo
3
- /*
4
-
5
- import express from 'express';
6
- import bodyParser from 'body-parser';
7
-
8
- var app = express();
9
- var port = 3000;
10
- app.use(bodyParser.json());
11
-
12
- app.get('/', (req, res) => {
13
- var body = req.body;
14
- res.json({
15
- message: '',
16
- });
17
- });
18
-
19
- var server = app.listen(port, () => {
20
- var host = server.address().address;
21
- var port = server.address().port;
22
- });
23
-
24
- */
25
- //# sourceMappingURL=Webhook.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Webhook.js","sourceRoot":"","sources":["../../src/util/Webhook.js"],"names":[],"mappings":";AAAA,OAAO;AAEP;;;;;;;;;;;;;;;;;;;;;EAqBE"}
@@ -1,3 +0,0 @@
1
- declare const _default: import("axios").AxiosInstance;
2
- export default _default;
3
- //# sourceMappingURL=axios.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"axios.d.ts","sourceRoot":"","sources":["../../src/util/axios.js"],"names":[],"mappings":""}
@@ -1,10 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const axios_1 = __importDefault(require("axios"));
7
- exports.default = axios_1.default.create({
8
- validateStatus: (status) => status < 500,
9
- });
10
- //# sourceMappingURL=axios.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"axios.js","sourceRoot":"","sources":["../../src/util/axios.js"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAE1B,kBAAe,eAAK,CAAC,MAAM,CAAC;IAC1B,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,GAAG;CACzC,CAAC,CAAC"}