@homebridge-eufy-security/eufy-security-client 3.7.2-dev.5 → 3.8.0-dev.7

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/README.md CHANGED
@@ -23,6 +23,12 @@ The development of this shared library was inspired by the work of the following
23
23
 
24
24
  Credits go to them as well.
25
25
 
26
+ ## Unknown device?
27
+
28
+ If you see a `New unknown device detected` warning in your logs, your device is not yet supported. You can help us add support for it by [reporting it](https://github.com/bropat/eufy-security-client/issues/new?template=unknown_device.yml). See the [guide](docs/reporting_unknown_devices.md) for details on how to extract the log.
29
+
30
+ ## Support
31
+
26
32
  If you appreciate my work and progress and want to support me, you can do it here:
27
33
 
28
34
  [![ko-fi](https://www.ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/E1E332Q6Z)
@@ -105,6 +111,27 @@ Instructions aimed at maintainers for deploying a new version: [Deployment](docs
105
111
 
106
112
  ## Changelog
107
113
 
114
+ ### 3.8.0 (2026-03-01)
115
+
116
+ * Feature: Add support for Smart Lock E20 (T85V0) by @worldjoe/@max246 in https://github.com/bropat/eufy-security-client/pull/803
117
+ * Feature: Add support for Smart Lock C33 (T85L0) by @max246 in https://github.com/bropat/eufy-security-client/pull/804
118
+ * Feature: Add support for locks C30 & E330 by @max246 in https://github.com/bropat/eufy-security-client/pull/806
119
+ * Feature: Add support for Camera S40 (T8172) by @lenoxys in https://github.com/bropat/eufy-security-client/pull/807
120
+ * Feature: Add support for Motion Sensor E20 (T90M0) and Sirene E20 (T90R0) by @max246 in https://github.com/bropat/eufy-security-client/pull/808
121
+ * Feature: Add support for SoloCam E42 (T8173) by @lenoxys in https://github.com/bropat/eufy-security-client/pull/809
122
+ * Feature: Add support for 4G LTE Cam S330 (T86P2) by @lenoxys in https://github.com/bropat/eufy-security-client/pull/821
123
+ * Feature: Add support for C220 V3 by @max246 in https://github.com/bropat/eufy-security-client/pull/823
124
+ * Feature: Add debug message for new device and reporting guide by @max246 in https://github.com/bropat/eufy-security-client/pull/825
125
+ * Fix: Fix T8214 and T8425 livestream by @lenoxys in https://github.com/bropat/eufy-security-client/pull/793
126
+ * Fix: C210 preset support by @tomc128 in https://github.com/bropat/eufy-security-client/pull/811
127
+ * Fix: Mock timezone in getTimezoneGMTString test by @nick-pape in https://github.com/bropat/eufy-security-client/pull/814
128
+ * Fix: Restore missing CAMERA_S4 (T8172) StationProperties and StationCommands entries by @lenoxys in https://github.com/bropat/eufy-security-client/pull/819
129
+ * Fix: Fix start date by @max246 in https://github.com/bropat/eufy-security-client/pull/816
130
+ * Chore: Upgrade qs from 6.14.2 to 6.15.0 by @max246 in https://github.com/bropat/eufy-security-client/pull/802
131
+ * Chore: Upgrade date-and-time from 4.2.0 to 4.3.0 by @max246 in https://github.com/bropat/eufy-security-client/pull/815
132
+ * Chore: Add dev publish and enforce target branch workflows by @lenoxys in https://github.com/bropat/eufy-security-client/pull/818
133
+ * Chore: Add more testing and format check task by @max246 in https://github.com/bropat/eufy-security-client/pull/822
134
+
108
135
  ### 3.7.2 (2026-02-16)
109
136
  * Fix: Revert due to failure to communicate with HB3 https://github.com/bropat/eufy-security-client/pull/790
110
137
  * Fix: 2FA login by @lenoxys in https://github.com/bropat/eufy-security-client/pull/789
@@ -61,6 +61,7 @@ export declare class EufySecurity extends TypedEmitter<EufySecurityEvents> {
61
61
  private handleHubs;
62
62
  private refreshP2PData;
63
63
  private onStationConnect;
64
+ private onHubNotifyUpdate;
64
65
  private onStationConnectionError;
65
66
  private onStationClose;
66
67
  private handleDevices;
@@ -86,6 +87,7 @@ export declare class EufySecurity extends TypedEmitter<EufySecurityEvents> {
86
87
  isMQTTConnected(): boolean;
87
88
  isConnected(): boolean;
88
89
  private processInvitations;
90
+ sendHouseInvite(houseID: string, email: string): Promise<boolean>;
89
91
  private onPushMessage;
90
92
  startStationDownload(deviceSN: string, path: string, cipherID: number): Promise<void>;
91
93
  cancelStationDownload(deviceSN: string): Promise<void>;
@@ -40,6 +40,7 @@ exports.EufySecurity = void 0;
40
40
  const tiny_typed_emitter_1 = require("tiny-typed-emitter");
41
41
  const fs_1 = require("fs");
42
42
  const path = __importStar(require("path"));
43
+ const util = __importStar(require("util"));
43
44
  const events_1 = __importDefault(require("events"));
44
45
  const api_1 = require("./http/api");
45
46
  const station_1 = require("./http/station");
@@ -558,6 +559,7 @@ class EufySecurity extends tiny_typed_emitter_1.TypedEmitter {
558
559
  station.on("sensor status", (station, channel, status) => this.onStationSensorStatus(station, channel, status));
559
560
  station.on("garage door status", (station, channel, doorId, status) => this.onStationGarageDoorStatus(station, channel, doorId, status));
560
561
  station.on("storage info hb3", (station, channel, storageInfo) => this.onStorageInfoHb3(station, channel, storageInfo));
562
+ station.on("hub notify update", (station) => this.onHubNotifyUpdate(station));
561
563
  this.addStation(station);
562
564
  station.initialize();
563
565
  }
@@ -617,6 +619,12 @@ class EufySecurity extends tiny_typed_emitter_1.TypedEmitter {
617
619
  this.refreshP2PData(station);
618
620
  }, this.P2P_REFRESH_INTERVAL_MIN * 60 * 1000);
619
621
  }
622
+ onHubNotifyUpdate(station) {
623
+ logging_1.rootMainLogger.info("Hub notify update received, refreshing cloud data", {
624
+ stationSN: station.getSerial(),
625
+ });
626
+ this.refreshCloudData();
627
+ }
620
628
  onStationConnectionError(station, error) {
621
629
  this.emit("station connection error", station, error);
622
630
  }
@@ -638,6 +646,7 @@ class EufySecurity extends tiny_typed_emitter_1.TypedEmitter {
638
646
  }
639
647
  handleDevices(devices) {
640
648
  logging_1.rootMainLogger.debug("Got devices", { devices: devices });
649
+ logging_1.rootMainLogger.debug("Got devices - extended logging", { devices: util.inspect(devices, { depth: null }) });
641
650
  const deviceSNs = Object.keys(this.devices);
642
651
  const newDeviceSNs = Object.keys(devices);
643
652
  const promises = [];
@@ -702,6 +711,16 @@ class EufySecurity extends tiny_typed_emitter_1.TypedEmitter {
702
711
  new_device = device_1.LockKeypad.getInstance(this.api, device, deviceConfig);
703
712
  }
704
713
  else {
714
+ logging_1.rootMainLogger.warn(`New unknown device detected`, {
715
+ device_type: device.device_type,
716
+ device_sn: device.device_sn,
717
+ device_name: device.device_name,
718
+ device_model: device.device_model,
719
+ station_sn: device.station_sn,
720
+ main_sw_version: device.main_sw_version,
721
+ main_hw_version: device.main_hw_version,
722
+ params: device.params,
723
+ });
705
724
  new_device = device_1.UnknownDevice.getInstance(this.api, device, deviceConfig);
706
725
  }
707
726
  promises.push(new_device.then((device) => {
@@ -1071,6 +1090,14 @@ class EufySecurity extends tiny_typed_emitter_1.TypedEmitter {
1071
1090
  if (refreshCloud)
1072
1091
  this.refreshCloudData();
1073
1092
  }
1093
+ async sendHouseInvite(houseID, email) {
1094
+ const result = await this.api.sendHouseInvite(houseID, email).catch((err) => {
1095
+ const error = (0, error_1.ensureError)(err);
1096
+ logging_1.rootMainLogger.error("Error sending house invite", { error: (0, utils_1.getError)(error), houseID, email });
1097
+ return false;
1098
+ });
1099
+ return result;
1100
+ }
1074
1101
  onPushMessage(message) {
1075
1102
  this.emit("push message", message);
1076
1103
  try {