Giter Club home page Giter Club logo

somfy_remote_lib's Introduction

Somfy Remote Lib Test

Based on Somfy Remote by Nickduino.

This project is an Arduino Library able to emulate a Somfy RTS (Radio Technology Somfy) remote control on Arduino, ESP8266 and ESP32 devices. It provides out of the box support for multiple remotes and different storage solutions for the rolling codes. Because it is a Arduino Library it can easily included in existing projects or used standalone using one of its included example sketches.

If you want to learn more about the Somfy RTS protocol, check out Pushtack.

Getting Started

This library was tested with ESP32 and the CC1101 transceiver module. It should also work on any Arduino and ESP8266 Board with any 433.42 Mhz RF transmitter. I have not the time and resources to test them all, so please let me know (open an Issue) when you have any problem or have tested other hardware with this library.

Hardware Requirements

For this library to work you need an 433.42 Mhz RF transmitter. The regular 433.92 MHz RF transmitter do not work, so watch out when buying a transmitter that you get a 433.42 Mhz RF transmitter. An example for such an compatible transmitter is the CC1101 module, see the CC1101 example. For the CC1101 module the SmartRC-CC1101-Driver-Lib must be installed.

Installation

This library can be install using the Library-Manager. Open the Library-Manager in Arduino IDE via Tools->Manage Libraries... Search for "Somfy_Remote_Lib" and install the Somfy Remote Lib library.

Usage

See the SomfyRemote example.

All the examples can be controlled via the Serial Monitor. Open the Serial Monitor and set the baud rate to 115200 and set line endings to Newline (\n). You can type in the name of the command or the hexadecimal representation of it.

Rolling Code Storage

This library has a plugable interface for storing the rolling codes, described in RollingCodeStorage.h.

Currently, there are two implementations of the storage available:

  1. EEPROM - should work on any device with EEPROM
  2. NVS - should work on ESP32 with Non Volatile Storage

Most examples use the EEPROM implementation. See the ESP32-NVS example for NVS.

Eventually you can pass NULL into the constructor of the SomfyRemote class in place of rollingCodeStorage and use external rolling code keeping logic. If you are not using any storage, then you have to use sendCommandWithCode method instead of sendCommand.

Available commands

Name Description HEX code
My The My button pressed 1
Up The Up button pressed 2
MyUp The My and Up button pressed at the same time 3
Down The Down button pressed 4
MyDown The My and Down button pressed at the same time 5
UpDown The Up and Down button pressed at the same time 6
Prog The Prog button pressed 8
SunFlag Enable sun and wind detector 9
Flag Disable sun detector A

The sendCommand function can be customized with a second parameter. The parameter controlls how often the command is repeated, default is 4 times.

For remote control Telis 4 Modulis RTS5 the following applies: When the UP command is sent once, the blinds go up (Open).

sendCommand(Command::Up, 1);

When the DOWN command is sent once, the blinds go down (Close).

sendCommand(Command::Down, 1);

If you want to tilt the blinds, send the Up / Down command four times.

sendCommand(Command::Up, 4);

or

sendCommand(Command::Down, 4);

Register the Somfy Remote

Before the emulated Somfy remote can control RTS devices, the remote must be registered. Therefore you can refer to the original manual of your RTS device, the only difference is that instead of pressing buttons, the commands from above must be used. So for example if the PROG button should be pressed, instead send the Prog command.

Troubleshooting

Up/down commands not responsive after successful PROG

If your blinds jump to respond to the PROG command when registering the remote, but following commands like up and down do not respond, it is likely that your rolling code storage is not persisting. The result of this is that the remote will send a constant rolling code, which the blinds will ignore.

In the case of NVS storage, a possible cause for this is that the key used is too long. The key must comform with the limitations of your microcontroller.

somfy_remote_lib's People

Contributors

adamscybot avatar basvanh avatar dependabot[bot] avatar evgeni avatar legion2 avatar mirdinus avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

somfy_remote_lib's Issues

Remote code With 7 Position (Tube RTS)

Hi,

There is a problem to create/pair/use the library with remotes that use a 7 position ID besides 6 position.

The TUBE uses a RTS protocol but the remote identifier start with a 2 and follow 6 position as ID od the remote control.

Could you add an fix to be able.to use the remote address as 0x2123456 position on hex identifiers?
The 24 bit position of the remote ID is ignored as it has 26bit and it's always computed in 6 positions 0xFFFFFF besides the 8 hex position as max HEX 0x2FFFFFF. It seens that TUBE use the same RTS protocol but using 26 bits ID for the remote control besides the 24bits original RTS.

Can you add the option to run it in accurate with 26 bits to accurate calculate from the total range of the Somfy RTS protocol?

Thanks

Multiple Remotes not working

Hi,

I'm currently trying to realize a CC1101 Multiple Remote Setup via MQTT. Everything is working fine so far, the script does what is should do, BUT it fails at the most important point: sending out the command via the CC1101. The main problem is located in

void sendCC1101Command(Command command)

The only working remote is somfyRemote1. When I send the value 100 via MQTT to the topic home/buero/rolladen the correct shutter is moving upwards. When I send 100 to the other topics defined in the top of the script, everything is working, despite the sending, all Serial.println are displayed correctly and I can confirm that that part is working. I used parts of your example "Multiple Remotes" and modified it for my use case, but its not working.

I tested all shutters seperately with the CC1101 example script with the same Remote codes as defined in my multiple Remote script (I changed them to XXXX for github, thats not the error :P) and its working perfectly fine.

All remotes are configured the same, but only one is working. Do you have any idea why?

Here is the script (unfortunately, the github script function does not work) :

#include <PubSubClient.h>
#include <WiFi.h>
#include <EEPROM.h>
#include <EEPROMRollingCodeStorage.h>
#include <ELECHOUSE_CC1101_SRC_DRV.h>
#include <SomfyRemote.h>
#include <ArduinoOTA.h>
#define DEBUG
#define EMITTER_GPIO 2
#define REMOTE1 0xXXXXX
#define REMOTE2 0xXXXXX
#define REMOTE3 0xXXXXX
#define REMOTE4 0xXXXXX
int use_remote;

#define wifi_ssid "XXXX"
#define wifi_password "XXXX"
#define mqtt_server "XXXXXXXXX"
#define mqtt_user "XXXXXXXXXXX"
#define mqtt_password "XXXXXXXXXXXX"
#define ESPHostname "ESP32_MQTT_Rolladen"
String clientId = "ESP32-Rolladen-";

#define CC1101_FREQUENCY `433.42`

//Topics zuordnen
#define inTopic1 "home/buero/rolladen"
#define inTopic2 "home/kueche/rolladen"
#define inTopic3 "home/wohnzimmer/rolladen/links"
#define inTopic4 "home/wohnzimmer/rolladen/rechts"

WiFiClient espClient;
PubSubClient client(espClient);

EEPROMRollingCodeStorage rollingCodeStorage1(0);
EEPROMRollingCodeStorage rollingCodeStorage2(2);
EEPROMRollingCodeStorage rollingCodeStorage3(4);
EEPROMRollingCodeStorage rollingCodeStorage4(6);
//Erstellung Remotes
SomfyRemote somfyRemote1(EMITTER_GPIO, REMOTE1, &rollingCodeStorage1);
SomfyRemote somfyRemote2(EMITTER_GPIO, REMOTE2, &rollingCodeStorage2);
SomfyRemote somfyRemote3(EMITTER_GPIO, REMOTE3, &rollingCodeStorage3);
SomfyRemote somfyRemote4(EMITTER_GPIO, REMOTE4, &rollingCodeStorage4);

void setup() {


  Serial.begin(115200);
  Serial.println("Hello World");
  setup_wifi();
  ArduinoOTA.setHostname(ESPHostname);
  ArduinoOTA.begin();

  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);

  somfyRemote1.setup();
  somfyRemote2.setup();
  somfyRemote3.setup();
  somfyRemote4.setup();

  ELECHOUSE_cc1101.Init();
  ELECHOUSE_cc1101.setMHZ(CC1101_FREQUENCY);

#if defined(ESP32)
  if (!EEPROM.begin(4)) {
    Serial.println("failed to initialise EEPROM");
    delay(1000);
  }
#elif defined(ESP8266)
  EEPROM.begin(4);
#endif
}

void sendCC1101Command(Command command) {  
  ELECHOUSE_cc1101.SetTx();
  //Auswahl der richtigen Remote und senden
  if (use_remote == 1) {   
    somfyRemote1.sendCommand(command);    
    Serial.println("Remote 1 gesendet");
  }
  else if (use_remote == 2) {
    somfyRemote2.sendCommand(command);
    Serial.println("Remote 2 gesendet");
  }
  else if (use_remote == 3) {
    somfyRemote3.sendCommand(command);
    Serial.println("Remote 3 gesendet");
  }
  else if (use_remote == 4) {
    somfyRemote4.sendCommand(command);
    Serial.println("Remote 4 gesendet");
  }
  ELECHOUSE_cc1101.setSidle();
}

void loop() {
  if (!client.connected()) {
    reconnect();
  }

  client.loop();
  ArduinoOTA.handle();

  if (Serial.available() > 0) {
    const String string = Serial.readStringUntil('\n');
    const Command command = getSomfyCommand(string);
    sendCC1101Command(command);
#ifdef DEBUG
    Serial.println("finished sending");
#endif
  }
}

//WIFI einrichten
void setup_wifi() {
  delay(10);
  // We start by connecting to a WiFi network
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(wifi_ssid);
  WiFi.begin(wifi_ssid, wifi_password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void callback(char* topic, byte* message, unsigned int length) {
  Serial.print("Message arrived on topic: ");
  Serial.print(topic);
  Serial.print(". Message: ");
  String messageTemp;
  String rolladenAction;

  for (int i = 0; i < length; i++) {
    Serial.print((char)message[i]);
    messageTemp += (char)message[i];
  }
  Serial.println();
  int messageTempInt = messageTemp.toInt();

  if (String(topic) == inTopic1) {
    use_remote = 1;
    if (messageTemp == "true") {
      Serial.println(messageTemp);
      Serial.print("Rolladen stop\n");
      rolladenAction = "My";
      

      //client.publish(outTopic, "ON");
      delay(200);
    }
    else if (messageTemp == "false") {
      Serial.print("Zurücksetzung des Schalters\n");
    }
    else if (messageTemp == "prog") {
      Serial.println(messageTemp);
      Serial.print("Remote programmiert\n");
      rolladenAction = "Prog";
    }
    else {

      if (messageTempInt > 50) {
        Serial.println(messageTempInt);
        Serial.print("Rolladen hoch\n");
        rolladenAction = "Up";     

        //client.publish(outTopic, "ON");
        delay(200);
      }
      else if (messageTempInt < 50) {
        Serial.println(messageTempInt);
        Serial.print("Rolladen runter\n");
        rolladenAction = "Down";       

        //client.publish(outTopic, "OFF");
        delay(200);
      }
    }
  }
  else if (String(topic) == inTopic2) {
    use_remote = 2;
    if (messageTemp == "true") {
      Serial.println(messageTemp);
      Serial.print("Rolladen stop\n");
      rolladenAction = "My";
      

      //client.publish(outTopic, "ON");
      delay(200);
    }
    else if (messageTemp == "false") {
      Serial.print("Zurücksetzung des Schalters\n");
    }
    else if (messageTemp == "prog") {
      Serial.println(messageTemp);
      Serial.print("Remote programmiert\n");
      rolladenAction = "Prog";
    }
    else {

      if (messageTempInt > 50) {
        Serial.println(messageTempInt);
        Serial.print("Rolladen hoch\n");
        rolladenAction = "Up";     

        //client.publish(outTopic, "ON");
        delay(200);
      }
      else if (messageTempInt < 50) {
        Serial.println(messageTempInt);
        Serial.print("Rolladen runter\n");
        rolladenAction = "Down";       

        //client.publish(outTopic, "OFF");
        delay(200);
      }
    }
  }
  else if (String(topic) == inTopic3) {
    use_remote = 3;
    if (messageTemp == "true") {
      Serial.println(messageTemp);
      Serial.print("Rolladen stop\n");
      rolladenAction = "My";
      

      //client.publish(outTopic, "ON");
      delay(200);
    }
    else if (messageTemp == "false") {
      Serial.print("Zurücksetzung des Schalters\n");
    }
    else if (messageTemp == "prog") {
      Serial.println(messageTemp);
      Serial.print("Remote programmiert\n");
      rolladenAction = "Prog";
    }
    else {

      if (messageTempInt > 50) {
        Serial.println(messageTempInt);
        Serial.print("Rolladen hoch\n");
        rolladenAction = "Up";     

        //client.publish(outTopic, "ON");
        delay(200);
      }
      else if (messageTempInt < 50) {
        Serial.println(messageTempInt);
        Serial.print("Rolladen runter\n");
        rolladenAction = "Down";       

        //client.publish(outTopic, "OFF");
        delay(200);
      }
    }
  }
  else if (String(topic) == inTopic4) {
    use_remote = 4;
    if (messageTemp == "true") {
      Serial.println(messageTemp);
      Serial.print("Rolladen stop\n");
      rolladenAction = "My";
      

      //client.publish(outTopic, "ON");
      delay(200);
    }
    else if (messageTemp == "false") {
      Serial.print("Zurücksetzung des Schalters\n");
    }
    else if (messageTemp == "prog") {
      Serial.println(messageTemp);
      Serial.print("Remote programmiert\n");
      rolladenAction = "Prog";
    }
    else {

      if (messageTempInt > 50) {
        Serial.println(messageTempInt);
        Serial.print("Rolladen hoch\n");
        rolladenAction = "Up";     

        //client.publish(outTopic, "ON");
        delay(200);
      }
      else if (messageTempInt < 50) {
        Serial.println(messageTempInt);
        Serial.print("Rolladen runter\n");
        rolladenAction = "Down";       

        //client.publish(outTopic, "OFF");
        delay(200);
      }
    }
  }  
 
  const Command command = getSomfyCommand(rolladenAction);
  sendCC1101Command(command);
  Serial.print("Gesendet\n");
}

void reconnect() {
  // Loop until we're reconnected
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Create a random client ID
    clientId += String(random(0xffff), HEX);
    // Attempt to connect
    if (client.connect(clientId.c_str(), mqtt_user, mqtt_password)) {
      Serial.println("connected");
      // Once connected, publish an announcement...
      //client.publish(/*outTopic, */ESPHostname);
      // ... and resubscribe
      client.subscribe(inTopic1);
      client.subscribe(inTopic2);
      client.subscribe(inTopic3);
      client.subscribe(inTopic4);
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}

Thanks! :)

Pinout schematic

Hi all
Can Someone please help me with the wiring schematic
Arduino uno with cc101
Thanks

Not able to PROG a new remote - ESP8266 and E07-M1101d

Dear all,
it seems like the TI CC1101 are very hard to get currently.
I ordered one at Amaz*n but got a E07-M1101D.
I googled it and it seems its the Version 2 or the CC1101 (?).
However the pinning looks different, its not 2 row by 5 pins, its now 2 rows by 4 pins:
image

I checked the specification and found this:
image
image
So the pins are the same like on the TI CC1101, except the additional VCC and GND.
So i wired it like described in the SmartRC-CC1101-Driver-Lib
image
But not to a WEMOS D1 mini but to an ESP8266 NodeMCU, hoping that i can just use the same D# Pins:
image
image

Now i ran the CC1101 example from the Somfy_Remote_Lib and set #define CC1101_FREQUENCY 433.42.
Set my Somfy RTS control to Prog (blinds go up down) and typed Prog in the Serial Monitor (set to new line and 115200 Baud) but nothing happens (also no answer in the serial monitor). After ~2 minutes the blinds go again up and down (i think this means the prog-duration expired).
Than i tried the cc1101_Receive_minimal example of the SmartRC-CC1101-Driver-Lib and at least i am getting a
10:27:30.655 -> Connection OK
10:27:30.655 -> Rx Mode
there. But also no response if i press a button on my Somfy remote.

Now i dont know if the E07-M1101D is not supported, or my wiring is wrong, or i typed something wrong in the serial monitor :(
Can someone try to help?
Thank you alot!

Can't get any examples to work with Arduino Uno and E07-M1101d

I'm currently facing some issues with my Arduino Uno and E07-M1101d. I have followed the wiring instructions precisely, but unfortunately, nothing seems to happen when I send any commands. I've tried with two Unos and 2 E07-M1101d. I have yet to get new cables.

I would greatly appreciate it if someone could provide me with guidance on how to troubleshoot this problem.

image

CC1101 module recommendation?

Pardon the basic question, but can anyone link me to a CC1101 that I can order and will work for this project? I haven’t found one that specifically mentions 433.42 Mhz, which is called out in the readme. Thanks!

Hc11 cc1101

Hi Leroy and thanks for the great post!

I'm trying to built the same setup and I'm currently using the Hc11 cc1101 board. I'm connecting it as such;

HC11 -- ESP32
GND -- GND
VCC -- 3V
TX -- RX
RX -- TX

I've uploaded the code to the ESP32 but can't make it to work even after following the programming steps for a new Somfy remote.

Can you help?

CC1101 - Prog worked, but i cannot use up or down

Hi There.
I'm using a CC1101 on a Node-MCU Device.

I used the following Code to Use MQTT to move my awning.

The Programming seemed to work (Awning moved after sening PROG)

But now, when i send Up or Down nothing happens.

I checked, that there is traffic on 433.42 with SDR-Sharp.

Any ideas?

`
#include <ESP8266WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
#include <EEPROM.h>
#include <EEPROMRollingCodeStorage.h>
#include <ELECHOUSE_CC1101_SRC_DRV.h>
#include <SomfyRemote.h>

#define DEBUG
#define AIO_SERVER "192.168.178.177" //IP of your mqtt server
#define AIO_SERVERPORT 1883 //port of mqtt server - use 8883 for SSL
#define AIO_USERNAME "mqtt_username"
#define AIO_KEY "mqtt_password"
#define RF_SENDER D1 //this is where you connected the RF sender data pin

#define EMITTER_GPIO 5
#define EEPROM_ADDRESS 0
//#define REMOTE 0x5184c8
#define REMOTE 0x65dc00

#define CC1101_FREQUENCY 433.42

const bool TEST = 0;
const int MAXTRIES = 5; // how many times should we try to reconnent to host
const char* ssid = "MyWifi";
const char* password = "MyPassword;

// Create an ESP8266 WiFiClient class to connect to the MQTT server.
WiFiClient client;
// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Adafruit_MQTT_Subscribe mqttSomfy = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/garage/blinds");
Adafruit_MQTT_Subscribe *subscription;

EEPROMRollingCodeStorage rollingCodeStorage(EEPROM_ADDRESS);
SomfyRemote somfyRemote(EMITTER_GPIO, REMOTE, &rollingCodeStorage);

void setup() {

Serial.begin(115200);

somfyRemote.setup();

ELECHOUSE_cc1101.Init();
ELECHOUSE_cc1101.setMHZ(CC1101_FREQUENCY);

Serial.begin(115200);
Serial.flush();

ReconnectToWiFi("setup");

Serial.println("");
mqtt.subscribe(&mqttSomfy);

Serial.println("Setup completed");
}

void sendCC1101Command(Command command) {
ELECHOUSE_cc1101.SetTx();
somfyRemote.sendCommand(command);
ELECHOUSE_cc1101.setSidle();
}

void loop() {
MQTT_connect();
while ((subscription = mqtt.readSubscription(1000))) {
if (subscription == &mqttSomfy) {
Serial.println("Message in blinds topic: " + String((char*)mqttSomfy.lastread));
const Command command = getSomfyCommand((char*)mqttSomfy.lastread);
sendCC1101Command(command);
}
}
}

void ReconnectToWiFi(String task)
{
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.print("Connecting to ");
Serial.println(ssid);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}

Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}

// Function to connect and reconnect as necessary to the MQTT server.
// Should be called in the loop function and it will take care if connecting.
void MQTT_connect() {
// Stop if already connected.
if (mqtt.connected()) {
return;
}

int8_t ret;
uint8_t retries = 3;

Serial.print("Connecting to MQTT... ");

while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
Serial.println(mqtt.connectErrorString(ret));
Serial.println("Retrying MQTT connection in 5 seconds...");
mqtt.disconnect();
delay(5000); // wait 5 seconds
retries--;
if (retries == 0) {
// basically die and wait for WDT to reset me
while (1);
}
}
Serial.println("MQTT Connected!");
}`

How to change chanel of the multi remote example

Hi,

I couldn't find how to change channel on the multi remote example. Could you explain?

Got your single remote code working on my esp8266 using the Blynk app on IOS and Android, so thanks :)

Loss connection on restart

Hello,

I have managed to connect correctly with the motor, but when cutting the power and restarting it loses connection with the motor.
I have looked at the debug and the rollingcode works fine, but still the engine is not responding.

I have also tried to load the CC1101 example and once synchronized then load the remotySomfy example. In this way the rollingcode also works well and the motor responds, the error turns off and on again.

Thank you

How to support Open/Close button

Hello,

My remote Telis 4 Modulis RTS5 Channel Pure Hand-Held Remote 1810765 has Open and Close button.
I can send prog, Up (one step), Down (one step), My command.

But I do not know how to simulate Open (roll blind up) and Close (roll blind down).

Any ideas?

Support for rotate knob

Hello,

We have blinds which we can horizontally rotate with our remote. The remote has a rotation knob. Does this library support this?

Remote: Sitio 5 Variation RTS pure II

Thanks,
Bastiaan

Unsupported device

Hello,

I was trying to use the code with one of my curtain but didn't work and looking for the problem I found to tool rtl_433 that work with my RTL-SDR dongle. So I could saw that my HEX code was different when I put the commands using the remote control.

My commands:
"? (0)",
"? (1)",
"? (2)",
"? (3)",
"? (4)",
"Stop (5)",
"Up (6)",
"? (7)",
"Down (8)",
"? (9)",
"? (10)",
"? (11)",
"? (12)",
"? (13)",
"? (14)",
"? (15)"

Here is the explain of the problem on rtl_433 repository:

"## TEL-FIX wall-mounted remote control for RadioLoop Motor
There is a quirk with TEL-FIX wall-mounted remote control for RadioLoop Motor:
It looks like the seed isn't random but actually the button code: 0x88 DOWN, 0x85 STOP, 0x86 UP.
The command is fixed to 0xf, which we use as idication that an actual command is in the seed."

RTL_433 repo:
https://github.com/merbanan/rtl_433

Somfy_RTS device:
https://github.com/merbanan/rtl_433/blob/master/src/devices/somfy_rts.c

This is not a issue exactly, but a suggestion implementation for the future.

Thank you, it was made a great job here!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.