Slide curtains smart home integration, free and open source

Slide curtain motors (Innovation in Motion) over their local API. Unofficial.
This integration connects Gladys to your Slide curtain motors (Innovation in Motion) through their local API. Each Slide becomes a curtain in the Discovery tab of Gladys: open, close, stop, position, and a calibration button. Everything stays on your local network: the cloud of Slide is not used. Unofficial, not affiliated with Innovation in Motion.
Development version (0.1). Written from the local API published by the maker and the goslide-api library, and tested against simulated Slides only: it has never been tested with a real Slide yet. Your feedback is welcome on the GitHub repository.
What you get
| Feature | In Gladys |
|---|---|
| Open / close | open, close, stop the curtain |
| Position | 0 % = closed, 100 % = open; read at the interval you choose, and commanded |
| Calibrate | a button that starts the calibration, off by default (see Options) |
A Slide is never a switch: a "turn everything off" scene does not close it. It is a "curtain": a "close the curtains" of a scene, Google, Alexa, HomeKit or an assistant (MCP) closes it, as expected.
Requirements
- One or more Slides on the same local network as Gladys, with their local API turned on in the Slide app.
- The IP address of each Slide, preferably fixed (reserved in your router).
- For a Slide on an older firmware (API v1): its 8-character device code, printed on the Slide. Recent Slides (API v2) have no password: anyone on your network can use them, with or without Gladys. Keep them on a trusted network.
Installation
- In Gladys, open the Slide curtains integration, Configuration tab.
- Type the addresses of your Slides, separated by commas (8 at most), like
192.168.1.40, 192.168.1.41. - Only for Slides on API v1: type their codes as
address=codepairs, separated by commas; nothing for a Slide on API v2. For example, with the addresses above and only the second Slide on API v1:192.168.1.41=ABCD1234. A code is matched by its address, never by its place in the list: when you change an address, type its pair again. This field is kept by Gladys in its database, never shown again; it only serves to answer the Digest challenge of the Slide at that address (the code itself is never sent). - Save, then press Test the connection: the state of each Slide is shown.
- Open the Discovery tab and add your Slides.
Options
- Read interval (30 s by default, 10 to 3600 s): how often the position of each Slide is read. After a command, the Slide is also read a few times while the curtain moves (2, 8, 20 and 45 s).
- Allow calibration (off by default): the "Calibrate" button runs the curtain from one end to the other to learn its travel again. While the option is off, the button is refused; it is read again right before sending.
- Language of the feature names: French or English.
How the commands are sent
- Open, close, a position, calibrate: Gladys first reads the identity (MAC address) of the Slide at that address. If another Slide answers there (an address given to another one by your router), the command is refused and nothing is sent. The command leaves within 3.5 s, or it is refused.
- Stop always leaves at once: without waiting, even during a pause asked by the Slide, and even right after a restart of the integration. It cancels the moves of that Slide not sent yet.
- A command that may have left without a clear answer is reported "sent, without confirmation", and the Slide is read again; never sent again by itself.
- A position is confirmed only by a read equal to the position asked. If the curtain does not reach it (an obstacle, a hand on the curtain), the badge of the Slide turns orange.
Security and privacy
- Gladys only talks to the addresses typed, in plain HTTP on your local network; redirects are never followed, no cloud is used.
- The device codes are never written to the logs, to
/datanor to a message. A refused code stops that Slide for good: Gladys never tries it again by itself. Fix the code then save, or press Test the connection for one new try. - A "429" or a server error of a Slide pauses it (1 minute to 6 hours), and the pause outlives a restart. After a failure, Gladys never asks a Slide more often than the read interval.
Troubleshooting
- "Unreachable": check the IP address (no
.localname, the container does not resolve them), the Wi-Fi of the Slide, and that its local API is on. - "Asks for its device code": this Slide is on API v1; type its pair
address=codein "Device codes". - "Not found at the addresses typed": the address of a Slide changed; type the new one, its device and history are kept.
- Position reversed: tell us on the GitHub repository.
Credits
Logic ported from goslide-api (Apache-2.0), the library of the Slide integration of Home Assistant. Slide is a trademark of Innovation in Motion; this project is not affiliated with Innovation in Motion.
Configuration settings
These are the settings Slide curtains asks for in its configuration screen in Gladys.
| Setting | Type | Required | Description |
|---|---|---|---|
| Your Slide curtains in Gladys | section | No | Each Slide becomes a curtain in the Discovery tab: open, close, stop, position, and a calibration button. Everything stays on your local network, through the local API of the Slide (plain HTTP): turn on its local API in the Slide app first (recent firmware: API v2, no password; older firmware: API v1, with the device code printed on the Slide). The cloud of Slide is not used. Never tested with a real Slide yet. Unofficial, not affiliated with Innovation in Motion. |
| Addresses of the Slides | string | Yes | The local IP address of each Slide, separated by commas (8 at most), like 192.168.1.40, 192.168.1.41. Give each one a fixed address in your router (DHCP reservation): if one changes, type the new one, its device and history are kept. |
| Device codes (API v1 only) | secret | No | Only for Slides on the API v1 (older firmware): its address, an equals sign and the 8-character device code printed on it, as address=code pairs separated by commas, like 192.168.1.41=ABCD1234. Nothing for a Slide on API v2. Kept by Gladys in its database, never shown again; it only serves to answer the Digest challenge of the Slide at that address (the code itself is never sent). When you change an address, type its pair again. |
| Read interval (s) | number | No | How often the position of each Slide is read (10 to 3600 s). After a command, the Slide is also read a few times while the curtain moves. |
| Allow calibration | boolean | No | Off by default. On, the "Calibrate" button of each Slide starts its calibration: the curtain runs from one end to the other to learn its travel again. Rarely needed (after moving the Slide on its rail). |
| Language of the feature names | select | No | Used for the names of the features of the Slides added from now on. |
How to install Slide curtains in Gladys
- In Gladys, open Integrations: Slide curtains appears in the catalog, next to the native integrations, with a community badge.
- Click Install. Gladys pulls the Docker image (
ghcr.io/lm1lc3n7/gladys-slide:0.1.1), starts it in a sandbox isolated from the core, and generates the integration's interface (devices, discovery and configuration). - Open the Configuration screen of the integration, fill in the settings, and save.
- You can also install it directly from its repository URL: https://github.com/LM1LC3N7/gladys-slide.
Slide curtains requires Gladys >=5.1.0. The catalog inside Gladys refreshes every hour, so a new version becomes available at most one hour after its release.
Not running Gladys yet? It is free and open source: follow the installation guide to get started.
About external integrations
Slide curtains is an external integration: a community integration packaged as a Docker container and published on GitHub, that Gladys installs in one click and runs in a sandbox isolated from its core. It is published and maintained by LM1LC3N7, not by the Gladys core team.
- Browse all integrations, native and community
- Build and publish your own external integration
- Source code on GitHub — source of this documentation