Skip to content

Commit

Permalink
Add SHELLY PLUS 1 board with support of relay, switch, BT gateway (#1349
Browse files Browse the repository at this point in the history
)

So that you know, the overtemperature protection is not implemented in the firmware.
  • Loading branch information
1technophile authored Jan 10, 2023
1 parent 8a767cf commit 31ffdf1
Show file tree
Hide file tree
Showing 9 changed files with 65 additions and 19 deletions.
1 change: 1 addition & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ jobs:
- "ttgo-t-beam"
- "heltec-wifi-lora-32-868"
- "heltec-wifi-lora-32-915"
- "shelly-plus1"
- "nodemcuv2-all-test"
- "nodemcuv2-fastled-test"
- "nodemcuv2-2g"
Expand Down
1 change: 1 addition & 0 deletions docs/upload/web-install.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ The table below describes the libraries and the modules of each board configurat
|esp32dev-somfy-CC1101|ESP32 dev board|Gateway using [Somfy Remote](https://github.com/Legion2/Somfy_Remote_Lib) library, need CC1101|X|-|-|-|
|esp32dev-weatherstation|ESP32 dev board|Gateway to retrieve weather station data Ventus W174/W132 (tested), Auriol H13726, Hama EWS 1500, Meteoscan W155/W160 using [WeatherStationDataRx](https://github.com/Zwer2k/WeatherStationDataRx)|X|-|-|-|
|esp32feather-ble|ESP32 Feather Adafruit|BLE for the Adafruit Feather board|-|-|X|-|
|shelly-plus1|Shelly Plus 1 relay board|BLE, Relay control, Switch|-|-|X|-|
|heltec-wifi-lora32-868|ESP32 HELTEC LORA V2|LORA communication 868Mhz using [arduino-LoRA](https://github.com/sandeepmistry/arduino-LoRa) |-|-|-|X|
|heltec-wifi-lora32-915|ESP32 HELTEC LORA V2|LORA communication 915Mhz using [arduino-LoRA](https://github.com/sandeepmistry/arduino-LoRa)|-|-|-|X|
|heltec-rtl_433|ESP32 HELTEC LORA32 v2|Gateway using [RTL_433_ESP](https://github.com/NorthernMan54/rtl_433_ESP) and [RadioLib](https://github.com/jgromes/RadioLib)|X|-|-|-|
Expand Down
15 changes: 9 additions & 6 deletions main/ZactuatorONOFF.ino
Original file line number Diff line number Diff line change
Expand Up @@ -103,13 +103,16 @@ void MQTTtoONOFF(char* topicOri, char* datacallback) {
}
# endif

void ActuatorButtonTrigger() {
uint8_t level = !digitalRead(ACTUATOR_ONOFF_GPIO);
char* level_string = "ON";
if (level != ACTUATOR_ON) {
level_string = "OFF";
void ActuatorManualTrigger(uint8_t level) {
# ifdef ACTUATOR_BUTTON_TRIGGER_LEVEL
if (level == ACTUATOR_BUTTON_TRIGGER_LEVEL) {
// Change level value to the opposite of the current level
level = !digitalRead(ACTUATOR_ONOFF_GPIO);
}
Log.trace(F("Actuator triggered %s by button" CR), level_string);
# else
level = !digitalRead(ACTUATOR_ONOFF_GPIO);
# endif
Log.trace(F("Actuator triggered %d" CR), level);
digitalWrite(ACTUATOR_ONOFF_GPIO, level);
// Send the state of the switch to the broker so as to update the status
StaticJsonDocument<JSON_MSG_BUFFER> jsonBuffer;
Expand Down
19 changes: 9 additions & 10 deletions main/ZsensorGPIOInput.ino
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,11 @@ unsigned long resetTime = 0;
# endif
unsigned long lastDebounceTime = 0;
int InputState = 3; // Set to 3 so that it reads on startup
int lastInputState = 3;
int previousInputState = 3;

void setupGPIOInput() {
Log.notice(F("Reading GPIO at pin: %d" CR), INPUT_GPIO);
pinMode(INPUT_GPIO, INPUT_PULLUP); // declare GPIOInput pin as input_pullup to prevent floating. Pin will be high when not connected to ground
pinMode(INPUT_GPIO, GPIO_INPUT_TYPE); // declare GPIOInput pin as input_pullup to prevent floating. Pin will be high when not connected to ground
}

void MeasureGPIOInput() {
Expand All @@ -49,7 +49,7 @@ void MeasureGPIOInput() {
// since the last press to ignore any noise:

// If the switch changed, due to noise or pressing:
if (reading != lastInputState) {
if (reading != previousInputState) {
// reset the debouncing timer
lastDebounceTime = millis();
}
Expand All @@ -75,7 +75,6 @@ void MeasureGPIOInput() {
# endif
// if the Input state has changed:
if (reading != InputState) {
InputState = reading;
Log.trace(F("Creating GPIOInput buffer" CR));
StaticJsonDocument<JSON_MSG_BUFFER> jsonBuffer;
JsonObject GPIOdata = jsonBuffer.to<JsonObject>();
Expand All @@ -88,15 +87,15 @@ void MeasureGPIOInput() {
if (GPIOdata.size() > 0)
pub(subjectGPIOInputtoMQTT, GPIOdata);

# ifdef ZactuatorONOFF
if (InputState == ACTUATOR_BUTTON_TRIGGER_LEVEL) {
ActuatorButtonTrigger();
}
# if defined(ZactuatorONOFF) && defined(ACTUATOR_TRIGGER)
//Trigger the actuator if we are not at startup
if (InputState != 3) ActuatorManualTrigger(InputState);
# endif
InputState = reading;
}
}

// save the reading. Next time through the loop, it'll be the lastInputState:
lastInputState = reading;
// save the reading. Next time through the loop, it'll be the previousInputState:
previousInputState = reading;
}
#endif
4 changes: 4 additions & 0 deletions main/config_GPIOInput.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ extern void GPIOInputtoMQTT();
# endif
#endif

#ifndef GPIO_INPUT_TYPE
# define GPIO_INPUT_TYPE INPUT_PULLUP
#endif

#define INPUT_GPIO_ON_VALUE "HIGH"
#define INPUT_GPIO_OFF_VALUE "LOW"

Expand Down
5 changes: 4 additions & 1 deletion main/config_ONOFF.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,10 @@ extern void MQTTtoONOFF(char* topicOri, JsonObject& RFdata);
#endif
//# define ACTUATOR_ONOFF_DEFAULT !ACTUATOR_ON // ACTUATOR_ON or !ACTUATOR_ON, set to the state desired on reset.
#ifndef ACTUATOR_BUTTON_TRIGGER_LEVEL
# define ACTUATOR_BUTTON_TRIGGER_LEVEL LOW // 0 or 1, set to the sensing level which to detect a button press to change the actuator state.
//# define ACTUATOR_BUTTON_TRIGGER_LEVEL LOW // 0 or 1, set to the sensing level which to detect a button press to change the actuator state.
#endif
#ifndef ACTUATOR_TRIGGER
# define ACTUATOR_TRIGGER false // false or true, enable to control an actuator directly from the board switch (default behavior if true), or by button if ACTUATOR_BUTTON_TRIGGER_LEVEL is defined
#endif

/*-------------------PIN DEFINITIONS----------------------*/
Expand Down
35 changes: 35 additions & 0 deletions platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ extra_configs =
;default_envs = tinypico-ble
;default_envs = ttgo-lora32-v1-868
;default_envs = ttgo-lora32-v1-915
;default_envs = shelly-plus1
;default_envs = ttgo-t-beam
;default_envs = heltec-wifi-lora-32-868
;default_envs = heltec-wifi-lora-32-915
Expand Down Expand Up @@ -159,6 +160,7 @@ monitor_speed = 115200
esp8266_platform = espressif8266@3.2.0
esp32_platform = espressif32@3.5.0
esp32_c3_s3_platform = espressif32@5.2.0
esp32_solo_platform = https://github.com/tasmota/platform-espressif32/releases/download/v.2.0.5/platform-espressif32-v.2.0.5.zip
atmelavr_platform = atmelavr@3.3.0

[com-esp]
Expand Down Expand Up @@ -1020,6 +1022,37 @@ build_flags =
'-DTimeLedON=0.1'
'-DLED_SEND_RECEIVE_ON=1'

[env:shelly-plus1]
platform = ${com.esp32_solo_platform}
board = esp32-solo1
board_build.partitions = min_spiffs.csv
lib_deps =
${com-esp.lib_deps}
${libraries.ble}
${libraries.wifimanager32}
${libraries.decoder}
build_flags =
${env.build_flags}
${com-esp.build_flags}
'-DZgatewayBT="BT"'
'-DTimeBtwRead=100'
'-DScan_duration=3000'
'-DTRIGGER_GPIO=25'
'-DZactuatorONOFF="ONOFF"'
'-DACTUATOR_ON=1'
'-DACTUATOR_OFF=0'
'-ACTUATOR_TRIGGER=true'
'-DZsensorGPIOInput="GPIOInput"'
'-DINPUT_GPIO=4'
'-DGPIO_INPUT_TYPE=INPUT'
'-DACTUATOR_ONOFF_GPIO=26'
'-DZsensorADC="ADC"'
'-DADC_GPIO=32'
'-DUSE_MAC_AS_GATEWAY_NAME'
'-DFRAMEWORK_ARDUINO_SOLO1'
'-DGATEWAY_MANUFACTURER="Shelly"'
'-DGATEWAY_MODEL="SPLUS1"'

[env:nodemcuv2-all-test]
platform = ${com.esp8266_platform}
board = nodemcuv2
Expand Down Expand Up @@ -1324,6 +1357,7 @@ build_flags =
'-DACTUATOR_ON=0'
'-DACTUATOR_ONOFF_DEFAULT=ACTUATOR_ON'
'-DACTUATOR_BUTTON_TRIGGER_LEVEL=0'
'-ACTUATOR_TRIGGER=true'
'-DGateway_Name="OpenMQTTGateway_SONOFF_RELAY"'
board_build.flash_mode = dout

Expand All @@ -1344,6 +1378,7 @@ build_flags =
'-DACTUATOR_ON=0'
'-DACTUATOR_ONOFF_DEFAULT=ACTUATOR_ON'
'-DACTUATOR_BUTTON_TRIGGER_LEVEL=0'
'-ACTUATOR_TRIGGER=true'
'-DRF_RECEIVER_GPIO=4'
'-DZgatewayRF="RF"'
'-DGateway_Name="OpenMQTTGateway_SONOFF_BASIC_RFR3"'
Expand Down
2 changes: 1 addition & 1 deletion scripts/gen_wu.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@

for item in range(len(assets)):
name = assets[item]['name']
if 'firmware.bin' in name and ('esp32' in name or 'ttgo' in name or 'heltec' in name or 'thingpulse' in name or 'lilygo' in name):
if 'firmware.bin' in name and ('esp32' in name or 'ttgo' in name or 'heltec' in name or 'thingpulse' in name or 'lilygo' in name or 'shelly' in name):
fw = name.split('-firmware')[0]
man_file = fw + '.manifest.json'
fw_url = assets[item]['browser_download_url']
Expand Down
2 changes: 1 addition & 1 deletion scripts/gen_wu_dev.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@
output_file.write(boot_bin.content)

for name in os.listdir(bin_path):
if 'firmware.bin' in name and ('esp32' in name or 'ttgo' in name or 'heltec' in name or 'thingpulse' in name or 'lilygo' in name):
if 'firmware.bin' in name and ('esp32' in name or 'ttgo' in name or 'heltec' in name or 'thingpulse' in name or 'lilygo' in name or 'shelly' in name):
fw = name.split('-firmware')[0]
man_file = fw + '.manifest.json'
print('Bin name:' + name)
Expand Down

0 comments on commit 31ffdf1

Please sign in to comment.