Skip to content

Latest commit

Β 

History

53 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Warema WMS Home Assistant Integration

hacs_badge GitHub Release License: MIT Maintenance

Control your Warema WMS venetian blinds and shades through Home Assistant β€” directly via the Warema WMS USB Stick


Important

This integration talks directly to the Warema WMS radio network using the Warema WMS USB Stick (FTDI FT232R). It does not use and does not require the WMS WebControl pro gateway or any cloud service. If you control your blinds through a WMS WebControl pro, this integration is not the right one for you.


✨ Features

  • πŸͺŸ Full blind control β€” Open, close, stop, set position and tilt angle
  • πŸŽͺ Valance control β€” Awning valances as their own cover entities (open, close, stop, position)
  • πŸ’‘ Light control β€” WMS dimming actuators as dimmable light entities (brightness + on/off)
  • πŸ“Š Real-time monitoring β€” Position, angle, and motion detection sensors
  • 🌦️ Weather station support β€” Temperature, wind, brightness and rain sensors, auto-discovered from WMS weather-station broadcasts
  • πŸ”¦ Identify button β€” Briefly waves a blind so you can match an entity to the physical device
  • πŸ”Œ USB auto-detection β€” Plug in your Warema WMS Stick and go
  • βš™οΈ Easy setup wizard β€” Multiple discovery methods (manual, Wandsender pairing, new network)
  • 🌍 Multiple device support β€” Works with Type 20, 21, 25, 2A and 2E cover actuators plus Type 26, 28 and 31 dimmers
  • 🎯 Native Home Assistant integration β€” Full cover entity support with all features
  • 🐍 Native Python integration β€” Pure Python, no external bridge, add-on or MQTT broker required
  • πŸ” Local control only β€” No cloud dependency, all communication is local

πŸ“· Screenshots

Configuration Flow β€” Wandsender Pairing Wandsender Pairing

Device Control β€” Blind in Home Assistant Device Control


πŸš€ Installation

Via HACS

This integration is in the HACS default store β€” no custom repository needed:

  1. Open HACS in Home Assistant
  2. Search for Warema WMS
  3. Click Download
  4. Restart Home Assistant
  5. Add the integration via Settings β†’ Devices & Services β†’ Add Integration

Manual Installation

  1. Copy custom_components/warema_wms/ to your HA custom_components/ directory
  2. Restart Home Assistant
  3. Add the integration via Settings β†’ Devices & Services β†’ Add Integration

Note: The pywarema library is bundled inside β€” no separate installation needed.


βš™οΈ Configuration

The integration uses a configuration flow with auto-detection and multiple setup options.

Automatic Detection

Plug in your Warema WMS USB Stick (FTDI FT232R) and Home Assistant will notify you to start the setup wizard.

Setup Wizard

Step 1: Serial Port Selection

  • Auto-scans for connected USB sticks
  • Or enter port path manually (e.g., /dev/ttyUSB0, COM5)

Step 2: Network Discovery Method

Method Use When How It Works
Enter manually You know your channel, PAN ID & key Type in parameters directly
Wandsender pairing You have an existing network Wizard captures parameters from transmitter
Create new network You want a fresh network Wizard generates new credentials

Step 3: Select Devices

  • Auto-scans for blinds on the network
  • Multi-select which ones to add

No network parameters needed upfront β€” the wizard handles everything!


🎯 Supported Devices

Actuator hardware

Any motor reachable from one of these WMS actuators:

Type Description
20 Actuator UP
21 Plug receiver
25 Radio motor
2A Radio motor (Lamellendach L60/L70)
2E Actuator 230V UP

Dimming actuators (light entities)

WMS dimming actuators are stand-alone devices with their own serial number β€” a light is never a sub-channel of a motor. They are discovered by the same scan as the cover actuators and exposed as dimmable light entities:

Type Description
26 Dimmer
28 Dimmer (smart)
31 Dimmer 0-10 V

Weather stations (read-only)

A WMS weather station (type 06) is supported as a monitoring device: the integration listens for its broadcasts and exposes temperature, wind, brightness and rain sensors. Weather stations are not controllable and are not part of the device-selection wizard β€” see Weather Station Entities below.

Product types (auto-detected per device)

The integration reads the motor's productType (Block 37) on first connect and exposes it as the right Home Assistant cover device class. Slat tilt controls are enabled automatically when the motor reports that it has slats.

WMS product HA device class Tilt
ExternalVenetianBlind (Raffstore) blind βœ“
InternalVenetianBlind blind βœ“
VerticalLouvreBlind (Vertikallamellen) blind βœ“
RollerShutter (Rollladen) shutter –
SlatRoofL60 / SlatRoofL70 / SlatRoofL70Tilting (Lamellendach) awning βœ“
Awning, FacadeAwning, DroparmAwning, VerticalAwning, ConservatoryAwning, PergolaAwning, AwningOneValance, AwningTwoValances, Markisolette, SunSail, Valance awning –
PleatedBlindInside (Plissee), RollerBlindInside shade –
Window window –

Unknown or unrecognised product IDs fall through to blind. If the motor is asleep when first read, the integration falls back to the previous hardware-based tilt heuristic (tilt only for Actuator UP / 230V UP) and retries the detection on the next reload.

🏠 Hardware Requirements

  • Warema WMS USB Stick (FTDI FT232R, USB VID: 0403, PID: 6001)
  • Supported blinds: any motor driven by an Actuator UP (20), Plug Receiver (21), Radio Motor (25), Slat-Roof Motor L60/L70 (2A) or Actuator 230V UP (2E) β€” covering the full Warema range from Raffstoren and roller shutters to all awning families and Lamellendach (slat-roof) systems
  • Home Assistant: 2024.6.0 or later
  • Python: 3.9+

πŸ“Š Entities & Features

Cover Entity

Each blind appears as a cover entity with:

Control Range Notes
Position 0–100% 0 = closed, 100 = open
Tilt 0–100% 0 = fully closed, 50 = horizontal, 100 = open. Only for slatted blinds β€” see note below.
Open β€” Move to fully open
Close β€” Move to fully closed
Stop β€” Stop current movement

Tilt availability: Tilt (slat angle) is auto-detected per device from the motor's own isWithBlinds flag (Block 37). Raffstoren / venetian blinds get tilt controls; awnings and roller shutters do not β€” regardless of which actuator hardware drives them. See Supported Devices above for the full product-type table.

Valance Entities

An awning's valance (the fabric drop at the front) is a second motorised axis on the same motor as the cover. Each valance channel that reports a position appears as its own cover entity, Valance 1 / Valance 2, on the cover's device:

Control Range Notes
Position 0–100% 0 = fully lowered, 100 = fully raised
Open β€” Raise the valance fully
Close β€” Lower the valance fully
Stop β€” Stops the motor β€” including the cover, if it is moving

Auto-detection: there is no flag that announces a valance. The position frame simply reports 0xFF for a channel that is not there, so the entity is created the first time a channel reports a real value β€” within one position poll of startup. Hardware without a valance never gets the entity.

Position convention: the valance is not affected by the per-device invert position option. That option describes which end of the cover's travel you consider closed; a valance only ever drops downwards, so lowered is always "closed".

The two axes move independently. A valance command carries the position the cover is already at, so only the valance moves, and a cover command leaves the valance untouched. The motor handles the awkward cases itself: it never drags a lowered valance while the cover travels β€” it raises it, moves, and lowers it again at the destination β€” and it accepts a lowered valance at any cover position, which is what makes a valance useful at a partial extension when the sun is low.

Sensor Entities

  • Motor SNR β€” Serial number (6-digit hex)
  • WMS Position β€” Raw position from device
  • WMS Angle β€” Raw tilt angle from device
  • Product type (diagnostic) β€” The product type the device reports (e.g. 28 SlatRoofL70). This is the field to quote in a support request, since it decides how the device is driven.

Binary Sensor Entities

  • Moving β€” on if blind is moving, off if stopped

Button Entities

  • Identify β€” Sends a wave/beckon so the blind briefly moves, to help you match the entity to the physical device

Light Entities

WMS dimming actuators (types 26, 28, 31) are exposed as dimmable lights:

Control Range Notes
On / Off β€” Off sends level 0 (a real off, not a minimum glow)
Brightness 0–100% Turning on without a brightness restores the last level

Brightness only β€” the WMS protocol carries no colour information, so there is no colour control.

On an existing setup, dimmers are picked up via Configure β†’ Add new devices (a fresh scan is needed; existing devices and entities are unaffected).

Weather Station Entities

If a WMS weather station (device type 06) is on the network, its periodic broadcasts are decoded into a dedicated Weather station <SNR> device:

Entity Unit Device class
Temperature Β°C temperature
Wind speed m/s wind_speed
Brightness lx illuminance
Rain on/off moisture

Weather stations transmit unsolicited and are not part of the setup wizard. Their entities appear automatically once the first broadcast arrives (usually within a few minutes of startup).

All blind entities are auto-discovered and named from the device's internal name.


πŸ”„ Adding More Blinds Later

Go to the integration's Configure dialog to:

  • Re-scan the network
  • Add blinds that joined after initial setup
  • Existing entities keep their history

πŸ› οΈ Configuring Motor Parameters

The Configure dialog β†’ Configure motor firmware parameters lets you read and write the persistent settings stored in the motor itself (Block 38). These survive power cycles and also apply when you operate the blind via the handheld remote.

How it works:

  1. Pick the device you want to configure.
  2. Optionally pick a source under Load values from to copy another blind's settings β€” leave it on current values of the device to edit the device's own values. Copying is optional.
  3. A short loading step reads the parameters over the radio network (this can take a few seconds; the source motor must be awake).
  4. The form opens pre-filled. Numeric fields are input boxes (with %/s/Β° units), grouped into collapsible sections (Manual operation, Comfort, Away status, Run times & calibration, Slats, Other).
  5. Submit writes only the fields you changed β€” unchanged parameters are never touched, using targeted single-byte writes that are read back and verified.

Only Actuator UP (20), Plug Receiver (21) and Actuator 230V UP (2E) expose these parameters. Radio motors (25) use a different layout and are not listed.


πŸ’‘ Position & Tilt Conventions

Home Assistant uses different conventions than WMS:

Position

  • Home Assistant: 0 = closed, 100 = open
  • WMS: 0 = open, 100 = closed
  • β†’ Automatically converted by the integration

Tilt

  • Home Assistant: 0 = fully closed, 50 = horizontal, 100 = fully open
  • WMS: βˆ’100 = fully closed, 0 = horizontal, +100 = fully open
  • β†’ Formula: HA_tilt = (100 βˆ’ WMS_angle) / 2

🀝 Support & Contribution

🐞 Bugs

Found a problem? Open a bug report. The form asks for:

  • Home Assistant and integration version
  • Your hardware setup (device types)
  • Steps to reproduce and relevant logs

πŸ’‘ Feature Requests

Have an idea? Open a feature request so it can be tracked and labelled.

πŸ’¬ Questions & Help

For setup questions, usage help or general discussion, head to GitHub Discussions.

Want to Help?

Contributions are welcome! See CONTRIBUTING.md for:

  • Development setup
  • Code quality standards (Black, Pylint)
  • Testing requirements
  • Pull request guidelines

πŸ“š Advanced: Protocol Details

The WMS protocol uses ASCII frames over serial at 125,000 baud:

{G}                          β†’ Get stick name
{V}                          β†’ Get stick version  
{K401<32-hex-key>}           β†’ Set network key
{M%<channel><panid>}         β†’ Switch channel/PAN
{R04FFFFFF7020<panid>02}     β†’ Scan for devices
{R06<snr>801001000005}       β†’ Get blind position
{R06<snr>707003<pos><ang>FFFF} β†’ Move blind to position
{R06<snr>707001FFFFFFFFFF00}   β†’ Stop blind
{R06<snr>7050...}            β†’ Wave / beckon (identify)

Weather stations push their readings unsolicited as 7080 broadcasts, which the integration decodes into temperature, wind, brightness and rain.

Responses use prefixes: {r, {a}, {g, {v, {f}


πŸ“œ License

This project is licensed under the MIT License β€” see LICENSE for details.

πŸ™ Credits

  • Protocol derived from the open-source warema-wms-venetian-blinds package
  • Original research by "Pman" and "willjoha" on the ioBroker forum
  • Home Assistant community for the excellent integration framework

Made with ❀️ for Home Assistant

Home Assistant Python 3.9+ HACS

About

Home Assistant integration for Warema WMS venetian blinds

Topics

Resources

Contributing

Stars

9 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages