Change EXS Dimmer driver

Change EXS Dimmer driver by Gerry Lenz (#6658)
This commit is contained in:
Theo Arends 2019-10-20 11:57:38 +02:00
parent e2effaba5a
commit 393ccd7799
24 changed files with 89 additions and 76 deletions

View File

@ -626,7 +626,7 @@
#define D_SENSOR_SM2135_CLK "SM2135 Clk"
#define D_SENSOR_SM2135_DAT "SM2135 Dat"
#define D_SENSOR_DEEPSLEEP "DeepSleep"
#define D_SENSOR_EXS_MCU_RESET "EXS Reset"
#define D_SENSOR_EXS_ENABLE "EXS Enable"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -626,7 +626,7 @@
#define D_SENSOR_SM2135_CLK "SM2135 Clk"
#define D_SENSOR_SM2135_DAT "SM2135 Dat"
#define D_SENSOR_DEEPSLEEP "DeepSleep"
#define D_SENSOR_EXS_MCU_RESET "EXS Reset"
#define D_SENSOR_EXS_ENABLE "EXS Enable"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -626,7 +626,7 @@
#define D_SENSOR_SM2135_CLK "SM2135 Clk"
#define D_SENSOR_SM2135_DAT "SM2135 Dat"
#define D_SENSOR_DEEPSLEEP "DeepSleep"
#define D_SENSOR_EXS_MCU_RESET "EXS Reset"
#define D_SENSOR_EXS_ENABLE "EXS Enable"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -626,7 +626,7 @@
#define D_SENSOR_SM2135_CLK "SM2135 Clk"
#define D_SENSOR_SM2135_DAT "SM2135 Dat"
#define D_SENSOR_DEEPSLEEP "DeepSleep"
#define D_SENSOR_EXS_MCU_RESET "EXS Reset"
#define D_SENSOR_EXS_ENABLE "EXS Enable"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -626,7 +626,7 @@
#define D_SENSOR_SM2135_CLK "SM2135 Clk"
#define D_SENSOR_SM2135_DAT "SM2135 Dat"
#define D_SENSOR_DEEPSLEEP "DeepSleep"
#define D_SENSOR_EXS_MCU_RESET "EXS Reset"
#define D_SENSOR_EXS_ENABLE "EXS Enable"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -626,7 +626,7 @@
#define D_SENSOR_SM2135_CLK "SM2135 Clk"
#define D_SENSOR_SM2135_DAT "SM2135 Dat"
#define D_SENSOR_DEEPSLEEP "DeepSleep"
#define D_SENSOR_EXS_MCU_RESET "EXS Reset"
#define D_SENSOR_EXS_ENABLE "EXS Enable"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -626,7 +626,7 @@
#define D_SENSOR_SM2135_CLK "SM2135 Clk"
#define D_SENSOR_SM2135_DAT "SM2135 Dat"
#define D_SENSOR_DEEPSLEEP "DeepSleep"
#define D_SENSOR_EXS_MCU_RESET "EXS Reset"
#define D_SENSOR_EXS_ENABLE "EXS Enable"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -626,7 +626,7 @@
#define D_SENSOR_SM2135_CLK "SM2135 Clk"
#define D_SENSOR_SM2135_DAT "SM2135 Dat"
#define D_SENSOR_DEEPSLEEP "DeepSleep"
#define D_SENSOR_EXS_MCU_RESET "EXS Reset"
#define D_SENSOR_EXS_ENABLE "EXS Enable"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -626,7 +626,7 @@
#define D_SENSOR_SM2135_CLK "SM2135 Clk"
#define D_SENSOR_SM2135_DAT "SM2135 Dat"
#define D_SENSOR_DEEPSLEEP "DeepSleep"
#define D_SENSOR_EXS_MCU_RESET "EXS Reset"
#define D_SENSOR_EXS_ENABLE "EXS Enable"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -626,7 +626,7 @@
#define D_SENSOR_SM2135_CLK "SM2135 Clk"
#define D_SENSOR_SM2135_DAT "SM2135 Dat"
#define D_SENSOR_DEEPSLEEP "DeepSleep"
#define D_SENSOR_EXS_MCU_RESET "EXS Reset"
#define D_SENSOR_EXS_ENABLE "EXS Enable"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -626,7 +626,7 @@
#define D_SENSOR_SM2135_CLK "SM2135 Clk"
#define D_SENSOR_SM2135_DAT "SM2135 Dat"
#define D_SENSOR_DEEPSLEEP "DeepSleep"
#define D_SENSOR_EXS_MCU_RESET "EXS Reset"
#define D_SENSOR_EXS_ENABLE "EXS Enable"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -626,7 +626,7 @@
#define D_SENSOR_SM2135_CLK "SM2135 Clk"
#define D_SENSOR_SM2135_DAT "SM2135 Dat"
#define D_SENSOR_DEEPSLEEP "DeepSleep"
#define D_SENSOR_EXS_MCU_RESET "EXS Reset"
#define D_SENSOR_EXS_ENABLE "EXS Enable"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -626,7 +626,7 @@
#define D_SENSOR_SM2135_CLK "SM2135 Clk"
#define D_SENSOR_SM2135_DAT "SM2135 Dat"
#define D_SENSOR_DEEPSLEEP "DeepSleep"
#define D_SENSOR_EXS_MCU_RESET "EXS Reset"
#define D_SENSOR_EXS_ENABLE "EXS Enable"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -626,7 +626,7 @@
#define D_SENSOR_SM2135_CLK "SM2135 Clk"
#define D_SENSOR_SM2135_DAT "SM2135 Dat"
#define D_SENSOR_DEEPSLEEP "DeepSleep"
#define D_SENSOR_EXS_MCU_RESET "EXS Reset"
#define D_SENSOR_EXS_ENABLE "EXS Enable"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -626,7 +626,7 @@
#define D_SENSOR_SM2135_CLK "SM2135 Clk"
#define D_SENSOR_SM2135_DAT "SM2135 Dat"
#define D_SENSOR_DEEPSLEEP "DeepSleep"
#define D_SENSOR_EXS_MCU_RESET "EXS Reset"
#define D_SENSOR_EXS_ENABLE "EXS Enable"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -626,7 +626,7 @@
#define D_SENSOR_SM2135_CLK "SM2135 Clk"
#define D_SENSOR_SM2135_DAT "SM2135 Dat"
#define D_SENSOR_DEEPSLEEP "DeepSleep"
#define D_SENSOR_EXS_MCU_RESET "EXS Reset"
#define D_SENSOR_EXS_ENABLE "EXS Enable"
// Units
#define D_UNIT_AMPERE "А"

View File

@ -626,7 +626,7 @@
#define D_SENSOR_SM2135_CLK "SM2135 Clk"
#define D_SENSOR_SM2135_DAT "SM2135 Dat"
#define D_SENSOR_DEEPSLEEP "DeepSleep"
#define D_SENSOR_EXS_MCU_RESET "EXS Reset"
#define D_SENSOR_EXS_ENABLE "EXS Enable"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -626,7 +626,7 @@
#define D_SENSOR_SM2135_CLK "SM2135 Clk"
#define D_SENSOR_SM2135_DAT "SM2135 Dat"
#define D_SENSOR_DEEPSLEEP "DeepSleep"
#define D_SENSOR_EXS_MCU_RESET "EXS Reset"
#define D_SENSOR_EXS_ENABLE "EXS Enable"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -626,7 +626,7 @@
#define D_SENSOR_SM2135_CLK "SM2135 Clk"
#define D_SENSOR_SM2135_DAT "SM2135 Dat"
#define D_SENSOR_DEEPSLEEP "DeepSleep"
#define D_SENSOR_EXS_MCU_RESET "EXS Reset"
#define D_SENSOR_EXS_ENABLE "EXS Enable"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -626,7 +626,7 @@
#define D_SENSOR_SM2135_CLK "SM2135 Clk"
#define D_SENSOR_SM2135_DAT "SM2135 Dat"
#define D_SENSOR_DEEPSLEEP "DeepSleep"
#define D_SENSOR_EXS_MCU_RESET "EXS Reset"
#define D_SENSOR_EXS_ENABLE "EXS Enable"
// Units
#define D_UNIT_AMPERE "А"

View File

@ -626,7 +626,7 @@
#define D_SENSOR_SM2135_CLK "SM2135 Clk"
#define D_SENSOR_SM2135_DAT "SM2135 Dat"
#define D_SENSOR_DEEPSLEEP "DeepSleep"
#define D_SENSOR_EXS_MCU_RESET "EXS Reset"
#define D_SENSOR_EXS_ENABLE "EXS Enable"
// Units
#define D_UNIT_AMPERE "安"

View File

@ -626,7 +626,7 @@
#define D_SENSOR_SM2135_CLK "SM2135 Clk"
#define D_SENSOR_SM2135_DAT "SM2135 Dat"
#define D_SENSOR_DEEPSLEEP "DeepSleep"
#define D_SENSOR_EXS_MCU_RESET "EXS Reset"
#define D_SENSOR_EXS_ENABLE "EXS Enable"
// Units
#define D_UNIT_AMPERE "安"

View File

@ -207,7 +207,7 @@ enum UserSelectablePins {
GPIO_SM2135_CLK, // SM2135 Clk
GPIO_SM2135_DAT, // SM2135 Dat
GPIO_DEEPSLEEP, // Kill switch for deepsleep
GPIO_EXS_MCU_RESET, // EXS MCU Reset
GPIO_EXS_ENABLE, // EXS MCU Enable
GPIO_SENSOR_END };
// Programmer selectable GPIO functionality
@ -285,7 +285,7 @@ const char kSensorNames[] PROGMEM =
D_SENSOR_DDS2382_TX "|" D_SENSOR_DDS2382_RX "|"
D_SENSOR_DDSU666_TX "|" D_SENSOR_DDSU666_RX "|"
D_SENSOR_SM2135_CLK "|" D_SENSOR_SM2135_DAT "|"
D_SENSOR_DEEPSLEEP "|" D_SENSOR_EXS_MCU_RESET "|"
D_SENSOR_DEEPSLEEP "|" D_SENSOR_EXS_ENABLE "|"
;
const char kSensorNamesFixed[] PROGMEM =
@ -576,7 +576,7 @@ const uint8_t kGpioNiceList[] PROGMEM = {
GPIO_TUYA_RX, // Tuya Serial interface
#endif
#ifdef USE_EXS_DIMMER
GPIO_EXS_MCU_RESET, // EXS MCU Reset
GPIO_EXS_ENABLE, // EXS MCU Enable
#endif
#endif // USE_LIGHT
@ -2131,12 +2131,12 @@ const mytmplt kModules[MAXMODULE] PROGMEM = {
GPIO_REL4, // GPIO15 WIFI_O3 Relay 4 (0 = Off, 1 = On) controlling the fan
0, 0
},
{ "EXS Dimmer", // EXS_DIMMER - EX-Stroe WiFi Dimmer v4, two channel (ESP8266 w/ separate MCU dimmer)
{ "EXS Dimmer", // EXS_DIMMER - EX-Store WiFi Dimmer v4, two channel (ESP8266 w/ separate MCU dimmer)
// https://ex-store.de/2-Kanal-RS232-WiFi-WLan-Dimmer-Modul-V4-fuer-Unterputzmontage-230V-3A
// https://ex-store.de/2-Kanal-RS232-WiFi-WLan-Dimmer-Modul-V4-fuer-Unterputzmontage-230V-3A-ESP8266-V12-Stift-und-Buchsenleisten
0,
GPIO_TXD, // GPIO01 MCU serial control
0,
GPIO_LEDLNK, // GPIO02 LED Link
GPIO_RXD, // GPIO03 MCU serial control
GPIO_USER, // GPIO04
GPIO_USER, // GPIO05
@ -2147,7 +2147,7 @@ const mytmplt kModules[MAXMODULE] PROGMEM = {
0, // GPIO10 (SD_DATA3 Flash QIO or ESP8285)
// GPIO11 (SD_CMD Flash)
GPIO_USER, // GPIO12
GPIO_EXS_MCU_RESET, // GPIO13 EXS MCU Reset
GPIO_EXS_ENABLE, // GPIO13 EXS MCU Enable
GPIO_USER, // GPIO14
0, // GPIO15
0, 0

View File

@ -251,20 +251,6 @@ bool ExsSyncState()
ExsSyncState(1);
}
static inline void ExsSetChannelV10(uint8_t channel, const uint8_t *buffer)
{
Exs.dimmer.channel[channel].on = buffer[0];
Exs.dimmer.channel[channel].dimm = buffer[1];
Exs.dimmer.channel[channel].bright_tbl = 0;
}
static inline void ExsSetChannel(uint8_t channel, const uint8_t *buffer)
{
Exs.dimmer.channel[channel].on = buffer[0];
Exs.dimmer.channel[channel].dimm = buffer[1];
Exs.dimmer.channel[channel].bright_tbl = buffer[2];
}
void ExsDebugState()
{
#ifdef EXS_DEBUG
@ -288,21 +274,71 @@ void ExsPacketProcess(void)
switch (cmd)
{
case EXS_GET_VALUES:
/*
format firmware 2.1
0. byte = startMarker
1. byte = 0. crc of bytes 2(CMD) - 11(GATE_LOCK)
2. byte = 1. len_Of_Payload
3. byte = 2. CMD
4. byte = 3. MAJOR
5. byte = 4. MINOR
6. byte = 5. GATE1_ON
7. byte = 6. GATE1_DIMM
8. byte = 7. GATE1.BRIGHT
9. byte = 8. GATE2_ON
10. byte = 9. GATE2_DIMM
11. byte = 10. GATE2.BRIGHT
12. byte = 11. GATE_LOCK
13. byte = '\0'
*/
if (len > 9)
{
Exs.dimmer.version_major = Exs.buffer[3];
Exs.dimmer.version_minor = Exs.buffer[4];
ExsSetChannel(0, &Exs.buffer[5]);
ExsSetChannel(1, &Exs.buffer[8]);
//Exs.dimmer.channel[0].on = Exs.buffer[5];
Exs.dimmer.channel[0].on = Exs.buffer[6];
Exs.dimmer.channel[0].dimm = Exs.buffer[6];
Exs.dimmer.channel[0].bright_tbl = Exs.buffer[7];
//Exs.dimmer.channel[1].on = Exs.buffer[8];
Exs.dimmer.channel[1].on = Exs.buffer[9];
Exs.dimmer.channel[1].dimm = Exs.buffer[9];
Exs.dimmer.channel[1].bright_tbl = Exs.buffer[10];
Exs.dimmer.gate_lock = Exs.buffer[11];
}
else
/*
format firmware 1.0
0. byte = startMarker
1. byte = 0. crc of bytes 2(CMD) - 9(GATE_LOCK)
2. byte = 1. len_Of_Payload
3. byte = 2. CMD
4. byte = 3. GATE1_ON
5. byte = 4. GATE1_DIMM
6. byte = 5. GATE1.BRIGHT
7. byte = 6. GATE2_ON
8. byte = 7. GATE2_DIMM
9. byte = 8. GATE2.BRIGHT
10. byte = 9. GATE_LOCK
11. byte = '\0'
*/
{
Exs.dimmer.version_major = 1;
Exs.dimmer.version_minor = 0;
ExsSetChannel(0, &Exs.buffer[3]);
ExsSetChannel(1, &Exs.buffer[5]);
Exs.dimmer.gate_lock = Exs.buffer[8];
//Exs.dimmer.channel[0].on = Exs.buffer[3] - 48;
Exs.dimmer.channel[0].on = Exs.buffer[4] - 48;
Exs.dimmer.channel[0].dimm = Exs.buffer[4] - 48;
Exs.dimmer.channel[0].bright_tbl = Exs.buffer[5] - 48;
//Exs.dimmer.channel[1].on = Exs.buffer[6] - 48;
Exs.dimmer.channel[1].on = Exs.buffer[7] - 48;
Exs.dimmer.channel[1].dimm = Exs.buffer[7] - 48;
Exs.dimmer.channel[1].bright_tbl = Exs.buffer[8] - 48;
Exs.dimmer.gate_lock = Exs.buffer[9] - 48;
}
ExsDebugState();
@ -313,7 +349,6 @@ void ExsPacketProcess(void)
break;
}
}
/*
* API Functions
*/
@ -360,11 +395,11 @@ void EsxMcuStart(void)
int retries = 3;
#ifdef EXS_DEBUG
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("EXS: Request MCU configuration, PIN %d to Low"), pin[GPIO_EXS_MCU_RESET]);
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("EXS: Request MCU configuration, PIN %d to Low"), pin[GPIO_EXS_ENABLE]);
#endif
pinMode(pin[GPIO_EXS_MCU_RESET], OUTPUT);
digitalWrite(pin[GPIO_EXS_MCU_RESET], LOW);
pinMode(pin[GPIO_EXS_ENABLE], OUTPUT);
digitalWrite(pin[GPIO_EXS_ENABLE], LOW);
delay(1); // wait 1ms fot the MCU to come online
@ -461,37 +496,23 @@ void ExsSerialInput(void)
#ifdef EXS_MCU_CMNDS
#define D_PRFX_EXS "Exs"
#define D_CMND_EXS_GATE "Gate"
#define D_CMND_EXS_DIMM "Dimm"
#define D_CMND_EXS_DIMM_TBL "DimmTbl"
#define D_CMND_EXS_DIMM_VAL "DimmVal"
#define D_CMND_EXS_GATES "Gates"
#define D_CMND_EXS_DIMMS "Dimms"
#define D_CMND_EXS_CH_LOCK "ChLock"
#define D_CMND_EXS_STATE "State"
const char kExsCommands[] PROGMEM = D_PRFX_EXS "|"
D_CMND_EXS_GATE "|"
D_CMND_EXS_DIMM "|" D_CMND_EXS_DIMM_TBL "|" D_CMND_EXS_DIMM_VAL "|"
D_CMND_EXS_GATES "|" D_CMND_EXS_DIMMS "|" D_CMND_EXS_CH_LOCK "|"
D_CMND_EXS_DIMMS "|" D_CMND_EXS_CH_LOCK "|"
D_CMND_EXS_STATE;
void (* const ExsCommand[])(void) PROGMEM =
{ &CmndExsGate,
&CmndExsDimm, &CmndExsDimmTbl, &CmndExsDimmVal,
&CmndExsGates, &CmndExsDimms, &CmndExsChLock,
{ &CmndExsDimm, &CmndExsDimmTbl, &CmndExsDimmVal,
&CmndExsDimms, &CmndExsChLock,
&CmndExsState };
void CmndExsGate(void)
{
if ((XdrvMailbox.index == 1 || XdrvMailbox.index == 2) &&
(XdrvMailbox.payload == 0 || XdrvMailbox.payload == 1)) {
ExsSendCmd(EXS_GATE_1_ON + 0x10 * (XdrvMailbox.index - 1) +
XdrvMailbox.payload ^ 1, 0);
}
CmndExsState();
}
void CmndExsDimm(void)
{
if ((XdrvMailbox.index == 1 || XdrvMailbox.index == 2) &&
@ -522,14 +543,6 @@ void CmndExsDimmVal(void)
CmndExsState();
}
void CmndExsGates(void)
{
if (XdrvMailbox.payload == 0 || XdrvMailbox.payload == 1) {
ExsSendCmd(EXS_GATES_ON + XdrvMailbox.payload ^ 1, 0);
}
CmndExsState();
}
void CmndExsDimms(void)
{
if (XdrvMailbox.payload == 0 || XdrvMailbox.payload == 1) {