Somfy RTS, Wemos D1 mini, covers, shutter, ESPhome, github.com/dmslabsbr/esphome-somfy

Hello all,
Tried this topic at the ESP home section, unfortunately no response, maybe this is a better place for my question.
Thank you in advanced for your help.

I am strugling with integrating Somfy RTS through ESPhome.
Trying to get 4 Somfy RTS shutters with Somfy remotes integrated in HA with a Wemos D1 Mini and a RF 433.42mhz Transmitter.

Hardware Wemos D1 mini
433mhz receiver transmitter (replaced the crystal with a 433.42 crystal)
RF
Transmitter connected to D6
Receiver connected to D5 (to later read existing remotes)

Have also tried:

die-welt.net – 6 Jun 21

Controlling Somfy roller shutters using an ESP32 and ESPHome

Our house has solar powered, remote controllable roller shutters on the roof windows, built by the German company named HEIM & HAUS. However, when you look closely at the remote control or the shutter

Issues with SPIFF and Ticker

and:

GitHub

GitHub - evgeni/esphome-configs

Contribute to evgeni/esphome-configs development by creating an account on GitHub.

Issues with SPIFF and Ticker

Tried to integrate one on one using: GitHub - dmslabsbr/esphome-somfy: Esphome configuration for Somfy Blind
Followed all the steps copied the needed files in the ESPhome directory.

Explanations of all three are straight forward and look very easy.
All three are from 2020 - 2021, maybe outdated due to software updates?

With Dmslabsbr GitHub - dmslabsbr/esphome-somfy: Esphome configuration for Somfy Blind i get the following:
First error i get in ESPhome befor installing/compiling:

arduino_version: [email protected] gives:
component not found arduimo version.

Compiling the code in ESPhome giving:
Error on Ticker:

  • src/RFsomfy.h:4:10: fatal error: Ticker.h: No such file or directory

Warning regarding SPIFF:

  • src/SomfyRts.cpp:190:3: warning: ‘SPIFFS’ is deprecated: SPIFFS has been deprecated. Please consider moving to LittleFS or other filesystems. [-Wdeprecated-declarations]
    190 | SPIFFS.begin();
    (See full log below…)

My Yaml:

esphome:
  name: somfy

  includes:
    - RFsomfy.h
    - SomfyRts.h
    - SomfyRts.cpp

esp8266:
  board: d1_mini
  
#arduino_version: [email protected] 
#Gives an error in ESPhome: component not found arduimo version.

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:
  password: "xxxxxxxx"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Somfy Fallback Hotspot"
    password: "xxxxxxx"

captive_portal:

cover:
- platform: custom
  lambda: |-
    std::vector<Cover *> covers;
    auto rfSomfy0 = new RFsomfy(0);
    rfSomfy0->set_code(50);
    App.register_component(rfSomfy0);
    auto rfSomfy1 = new RFsomfy(1);
    rfSomfy1->set_code(100);  // Set initial rolling code. After it works, remove this line.
    App.register_component(rfSomfy1);
    auto rfSomfy2 = new RFsomfy(2);
    App.register_component(rfSomfy2);
    covers.push_back(rfSomfy0);
    covers.push_back(rfSomfy1);
    covers.push_back(rfSomfy2);
    return {covers};

  covers:
    - name: "Blind 2"
      device_class: shade
      id: somfy0
    - name: "Veneziana casal"
      device_class: shutter
      id: somfy1
    - name: "Veneziana roxo"
      device_class: shutter
      id: somfy2

text_sensor:
  - platform: version
    name: "RFsomfy version"
  - platform: custom
    lambda: |-
      auto rfSomfyInfo = new RFsomfyInfo();
      App.register_component(rfSomfyInfo);
      return {rfSomfyInfo};
    text_sensors:
      name: "RFsomfy info"
    
binary_sensor:
  - platform: status
    name: "RFsomfy status"

The esphome logger returns:

INFO Reading configuration /config/esphome/somfy.yaml…

INFO Generating C++ source…
INFO Core config or version changed, cleaning build files…
INFO Deleting /data/somfy/.pioenvs
INFO Deleting /data/somfy/.piolibdeps
INFO Compiling app…
Processing somfy (board: d1_mini; framework: arduino; platform: platformio/espressif8266 @ 3.2.0)

HARDWARE: ESP8266 80MHz, 80KB RAM, 4MB Flash
LDF: Library Dependency Finder → Library Dependency Finder (LDF) — PlatformIO latest documentation
Dependency Graph
|-- 1.2.3
|-- 2.1.0
| |-- 1.2.3
| |-- 1.0
| |-- 1.0
|-- 1.1.1
|-- 1.0
|-- 1.2
Compiling /data/somfy/.pioenvs/somfy/src/SomfyRts.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/api/api_connection.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/api/api_frame_helper.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/api/api_pb2.cpp.o
src/SomfyRts.cpp: In member function ‘uint16_t SomfyRts::_readRemoteRollingCode()’:
src/SomfyRts.cpp:190:3: warning: ‘SPIFFS’ is deprecated: SPIFFS has been deprecated. Please consider moving to LittleFS or other filesystems. [-Wdeprecated-declarations]
190 | SPIFFS.begin();
| ^~~~~~
In file included from src/SomfyRts.cpp:2:
/data/cache/platformio/packages/framework-arduinoespressif8266/cores/esp8266/FS.h:275:15: note: declared here
275 | extern fs::FS SPIFFS attribute((deprecated(“SPIFFS has been deprecated. Please consider moving to LittleFS or other filesystems.”)));
| ^~~~~~
src/SomfyRts.cpp:191:7: warning: ‘SPIFFS’ is deprecated: SPIFFS has been deprecated. Please consider moving to LittleFS or other filesystems. [-Wdeprecated-declarations]
191 | if (SPIFFS.exists(_getConfigFilename())) {
| ^~~~~~
In file included from src/SomfyRts.cpp:2:
/data/cache/platformio/packages/framework-arduinoespressif8266/cores/esp8266/FS.h:275:15: note: declared here
275 | extern fs::FS SPIFFS attribute((deprecated(“SPIFFS has been deprecated. Please consider moving to LittleFS or other filesystems.”)));
| ^~~~~~
src/SomfyRts.cpp:193:14: warning: ‘SPIFFS’ is deprecated: SPIFFS has been deprecated. Please consider moving to LittleFS or other filesystems. [-Wdeprecated-declarations]
193 | File f = SPIFFS.open(_getConfigFilename(), “r”);
| ^~~~~~
In file included from src/SomfyRts.cpp:2:
/data/cache/platformio/packages/framework-arduinoespressif8266/cores/esp8266/FS.h:275:15: note: declared here
275 | extern fs::FS SPIFFS attribute((deprecated(“SPIFFS has been deprecated. Please consider moving to LittleFS or other filesystems.”)));
| ^~~~~~
src/SomfyRts.cpp:205:3: warning: ‘SPIFFS’ is deprecated: SPIFFS has been deprecated. Please consider moving to LittleFS or other filesystems. [-Wdeprecated-declarations]
205 | SPIFFS.end();
| ^~~~~~
In file included from src/SomfyRts.cpp:2:
/data/cache/platformio/packages/framework-arduinoespressif8266/cores/esp8266/FS.h:275:15: note: declared here
275 | extern fs::FS SPIFFS attribute((deprecated(“SPIFFS has been deprecated. Please consider moving to LittleFS or other filesystems.”)));
| ^~~~~~
src/SomfyRts.cpp: In member function ‘void SomfyRts::_writeRemoteRollingCode(uint16_t)’:
src/SomfyRts.cpp:211:3: warning: ‘SPIFFS’ is deprecated: SPIFFS has been deprecated. Please consider moving to LittleFS or other filesystems. [-Wdeprecated-declarations]
211 | SPIFFS.begin();
| ^~~~~~
In file included from src/SomfyRts.cpp:2:
/data/cache/platformio/packages/framework-arduinoespressif8266/cores/esp8266/FS.h:275:15: note: declared here
275 | extern fs::FS SPIFFS attribute((deprecated(“SPIFFS has been deprecated. Please consider moving to LittleFS or other filesystems.”)));
| ^~~~~~
src/SomfyRts.cpp:213:12: warning: ‘SPIFFS’ is deprecated: SPIFFS has been deprecated. Please consider moving to LittleFS or other filesystems. [-Wdeprecated-declarations]
213 | File f = SPIFFS.open(_getConfigFilename(), “w”);
| ^~~~~~
In file included from src/SomfyRts.cpp:2:
/data/cache/platformio/packages/framework-arduinoespressif8266/cores/esp8266/FS.h:275:15: note: declared here
275 | extern fs::FS SPIFFS attribute((deprecated(“SPIFFS has been deprecated. Please consider moving to LittleFS or other filesystems.”)));
| ^~~~~~
src/SomfyRts.cpp:223:3: warning: ‘SPIFFS’ is deprecated: SPIFFS has been deprecated. Please consider moving to LittleFS or other filesystems. [-Wdeprecated-declarations]
223 | SPIFFS.end();
| ^~~~~~
In file included from src/SomfyRts.cpp:2:
/data/cache/platformio/packages/framework-arduinoespressif8266/cores/esp8266/FS.h:275:15: note: declared here
275 | extern fs::FS SPIFFS attribute((deprecated(“SPIFFS has been deprecated. Please consider moving to LittleFS or other filesystems.”)));
| ^~~~~~
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/api/api_pb2_service.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/api/api_server.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/api/list_entities.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/api/proto.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/api/subscribe_state.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/api/user_services.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/binary_sensor/automation.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/binary_sensor/binary_sensor.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/binary_sensor/filter.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/captive_portal/captive_portal.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/cover/cover.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/custom/text_sensor/custom_text_sensor.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/esp8266/core.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/esp8266/gpio.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/esp8266/preferences.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/logger/logger.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/md5/md5.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/mdns/mdns_component.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/mdns/mdns_esp32_arduino.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/mdns/mdns_esp8266.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/mdns/mdns_esp_idf.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/network/util.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/ota/ota_backend_arduino_esp32.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/ota/ota_backend_arduino_esp8266.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/ota/ota_backend_esp_idf.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/ota/ota_component.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/socket/bsd_sockets_impl.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/socket/lwip_raw_tcp_impl.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/socket/socket.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/status/status_binary_sensor.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/text_sensor/filter.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/text_sensor/text_sensor.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/version/version_text_sensor.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/web_server_base/web_server_base.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/wifi/wifi_component.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/wifi/wifi_component_esp32_arduino.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/wifi/wifi_component_esp8266.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/components/wifi/wifi_component_esp_idf.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/core/application.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/core/color.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/core/component.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/core/component_iterator.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/core/controller.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/core/entity_base.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/core/helpers.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/core/log.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/core/scheduler.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/esphome/core/util.cpp.o
Compiling /data/somfy/.pioenvs/somfy/src/main.cpp.o
In file included from src/main.cpp:33:
src/RFsomfy.h:4:10: fatal error: Ticker.h: No such file or directory

  • Looking for Ticker.h dependency? Check our library registry!
  • CLI > platformio lib search “header:Ticker.h”
  • Web > PlatformIO Registry
4 | #include "Ticker.h"
  |          ^~~~~~~~~~

compilation terminated.
*** [/data/somfy/.pioenvs/somfy/src/main.cpp.o] Error 1
========================= [FAILED] Took 111.40 seconds =========================

Anybody facing the same issues, or have a “working” solution for Somfy RTS?

Thank you

Did you get this working? Facing the same problem at the moment…

Hi thommio,

Did not get this working. Have tried all the examples and codes that i have found, keep strugling with the missing libraries and not being able to include the libraries.

Looked like a simple integration using ESPhome.

Maybe somebody has found a solution to get this working.

I got it working, let me know if you still need help.

Hi Prbtt,

Fantastic that you got it working, i have been struggling for a long time and gave up…

Would be very keen finding out how you got it working so i can also get it working

Thank you in advanced for your help!

Hi there is a working solution but quite more expensive compared to ESP*

GCE RFPLAYER

GCE sells the RFPLAYER ( I own one and it is linked with 7 SOMFY RTS roller shutters ).
the RFPLAYER can handle 433 & 868 Mhz so it can work with many other protocols

the integration is still in development phase but so far RTS works. ( available via HACS )

Github project

Hope this helps.

I also just got it working with the cheap transmitters!

EDIT:
Made my own short guide and repostry on Github;

[original post]
Follow this guide:
https://www.die-welt.net/2021/06/controlling-somfy-roller-shutters-using-an-esp32-and-esphome/

It’s important that you use an ESP32 instead of esp8266/Wemos D1 mini.
You can use the cheap chinese transmitters instead of de CC1101

I followed this guide:

You’ll need an esp32+C1101 chip.

There’s plenty available on AliExpress afaik

I also developed a board that is home assistant ready to go. I’ll make a thread on that and share here. It was a lil bit more expensive since I only printed 5 of them… Hopefully I can actually turn it into a product that is useful for people! It has 16 progamable channels for blinds.

Here it is:

Hi Thommio, thank you for sharing your code.

I am still struggling and getting compilling errors.
Used your Github instructions and Yaml code one on one on a ESP-Wroom-32

esphome:

  name: somfy-nodemcu

  platform: ESP32

  board: nodemcu-32s

  libraries:

    - EEPROM

    - SPI

    - [email protected]

    - [email protected]

  includes:

    - somfy_secrets.h

    - somfy_cover.h

 

wifi:

  ssid: !secret wifi_ssid

  password: !secret wifi_password  

  # Enable fallback hotspot (captive portal) in case wifi connection fails

  ap:

    ssid: "Somfy-Nodemcu Fallback Hotspot"

    password: "xxxxxxxx"

captive_portal:

# Enable logging

logger:

# Enable Home Assistant API

api:

ota:

  password: "xxxxxxxxxxxxxxxxxxxxxxxx"

web_server:

  port: 80

sensor:

  - platform: uptime

    name: Uptime Sensor

  - platform: wifi_signal

    name: "WiFi Signal Sensor"

cover:

  - platform: custom

    lambda: |-

      auto somfy_remote = new SomfyESPRemote();

      somfy_remote->add_cover("somfy", "woonkamer", SOMFY_REMOTE_WOONKAMER);

      somfy_remote->add_cover("somfy", "slaapkamer", SOMFY_REMOTE_SLAAPKAMER);

      App.register_component(somfy_remote);

      return somfy_remote->covers;

    covers:

      - id: "somfy"

        name: "Somfy Cover"

      - id: "somfy2"

        name: "Somfy Cover2"

switch:

  - platform: template

    name: "PROG"

    turn_on_action:

      - lambda: |-

          ((SomfyESPCover*)id(somfy))->program();

  - platform: template

    name: "STOP"

    turn_on_action:

      - lambda: |-

          ((SomfyESPCover*)id(somfy))->stop();

  - platform: template

    name: "PROG2"

    turn_on_action:

      - lambda: |-

          ((SomfyESPCover*)id(somfy2))->program();

  - platform: template

    name: "STOP2"

    turn_on_action:

      - lambda: |-

          ((SomfyESPCover*)id(somfy2))->stop();

When compiling i get a similair error as i had with previous trials:

INFO Reading configuration /config/esphome/somfy-nodemcu.yaml…
INFO Generating C++ source…
INFO Compiling app…
Processing somfy-nodemcu (board: nodemcu-32s; framework: arduino; platform: platformio/espressif32 @ 5.2.0)

HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash

  • toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch3
    LDF: Library Dependency Finder → Library Dependency Finder (LDF) — PlatformIO latest documentation
    Dependency Graph
    |-- AsyncTCP-esphome @ 1.2.2
    |-- EEPROM @ 2.0.0
    |-- SPI @ 2.0.0
    |-- SmartRC-CC1101-Driver-Lib @ 2.5.6
    |-- Somfy_Remote_Lib @ 0.4.1
    |-- WiFi @ 2.0.0
    |-- FS @ 2.0.0
    |-- Update @ 2.0.0
    |-- ESPAsyncWebServer-esphome @ 2.1.0
    | |-- AsyncTCP-esphome @ 1.2.2
    |-- DNSServer @ 2.0.0
    |-- ESPmDNS @ 2.0.0
    |-- ArduinoJson @ 6.18.5
    Compiling /data/somfy-nodemcu/.pioenvs/somfy-nodemcu/src/SomfyRts.cpp.o
    src/SomfyRts.cpp: In member function ‘uint16_t SomfyRts::_readRemoteRollingCode()’:
    src/SomfyRts.cpp:191:3: error: ‘SPIFFS’ was not declared in this scope
    SPIFFS.begin();
    ^~~~~~
    src/SomfyRts.cpp:191:3: note: suggested alternative: ‘SPIFFS_gc’
    SPIFFS.begin();
    ^~~~~~
    SPIFFS_gc
    src/SomfyRts.cpp: In member function ‘void SomfyRts::_writeRemoteRollingCode(uint16_t)’:
    src/SomfyRts.cpp:212:3: error: ‘SPIFFS’ was not declared in this scope
    SPIFFS.begin();
    ^~~~~~
    src/SomfyRts.cpp:212:3: note: suggested alternative: ‘SPIFFS_gc’
    SPIFFS.begin();
    ^~~~~~
    SPIFFS_gc
    *** [/data/somfy-nodemcu/.pioenvs/somfy-nodemcu/src/SomfyRts.cpp.o] Error 1
    ========================= [FAILED] Took 12.88 seconds =========================

Thank you in advanced for your help

Hi prbtt,

I followed that guide, see start of this post, getting compiling errors.
Also with using an ESP-Wroom-32

compiler complains about SPIFFS.

Any ideas?

You can use the on in my repo

Also, this one is a much better implementation with extra functionality

I came across this thread a couple of weeks ago and got snagged with the same compilation problems. I was able to tweak the code until it compiled and even worked, but it was not able to save it’s state to the ESP32 flash. I don’t think SPIFFS is a supported way to persist data in ESPHome.

There’s good documentation about the operation of RTS remotes, so I wrote my own ESPHome integration.

I see that there are now several good options in this thread, but anyone who wants to specifically use ESPHome and has a simple OOK transmitter like the one in the original post (instead of a CC1101) may find this implementation to be useful.

Thanks to everyone who chimed in here. I found a ton of useful information in these posts!

1 Like

Hi jrseys,

Thank you for your post!
Have you got this working in Home Assistant? and can you share how your Yaml file looks?
(i have downloaded your files from Github, do not see a Yaml file calling the libraries.)

I am using the Esphome integration in Home Assistant, struggling for a while now trying to get this to work. Several solutions have been shared here but i did not get any to work mostly because of Spiffs compiling errors. Can not figur out how the other users have got it working.

Thank you in advanced for your help!

Yes, ESPHome integrates perfectly with Home Assistant once you have it set up.

You shouldn’t need to download anything from the GitHub repository. Create a base ESPHome Yaml file and then add the external_components, remote_transmitter, rts, cover, sensor, and button config blocks from the README.md in my GitHub.

It’s still tricky to set up. I know I’m long winded, but I’d really recommend reading the entire README.md before trying to use this software with your window covers. Also, I’ve only tested this on my setup, so I can’t guarantee that it will work.

1 Like

I tried “jrseys” version and can confirm that it works great, better than the one i posted before.

Here’s my working .yaml

esphome:
  name: rts-control-2-5-2023
  friendly_name: rts control 2-5-2023

esp32:
  board: esp32dev
  framework:
    type: arduino

external_components:
  - source: github://jseyster/esphome-rts-control@master
    components: [ rts ]

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "C2C8c5Bbl4UgTAwj/l0egtI7/Fo1vSi18vk="

ota:
  password: "e17331ca85ad238d35431018e231c651"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Rts-Control-2-5-2023"
    password: "6r7NAvB5V5u2"

captive_portal:

# The transmitter must be configured for 100% duty cycle.
remote_transmitter:
  id: rts_transmitter
  pin: GPIO4  # Use the number for the output pin connected to your radio.
  carrier_duty_percent: 100

rts:
  transmitter_id: rts_transmitter

  # Optional: you can configure how many times you want commands to
  # repeat to compensate for poor signal or interference. RTS devices
  # are designed to ignore any repeated commands that follow a
  # successful transmission.
  command_repetitions: 2  # The default.

cover:
  - platform: rts
    id: shade_lv
    name: Living room shade
    device_class: shade

  - platform: rts
    id: shade_brr
    name: Bedroom shade right
    device_class: shade
 
  - platform: rts
    id: shade_brl
    name: Bedroom shade left (desk)
    device_class: shade

# Expose internal controller state for backup in case of data loss on
# the ESP microcontroller.
sensor:
  - platform: rts
    rts_cover_id: shade_lv
    channel_id:
      name: Channel id of living room curtain controller
    rolling_code:
      name: Next rolling code value for living room curtain
  - platform: rts
    rts_cover_id: shade_brr
    channel_id:
      name: Channel id of living room shade controller
    rolling_code:
      name: Next rolling code value for living room shade
  - platform: rts
    rts_cover_id: shade_brl
    channel_id:
      name: Channel id of living room shade controller
    rolling_code:
      name: Next rolling code value for living room shade

# Pairing buttons that can be removed after all "cover" devices are
# paired as desired.
button:
  - platform: template
    name: Program living room shade
    on_press:
      - rts.program: shade_lv
  - platform: template
    name: Program bedroom shade right
    on_press:
      - rts.program: shade_brr
  - platform: template
    name: Program bedroom shade left
    on_press:
      - rts.program: shade_brl
1 Like