mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-25 11:46:31 +00:00
parent
bfb40f16dc
commit
b4269d262c
@ -6,7 +6,8 @@ All notable changes to this project will be documented in this file.
|
|||||||
## [12.2.0.1]
|
## [12.2.0.1]
|
||||||
### Added
|
### Added
|
||||||
- DS18x20 support on up to four GPIOs by md5sum-as (#16833)
|
- DS18x20 support on up to four GPIOs by md5sum-as (#16833)
|
||||||
- Berry add `bytes().setbytes()`
|
- Berry add `bytes().setbytes()` (#16892)
|
||||||
|
- Support for Shelly Pro 1/2 (#16773)
|
||||||
|
|
||||||
### Breaking Changed
|
### Breaking Changed
|
||||||
|
|
||||||
@ -14,6 +15,7 @@ All notable changes to this project will be documented in this file.
|
|||||||
- DS18x20 ``DS18Alias`` to ``DS18Sens`` (#16833)
|
- DS18x20 ``DS18Alias`` to ``DS18Sens`` (#16833)
|
||||||
- Compiling with reduced boards manifests in favour of Autoconfig (#16848)
|
- Compiling with reduced boards manifests in favour of Autoconfig (#16848)
|
||||||
- Add NeoPool ``NPFiltration 2`` toggle cmnd (#16859)
|
- Add NeoPool ``NPFiltration 2`` toggle cmnd (#16859)
|
||||||
|
- ESP32 NimBLE library from v1.4.0 to v1.4.1 (#16775)
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
- BP5758D red channel corruption regression from v12.1.1.6 (#16850)
|
- BP5758D red channel corruption regression from v12.1.1.6 (#16850)
|
||||||
|
@ -110,10 +110,13 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo
|
|||||||
## Changelog v12.2.0.1
|
## Changelog v12.2.0.1
|
||||||
### Added
|
### Added
|
||||||
- DS18x20 support on up to four GPIOs by md5sum-as [#16833](https://github.com/arendst/Tasmota/issues/16833)
|
- DS18x20 support on up to four GPIOs by md5sum-as [#16833](https://github.com/arendst/Tasmota/issues/16833)
|
||||||
|
- Berry add `bytes().setbytes()` [#16892](https://github.com/arendst/Tasmota/issues/16892)
|
||||||
|
- Support for Shelly Pro 1/2 [#16773](https://github.com/arendst/Tasmota/issues/16773)
|
||||||
|
|
||||||
### Breaking Changed
|
### Breaking Changed
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
- ESP32 NimBLE library from v1.4.0 to v1.4.1 [#16775](https://github.com/arendst/Tasmota/issues/16775)
|
||||||
- DS18x20 ``DS18Alias`` to ``DS18Sens`` [#16833](https://github.com/arendst/Tasmota/issues/16833)
|
- DS18x20 ``DS18Alias`` to ``DS18Sens`` [#16833](https://github.com/arendst/Tasmota/issues/16833)
|
||||||
- Compiling with reduced boards manifests in favour of Autoconfig [#16848](https://github.com/arendst/Tasmota/issues/16848)
|
- Compiling with reduced boards manifests in favour of Autoconfig [#16848](https://github.com/arendst/Tasmota/issues/16848)
|
||||||
|
|
||||||
|
@ -642,6 +642,7 @@
|
|||||||
//#define USE_RC522 // Add support for MFRC522 13.56Mhz Rfid reader (+6k code)
|
//#define USE_RC522 // Add support for MFRC522 13.56Mhz Rfid reader (+6k code)
|
||||||
//#define USE_MCP2515 // Add support for can bus using MCP2515 (+7k code)
|
//#define USE_MCP2515 // Add support for can bus using MCP2515 (+7k code)
|
||||||
//#define USE_CANSNIFFER // Add support for can bus sniffer using MCP2515 (+5k code)
|
//#define USE_CANSNIFFER // Add support for can bus sniffer using MCP2515 (+5k code)
|
||||||
|
#define USE_SHELLY_PRO // Add support for Shelly Pro
|
||||||
|
|
||||||
#define USE_MHZ19 // Add support for MH-Z19 CO2 sensor (+2k code)
|
#define USE_MHZ19 // Add support for MH-Z19 CO2 sensor (+2k code)
|
||||||
#define USE_SENSEAIR // Add support for SenseAir K30, K70 and S8 CO2 sensor (+2k3 code)
|
#define USE_SENSEAIR // Add support for SenseAir K30, K70 and S8 CO2 sensor (+2k3 code)
|
||||||
|
@ -208,7 +208,7 @@ enum ProgramSelectablePins {
|
|||||||
GPIO_USER, // User configurable needs to be 2047
|
GPIO_USER, // User configurable needs to be 2047
|
||||||
GPIO_MAX };
|
GPIO_MAX };
|
||||||
|
|
||||||
#define MAX_OPTIONS_A 6 // Increase if more bits are used from GpioOptionABits
|
#define MAX_OPTIONS_A 7 // Increase if more bits are used from GpioOptionABits
|
||||||
|
|
||||||
typedef union { // Restricted by MISRA-C Rule 18.4 but so useful...
|
typedef union { // Restricted by MISRA-C Rule 18.4 but so useful...
|
||||||
uint32_t data; // Allow bit manipulation using SetOption
|
uint32_t data; // Allow bit manipulation using SetOption
|
||||||
@ -219,7 +219,7 @@ typedef union { // Restricted by MISRA-C Rule 18.4 bu
|
|||||||
uint32_t enable_ccloader : 1; // bit 3 (v9.4.0.5) - Option_A4 - (Zigbee) Enable CCLoader using Zigbee Rx/Tx/Rst Gpios
|
uint32_t enable_ccloader : 1; // bit 3 (v9.4.0.5) - Option_A4 - (Zigbee) Enable CCLoader using Zigbee Rx/Tx/Rst Gpios
|
||||||
uint32_t rotary_mi_desk : 1; // bit 4 (v9.5.0.5) - Option_A5 - (Rotary) Enable Mi Desk emulation
|
uint32_t rotary_mi_desk : 1; // bit 4 (v9.5.0.5) - Option_A5 - (Rotary) Enable Mi Desk emulation
|
||||||
uint32_t linkind_support : 1; // bit 5 (v10.1.0.4) - Option_A6 - (Light) LinkInd support
|
uint32_t linkind_support : 1; // bit 5 (v10.1.0.4) - Option_A6 - (Light) LinkInd support
|
||||||
uint32_t spare06 : 1; // bit 6
|
uint32_t shelly_pro : 1; // bit 6 (v12.2.0.1) - Option_A7 - (Device) Shelly Pro
|
||||||
uint32_t spare07 : 1; // bit 7
|
uint32_t spare07 : 1; // bit 7
|
||||||
uint32_t spare08 : 1; // bit 8
|
uint32_t spare08 : 1; // bit 8
|
||||||
uint32_t spare09 : 1; // bit 9
|
uint32_t spare09 : 1; // bit 9
|
||||||
|
@ -517,8 +517,10 @@ void SetLedPowerAll(uint32_t state)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetLedLink(uint32_t state)
|
void SetLedLink(uint32_t state) {
|
||||||
{
|
#ifdef USE_SHELLY_PRO
|
||||||
|
if (ShellyProLedLink(state)) { return; }
|
||||||
|
#endif // USE_SHELLY_PRO
|
||||||
int led_pin = Pin(GPIO_LEDLNK);
|
int led_pin = Pin(GPIO_LEDLNK);
|
||||||
uint32_t led_inv = TasmotaGlobal.ledlnk_inverted;
|
uint32_t led_inv = TasmotaGlobal.ledlnk_inverted;
|
||||||
if (-1 == led_pin) { // Legacy - LED1 is status
|
if (-1 == led_pin) { // Legacy - LED1 is status
|
||||||
|
125
tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino
Normal file
125
tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
/*
|
||||||
|
xdrv_88_shelly_pro.ino - Shelly pro family support for Tasmota
|
||||||
|
|
||||||
|
Copyright (C) 2022 Theo Arends
|
||||||
|
|
||||||
|
This program 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.
|
||||||
|
|
||||||
|
This program 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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef ESP32
|
||||||
|
#ifdef USE_SPI
|
||||||
|
#ifdef USE_SHELLY_PRO
|
||||||
|
/*********************************************************************************************\
|
||||||
|
* Shelly Pro support
|
||||||
|
*
|
||||||
|
* {"NAME":"Shelly Pro 1","GPIO":[0,0,0,0,768,0,0,0,672,704,736,0,0,0,5600,6214,0,0,0,5568,0,0,0,0,0,0,0,0,0,0,0,32,0,0,160,0],"FLAG":0,"BASE":1}
|
||||||
|
* {"NAME":"Shelly Pro 2","GPIO":[0,0,0,0,768,0,0,0,672,704,736,0,0,0,5600,6214,0,0,0,5568,0,0,0,0,0,0,0,0,0,0,0,32,0,0,160,161],"FLAG":0,"BASE":1}
|
||||||
|
*
|
||||||
|
* Shelly Pro uses SPI to control one 74HC595 for relays/leds and one ADE7953 (1PM) or two ADE7953 (2PM) for energy monitoring
|
||||||
|
\*********************************************************************************************/
|
||||||
|
|
||||||
|
#define XDRV_88 88
|
||||||
|
|
||||||
|
struct SPro {
|
||||||
|
uint8_t pin_shift595_rclk;
|
||||||
|
uint8_t ledlink;
|
||||||
|
uint8_t power;
|
||||||
|
bool detected;
|
||||||
|
} SPro;
|
||||||
|
|
||||||
|
void ShellyProUpdate(void) {
|
||||||
|
// Shelly Pro 595 register
|
||||||
|
// bit 0 = relay/led 1
|
||||||
|
// bit 1 = relay/led 2
|
||||||
|
// bit 2 = wifi led blue
|
||||||
|
// bit 3 = wifi led green
|
||||||
|
// bit 4 = wifi led red
|
||||||
|
// bit 5 - 7 = nc
|
||||||
|
uint32_t val = SPro.power | SPro.ledlink;
|
||||||
|
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
|
||||||
|
SPI.transfer(val); // Write 74HC595 shift register
|
||||||
|
SPI.endTransaction();
|
||||||
|
|
||||||
|
digitalWrite(SPro.pin_shift595_rclk, 1);
|
||||||
|
delayMicroseconds(200); // Shelly 10mS
|
||||||
|
digitalWrite(SPro.pin_shift595_rclk, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShellyProPreInit(void) {
|
||||||
|
if ((SPI_MOSI_MISO == TasmotaGlobal.spi_enabled) &&
|
||||||
|
PinUsed(GPIO_SPI_CS) &&
|
||||||
|
TasmotaGlobal.gpio_optiona.shelly_pro) { // Option_A7
|
||||||
|
|
||||||
|
if (PinUsed(GPIO_SWT1)) {
|
||||||
|
TasmotaGlobal.devices_present++; // Shelly Pro 1
|
||||||
|
if (PinUsed(GPIO_SWT1, 1)) {
|
||||||
|
TasmotaGlobal.devices_present++; // Shelly Pro 2
|
||||||
|
}
|
||||||
|
|
||||||
|
SPro.pin_shift595_rclk = Pin(GPIO_SPI_CS);
|
||||||
|
pinMode(SPro.pin_shift595_rclk, OUTPUT);
|
||||||
|
digitalWrite(SPro.pin_shift595_rclk, 0);
|
||||||
|
// Does nothing if SPI is already initiated (by ADE7953) so no harm done
|
||||||
|
SPI.begin(Pin(GPIO_SPI_CLK), Pin(GPIO_SPI_MISO), Pin(GPIO_SPI_MOSI), -1);
|
||||||
|
|
||||||
|
SPro.power = TasmotaGlobal.power &3; // Restore power
|
||||||
|
SPro.ledlink = 0x1C; // All leds off
|
||||||
|
ShellyProUpdate();
|
||||||
|
|
||||||
|
SPro.detected = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShellyProPower(void) {
|
||||||
|
SPro.power = XdrvMailbox.index &3;
|
||||||
|
ShellyProUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************************************\
|
||||||
|
* External called functions
|
||||||
|
\*********************************************************************************************/
|
||||||
|
|
||||||
|
bool ShellyProLedLink(uint32_t state) {
|
||||||
|
if (SPro.detected) {
|
||||||
|
// bit 2 = blue, 3 = green, 4 = red
|
||||||
|
SPro.ledlink = (state) ? 0x18 : 0x1C; // Blue on (wifi link) or all off
|
||||||
|
ShellyProUpdate();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************************************\
|
||||||
|
* Interface
|
||||||
|
\*********************************************************************************************/
|
||||||
|
|
||||||
|
bool Xdrv88(uint8_t function) {
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
if (FUNC_PRE_INIT == function) {
|
||||||
|
ShellyProPreInit();
|
||||||
|
} else if (SPro.detected) {
|
||||||
|
switch (function) {
|
||||||
|
case FUNC_SET_POWER:
|
||||||
|
ShellyProPower();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // USE_SHELLY_PRO
|
||||||
|
#endif // USE_SPI
|
||||||
|
#endif // ESP32
|
Loading…
x
Reference in New Issue
Block a user