# AutoBlind Binding
This binding integrates Norman ShadeAuto motorized shades (manufactured by Nien Made) with openHAB. It communicates with the ShadeAuto hub over the local network using the hub's HTTP API on port 10123. No cloud connection is required.
# Supported Things
| Thing | Thing Type | Description |
|---|---|---|
| hub | Bridge | The ShadeAuto hub that connects to shades via RF. |
| shade | Thing | An individual motorized shade controlled by the hub. |
# Discovery
The binding announces itself as an addon suggestion when a ShadeAuto hub is found on the network via mDNS. This only suggests installing the binding; it does not create the hub Thing automatically, since the hub must still be added with its configuration. After adding the hub bridge manually, the binding will automatically discover all shades registered on the hub. Discovery queries the hub's room and group hierarchy and creates an inbox entry for each shade, labeled with its name and location.
# Thing Configuration
# Hub Bridge Configuration
| Name | Type | Description | Default | Required |
|---|---|---|---|---|
| host | text | IP address or hostname of the ShadeAuto hub | N/A | yes |
| pollingInterval | integer | Interval in seconds between status polls | 1800 | no |
# Shade Thing Configuration
| Name | Type | Description | Default | Required |
|---|---|---|---|---|
| peripheralUid | integer | Unique identifier of the shade on the hub | N/A | yes |
| invertPosition | boolean | Invert reported/commanded position (see Position Mapping below) | true | no |
Shade configuration is normally set automatically via discovery.
# Channels
# Shade Channels
| Channel ID | Item Type | Description |
|---|---|---|
| position | Dimmer | Shade position (0% = fully open, 100% = fully closed). |
| battery-level | Number:Dimensionless | Battery level of the shade as a percentage. |
| low-battery | Switch | Indicates ON when the battery level is low. |
# Position Mapping
The Norman ShadeAuto hub API uses 0 = closed and 100 = open.
By default (invertPosition = true) the binding converts this so that openHAB convention is followed: 0% = open and 100% = closed.
If your hub already reports position using the same convention as openHAB, set invertPosition = false on the shade to disable the conversion.
# Known Limitations
The hub's local status API only reflects the last time a shade communicated with the hub over its RF link, not the shade's true current state.
Reported position and battery level can lag reality for an extended period, sometimes weeks, if a shade has had no reason to check in.
Sending commands to a shade still works reliably; only the reported state can be stale, not the shade's actual response to a command.
The forceRefresh action re-polls this same status API, so it does not correct staleness — it is only useful for clearing suppressed optimistic updates or motion tracking.
Real-time-accurate state is only available through the manufacturer's mobile app and cloud service, which this binding does not use.
# Thing Actions
The hub bridge exposes the following action:
| Action | Description |
|---|---|
| forceRefresh() | Clear command suppression and poll the hub for current shade positions. |
Example, calling the action from a rule:
val hubActions = getActions("autoblind", "autoblind:hub:myhub")
hubActions.forceRefresh()
# Full Example
# autoblind.things
Bridge autoblind:hub:myhub "AutoBlind Hub" [ host="192.168.1.100", pollingInterval=1800 ] {
Thing shade bedroom "Bedroom Shade" [ peripheralUid=1 ]
Thing shade livingroom "Living Room Shade" [ peripheralUid=2 ]
}
# autoblind.items
Dimmer BedroomShade_Position "Bedroom Shade [%d %%]" { channel="autoblind:shade:myhub:bedroom:position" }
Number:Dimensionless BedroomShade_Battery "Bedroom Battery [%d %%]" { channel="autoblind:shade:myhub:bedroom:battery-level" }
Switch BedroomShade_LowBattery "Bedroom Low Battery" { channel="autoblind:shade:myhub:bedroom:low-battery" }
# autoblind.sitemap
sitemap autoblind label="AutoBlind" {
Frame label="Bedroom" {
Slider item=BedroomShade_Position
Text item=BedroomShade_Battery
Text item=BedroomShade_LowBattery
}
}
# Acknowledgments
API protocol knowledge informed by Kevin Lester's ShadeAuto-HomeAssistant (opens new window) integration.