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
|
/* 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
|
* 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)
|
* 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 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 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,
|
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_COMMAND, FUNC_MQTT_SUBSCRIBE, FUNC_MQTT_INIT, FUNC_MQTT_DATA, FUNC_SET_POWER, FUNC_SHOW_SENSOR, FUNC_RULES_PROCESS, FUNC_FREE_MEM};
|
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 };
|
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
|
byte devices_present = 0; // Max number of devices supported
|
||||||
int status_update_timer = 0; // Refresh initial status
|
int status_update_timer = 0; // Refresh initial status
|
||||||
unsigned long pulse_timer[MAX_PULSETIMERS] = { 0 }; // Power off timer
|
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
|
uint16_t blink_counter = 0; // Number of blink cycles
|
||||||
power_t blink_power; // Blink power state
|
power_t blink_power; // Blink power state
|
||||||
power_t blink_mask = 0; // Blink relay active mask
|
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));
|
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) {
|
else if (CMND_BLINKTIME == command_code) {
|
||||||
if ((payload > 2) && (payload <= 3600)) {
|
if ((payload > 1) && (payload <= 3600)) {
|
||||||
Settings.blinktime = payload;
|
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);
|
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_powersave = (blink_powersave & (POWER_MASK ^ mask)) | (power & mask); // Save state
|
||||||
blink_power = (power >> (device -1))&1; // Prep to Toggle
|
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_counter = ((!Settings.blinkcount) ? 64000 : (Settings.blinkcount *2)) +1;
|
||||||
blink_mask |= mask; // Set device mask
|
blink_mask |= mask; // Set device mask
|
||||||
MqttPublishPowerBlinkState(device);
|
MqttPublishPowerBlinkState(device);
|
||||||
|
@ -1862,9 +1862,6 @@ void Every50mSeconds()
|
||||||
|
|
||||||
ButtonHandler();
|
ButtonHandler();
|
||||||
SwitchHandler(0);
|
SwitchHandler(0);
|
||||||
|
|
||||||
XdrvCall(FUNC_EVERY_50_MSECOND);
|
|
||||||
XsnsCall(FUNC_EVERY_50_MSECOND);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------------------------*\
|
/*-------------------------------------------------------------------------------------------*\
|
||||||
|
@ -1891,9 +1888,8 @@ void Every100mSeconds()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (blink_mask) {
|
if (blink_mask) {
|
||||||
blink_timer--;
|
if (TimeReached(blink_timer)) {
|
||||||
if (!blink_timer) {
|
SetNextTimeInterval(blink_timer, 100 * Settings.blinktime);
|
||||||
blink_timer = Settings.blinktime;
|
|
||||||
blink_counter--;
|
blink_counter--;
|
||||||
if (!blink_counter) {
|
if (!blink_counter) {
|
||||||
StopAllPowerBlink();
|
StopAllPowerBlink();
|
||||||
|
@ -2620,16 +2616,22 @@ void loop()
|
||||||
if (TimeReached(state_50msecond)) {
|
if (TimeReached(state_50msecond)) {
|
||||||
SetNextTimeInterval(state_50msecond, 50);
|
SetNextTimeInterval(state_50msecond, 50);
|
||||||
Every50mSeconds();
|
Every50mSeconds();
|
||||||
|
XdrvCall(FUNC_EVERY_50_MSECOND);
|
||||||
|
XsnsCall(FUNC_EVERY_50_MSECOND);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TimeReached(state_100msecond)) {
|
if (TimeReached(state_100msecond)) {
|
||||||
SetNextTimeInterval(state_100msecond, 100);
|
SetNextTimeInterval(state_100msecond, 100);
|
||||||
Every100mSeconds();
|
Every100mSeconds();
|
||||||
|
XdrvCall(FUNC_EVERY_100_MSECOND);
|
||||||
|
XsnsCall(FUNC_EVERY_100_MSECOND);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TimeReached(state_250msecond)) {
|
if (TimeReached(state_250msecond)) {
|
||||||
SetNextTimeInterval(state_250msecond, 250);
|
SetNextTimeInterval(state_250msecond, 250);
|
||||||
Every250mSeconds();
|
Every250mSeconds();
|
||||||
|
XdrvCall(FUNC_EVERY_250_MSECOND);
|
||||||
|
XsnsCall(FUNC_EVERY_250_MSECOND);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!serial_local) SerialInput();
|
if (!serial_local) SerialInput();
|
||||||
|
|
|
@ -2085,7 +2085,6 @@ void RtcInit()
|
||||||
* ADC support
|
* ADC support
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
uint8_t adc_counter = 0;
|
|
||||||
uint16_t adc_last_value = 0;
|
uint16_t adc_last_value = 0;
|
||||||
|
|
||||||
uint16_t AdcRead()
|
uint16_t AdcRead()
|
||||||
|
@ -2100,17 +2099,14 @@ uint16_t AdcRead()
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_RULES
|
#ifdef USE_RULES
|
||||||
void AdcEvery50ms()
|
void AdcEvery250ms()
|
||||||
{
|
{
|
||||||
adc_counter++;
|
uint16_t new_value = AdcRead();
|
||||||
if (!(adc_counter % 4)) {
|
if ((new_value < adc_last_value -10) || (new_value > adc_last_value +10)) {
|
||||||
uint16_t new_value = AdcRead();
|
adc_last_value = new_value;
|
||||||
if ((new_value < adc_last_value -10) || (new_value > adc_last_value +10)) {
|
uint16_t value = adc_last_value / 10;
|
||||||
adc_last_value = new_value;
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"ANALOG\":{\"A0div10\":%d}}"), (value > 99) ? 100 : value);
|
||||||
uint16_t value = adc_last_value / 10;
|
XdrvRulesProcess();
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"ANALOG\":{\"A0div10\":%d}}"), (value > 99) ? 100 : value);
|
|
||||||
XdrvRulesProcess();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // USE_RULES
|
#endif // USE_RULES
|
||||||
|
@ -2141,8 +2137,8 @@ boolean Xsns02(byte function)
|
||||||
if (pin[GPIO_ADC0] < 99) {
|
if (pin[GPIO_ADC0] < 99) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
#ifdef USE_RULES
|
#ifdef USE_RULES
|
||||||
case FUNC_EVERY_50_MSECOND:
|
case FUNC_EVERY_250_MSECOND:
|
||||||
AdcEvery50ms();
|
AdcEvery250ms();
|
||||||
break;
|
break;
|
||||||
#endif // USE_RULES
|
#endif // USE_RULES
|
||||||
case FUNC_JSON_APPEND:
|
case FUNC_JSON_APPEND:
|
||||||
|
|
|
@ -401,20 +401,21 @@ void RulesEvery50ms()
|
||||||
mask <<= 1;
|
mask <<= 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
}
|
||||||
rules_quota++;
|
}
|
||||||
if (rules_quota &1) { // Every 100 ms
|
|
||||||
mqtt_data[0] = '\0';
|
void RulesEvery100ms()
|
||||||
uint16_t tele_period_save = tele_period;
|
{
|
||||||
tele_period = 2; // Do not allow HA updates during next function call
|
if (Settings.rule_enabled) { // Any rule enabled
|
||||||
XsnsNextCall(FUNC_JSON_APPEND); // ,"INA219":{"Voltage":4.494,"Current":0.020,"Power":0.089}
|
mqtt_data[0] = '\0';
|
||||||
tele_period = tele_period_save;
|
uint16_t tele_period_save = tele_period;
|
||||||
if (strlen(mqtt_data)) {
|
tele_period = 2; // Do not allow HA updates during next function call
|
||||||
mqtt_data[0] = '{'; // {"INA219":{"Voltage":4.494,"Current":0.020,"Power":0.089}
|
XsnsNextCall(FUNC_JSON_APPEND); // ,"INA219":{"Voltage":4.494,"Current":0.020,"Power":0.089}
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s}"), mqtt_data);
|
tele_period = tele_period_save;
|
||||||
RulesProcess();
|
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:
|
case FUNC_EVERY_50_MSECOND:
|
||||||
RulesEvery50ms();
|
RulesEvery50ms();
|
||||||
break;
|
break;
|
||||||
|
case FUNC_EVERY_100_MSECOND:
|
||||||
|
RulesEvery100ms();
|
||||||
|
break;
|
||||||
case FUNC_EVERY_SECOND:
|
case FUNC_EVERY_SECOND:
|
||||||
RulesEverySecond();
|
RulesEverySecond();
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -198,6 +198,8 @@ void ShowFreeMem(const char *where)
|
||||||
* FUNC_SHOW_SENSOR
|
* FUNC_SHOW_SENSOR
|
||||||
* FUNC_EVERY_SECOND
|
* FUNC_EVERY_SECOND
|
||||||
* FUNC_EVERY_50_MSECOND
|
* FUNC_EVERY_50_MSECOND
|
||||||
|
* FUNC_EVERY_100_MSECOND
|
||||||
|
* FUNC_EVERY_250_MSECOND
|
||||||
* FUNC_RULES_PROCESS
|
* FUNC_RULES_PROCESS
|
||||||
* FUNC_FREE_MEM
|
* FUNC_FREE_MEM
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
|
@ -46,7 +46,7 @@ uint16_t senseair_co2 = 0;
|
||||||
float senseair_temperature = 0;
|
float senseair_temperature = 0;
|
||||||
float senseair_humidity = 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_read_state = 0;
|
||||||
uint8_t senseair_send_retry = 0;
|
uint8_t senseair_send_retry = 0;
|
||||||
|
|
||||||
void Senseair50ms() // Every 50 mSec
|
void Senseair250ms() // Every 250 mSec
|
||||||
{
|
{
|
||||||
senseair_state++;
|
// senseair_state++;
|
||||||
if (6 == senseair_state) { // Every 300 mSec
|
// if (6 == senseair_state) { // Every 300 mSec
|
||||||
senseair_state = 0;
|
// senseair_state = 0;
|
||||||
|
|
||||||
uint16_t value = 0;
|
uint16_t value = 0;
|
||||||
bool data_ready = ModbusReceiveReady();
|
bool data_ready = ModbusReceiveReady();
|
||||||
|
@ -184,7 +184,7 @@ void Senseair50ms() // Every 50 mSec
|
||||||
senseair_send_retry--;
|
senseair_send_retry--;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
/*********************************************************************************************/
|
/*********************************************************************************************/
|
||||||
|
@ -244,8 +244,8 @@ boolean Xsns17(byte function)
|
||||||
case FUNC_INIT:
|
case FUNC_INIT:
|
||||||
SenseairInit();
|
SenseairInit();
|
||||||
break;
|
break;
|
||||||
case FUNC_EVERY_50_MSECOND:
|
case FUNC_EVERY_250_MSECOND:
|
||||||
Senseair50ms();
|
Senseair250ms();
|
||||||
break;
|
break;
|
||||||
case FUNC_JSON_APPEND:
|
case FUNC_JSON_APPEND:
|
||||||
SenseairShow(1);
|
SenseairShow(1);
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
TasmotaSerial *SDM120Serial;
|
TasmotaSerial *SDM120Serial;
|
||||||
|
|
||||||
uint8_t sdm120_type = 1;
|
uint8_t sdm120_type = 1;
|
||||||
uint8_t sdm120_state = 0;
|
//uint8_t sdm120_state = 0;
|
||||||
|
|
||||||
float sdm120_voltage = 0;
|
float sdm120_voltage = 0;
|
||||||
float sdm120_current = 0;
|
float sdm120_current = 0;
|
||||||
|
@ -135,11 +135,11 @@ const uint16_t sdm120_start_addresses[] {
|
||||||
uint8_t sdm120_read_state = 0;
|
uint8_t sdm120_read_state = 0;
|
||||||
uint8_t sdm120_send_retry = 0;
|
uint8_t sdm120_send_retry = 0;
|
||||||
|
|
||||||
void SDM12050ms() // Every 50 mSec
|
void SDM120250ms() // Every 250 mSec
|
||||||
{
|
{
|
||||||
sdm120_state++;
|
// sdm120_state++;
|
||||||
if (6 == sdm120_state) { // Every 300 mSec
|
// if (6 == sdm120_state) { // Every 300 mSec
|
||||||
sdm120_state = 0;
|
// sdm120_state = 0;
|
||||||
|
|
||||||
float value = 0;
|
float value = 0;
|
||||||
bool data_ready = SDM120_ModbusReceiveReady();
|
bool data_ready = SDM120_ModbusReceiveReady();
|
||||||
|
@ -198,7 +198,7 @@ void SDM12050ms() // Every 50 mSec
|
||||||
} else {
|
} else {
|
||||||
sdm120_send_retry--;
|
sdm120_send_retry--;
|
||||||
}
|
}
|
||||||
} // end 300 ms
|
// } // end 300 ms
|
||||||
}
|
}
|
||||||
|
|
||||||
void SDM120Init()
|
void SDM120Init()
|
||||||
|
@ -281,8 +281,8 @@ boolean Xsns23(byte function)
|
||||||
case FUNC_INIT:
|
case FUNC_INIT:
|
||||||
SDM120Init();
|
SDM120Init();
|
||||||
break;
|
break;
|
||||||
case FUNC_EVERY_50_MSECOND:
|
case FUNC_EVERY_250_MSECOND:
|
||||||
SDM12050ms();
|
SDM120250ms();
|
||||||
break;
|
break;
|
||||||
case FUNC_JSON_APPEND:
|
case FUNC_JSON_APPEND:
|
||||||
SDM120Show(1);
|
SDM120Show(1);
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
TasmotaSerial *SDM630Serial;
|
TasmotaSerial *SDM630Serial;
|
||||||
|
|
||||||
uint8_t sdm630_type = 1;
|
uint8_t sdm630_type = 1;
|
||||||
uint8_t sdm630_state = 0;
|
//uint8_t sdm630_state = 0;
|
||||||
|
|
||||||
float sdm630_voltage[] = {0,0,0};
|
float sdm630_voltage[] = {0,0,0};
|
||||||
float sdm630_current[] = {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_read_state = 0;
|
||||||
uint8_t sdm630_send_retry = 0;
|
uint8_t sdm630_send_retry = 0;
|
||||||
|
|
||||||
void SDM63050ms() // Every 50 mSec
|
void SDM630250ms() // Every 250 mSec
|
||||||
{
|
{
|
||||||
sdm630_state++;
|
// sdm630_state++;
|
||||||
if (6 == sdm630_state) { // Every 300 mSec
|
// if (6 == sdm630_state) { // Every 300 mSec
|
||||||
sdm630_state = 0;
|
// sdm630_state = 0;
|
||||||
|
|
||||||
float value = 0;
|
float value = 0;
|
||||||
bool data_ready = SDM630_ModbusReceiveReady();
|
bool data_ready = SDM630_ModbusReceiveReady();
|
||||||
|
@ -236,7 +236,7 @@ void SDM63050ms() // Every 50 mSec
|
||||||
} else {
|
} else {
|
||||||
sdm630_send_retry--;
|
sdm630_send_retry--;
|
||||||
}
|
}
|
||||||
} // end 300 ms
|
// } // end 300 ms
|
||||||
}
|
}
|
||||||
|
|
||||||
void SDM630Init()
|
void SDM630Init()
|
||||||
|
@ -336,8 +336,8 @@ boolean Xsns25(byte function)
|
||||||
case FUNC_INIT:
|
case FUNC_INIT:
|
||||||
SDM630Init();
|
SDM630Init();
|
||||||
break;
|
break;
|
||||||
case FUNC_EVERY_50_MSECOND:
|
case FUNC_EVERY_250_MSECOND:
|
||||||
SDM63050ms();
|
SDM630250ms();
|
||||||
break;
|
break;
|
||||||
case FUNC_JSON_APPEND:
|
case FUNC_JSON_APPEND:
|
||||||
SDM630Show(1);
|
SDM630Show(1);
|
||||||
|
|
|
@ -229,8 +229,10 @@ uint8_t xsns_index = 0;
|
||||||
* FUNC_JSON_APPEND
|
* FUNC_JSON_APPEND
|
||||||
* FUNC_WEB_APPEND
|
* FUNC_WEB_APPEND
|
||||||
* return FUNC_COMMAND
|
* return FUNC_COMMAND
|
||||||
* FUNC_EVERY_SECOND
|
|
||||||
* FUNC_EVERY_50_MSECOND
|
* FUNC_EVERY_50_MSECOND
|
||||||
|
* FUNC_EVERY_100_MSECOND
|
||||||
|
* FUNC_EVERY_250_MSECOND
|
||||||
|
* FUNC_EVERY_SECOND
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
uint8_t XsnsPresent()
|
uint8_t XsnsPresent()
|
||||||
|
|
Loading…
Reference in New Issue