@uboness/homebridge-slide
v1.0.0
Published
Homebridge plugin for Slide curtains using the local Slide HTTP API
Maintainers
Readme
Homebridge Slide
Homebridge plugin for Slide curtains using the local Slide HTTP API only.
Unlike a bridge-based plugin, each Slide is reached directly over your local network, so every Slide is configured as its own device with its own IP address (and, on newer firmware, its own device code). The Slide local API has no push notifications, so the plugin polls each Slide on a single shared timer to keep HomeKit in sync.
Local Development
Install dependencies with pnpm:
pnpm installBuild the plugin:
pnpm run buildEdit .homebridge/config/config.json with your Slide(s) and run Homebridge
locally (Homebridge and the Config UI are installed as dev dependencies; this
command runs that local instance against .homebridge):
pnpm run homebridgeThe Config UI is available at http://localhost:8581.
Enabling the Local API
The Slide local API is disabled by default (it cannot run at the same time as the cloud API). To enable it, briefly press the reset button on the bottom of the Slide twice, ~0.5s apart. The LED flashing rapidly five times means the local API is enabled. Repeat to toggle back to the cloud API.
Once enabled, find the Slide's local IP address (a static IP / DHCP reservation is recommended) and, for newer firmware, note the 8-character device code printed on the Slide and the welcome sheet.
Configuration
{
"platform": "Slide",
"name": "Slide",
"pollInterval": 5000,
"tolerance": 2,
"timeout": 10000,
"devices": [
{
"name": "Living Room Curtain",
"host": "192.168.1.226",
"code": "KrsvBJB6",
"invert": false
}
]
}| Option | Scope | Default | Description |
| -------------- | -------- | ------- | ------------------------------------------------------------------------ |
| pollInterval | platform | 5000 | Milliseconds between position polls for all Slides. |
| tolerance | platform | 2 | HomeKit position units within which the curtain is considered "stopped". |
| timeout | platform | 10000 | Per-request HTTP timeout in milliseconds. |
| name | device | — | HomeKit name for the Slide (required). |
| host | device | — | Local IP address or hostname of the Slide (required). |
| code | device | — | Device code for Digest auth (required on newer firmware, omit on old). |
| invert | device | false | Flip open/closed if the Slide reports the opposite of HomeKit. |
| openThreshold | device | 100 | Reported position ≥ this (HomeKit 0-100) is shown as fully open (100). |
| closeThreshold | device | 0 | Reported position ≤ this (HomeKit 0-100) is shown as fully closed (0). |
Calibration drift
Even after calibrating, a Slide that is physically fully open or closed often
reports a position slightly off the true extreme, so HomeKit never quite shows
100% open or 0% closed. openThreshold and closeThreshold define a per-device
dead zone: a reading at or above openThreshold is snapped to fully open, and a
reading at or below closeThreshold is snapped to fully closed. They only affect
the position reported to HomeKit — sending the curtain to fully open/closed still
drives it to its true physical extreme.
Features
- Exposes each configured Slide as a HomeKit Window Covering with current / target position, position state, and hold-position (stop).
- Optional HTTP Digest authentication using the Slide device code, for firmware that protects the local API.
- A single platform-level timer polls every configured Slide and pushes updates into HomeKit; there is no callback server or WebSocket because the Slide local API does not support them.
Slide Local API
The plugin talks to each Slide over plain HTTP:
| Endpoint | Purpose |
| --------------------------- | ---------------------------------------------------------------- |
| POST /rpc/Slide.GetInfo | Read current position (pos, 0=open … 1=closed) and device info. |
| POST /rpc/Slide.SetPos | Move to a position ({ "pos": 0.5 }). |
| POST /rpc/Slide.Stop | Stop the motor immediately. |
| POST /rpc/Slide.Calibrate | Re-calibrate the curtain end positions. |
Slide positions are floats where 0 is fully open and 1 is fully closed;
HomeKit positions are integers where 0 is closed and 100 is open, so the
plugin converts between the two.
