github mega-yfue/eufy-sdk v0.4.0

latest release: v0.5.0
one month ago

Live video holds up on a lossy link or a busy host, a HomeBase 2 hands over its event recordings, camera power is right on the HomeBase 3 and indoor cams, and Security push registration now actually delivers events.

npm install @mega-yfue/eufy-sdk@0.4.0

Live video

  • The SDK asks for a 4 MiB UDP receive buffer, so the kernel no longer drops a keyframe burst. On a small Linux host this took live view from 9–30 s with freezes to about 4 s and smooth.
  • Late video datagrams are recovered and the stream resyncs after loss. The sequence counter no longer wraps at 255, and a frame header split across two datagrams is reassembled.
  • Liveness is measured on the peer path actually in use, and a cached live source is rebuilt when its session is replaced.
  • Closing the live view of a standalone camera stops its stream, so a floodlight's lamp turns off with it.

Recordings

  • New: camera().downloadRecording({ recording, cipherId }) fetches an event recording a HomeBase 2 holds, over the station's P2P session, without waking the camera. It returns H.264 and AAC (ADTS) plus frame counts and duration, and throws RecordingDownloadError on failure.

Push

  • Push registration completes on both the Mega and Security backends, so events raised by the app reach the SDK (#262).
  • A thumbnail stored only on the station is attached to the push, and one the media host hasn't published yet is retried.
  • Each received push and what it decoded to is logged at debug level.

Camera power

  • T8410 on a HomeBase 3: power state and readback are correct.
  • Indoor cams (incl. T8400 C120): the power switch uses the polarity the camera reports.
  • T8423 floodlight is mains-powered.
  • New: cameraPowerTier is exported, so a host reads the same power tier the SDK uses.

Devices and realtime

  • A station's face roster is read over P2P, so a recognised person shows up by name instead of "Person 1".
  • The HomeBase 3 siren works over the station alarm wire it advertises.
  • The classic Wi-Fi lock's result code is read correctly.
  • When the MQTT broker refuses one subscription, the device keeps its other granted ones.

Breaking changes

Change What to do
CapabilityDescriptor.accessor is optional: absent on a capability whose whole surface is inbound events (#276) Accept it missing, both in types and in any runtime validation of the manifest.

No export removed. Added: cameraPowerTier, RecordingDownloadError, VIDEO_GCM_AAD.

Thanks to everyone who contributed to this release: @sapireli, @PatrioteQc, @max246, @martijnpoppen, @ohetzendorfer, @Tursko, @tturnerdev, @sstangle73, @shaarkys, @genomez, @danymexi, @danielmigueltejedor and @lenoxys.

What's Changed

  • feat(p2p): read the zero-padded result code the classic Wi-Fi lock answers with by @tturnerdev in #233
  • fix(p2p): carry a frame header cut by the datagram boundary into the next datagram by @PatrioteQc in #259
  • fix(push): admit a station-only thumbnail under the push's device serial by @PatrioteQc in #258
  • Keep a device's granted MQTT legs when the broker refuses one of them by @martijnpoppen in #256
  • fix(p2p): ask for a 4 MiB receive buffer so keyframe bursts are not dropped by @ohetzendorfer in #255
  • fix(p2p): validate shared-live timer durations by @sapireli in #213
  • test(display): check unexposed through the binder, not the table by @max246 in #267
  • fix(camera): classify T8423 as mains powered by @sapireli in #225
  • test(http): keep gtoken header fixtures offline by @genomez in #286
  • refactor(http): share the passport login and signing steps between the eufy and Solix clients by @max246 in #268
  • fix(p2p): keep counting the level-2 sequence past 255 by @ohetzendorfer in #278
  • fix(siren): admit the HomeBase 3 to the station alarm wire it already advertises by @danymexi in #242
  • fix(camera): retry a push thumbnail the media host has not published yet by @PatrioteQc in #290
  • fix(p2p): stop logging the device's 0xf143 address record as UNHANDLED by @sstangle73 in #289
  • feat(p2p): download a recording stored on a HomeBase 2 by @PatrioteQc in #260
  • feat(client): read a station's own face roster over P2P by @martijnpoppen in #277
  • docs(model): define the provenance tiers once, on PropertySource by @max246 in #266
  • fix(p2p): measure liveness on the selected peer path by @sapireli in #282
  • fix(model)!: describe a capability that binds no surface, and claim the identified-person ids by @martijnpoppen in #276
  • fix(p2p): take a recording's finish frame on channel 0 by @PatrioteQc in #298
  • fix(p2p): name the input a connect's cloud lookup was missing by @lenoxys in #296
  • feat(push): log each received push and what it decoded to by @lenoxys in #297
  • fix(p2p): keep a recording's audio as the ADTS frames the camera sends by @PatrioteQc in #299
  • fix(p2p): rebuild a cached live source after session replacement by @sapireli in #279
  • feat(model): expose camera power tier by @sapireli in #308
  • docs(agents): the SDK's job is the vendor protocol, and an option defaults to today's behaviour by @lenoxys in #275
  • chore(deps): bump ip-address from 10.5.0 to 10.7.2 by @dependabot[bot] in #288
  • chore(deps): bump markdown-it from 14.3.0 to 14.3.2 in /docs by @dependabot[bot] in #309
  • fix(p2p): recover late video datagrams by @sapireli in #318
  • fix(push): complete Security push registration by @danielmigueltejedor in #306
  • fix(camera): correct T8410 HomeBase 3 power handling by @shaarkys in #304
  • fix(p2p): stop an own-session camera's live stream with the direct 1004 by @lenoxys in #315
  • fix(camera): use disable-bit power polarity for T8400 (C120) indoor cam by @Tursko in #319
  • release: 0.4.0 by @lenoxys in #331

New Contributors

Full Changelog: v0.3.0...v0.4.0

Don't miss a new eufy-sdk release

NewReleases is sending notifications on new releases.