homebridge-tryfi 1.1.0 → 1.2.0

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.
package/dist/api.js CHANGED
@@ -18,6 +18,8 @@ class TryFiAPI {
18
18
  client;
19
19
  jar;
20
20
  session = null;
21
+ // Cache last known good location data to avoid false escape alerts on timeouts
22
+ locationCache = new Map();
21
23
  constructor(username, password, log) {
22
24
  this.username = username;
23
25
  this.password = password;
@@ -152,12 +154,16 @@ class TryFiAPI {
152
154
  // Parse device info JSON object
153
155
  const deviceInfo = pet.device.info || {};
154
156
  const batteryPercent = parseInt(deviceInfo.batteryPercent) || 0;
155
- const isCharging = deviceInfo.isCharging || false;
157
+ // Detect charging from battery chip data
158
+ // batteryAverageCurrentMa > 0 means current flowing INTO battery (charging)
159
+ // batteryAverageCurrentMa < 0 means current flowing OUT (discharging)
160
+ // bq27421Info is null when collar is not on charger
161
+ const bq27421Info = deviceInfo.bq27421Info;
162
+ const isCharging = (bq27421Info?.batteryAverageCurrentMa ?? 0) > 0;
156
163
  // Get location data for this pet
157
164
  const location = await this.getPetLocation(pet.id);
158
165
  // Determine connection status
159
166
  const connectionState = pet.device.lastConnectionState;
160
- const isCharging2 = connectionState?.__typename === 'ConnectedToBase';
161
167
  const connectedToUser = connectionState?.__typename === 'ConnectedToUser'
162
168
  ? connectionState.user?.firstName || null
163
169
  : null;
@@ -167,7 +173,7 @@ class TryFiAPI {
167
173
  breed: pet.breed?.name || 'Unknown',
168
174
  moduleId: pet.device.moduleId,
169
175
  batteryPercent,
170
- isCharging: isCharging || isCharging2,
176
+ isCharging,
171
177
  ledEnabled: pet.device.operationParams?.ledEnabled || false,
172
178
  mode: pet.device.operationParams?.mode || 'NORMAL',
173
179
  connectedToUser,
@@ -186,6 +192,7 @@ class TryFiAPI {
186
192
  }
187
193
  /**
188
194
  * Get pet location - matches pytryfi's getCurrentPetLocation
195
+ * Returns cached data on timeout/error to prevent false escape alerts
189
196
  */
190
197
  async getPetLocation(petId) {
191
198
  const query = `
@@ -261,15 +268,44 @@ class TryFiAPI {
261
268
  latitude = lastPosition.position?.latitude || 0;
262
269
  longitude = lastPosition.position?.longitude || 0;
263
270
  }
264
- return { latitude, longitude, areaName, placeName, placeAddress };
271
+ const locationData = { latitude, longitude, areaName, placeName, placeAddress };
272
+ // Cache this successful location data
273
+ this.locationCache.set(petId, locationData);
274
+ return locationData;
265
275
  }
266
276
  catch (error) {
267
- this.log.warn(`Failed to get location for pet ${petId}:`, error);
277
+ // Handle different error types for location queries
278
+ if (error.code === 'ECONNABORTED') {
279
+ // Timeout errors - common when TryFi API is slow
280
+ this.log.debug(`Location query timed out for pet ${petId}, using cached/default location`);
281
+ }
282
+ else if (error.response?.status) {
283
+ const status = error.response.status;
284
+ // Transient server errors
285
+ if (status === 502 || status === 503 || status === 504) {
286
+ this.log.debug(`Location API temporarily unavailable for pet ${petId} (${status})`);
287
+ }
288
+ else {
289
+ this.log.warn(`Failed to get location for pet ${petId} (HTTP ${status})`);
290
+ }
291
+ }
292
+ else {
293
+ // Other errors - log message only, not full error object
294
+ this.log.warn(`Failed to get location for pet ${petId}: ${error.message || 'Unknown error'}`);
295
+ }
296
+ // Return cached data if available, otherwise return safe defaults
297
+ // IMPORTANT: Using cached placeName prevents false escape alerts on timeouts
298
+ const cached = this.locationCache.get(petId);
299
+ if (cached) {
300
+ this.log.debug(`Using cached location for pet ${petId}`);
301
+ return cached;
302
+ }
303
+ // No cache available - return defaults (first time seeing this pet)
268
304
  return {
269
305
  latitude: 0,
270
306
  longitude: 0,
271
307
  areaName: null,
272
- placeName: null,
308
+ placeName: null, // null is safe here - no previous data to rely on
273
309
  placeAddress: null,
274
310
  };
275
311
  }
package/dist/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,8 @@ export declare class TryFiPlatform implements DynamicPlatformPlugin {
16
16
  readonly tryfiApi: TryFiAPI;
17
17
  readonly api: TryFiAPI;
18
18
  private pollingInterval?;
19
+ private escapeCounters;
20
+ private quickCheckTimeouts;
19
21
  constructor(log: Logger, config: PlatformConfig, homebridgeApi: API);
20
22
  /**
21
23
  * This function is invoked when homebridge restores cached accessories from disk at startup.
@@ -33,6 +35,20 @@ export declare class TryFiPlatform implements DynamicPlatformPlugin {
33
35
  * Poll TryFi API for device updates
34
36
  */
35
37
  private pollDevices;
38
+ /**
39
+ * Handle escape detection with hysteresis (debouncing)
40
+ * Prevents false alarms from GPS drift by requiring multiple consecutive detections
41
+ */
42
+ private handleEscapeDetection;
43
+ /**
44
+ * Schedule a quick check for a specific pet
45
+ * Used during escape detection to re-verify faster than normal polling
46
+ */
47
+ private scheduleQuickCheck;
48
+ /**
49
+ * Cancel any pending quick check for a pet
50
+ */
51
+ private cancelQuickCheck;
36
52
  /**
37
53
  * Stop polling when platform is shutting down
38
54
  */
@@ -1 +1 @@
1
- {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,GAAG,EACH,qBAAqB,EACrB,MAAM,EACN,iBAAiB,EACjB,cAAc,EACd,OAAO,EACP,cAAc,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE9C;;GAEG;AACH,qBAAa,aAAc,YAAW,qBAAqB;aAavC,GAAG,EAAE,MAAM;aAEX,aAAa,EAAE,GAAG;IAdpC,SAAgB,OAAO,EAAE,OAAO,OAAO,CAAC;IACxC,SAAgB,cAAc,EAAE,OAAO,cAAc,CAAC;IAEtD,SAAgB,MAAM,EAAE,mBAAmB,CAAC;IAC5C,SAAgB,WAAW,EAAE,iBAAiB,EAAE,CAAM;IACtD,SAAgB,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAa;IAEjF,SAAgB,QAAQ,EAAE,QAAQ,CAAC;IACnC,SAAgB,GAAG,EAAE,QAAQ,CAAC;IAC9B,OAAO,CAAC,eAAe,CAAC,CAAiB;gBAGvB,GAAG,EAAE,MAAM,EAC3B,MAAM,EAAE,cAAc,EACN,aAAa,EAAE,GAAG;IA2BpC;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,iBAAiB;IAK/C;;OAEG;IACG,eAAe;IAmGrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAgBpB;;OAEG;YACW,WAAW;IAqBzB;;OAEG;IACH,QAAQ;CAKT"}
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,GAAG,EACH,qBAAqB,EACrB,MAAM,EACN,iBAAiB,EACjB,cAAc,EACd,OAAO,EACP,cAAc,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAY,MAAM,SAAS,CAAC;AAExD;;GAEG;AACH,qBAAa,aAAc,YAAW,qBAAqB;aAiBvC,GAAG,EAAE,MAAM;aAEX,aAAa,EAAE,GAAG;IAlBpC,SAAgB,OAAO,EAAE,OAAO,OAAO,CAAC;IACxC,SAAgB,cAAc,EAAE,OAAO,cAAc,CAAC;IAEtD,SAAgB,MAAM,EAAE,mBAAmB,CAAC;IAC5C,SAAgB,WAAW,EAAE,iBAAiB,EAAE,CAAM;IACtD,SAAgB,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAa;IAEjF,SAAgB,QAAQ,EAAE,QAAQ,CAAC;IACnC,SAAgB,GAAG,EAAE,QAAQ,CAAC;IAC9B,OAAO,CAAC,eAAe,CAAC,CAAiB;IAGzC,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,kBAAkB,CAA0C;gBAGlD,GAAG,EAAE,MAAM,EAC3B,MAAM,EAAE,cAAc,EACN,aAAa,EAAE,GAAG;IA2BpC;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,iBAAiB;IAK/C;;OAEG;IACG,eAAe;IAwHrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAgBpB;;OAEG;YACW,WAAW;IA+DzB;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAoC7B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAuC1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;OAEG;IACH,QAAQ;CAWT"}
package/dist/platform.js CHANGED
@@ -17,6 +17,9 @@ class TryFiPlatform {
17
17
  tryfiApi;
18
18
  api; // Alias for accessory use
19
19
  pollingInterval;
20
+ // Escape alert hysteresis tracking (in-memory only, resets on restart)
21
+ escapeCounters = new Map();
22
+ quickCheckTimeouts = new Map();
20
23
  constructor(log, config, homebridgeApi) {
21
24
  this.log = log;
22
25
  this.homebridgeApi = homebridgeApi;
@@ -115,7 +118,26 @@ class TryFiPlatform {
115
118
  this.startPolling();
116
119
  }
117
120
  catch (error) {
118
- this.log.error('Failed to discover TryFi devices:', error);
121
+ // Handle different error types during discovery
122
+ if (error.response?.status) {
123
+ const status = error.response.status;
124
+ // Transient server errors - warn and start polling anyway (will retry)
125
+ if (status === 502 || status === 503 || status === 504) {
126
+ this.log.warn(`TryFi API temporarily unavailable (${status}) during startup`);
127
+ this.log.warn('Will continue to retry during polling');
128
+ this.startPolling(); // Start polling anyway, will retry
129
+ return;
130
+ }
131
+ // Authentication errors
132
+ if (status === 401 || status === 403) {
133
+ this.log.error('Authentication failed - please check your username and password');
134
+ return;
135
+ }
136
+ this.log.error(`Failed to discover TryFi devices (HTTP ${status}):`, error.message);
137
+ }
138
+ else {
139
+ this.log.error('Failed to discover TryFi devices:', error.message || error);
140
+ }
119
141
  }
120
142
  }
121
143
  /**
@@ -147,12 +169,131 @@ class TryFiPlatform {
147
169
  const accessory = this.collarAccessories.get(pet.petId);
148
170
  if (accessory) {
149
171
  accessory.updatePetData(pet);
172
+ // Handle escape alert hysteresis
173
+ this.handleEscapeDetection(pet);
150
174
  }
151
175
  }
152
176
  this.log.debug(`Updated ${pets.length} collar(s)`);
153
177
  }
154
178
  catch (error) {
155
- this.log.error('Failed to poll TryFi API:', error);
179
+ // Handle different error types appropriately
180
+ if (error.response?.status) {
181
+ const status = error.response.status;
182
+ // Transient server errors (502, 503, 504) - just warn and retry next interval
183
+ if (status === 502 || status === 503 || status === 504) {
184
+ this.log.warn(`TryFi API temporarily unavailable (${status}), will retry on next poll`);
185
+ return;
186
+ }
187
+ // Authentication errors (401, 403) - try to re-authenticate
188
+ if (status === 401 || status === 403) {
189
+ this.log.warn('Authentication expired, attempting to re-login...');
190
+ try {
191
+ await this.tryfiApi.login();
192
+ this.log.info('Successfully re-authenticated with TryFi');
193
+ // Try polling again immediately after re-auth
194
+ const allPets = await this.tryfiApi.getPets();
195
+ const ignoredPets = (this.config.ignoredPets || []).map(name => name.toLowerCase());
196
+ const pets = allPets.filter(pet => !ignoredPets.includes(pet.name.toLowerCase()));
197
+ for (const pet of pets) {
198
+ const accessory = this.collarAccessories.get(pet.petId);
199
+ if (accessory) {
200
+ accessory.updatePetData(pet);
201
+ this.handleEscapeDetection(pet);
202
+ }
203
+ }
204
+ this.log.debug(`Updated ${pets.length} collar(s) after re-auth`);
205
+ }
206
+ catch (reAuthError) {
207
+ this.log.error('Failed to re-authenticate with TryFi:', reAuthError);
208
+ }
209
+ return;
210
+ }
211
+ // Other HTTP errors
212
+ this.log.error(`TryFi API error (${status}):`, error.message);
213
+ }
214
+ else {
215
+ // Network errors, timeouts, etc.
216
+ this.log.error('Failed to poll TryFi API:', error.message || error);
217
+ }
218
+ }
219
+ }
220
+ /**
221
+ * Handle escape detection with hysteresis (debouncing)
222
+ * Prevents false alarms from GPS drift by requiring multiple consecutive detections
223
+ */
224
+ handleEscapeDetection(pet) {
225
+ // Check if pet is escaped (out of zone AND not with anyone)
226
+ const isEscaped = (pet.placeName === null && pet.connectedToUser === null);
227
+ const currentCount = this.escapeCounters.get(pet.petId) || 0;
228
+ const confirmationsRequired = this.config.escapeConfirmations || 2;
229
+ if (isEscaped) {
230
+ // Potential escape detected - increment counter
231
+ const newCount = currentCount + 1;
232
+ this.escapeCounters.set(pet.petId, newCount);
233
+ this.log.debug(`${pet.name} out of zone (${newCount}/${confirmationsRequired} confirmations)`);
234
+ if (newCount >= confirmationsRequired) {
235
+ // Threshold reached - escape confirmed
236
+ // Accessory will handle the actual alert state update
237
+ this.log.info(`${pet.name} escape confirmed after ${newCount} check(s)`);
238
+ }
239
+ else {
240
+ // Not confirmed yet - schedule quick re-check
241
+ this.scheduleQuickCheck(pet.petId, pet.name);
242
+ }
243
+ }
244
+ else {
245
+ // Pet is safe (in zone OR with someone) - reset counter
246
+ const hadCount = currentCount > 0;
247
+ this.escapeCounters.set(pet.petId, 0);
248
+ this.cancelQuickCheck(pet.petId);
249
+ if (hadCount) {
250
+ this.log.debug(`${pet.name} back in safe state, reset escape counter`);
251
+ }
252
+ }
253
+ }
254
+ /**
255
+ * Schedule a quick check for a specific pet
256
+ * Used during escape detection to re-verify faster than normal polling
257
+ */
258
+ scheduleQuickCheck(petId, petName) {
259
+ // Don't schedule if already scheduled
260
+ if (this.quickCheckTimeouts.has(petId)) {
261
+ return;
262
+ }
263
+ const interval = (this.config.escapeCheckInterval || 30) * 1000;
264
+ this.log.debug(`Scheduling quick check for ${petName} in ${interval / 1000}s`);
265
+ const timeout = setTimeout(async () => {
266
+ this.log.debug(`Running quick check for ${petName}`);
267
+ // Remove from timeouts map
268
+ this.quickCheckTimeouts.delete(petId);
269
+ // Poll just this one pet
270
+ try {
271
+ const allPets = await this.tryfiApi.getPets();
272
+ const pet = allPets.find(p => p.petId === petId);
273
+ if (pet) {
274
+ const accessory = this.collarAccessories.get(petId);
275
+ if (accessory) {
276
+ accessory.updatePetData(pet);
277
+ // Handle escape detection (may schedule another quick check)
278
+ this.handleEscapeDetection(pet);
279
+ }
280
+ }
281
+ }
282
+ catch (error) {
283
+ this.log.warn(`Quick check failed for ${petName}:`, error.message || error);
284
+ // Counter will remain, next normal poll will try again
285
+ }
286
+ }, interval);
287
+ this.quickCheckTimeouts.set(petId, timeout);
288
+ }
289
+ /**
290
+ * Cancel any pending quick check for a pet
291
+ */
292
+ cancelQuickCheck(petId) {
293
+ const timeout = this.quickCheckTimeouts.get(petId);
294
+ if (timeout) {
295
+ clearTimeout(timeout);
296
+ this.quickCheckTimeouts.delete(petId);
156
297
  }
157
298
  }
158
299
  /**
@@ -162,6 +303,11 @@ class TryFiPlatform {
162
303
  if (this.pollingInterval) {
163
304
  clearInterval(this.pollingInterval);
164
305
  }
306
+ // Cancel all pending quick checks
307
+ for (const timeout of this.quickCheckTimeouts.values()) {
308
+ clearTimeout(timeout);
309
+ }
310
+ this.quickCheckTimeouts.clear();
165
311
  }
166
312
  }
167
313
  exports.TryFiPlatform = TryFiPlatform;
@@ -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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"}
package/dist/types.d.ts CHANGED
@@ -8,6 +8,8 @@ export interface TryFiPlatformConfig extends PlatformConfig {
8
8
  pollingInterval?: number;
9
9
  escapeAlertType?: 'leak' | 'motion';
10
10
  ignoredPets?: string[];
11
+ escapeConfirmations?: number;
12
+ escapeCheckInterval?: number;
11
13
  }
12
14
  /**
13
15
  * TryFi Session Information
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,MAAM,CAAC,EAAE,KAAK,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACpD,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,KAAK,CAAC;YACpB,UAAU,EAAE,MAAM,CAAC;YACnB,SAAS,EAAE;gBACT,UAAU,EAAE,MAAM,CAAC;gBACnB,IAAI,EAAE,KAAK,CAAC;oBACV,UAAU,EAAE,MAAM,CAAC;oBACnB,EAAE,EAAE,MAAM,CAAC;oBACX,IAAI,EAAE,MAAM,CAAC;oBACb,aAAa,CAAC,EAAE,MAAM,CAAC;oBACvB,MAAM,CAAC,EAAE,MAAM,CAAC;oBAChB,KAAK,CAAC,EAAE;wBACN,UAAU,EAAE,MAAM,CAAC;wBACnB,EAAE,EAAE,MAAM,CAAC;wBACX,IAAI,EAAE,MAAM,CAAC;qBACd,CAAC;oBACF,MAAM,CAAC,EAAE;wBACP,UAAU,EAAE,MAAM,CAAC;wBACnB,EAAE,EAAE,MAAM,CAAC;wBACX,QAAQ,EAAE,MAAM,CAAC;wBACjB,IAAI,EAAE,GAAG,CAAC;wBACV,eAAe,CAAC,EAAE;4BAChB,UAAU,EAAE,MAAM,CAAC;4BACnB,IAAI,EAAE,MAAM,CAAC;4BACb,UAAU,EAAE,OAAO,CAAC;4BACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;yBACnB,CAAC;wBACF,mBAAmB,CAAC,EAAE;4BACpB,UAAU,EAAE,MAAM,CAAC;4BACnB,IAAI,EAAE,MAAM,CAAC;yBACd,GAAG;4BACF,UAAU,EAAE,iBAAiB,CAAC;4BAC9B,IAAI,EAAE,MAAM,CAAC;4BACb,IAAI,EAAE;gCACJ,UAAU,EAAE,MAAM,CAAC;gCACnB,EAAE,EAAE,MAAM,CAAC;gCACX,SAAS,EAAE,MAAM,CAAC;gCAClB,QAAQ,EAAE,MAAM,CAAC;6BAClB,CAAC;yBACH,GAAG;4BACF,UAAU,EAAE,iBAAiB,CAAC;4BAC9B,IAAI,EAAE,MAAM,CAAC;4BACb,YAAY,EAAE;gCACZ,UAAU,EAAE,MAAM,CAAC;gCACnB,EAAE,EAAE,MAAM,CAAC;6BACZ,CAAC;yBACH,GAAG;4BACF,UAAU,EAAE,qBAAqB,CAAC;4BAClC,IAAI,EAAE,MAAM,CAAC;4BACb,qBAAqB,EAAE,MAAM,CAAC;yBAC/B,CAAC;qBACH,CAAC;iBACH,CAAC,CAAC;aACJ,CAAC;SACH,CAAC,CAAC;KACJ,CAAC;CACH"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "homebridge-tryfi",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "Homebridge plugin for TryFi Dog GPS Collars",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -24,10 +24,10 @@
24
24
  "license": "Apache-2.0",
25
25
  "repository": {
26
26
  "type": "git",
27
- "url": "https://github.com/DaveLinger/homebridge-tryfi.git"
27
+ "url": "https://github.com/yourusername/homebridge-tryfi.git"
28
28
  },
29
29
  "bugs": {
30
- "url": "https://github.com/DaveLinger/homebridge-tryfi/issues"
30
+ "url": "https://github.com/yourusername/homebridge-tryfi/issues"
31
31
  },
32
32
  "dependencies": {
33
33
  "axios": "^1.6.0",
package/src/accessory.ts CHANGED
@@ -11,6 +11,9 @@ export class TryFiCollarAccessory {
11
11
  private batteryService: Service;
12
12
  private lightbulbService: Service;
13
13
  private lostDogSwitchService: Service;
14
+
15
+ // Track last escape state to avoid redundant HomeKit updates
16
+ private lastEscapeState?: boolean;
14
17
 
15
18
  constructor(
16
19
  private readonly platform: TryFiPlatform,
@@ -77,18 +80,31 @@ export class TryFiCollarAccessory {
77
80
  // Escape Alert: Triggered when NOT in safe zone AND NOT with owner
78
81
  const isEscaped = (this.pet.placeName === null) && (this.pet.connectedToUser === null);
79
82
 
80
- if (escapeAlertType === 'leak') {
81
- this.escapeAlertService.updateCharacteristic(
82
- this.platform.Characteristic.LeakDetected,
83
- isEscaped
84
- ? this.platform.Characteristic.LeakDetected.LEAK_DETECTED
85
- : this.platform.Characteristic.LeakDetected.LEAK_NOT_DETECTED,
86
- );
87
- } else {
88
- this.escapeAlertService.updateCharacteristic(
89
- this.platform.Characteristic.MotionDetected,
90
- isEscaped,
91
- );
83
+ // Only update HomeKit if escape state changed (prevents redundant notifications)
84
+ if (this.lastEscapeState !== isEscaped) {
85
+ if (escapeAlertType === 'leak') {
86
+ this.escapeAlertService.updateCharacteristic(
87
+ this.platform.Characteristic.LeakDetected,
88
+ isEscaped
89
+ ? this.platform.Characteristic.LeakDetected.LEAK_DETECTED
90
+ : this.platform.Characteristic.LeakDetected.LEAK_NOT_DETECTED,
91
+ );
92
+ } else {
93
+ this.escapeAlertService.updateCharacteristic(
94
+ this.platform.Characteristic.MotionDetected,
95
+ isEscaped,
96
+ );
97
+ }
98
+
99
+ this.lastEscapeState = isEscaped;
100
+
101
+ // Log state changes
102
+ if (isEscaped) {
103
+ this.platform.log.warn(`🚨 ${this.pet.name} has ESCAPED!`);
104
+ } else if (this.lastEscapeState === true) {
105
+ // Only log "back safe" if was previously escaped
106
+ this.platform.log.info(`✅ ${this.pet.name} is back in safe zone`);
107
+ }
92
108
  }
93
109
 
94
110
  // Battery Service
package/src/api.ts CHANGED
@@ -17,6 +17,15 @@ export class TryFiAPI {
17
17
  private readonly client: AxiosInstance;
18
18
  private readonly jar: CookieJar;
19
19
  private session: TryFiSession | null = null;
20
+
21
+ // Cache last known good location data to avoid false escape alerts on timeouts
22
+ private locationCache: Map<string, {
23
+ latitude: number;
24
+ longitude: number;
25
+ areaName: string | null;
26
+ placeName: string | null;
27
+ placeAddress: string | null;
28
+ }> = new Map();
20
29
 
21
30
  constructor(
22
31
  private readonly username: string,
@@ -170,14 +179,19 @@ export class TryFiAPI {
170
179
  // Parse device info JSON object
171
180
  const deviceInfo = pet.device.info || {};
172
181
  const batteryPercent = parseInt(deviceInfo.batteryPercent) || 0;
173
- const isCharging = deviceInfo.isCharging || false;
182
+
183
+ // Detect charging from battery chip data
184
+ // batteryAverageCurrentMa > 0 means current flowing INTO battery (charging)
185
+ // batteryAverageCurrentMa < 0 means current flowing OUT (discharging)
186
+ // bq27421Info is null when collar is not on charger
187
+ const bq27421Info = deviceInfo.bq27421Info;
188
+ const isCharging = (bq27421Info?.batteryAverageCurrentMa ?? 0) > 0;
174
189
 
175
190
  // Get location data for this pet
176
191
  const location = await this.getPetLocation(pet.id);
177
192
 
178
193
  // Determine connection status
179
194
  const connectionState = pet.device.lastConnectionState;
180
- const isCharging2 = connectionState?.__typename === 'ConnectedToBase';
181
195
  const connectedToUser =
182
196
  connectionState?.__typename === 'ConnectedToUser'
183
197
  ? (connectionState as any).user?.firstName || null
@@ -189,7 +203,7 @@ export class TryFiAPI {
189
203
  breed: pet.breed?.name || 'Unknown',
190
204
  moduleId: pet.device.moduleId,
191
205
  batteryPercent,
192
- isCharging: isCharging || isCharging2,
206
+ isCharging,
193
207
  ledEnabled: pet.device.operationParams?.ledEnabled || false,
194
208
  mode: pet.device.operationParams?.mode || 'NORMAL',
195
209
  connectedToUser,
@@ -209,6 +223,7 @@ export class TryFiAPI {
209
223
 
210
224
  /**
211
225
  * Get pet location - matches pytryfi's getCurrentPetLocation
226
+ * Returns cached data on timeout/error to prevent false escape alerts
212
227
  */
213
228
  private async getPetLocation(petId: string): Promise<{
214
229
  latitude: number;
@@ -298,14 +313,44 @@ export class TryFiAPI {
298
313
  longitude = lastPosition.position?.longitude || 0;
299
314
  }
300
315
 
301
- return { latitude, longitude, areaName, placeName, placeAddress };
302
- } catch (error) {
303
- this.log.warn(`Failed to get location for pet ${petId}:`, error);
316
+ const locationData = { latitude, longitude, areaName, placeName, placeAddress };
317
+
318
+ // Cache this successful location data
319
+ this.locationCache.set(petId, locationData);
320
+
321
+ return locationData;
322
+ } catch (error: any) {
323
+ // Handle different error types for location queries
324
+ if (error.code === 'ECONNABORTED') {
325
+ // Timeout errors - common when TryFi API is slow
326
+ this.log.debug(`Location query timed out for pet ${petId}, using cached/default location`);
327
+ } else if (error.response?.status) {
328
+ const status = error.response.status;
329
+ // Transient server errors
330
+ if (status === 502 || status === 503 || status === 504) {
331
+ this.log.debug(`Location API temporarily unavailable for pet ${petId} (${status})`);
332
+ } else {
333
+ this.log.warn(`Failed to get location for pet ${petId} (HTTP ${status})`);
334
+ }
335
+ } else {
336
+ // Other errors - log message only, not full error object
337
+ this.log.warn(`Failed to get location for pet ${petId}: ${error.message || 'Unknown error'}`);
338
+ }
339
+
340
+ // Return cached data if available, otherwise return safe defaults
341
+ // IMPORTANT: Using cached placeName prevents false escape alerts on timeouts
342
+ const cached = this.locationCache.get(petId);
343
+ if (cached) {
344
+ this.log.debug(`Using cached location for pet ${petId}`);
345
+ return cached;
346
+ }
347
+
348
+ // No cache available - return defaults (first time seeing this pet)
304
349
  return {
305
350
  latitude: 0,
306
351
  longitude: 0,
307
352
  areaName: null,
308
- placeName: null,
353
+ placeName: null, // null is safe here - no previous data to rely on
309
354
  placeAddress: null,
310
355
  };
311
356
  }