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
- Confirm the mobile app works — same credentials apply here.
- In GEM admin, add a device with driver
skybell_hdand setemailandpassword. - On first connect the driver generates a stable
app_id/client_idUUID 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. - Run the
get_devicescommand. It returns the doorbells on the account, including their SkyBell device id (24-character hex string). - Create one GEM zone per doorbell, with
address= the SkyBell device id.
Attributes
Device
| Name | Required | Description |
|---|---|---|
email | yes | SkyBell account email. |
password | yes | SkyBell account password — encrypted at rest. |
app_id | no | UUID identifying this GEM install. Auto-generated. |
client_id | no | UUID identifying this GEM install. Auto-generated. |
status_interval | no | Telemetry poll period in ms. Default 60000. |
activity_interval | no | Ring / 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:
state—idle,ringing, ormotion. Transient states clear back toidleon 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
| Command | Args | Notes |
|---|---|---|
get_devices | — | Lists doorbells on the account. |
get_info | address | Raw /devices/<id>/info/. |
get_settings | address | Raw /devices/<id>/settings/. |
get_activities | address | Raw recent activity feed. |
get_avatar_url | address | Returns the current snapshot URL (signed, short-lived). |
set_chime_level | address, level | Indoor chime 0-3. |
set_outdoor_chime | address, level | Doorbell speaker volume 0-3. |
set_motion_enabled | address, enabled | true / false. |
set_motion_threshold | address, threshold | 1-100 (lower = more sensitive). |
set_led_color | address, r, g, b | 0-255 each. |
set_led_intensity | address, intensity | 0-100. |
refresh | — | Force 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 failedon 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_sensoristrueinget_settingsoutput, and that the doorbell shows recent activities in the mobile app. - State stuck on
ringing/motion: the activity poll is what clears transient state. Checkactivity_intervaland verify the driver isn't returning an error in the log.