mirror of https://github.com/arendst/Tasmota.git
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:
parent
f090050e69
commit
bbd2529914
|
@ -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)
|
||||
|
|
|
@ -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 };
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -2085,7 +2085,6 @@ void RtcInit()
|
|||
* ADC support
|
||||
\*********************************************************************************************/
|
||||
|
||||
uint8_t adc_counter = 0;
|
||||
uint16_t adc_last_value = 0;
|
||||
|
||||
uint16_t AdcRead()
|
||||
|
@ -2100,17 +2099,14 @@ 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;
|
||||
uint16_t value = adc_last_value / 10;
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"ANALOG\":{\"A0div10\":%d}}"), (value > 99) ? 100 : value);
|
||||
XdrvRulesProcess();
|
||||
}
|
||||
uint16_t new_value = AdcRead();
|
||||
if ((new_value < adc_last_value -10) || (new_value > adc_last_value +10)) {
|
||||
adc_last_value = new_value;
|
||||
uint16_t value = adc_last_value / 10;
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"ANALOG\":{\"A0div10\":%d}}"), (value > 99) ? 100 : value);
|
||||
XdrvRulesProcess();
|
||||
}
|
||||
}
|
||||
#endif // USE_RULES
|
||||
|
@ -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:
|
||||
|
|
|
@ -401,20 +401,21 @@ void RulesEvery50ms()
|
|||
mask <<= 1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
rules_quota++;
|
||||
if (rules_quota &1) { // Every 100 ms
|
||||
mqtt_data[0] = '\0';
|
||||
uint16_t tele_period_save = tele_period;
|
||||
tele_period = 2; // Do not allow HA updates during next function call
|
||||
XsnsNextCall(FUNC_JSON_APPEND); // ,"INA219":{"Voltage":4.494,"Current":0.020,"Power":0.089}
|
||||
tele_period = tele_period_save;
|
||||
if (strlen(mqtt_data)) {
|
||||
mqtt_data[0] = '{'; // {"INA219":{"Voltage":4.494,"Current":0.020,"Power":0.089}
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s}"), mqtt_data);
|
||||
RulesProcess();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
XsnsNextCall(FUNC_JSON_APPEND); // ,"INA219":{"Voltage":4.494,"Current":0.020,"Power":0.089}
|
||||
tele_period = tele_period_save;
|
||||
if (strlen(mqtt_data)) {
|
||||
mqtt_data[0] = '{'; // {"INA219":{"Voltage":4.494,"Current":0.020,"Power":0.089}
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s}"), mqtt_data);
|
||||
RulesProcess();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
\*********************************************************************************************/
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue