Sleep fixes part 2 and 3 of 3

* Change scheduler phase 2/3 - Fixed when sleep is enabled: Blinktime (#3581)
 * Change scheduler phase 3/3 - Some sensor update timings: AdcEvery 200 -> 250, Senseair 300 -> 250, SDM120 300 -> 250, SDM630 300 -> 250
This commit is contained in:
Theo Arends 2018-08-26 17:10:18 +02:00
parent f090050e69
commit bbd2529914
10 changed files with 74 additions and 65 deletions

View File

@ -1,5 +1,7 @@
/* 6.1.1.11 20180826
* Change scheduler phase 1 - Fixed when sleep is enabled: Uptime, Delay, PulseTime and TelePeriod (#3581)
* Change scheduler phase 1/3 - Fixed when sleep is enabled: Uptime, Delay, PulseTime and TelePeriod (#3581)
* Change scheduler phase 2/3 - Fixed when sleep is enabled: Blinktime (#3581)
* Change scheduler phase 3/3 - Some sensor update timings: AdcEvery 200 -> 250, Senseair 300 -> 250, SDM120 300 -> 250, SDM630 300 -> 250
*
* 6.1.1.10 20180827
* Disable wifi sleep for both Esp8266/Arduino core 2.4.1 and 2.4.2 to solve device freeze caused by Espressif SDK bug (#3554)

View File

@ -199,8 +199,9 @@ enum LightTypes {LT_BASIC, LT_PWM1, LT_PWM2, LT_PWM3, LT_PWM4, LT_PWM5, LT_PWM6,
enum LichtSubtypes {LST_NONE, LST_SINGLE, LST_COLDWARM, LST_RGB, LST_RGBW, LST_RGBWC};
enum LichtSchemes {LS_POWER, LS_WAKEUP, LS_CYCLEUP, LS_CYCLEDN, LS_RANDOM, LS_MAX};
enum XsnsFunctions {FUNC_PRE_INIT, FUNC_INIT, FUNC_LOOP, FUNC_EVERY_50_MSECOND, FUNC_EVERY_SECOND, FUNC_PREP_BEFORE_TELEPERIOD, FUNC_JSON_APPEND, FUNC_WEB_APPEND, FUNC_SAVE_BEFORE_RESTART,
FUNC_COMMAND, FUNC_MQTT_SUBSCRIBE, FUNC_MQTT_INIT, FUNC_MQTT_DATA, FUNC_SET_POWER, FUNC_SHOW_SENSOR, FUNC_RULES_PROCESS, FUNC_FREE_MEM};
enum XsnsFunctions {FUNC_PRE_INIT, FUNC_INIT, FUNC_LOOP, FUNC_EVERY_50_MSECOND, FUNC_EVERY_100_MSECOND, FUNC_EVERY_250_MSECOND, FUNC_EVERY_SECOND, FUNC_PREP_BEFORE_TELEPERIOD,
FUNC_JSON_APPEND, FUNC_WEB_APPEND, FUNC_SAVE_BEFORE_RESTART, FUNC_COMMAND, FUNC_MQTT_SUBSCRIBE, FUNC_MQTT_INIT, FUNC_MQTT_DATA, FUNC_SET_POWER, FUNC_SHOW_SENSOR,
FUNC_RULES_PROCESS, FUNC_FREE_MEM};
const uint8_t kDefaultRfCode[9] PROGMEM = { 0x21, 0x16, 0x01, 0x0E, 0x03, 0x48, 0x2E, 0x1A, 0x00 };

View File

@ -134,7 +134,7 @@ byte reset_web_log_flag = 0; // Reset web console log
byte devices_present = 0; // Max number of devices supported
int status_update_timer = 0; // Refresh initial status
unsigned long pulse_timer[MAX_PULSETIMERS] = { 0 }; // Power off timer
uint16_t blink_timer = 0; // Power cycle timer
unsigned long blink_timer = 0; // Power cycle timer
uint16_t blink_counter = 0; // Number of blink cycles
power_t blink_power; // Blink power state
power_t blink_mask = 0; // Blink relay active mask
@ -662,9 +662,9 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_INDEX_NVALUE_ACTIVE_NVALUE, command, index, Settings.pulse_timer[index -1], GetPulseTimer(index -1));
}
else if (CMND_BLINKTIME == command_code) {
if ((payload > 2) && (payload <= 3600)) {
if ((payload > 1) && (payload <= 3600)) {
Settings.blinktime = payload;
if (blink_timer) blink_timer = Settings.blinktime;
if (blink_timer > 0) { blink_timer = millis() + (100 * payload); }
}
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_NVALUE, command, Settings.blinktime);
}
@ -1328,7 +1328,7 @@ void ExecuteCommandPower(byte device, byte state, int source)
blink_powersave = (blink_powersave & (POWER_MASK ^ mask)) | (power & mask); // Save state
blink_power = (power >> (device -1))&1; // Prep to Toggle
}
blink_timer = 1;
blink_timer = millis() + 100;
blink_counter = ((!Settings.blinkcount) ? 64000 : (Settings.blinkcount *2)) +1;
blink_mask |= mask; // Set device mask
MqttPublishPowerBlinkState(device);
@ -1862,9 +1862,6 @@ void Every50mSeconds()
ButtonHandler();
SwitchHandler(0);
XdrvCall(FUNC_EVERY_50_MSECOND);
XsnsCall(FUNC_EVERY_50_MSECOND);
}
/*-------------------------------------------------------------------------------------------*\
@ -1891,9 +1888,8 @@ void Every100mSeconds()
}
if (blink_mask) {
blink_timer--;
if (!blink_timer) {
blink_timer = Settings.blinktime;
if (TimeReached(blink_timer)) {
SetNextTimeInterval(blink_timer, 100 * Settings.blinktime);
blink_counter--;
if (!blink_counter) {
StopAllPowerBlink();
@ -2620,16 +2616,22 @@ void loop()
if (TimeReached(state_50msecond)) {
SetNextTimeInterval(state_50msecond, 50);
Every50mSeconds();
XdrvCall(FUNC_EVERY_50_MSECOND);
XsnsCall(FUNC_EVERY_50_MSECOND);
}
if (TimeReached(state_100msecond)) {
SetNextTimeInterval(state_100msecond, 100);
Every100mSeconds();
XdrvCall(FUNC_EVERY_100_MSECOND);
XsnsCall(FUNC_EVERY_100_MSECOND);
}
if (TimeReached(state_250msecond)) {
SetNextTimeInterval(state_250msecond, 250);
Every250mSeconds();
XdrvCall(FUNC_EVERY_250_MSECOND);
XsnsCall(FUNC_EVERY_250_MSECOND);
}
if (!serial_local) SerialInput();

View File

@ -2085,7 +2085,6 @@ void RtcInit()
* ADC support
\*********************************************************************************************/
uint8_t adc_counter = 0;
uint16_t adc_last_value = 0;
uint16_t AdcRead()
@ -2100,10 +2099,8 @@ uint16_t AdcRead()
}
#ifdef USE_RULES
void AdcEvery50ms()
void AdcEvery250ms()
{
adc_counter++;
if (!(adc_counter % 4)) {
uint16_t new_value = AdcRead();
if ((new_value < adc_last_value -10) || (new_value > adc_last_value +10)) {
adc_last_value = new_value;
@ -2112,7 +2109,6 @@ void AdcEvery50ms()
XdrvRulesProcess();
}
}
}
#endif // USE_RULES
void AdcShow(boolean json)
@ -2141,8 +2137,8 @@ boolean Xsns02(byte function)
if (pin[GPIO_ADC0] < 99) {
switch (function) {
#ifdef USE_RULES
case FUNC_EVERY_50_MSECOND:
AdcEvery50ms();
case FUNC_EVERY_250_MSECOND:
AdcEvery250ms();
break;
#endif // USE_RULES
case FUNC_JSON_APPEND:

View File

@ -401,9 +401,12 @@ void RulesEvery50ms()
mask <<= 1;
}
}
else {
rules_quota++;
if (rules_quota &1) { // Every 100 ms
}
}
void RulesEvery100ms()
{
if (Settings.rule_enabled) { // Any rule enabled
mqtt_data[0] = '\0';
uint16_t tele_period_save = tele_period;
tele_period = 2; // Do not allow HA updates during next function call
@ -416,8 +419,6 @@ void RulesEvery50ms()
}
}
}
}
}
void RulesEverySecond()
{
@ -595,6 +596,9 @@ boolean Xdrv10(byte function)
case FUNC_EVERY_50_MSECOND:
RulesEvery50ms();
break;
case FUNC_EVERY_100_MSECOND:
RulesEvery100ms();
break;
case FUNC_EVERY_SECOND:
RulesEverySecond();
break;

View File

@ -198,6 +198,8 @@ void ShowFreeMem(const char *where)
* FUNC_SHOW_SENSOR
* FUNC_EVERY_SECOND
* FUNC_EVERY_50_MSECOND
* FUNC_EVERY_100_MSECOND
* FUNC_EVERY_250_MSECOND
* FUNC_RULES_PROCESS
* FUNC_FREE_MEM
\*********************************************************************************************/

View File

@ -46,7 +46,7 @@ uint16_t senseair_co2 = 0;
float senseair_temperature = 0;
float senseair_humidity = 0;
uint8_t senseair_state = 0;
//uint8_t senseair_state = 0;
/*********************************************************************************************/
@ -115,11 +115,11 @@ const uint8_t start_addresses[] { 0x1A, 0x00, 0x03, 0x04, 0x05, 0x1C, 0x0A };
uint8_t senseair_read_state = 0;
uint8_t senseair_send_retry = 0;
void Senseair50ms() // Every 50 mSec
void Senseair250ms() // Every 250 mSec
{
senseair_state++;
if (6 == senseair_state) { // Every 300 mSec
senseair_state = 0;
// senseair_state++;
// if (6 == senseair_state) { // Every 300 mSec
// senseair_state = 0;
uint16_t value = 0;
bool data_ready = ModbusReceiveReady();
@ -184,7 +184,7 @@ void Senseair50ms() // Every 50 mSec
senseair_send_retry--;
}
}
// }
}
/*********************************************************************************************/
@ -244,8 +244,8 @@ boolean Xsns17(byte function)
case FUNC_INIT:
SenseairInit();
break;
case FUNC_EVERY_50_MSECOND:
Senseair50ms();
case FUNC_EVERY_250_MSECOND:
Senseair250ms();
break;
case FUNC_JSON_APPEND:
SenseairShow(1);

View File

@ -30,7 +30,7 @@
TasmotaSerial *SDM120Serial;
uint8_t sdm120_type = 1;
uint8_t sdm120_state = 0;
//uint8_t sdm120_state = 0;
float sdm120_voltage = 0;
float sdm120_current = 0;
@ -135,11 +135,11 @@ const uint16_t sdm120_start_addresses[] {
uint8_t sdm120_read_state = 0;
uint8_t sdm120_send_retry = 0;
void SDM12050ms() // Every 50 mSec
void SDM120250ms() // Every 250 mSec
{
sdm120_state++;
if (6 == sdm120_state) { // Every 300 mSec
sdm120_state = 0;
// sdm120_state++;
// if (6 == sdm120_state) { // Every 300 mSec
// sdm120_state = 0;
float value = 0;
bool data_ready = SDM120_ModbusReceiveReady();
@ -198,7 +198,7 @@ void SDM12050ms() // Every 50 mSec
} else {
sdm120_send_retry--;
}
} // end 300 ms
// } // end 300 ms
}
void SDM120Init()
@ -281,8 +281,8 @@ boolean Xsns23(byte function)
case FUNC_INIT:
SDM120Init();
break;
case FUNC_EVERY_50_MSECOND:
SDM12050ms();
case FUNC_EVERY_250_MSECOND:
SDM120250ms();
break;
case FUNC_JSON_APPEND:
SDM120Show(1);

View File

@ -30,7 +30,7 @@
TasmotaSerial *SDM630Serial;
uint8_t sdm630_type = 1;
uint8_t sdm630_state = 0;
//uint8_t sdm630_state = 0;
float sdm630_voltage[] = {0,0,0};
float sdm630_current[] = {0,0,0};
@ -141,11 +141,11 @@ const uint16_t sdm630_start_addresses[] {
uint8_t sdm630_read_state = 0;
uint8_t sdm630_send_retry = 0;
void SDM63050ms() // Every 50 mSec
void SDM630250ms() // Every 250 mSec
{
sdm630_state++;
if (6 == sdm630_state) { // Every 300 mSec
sdm630_state = 0;
// sdm630_state++;
// if (6 == sdm630_state) { // Every 300 mSec
// sdm630_state = 0;
float value = 0;
bool data_ready = SDM630_ModbusReceiveReady();
@ -236,7 +236,7 @@ void SDM63050ms() // Every 50 mSec
} else {
sdm630_send_retry--;
}
} // end 300 ms
// } // end 300 ms
}
void SDM630Init()
@ -336,8 +336,8 @@ boolean Xsns25(byte function)
case FUNC_INIT:
SDM630Init();
break;
case FUNC_EVERY_50_MSECOND:
SDM63050ms();
case FUNC_EVERY_250_MSECOND:
SDM630250ms();
break;
case FUNC_JSON_APPEND:
SDM630Show(1);

View File

@ -229,8 +229,10 @@ uint8_t xsns_index = 0;
* FUNC_JSON_APPEND
* FUNC_WEB_APPEND
* return FUNC_COMMAND
* FUNC_EVERY_SECOND
* FUNC_EVERY_50_MSECOND
* FUNC_EVERY_100_MSECOND
* FUNC_EVERY_250_MSECOND
* FUNC_EVERY_SECOND
\*********************************************************************************************/
uint8_t XsnsPresent()