added ZactuatorSomfy (#816)

* added ZactuatorSomfy
* added Somfy RTS docs
This commit is contained in:
Leon Kiefer authored and GitHub committed 2020-12-13 12:46:10 -06:00
1 parent 4d03aa441b
commit a7575b2c3a
8 files changed
+230 -1

No files matched your search

+6
View File
@@ -15,3 +15,9 @@
Vcc pin of the board and the Module to a 5V supply source
Ground pins of the board and the Module to the ground of the supply source.
## Somfy RTS
For this actuator a 433.42 MHz RF transmitter is required.
The standard 433.92 MHz transmitter don't work.
The CC1101 Transceiver supports both 433.42 MHz and 433.92 MHz and can be used with the Somfy RTS actor.
The wiring of the hardware is described in the [RF gateway](rf).
+1
View File
@@ -27,6 +27,7 @@ Connect the Emitter and Receiver to a 5V (**3.3V** for CC1101) supply source, an
|ESP8266|D2/**D3**/D1/D8|**RX**/D2|D5|**3V3**|D7|D6|D8|GND
|ESP32|**27**/26|12|D18|**3V3**|D23|D19|D5|GND
To use the CC1101 module, `ZradioCC1101` must be uncomment in the `User_config.h` or added to the `build_flags`.
More information about the [CC1101 wiring](https://github.com/LSatan/SmartRC-CC1101-Driver-Lib#wiring).
+39
View File
@@ -74,3 +74,42 @@ After this calibration, if you set the `r` channel to 0.0, it will be remapped t
Also, the gamma curve for this channel will be set to 2.5.
This means that input values are raised to the power 2.5 internally.
This can be used to improve the linearity of inputs.
## Somfy RTS
This actuator allows to control Somfy RTS devices.
### Setup
Before the module can be used, virtual Somfy RTS remotes must be created.
This is done in `config_Somfy.h`.
`SOMFY_REMOTE_NUM` must be set to the number of virtual Somfy RTS remotes you want to have.
Then create for each of the virtual Somfy RTS remotes a unique 3-byte code and add them to `somfyRemotes`.
After a remote is setup, the order and codes should not be changed, else the setup process for all remotes have to be repeated.
Adding new codes at the end of the list is no problem.
Example of three virtual Somfy RTS remote codes:
```C
const uint32_t somfyRemotes[SOMFY_REMOTE_NUM] = {0x5184c8, 0xba24d0, 0xb77753};
```
Next the virtual Somfy RTS remotes must be paired with the Somfy RTS devices you want to control.
The next section describes how the PROG command/button of the virtual remote can be used.
Use the manual of the device you want to control for instructions on how to pair the virtual remote with the device.
### Commands
Commands must be send to the `commands/MQTTtoSomfy` subtopic.
Only json messages are supported.
The json message must contain two properties:
* remote: the index of the remote which is used to send the command (index start at zero)
* command: the command which should be send with the remote as string, see [table of command names](https://github.com/Legion2/Somfy_Remote_Lib#available-commands).
::: tip NOTE
The middle button on physical Somfy RTS Remote controls is called "My".
:::
Send PROG command with remote 0:
`mosquitto_pub -t home/OpenMQTTGateway_Somfy/commands/MQTTtoSomfy -m '{"remote":0,"command":"Prog"}'`
Send Up command with remote 1:
`mosquitto_pub -t home/OpenMQTTGateway_Somfy/commands/MQTTtoSomfy -m '{"remote":1,"command":"Up"}'`
+1
View File
@@ -233,6 +233,7 @@ uint8_t wifiProtocol = 0; // default mode, automatic selection
//#define ZboardM5STACK "ZboardM5STACK"
//#define ZradioCC1101 "CC1101" //ESP8266, ESP32
//#define ZactuatorPWM "PWM" //ESP8266, ESP32
//#define ZactuatorSomfy "Somfy" //ESP8266, Arduino, ESP32
//#define ZgatewayRS232 "RS232" //ESP8266, Arduino, ESP32
/*-------------DEFINE YOUR MQTT ADVANCED PARAMETERS BELOW----------------*/
+80
View File
@@ -0,0 +1,80 @@
/*
OpenMQTTGateway - ESP8266 or Arduino program for home automation
Act as a wifi or ethernet gateway between your 433mhz/infrared IR signal and a MQTT broker
Send and receiving command by MQTT
This actor enables to:
- receive MQTT data from a topic and send Somfy RTS remote control signals corresponding to the received MQTT data
Copyright (C) 2020 Leon Kiefer
This file is part of OpenMQTTGateway.
OpenMQTTGateway is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenMQTTGateway is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "User_config.h"
#ifdef ZactuatorSomfy
# include <EEPROM.h>
# include <EEPROMRollingCodeStorage.h>
# include <SomfyRemote.h>
# ifdef ZradioCC1101
# include <ELECHOUSE_CC1101_SRC_DRV.h>
# endif
void setupSomfy() {
# ifdef ZradioCC1101 //using with CC1101
ELECHOUSE_cc1101.Init();
# endif
pinMode(RF_EMITTER_GPIO, OUTPUT);
digitalWrite(RF_EMITTER_GPIO, LOW);
# if defined(ESP32)
if (!EEPROM.begin(max(4, SOMFY_REMOTE_NUM * 2))) {
Log.error(F("failed to initialise EEPROM" CR));
}
# elif defined(ESP8266)
EEPROM.begin(max(4, SOMFY_REMOTE_NUM * 2));
# endif
Log.trace(F("ZactuatorSomfy setup done " CR));
}
# ifdef jsonReceiving
void MQTTtoSomfy(char* topicOri, JsonObject& jsonData) {
if (cmpToMainTopic(topicOri, subjectMQTTtoSomfy)) {
# ifdef ZradioCC1101
ELECHOUSE_cc1101.SetTx(CC1101_FREQUENCY_SOMFY);
# endif
Log.trace(F("MQTTtoSomfy json data analysis" CR));
const int remoteIndex = jsonData["remote"];
if (remoteIndex >= SOMFY_REMOTE_NUM) {
Log.warning(F("ZactuatorSomfy remote does not exist" CR));
return;
}
const String commandData = jsonData["command"];
const Command command = getSomfyCommand(commandData);
EEPROMRollingCodeStorage rollingCodeStorage(EEPROM_ADDRESS_START + remoteIndex * 2);
SomfyRemote somfyRemote(RF_EMITTER_GPIO, somfyRemotes[remoteIndex], &rollingCodeStorage);
somfyRemote.sendCommand(command);
# ifdef ZradioCC1101
ELECHOUSE_cc1101.SetRx(CC1101_FREQUENCY); // set Receive on
# endif
}
}
# endif
#endif
+45
View File
@@ -0,0 +1,45 @@
/*
OpenMQTTGateway - ESP8266 or Arduino program for home automation
Act as a wifi or ethernet gateway between your 433mhz/infrared IR signal and a MQTT broker
Send and receiving command by MQTT
This actor enables to:
- receive MQTT data from a topic and send Somfy RTS remote control signals corresponding to the received MQTT data
Copyright (C) 2020 Leon Kiefer
This file is part of OpenMQTTGateway.
OpenMQTTGateway is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenMQTTGateway is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef config_Somfy_h
#define config_Somfy_h
#include <Arduino.h>
#include <ArduinoJson.h>
extern void setupSomfy();
extern void MQTTtoSomfy(char* topicOri, JsonObject& RFdata);
/*----------------------------USER PARAMETERS-----------------------------*/
#define EEPROM_ADDRESS_START 0
#define SOMFY_REMOTE_NUM 1
// Do not change the order of the remotes, because based on the index the rolling codes are stored
const uint32_t somfyRemotes[SOMFY_REMOTE_NUM] = {0x5184c8};
/*-------------DEFINE YOUR MQTT PARAMETERS BELOW----------------*/
#define subjectMQTTtoSomfy "/commands/MQTTtoSomfy"
/*-------------------INTERNAL DEFINITIONS----------------------*/
#define CC1101_FREQUENCY_SOMFY 433.42
#endif
+11 -1
View File
@@ -57,7 +57,7 @@ StaticJsonBuffer<JSON_MSG_BUFFER> modulesBuffer;
JsonArray& modules = modulesBuffer.createArray();
// Modules config inclusion
#if defined(ZgatewayRF) || defined(ZgatewayRF2) || defined(ZgatewayPilight)
#if defined(ZgatewayRF) || defined(ZgatewayRF2) || defined(ZgatewayPilight) || defined(ZactuatorSomfy)
# include "config_RF.h"
#endif
#ifdef ZgatewayWeatherStation
@@ -132,6 +132,9 @@ JsonArray& modules = modulesBuffer.createArray();
#ifdef ZactuatorPWM
# include "config_PWM.h"
#endif
#ifdef ZactuatorSomfy
# include "config_Somfy.h"
#endif
#if defined(ZboardM5STICKC) || defined(ZboardM5STICKCP) || defined(ZboardM5STACK)
# include "config_M5.h"
#endif
@@ -690,6 +693,10 @@ void setup() {
setupPWM();
modules.add(ZactuatorPWM);
#endif
#ifdef ZactuatorSomfy
setupSomfy();
modules.add(ZactuatorSomfy);
#endif
#ifdef ZsensorDS1820
setupZsensorDS1820();
modules.add(ZsensorDS1820);
@@ -1520,6 +1527,9 @@ void receivingMQTT(char* topicOri, char* datacallback) {
# ifdef ZactuatorONOFF // outside the jsonpublishing macro due to the fact that we need to use simplepublishing with HA discovery
MQTTtoONOFF(topicOri, jsondata);
# endif
# ifdef ZactuatorSomfy
MQTTtoSomfy(topicOri, jsondata);
# endif
# ifdef ZgatewayRS232
MQTTtoRS232(topicOri, jsondata);
# endif
+47
View File
@@ -35,6 +35,8 @@ extra_configs =
;default_envs = esp32dev-rf
;default_envs = esp32dev-pilight
;default_envs = esp32dev-pilight-cc1101
;default_envs = esp32dev-somfy-cc1101
;default_envs = esp32dev-pilight-somfy-cc1101
;default_envs = esp32dev-weatherstation
;default_envs = esp32dev-ir
;default_envs = esp32dev-ble
@@ -49,6 +51,7 @@ extra_configs =
;default_envs = ttgo-lora32-v1
;default_envs = nodemcuv2-rf
;default_envs = nodemcuv2-rf-cc1101
;default_envs = nodemcuv2-somfy-cc1101
;default_envs = rf-wifi-gateway
;default_envs = nodemcuv2-rf2
;default_envs = nodemcuv2-rf2-cc1101
@@ -109,6 +112,7 @@ m5stickcp = https://github.com/m5stack/M5StickC-Plus.git
m5stack = M5Stack@0.3.0
smartrc-cc1101-driver-lib = SmartRC-CC1101-Driver-Lib@2.3.5
stl = https://github.com/mike-matera/ArduinoSTL.git#7411816
somfy_remote=Somfy_Remote_Lib@0.2.0
[env]
framework = arduino
@@ -262,6 +266,34 @@ build_flags =
'-DZradioCC1101="CC1101"'
'-DGateway_Name="OpenMQTTGateway_ESP32_Pilight-CC1101"'
[env:esp32dev-somfy-cc1101]
platform = ${com.esp32_platform}
board = esp32dev
lib_deps =
${com-esp.lib_deps}
${libraries.somfy_remote}
${libraries.smartrc-cc1101-driver-lib}
build_flags =
${com-esp.build_flags}
'-DZactuatorSomfy="Somfy"'
'-DZradioCC1101="CC1101"'
'-DGateway_Name="OpenMQTTGateway_ESP32_Somfy-CC1101"'
[env:esp32dev-pilight-somfy-cc1101]
platform = ${com.esp32_platform}
board = esp32dev
lib_deps =
${com-esp.lib_deps}
${libraries.esppilight}
${libraries.somfy_remote}
${libraries.smartrc-cc1101-driver-lib}
build_flags =
${com-esp.build_flags}
'-DZgatewayPilight="Pilight"'
'-DZactuatorSomfy="Somfy"'
'-DZradioCC1101="CC1101"'
'-DGateway_Name="OpenMQTTGateway_ESP32_Pilight-Somfy-CC1101"'
[env:esp32dev-weatherstation]
platform = ${com.esp32_platform}
board = esp32dev
@@ -612,6 +644,21 @@ build_flags =
'-DGateway_Name="OpenMQTTGateway_ESP8266_RF-CC1101"'
board_build.flash_mode = dout
[env:nodemcuv2-somfy-cc1101]
platform = ${com.esp8266_platform}
board = nodemcuv2
lib_deps =
${com-esp.lib_deps}
${libraries.somfy_remote}
${libraries.smartrc-cc1101-driver-lib}
${libraries.esp8266_mdns}
build_flags =
${com-esp.build_flags}
'-DZactuatorSomfy="Somfy"'
'-DZradioCC1101="CC1101"'
'-DGateway_Name="OpenMQTTGateway_ESP8266_Somfy-CC1101"'
board_build.flash_mode = dout
[env:manual-wifi-test]
platform = ${com.esp8266_platform}
board = nodemcuv2