Skip to content

@mega-yfue/eufy-sdk / Command

Type Alias: Command

ts
type Command = 
  | {
  channel: number;
  form: ScalarForm;
  kind: "set-param";
  param: number;
  value: number;
}
  | {
  channel: number;
  data: Record<string, unknown>;
  kind: "set-json";
  param: number;
}
  | {
  channel: number;
  cmd: number;
  data: Record<string, unknown>;
  kind: "set-json-raw";
}
  | {
  channel: number;
  cmd: number;
  form?: ScalarForm;
  kind: "set-payload";
  mValue3?: number;
  payload: Record<string, unknown>;
}
  | {
  channel: number;
  enabled: boolean;
  kind: "p2p-privacy-burst";
}
  | {
  channel: number;
  cmd: number;
  kind: "p2p-station-scalar";
  value: number;
}
  | {
  channel: number;
  cmd: number;
  kind: "p2p-int-string";
  value: number;
  valueSub: number;
}
  | object & Ff09Identity
  | {
  adminUserId: string;
  delaySeconds?: number;
  deviceSn: string;
  enabled: boolean;
  kind: "ff09-autolock";
}
  | {
  adminUserId: string;
  deviceSn: string;
  kind: "ff09-setting-toggle";
  settingId: number;
  value: boolean;
}
  | {
  cmdCode: number;
  fields: ReadonlyArray<{
     tag: number;
     value: Buffer;
  }>;
  kind: "mqtt-dp";
  mqttCmdCode: number;
}
  | {
  cmdCode: number;
  companionCmdCode: number;
  kind: "mqtt-dp-preset";
  mqttCmdCode: number;
  presetId: number;
}
  | {
  blue: number;
  cmdCode: number;
  green: number;
  kind: "mqtt-dp-color";
  mqttCmdCode: number;
  red: number;
  segmentCount: number;
}
  | {
  dp: number;
  kind: "aiot-dp";
  value: boolean | number | string;
};

A transport-neutral outbound command intent. Capability modules emit one of these; they never call the network directly, never name a transport, and never carry a routing key. The CommandSink routes each by kind; kinds are named after the WIRE MECHANISM (the frame or protocol), never the capability that happens to be the first caller. Most carry an opaque param/id + value; a kind whose wire interaction is a bespoke sequence (a burst, a read-modify-write) earns its own variant. The ff09-* kinds share ONE frame that rides BOTH P2P and secure-MQTT, so the sink routes them by the device's runtime topology and the chosen router re-resolves its own routing tail from the device record — nothing transport- or route-specific lives in the intent.

Union Members

Type Literal

ts
{
  channel: number;
  form: ScalarForm;
  kind: "set-param";
  param: number;
  value: number;
}

Type Literal

ts
{
  channel: number;
  data: Record<string, unknown>;
  kind: "set-json";
  param: number;
}

Type Literal

ts
{
  channel: number;
  cmd: number;
  data: Record<string, unknown>;
  kind: "set-json-raw";
}

Type Literal

ts
{
  channel: number;
  cmd: number;
  form?: ScalarForm;
  kind: "set-payload";
  mValue3?: number;
  payload: Record<string, unknown>;
}

Type Literal

ts
{
  channel: number;
  enabled: boolean;
  kind: "p2p-privacy-burst";
}

Type Literal

ts
{
  channel: number;
  cmd: number;
  kind: "p2p-station-scalar";
  value: number;
}

Type Literal

ts
{
  channel: number;
  cmd: number;
  kind: "p2p-int-string";
  value: number;
  valueSub: number;
}

P2P int-plus-string frame; the transport injects the authenticated account id string.


object & Ff09Identity


Type Literal

ts
{
  adminUserId: string;
  delaySeconds?: number;
  deviceSn: string;
  enabled: boolean;
  kind: "ff09-autolock";
}

Type Literal

ts
{
  adminUserId: string;
  deviceSn: string;
  kind: "ff09-setting-toggle";
  settingId: number;
  value: boolean;
}

Type Literal

ts
{
  cmdCode: number;
  fields: ReadonlyArray<{
     tag: number;
     value: Buffer;
  }>;
  kind: "mqtt-dp";
  mqttCmdCode: number;
}

Type Literal

ts
{
  cmdCode: number;
  companionCmdCode: number;
  kind: "mqtt-dp-preset";
  mqttCmdCode: number;
  presetId: number;
}

Type Literal

ts
{
  blue: number;
  cmdCode: number;
  green: number;
  kind: "mqtt-dp-color";
  mqttCmdCode: number;
  red: number;
  segmentCount: number;
}

A DP custom-colour write; the transport owns RGB-to-wire conversion and field serialization.


Type Literal

ts
{
  dp: number;
  kind: "aiot-dp";
  value: boolean | number | string;
}

Independent and unofficial. Not affiliated with, endorsed by, or sponsored by Anker Innovations, Anker eufy, or eufy. "Anker eufy", "eufy" and "Anker" are trademarks of their respective owners. Use responsibly — rapid or failed logins can trigger captcha or temporary cooldowns.