Skip to main content

SkyBell HD

Cloud-REST driver for SkyBell HD, Trim Plus, and Slim Line Wi-Fi video doorbells. One GEM device row represents one SkyBell account; each enrolled doorbell becomes a GEM zone keyed by its SkyBell device id. The driver polls the SkyBell cloud at cloud.myskybell.com for both device telemetry (battery, signal, settings) and the activity feed (rings, motion events), and writes the current state back to per-zone attributes so triggers and macros can react to them.

Prerequisites

  • A SkyBell cloud account with at least one enrolled doorbell. SkyBell HD (original), Trim Plus, and Slim Line are all supported by the same v3 API.
  • The email + password that work in the SkyBell mobile app.
  • Outbound HTTPS from the GEM server to cloud.myskybell.com.

Setup

  1. Confirm the mobile app works — same credentials apply here.
  2. In GEM admin, add a device with driver skybell_hd and set email and password.
  3. On first connect the driver generates a stable app_id / client_id UUID pair and persists them on the device row. These identify this GEM install to the SkyBell cloud. They are auto-generated and should not be edited afterwards.
  4. Run the get_devices command. It returns the doorbells on the account, including their SkyBell device id (24-character hex string).
  5. Create one GEM zone per doorbell, with address = the SkyBell device id.

Attributes

Device

NameRequiredDescription
emailyesSkyBell account email.
passwordyesSkyBell account password — encrypted at rest.
app_idnoUUID identifying this GEM install. Auto-generated.
client_idnoUUID identifying this GEM install. Auto-generated.
status_intervalnoTelemetry poll period in ms. Default 60000.
activity_intervalnoRing / motion event poll period in ms. Default 30000.

Zone (per doorbell)

address is required and is the SkyBell device id (24-char hex). The driver populates these zone attributes on each sweep:

  • stateidle, ringing, or motion. Transient states clear back to idle on the next activity poll.
  • last_event_id, last_event_type, last_event_at — the most recent activity entry.
  • last_event_media_url — signed CloudFront URL to the recorded clip if present.
  • wifi_signal_strength, wifi_signal_level — radio quality.
  • firmware_version, hardware_revision, serial_number.
  • online_status, last_seen — connectivity reported by the cloud.
  • chime_level, outdoor_chime_level — current chime volume settings (0-3).
  • motion_enabled, motion_threshold — current motion settings.
  • led_intensity, led_color_r/g/b — current LED settings.

Commands

CommandArgsNotes
get_devicesLists doorbells on the account.
get_infoaddressRaw /devices/<id>/info/.
get_settingsaddressRaw /devices/<id>/settings/.
get_activitiesaddressRaw recent activity feed.
get_avatar_urladdressReturns the current snapshot URL (signed, short-lived).
set_chime_leveladdress, levelIndoor chime 0-3.
set_outdoor_chimeaddress, levelDoorbell speaker volume 0-3.
set_motion_enabledaddress, enabledtrue / false.
set_motion_thresholdaddress, threshold1-100 (lower = more sensitive).
set_led_coloraddress, r, g, b0-255 each.
set_led_intensityaddress, intensity0-100.
refreshForce an immediate status + activity poll.

Known limitations

  • Live video preview is not exposed. The SkyBell API only surfaces post-event recorded clips. Use the SkyBell app for live view.
  • Setting writes (chime level, motion sensitivity, LED) take effect on the next time the doorbell wakes up — up to ~60 s on units that sleep aggressively.
  • Cloud rate-limits credential-bearing requests; keep activity_interval ≥ 10 s.
  • "Snooze" and DND-window settings are not yet wired through — only the per-setting fields enumerated above are exposed in this version.

Troubleshooting

  • login failed on connect: confirm the email / password in the mobile app first. SkyBell occasionally forces a password reset after long idle.
  • Repeated 401s in the log: the access token has expired and re-login is also failing. Verify credentials, then refresh.
  • Events never surface: confirm motion_sensor is true in get_settings output, and that the doorbell shows recent activities in the mobile app.
  • State stuck on ringing / motion: the activity poll is what clears transient state. Check activity_interval and verify the driver isn't returning an error in the log.