@mega-yfue/eufy-sdk 0.2.0-beta.26 → 0.2.0-beta.27

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.
@@ -14,8 +14,9 @@ export declare const DOORBELL_CMD: {
14
14
  */
15
15
  readonly QUICK_RESPONSE: 1706;
16
16
  /**
17
- * Mechanical (wired) chime enable/disable — whether the doorbell drives an existing wired chime box
18
- * (as opposed to / in addition to the wireless indoor chime, param 1702 `chimeSwitch` above). Same
17
+ * Mechanical (wired) chime enable/disable — whether the doorbell drives an existing wired chime box,
18
+ * the app's "existing doorbell chime" (as opposed to / in addition to the HomeBase acting as the chime,
19
+ * param 1702 `chimeSwitch` above; toggling each switch alone wrote one parameter and named the pair). Same
19
20
  * 136-byte direct-binary shape as `QUICK_RESPONSE`/camera on-off: `[u32 channel][u32 value][account_id
20
21
  * ASCII, zero-padded to 128 bytes]`, outer P2P cmd = 1703 itself, signCode 8, on the device's own
21
22
  * channel. Reversed from a live capture (outer-cmd 1703, signCode 8, captured on the doorbell's
@@ -24,6 +25,19 @@ export declare const DOORBELL_CMD: {
24
25
  * App `APP_CMD_BAT_DOORBELL_MECHANICAL_CHIME_SWITCH`.
25
26
  */
26
27
  readonly MECHANICAL_CHIME_SWITCH: 1703;
28
+ /**
29
+ * Whether the HOMEBASE acts as the doorbell's chime — the app's "HomeBase as chime" switch, as opposed
30
+ * to the wired chime box {@link DOORBELL_CMD.MECHANICAL_CHIME_SWITCH} drives. The app constant reads
31
+ * `CHIME_SWITCH`, which is why this was long described as a separate plug-in chime; toggling that one
32
+ * switch alone on a T8210 behind a HomeBase wrote 1702 and nothing else, and the account has no
33
+ * plug-in chime at all. Same 136-byte direct-binary shape as
34
+ * that sibling: `[u32 channel][u32 value][account_id ASCII, zero-padded to 128 bytes]`, outer P2P cmd
35
+ * 1702 itself, signCode 8, on the device's own channel. Reversed from a live capture (outer-cmd 1702,
36
+ * signCode 8, on the doorbell's `device_channel` — 2 for that unit, NOT a wire constant, always use
37
+ * `ctx.channel`): turning OFF sent `value=0`, turning ON sent `value=1` — a plain boolean.
38
+ * App `APP_CMD_BAT_DOORBELL_CHIME_SWITCH`.
39
+ */
40
+ readonly CHIME_SWITCH: 1702;
27
41
  /**
28
42
  * Wide Dynamic Range (WDR) image switch — a video/image tone-mapping setting that widens the
29
43
  * exposure range in high-contrast scenes (bright sky behind a visitor, etc). SAME 136-byte
@@ -158,13 +172,10 @@ export declare function parseQuickResponses(voiceList: Array<{
158
172
  /**
159
173
  * Every `doorbell` feature, declared once.
160
174
  *
161
- * Three of the seven reads are read-ONLY here even though the device accepts a write, because the write
175
+ * Two of the seven reads are read-ONLY here even though the device accepts a write, because the write
162
176
  * does not belong to this capability or is not confirmed:
163
177
  * - `ringtoneVolume` (1708) — the WRITE lives on `audio`, which owns every volume wire. 1708 leaks
164
178
  * onto non-doorbell cameras, so `audio` gates its setter on the doorbell capability instead.
165
- * - `chimeSwitch` (1702) — READ confirmed on a T8214, the WRITE wire never captured. Its 1703/1704
166
- * siblings share the param range but that is NOT evidence of a shared frame, and a wrong guess on a
167
- * fire-and-forget P2P write looks exactly like success.
168
179
  * - `notificationMode` (1710) — a config JSON the device reports whole; no write is captured.
169
180
  *
170
181
  * Exported but NOT published: each entry states its wire id and the evidence it was confirmed on,
@@ -173,19 +184,18 @@ export declare function parseQuickResponses(voiceList: Array<{
173
184
  */
174
185
  export declare const DOORBELL_MEMBERS: {
175
186
  /**
176
- * The WIRELESS indoor chime — the separate plug-in unit, not the wired chime box
177
- * `mechanicalChimeSwitch` drives. `unverified: true` with no `write` at all: the read is confirmed but
178
- * the write frame has never been captured, so the setter is absent from the surface (a compile-time
179
- * signal) and the intent path throws rather than reporting the doorbell as lacking the feature.
180
- * Sharing the 1702-1719 range with its captured siblings is not evidence of a shared frame shape.
187
+ * The HOMEBASE as the doorbell's chime — the hub plays the ring, not the wired chime box
188
+ * `mechanicalChimeSwitch` drives. `provenance` is "verified" on our own decrypt of the app's frame,
189
+ * not merely the param id observed live: direct-binary `[ch][value][acct]`, 1=on/0=off, the same shape
190
+ * as its 1703 sibling — captured, not inferred from the shared param range.
181
191
  */
182
192
  readonly chimeSwitch: {
183
193
  readonly param: 1702;
184
194
  readonly type: "bool";
185
195
  readonly kind: "boolean";
186
- readonly provenance: "mega";
187
- readonly unverified: true;
196
+ readonly provenance: "verified";
188
197
  readonly description: string;
198
+ readonly write: (v: string | number | boolean, ctx: import("./types.js").CommandContext) => import("../../core/contracts.js").Command;
189
199
  };
190
200
  /**
191
201
  * `provenance` is "verified" not "mega": the actual write wire is confirmed (
@@ -197,7 +207,7 @@ export declare const DOORBELL_MEMBERS: {
197
207
  readonly type: "bool";
198
208
  readonly kind: "boolean";
199
209
  readonly provenance: "verified";
200
- readonly description: "Mechanical chime enabled (1703; confirmed on T8214).";
210
+ readonly description: string;
201
211
  readonly write: (v: string | number | boolean, ctx: import("./types.js").CommandContext) => import("../../core/contracts.js").Command;
202
212
  };
203
213
  /** Same reasoning and the same capture session as {@link DOORBELL_MEMBERS.mechanicalChimeSwitch}. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mega-yfue/eufy-sdk",
3
- "version": "0.2.0-beta.26",
3
+ "version": "0.2.0-beta.27",
4
4
  "description": "One typed TypeScript client for the Anker eufy v6 cloud — capability-driven devices, realtime events over P2P/MQTT/push, and live media",
5
5
  "license": "Apache-2.0",
6
6
  "author": "mega-yfue",