mirror of https://github.com/arendst/Tasmota.git
commit
22bc7ff15b
|
@ -1,7 +1,13 @@
|
||||||
/* 6.4.1.11 20190124
|
/* 6.4.1.12 20190128
|
||||||
|
* Change code use of boolean to bool and byte to uint8_t
|
||||||
|
* Change code uint8_t flags to bool flags
|
||||||
|
*
|
||||||
|
* 6.4.1.11 20190124
|
||||||
* Remove command SetOption14 as it has been superseded by command Interlock
|
* Remove command SetOption14 as it has been superseded by command Interlock
|
||||||
* Remove command SetOption63 as it has been superseded by command Interlock
|
* Remove command SetOption63 as it has been superseded by command Interlock
|
||||||
* Add command Interlock 0 / 1 / 1,2 3,4 .. to control interlock ON/OFF and add up to 8 relays in 1 to 4 interlock groups (#5014)
|
* Add command Interlock 0 / 1 / 1,2 3,4 .. to control interlock ON/OFF and add up to 8 relays in 1 to 4 interlock groups (#5014)
|
||||||
|
* Add core version conditional compile options to provided PWM files (#4917)
|
||||||
|
* Add support for inverted buttons and inverted buttons without pullup (#4914)
|
||||||
*
|
*
|
||||||
* 6.4.1.10 20190121
|
* 6.4.1.10 20190121
|
||||||
* Fix Hass discovery of MHZ19(B) sensors (#4992)
|
* Fix Hass discovery of MHZ19(B) sensors (#4992)
|
||||||
|
|
|
@ -19,10 +19,10 @@
|
||||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Use PWM from core 2.4.0 as all other version produce LED flickering when settings are saved to flash. Still true for 2.5.0
|
// Use PWM from core 2.4.0 as all versions below 2.5.0-beta3 produce LED flickering when settings are saved to flash
|
||||||
//#include <core_version.h>
|
#include <core_version.h>
|
||||||
//#if defined(ARDUINO_ESP8266_RELEASE_2_3_0) || defined(ARDUINO_ESP8266_RELEASE_2_4_0) || defined(ARDUINO_ESP8266_RELEASE_2_4_1) || defined(ARDUINO_ESP8266_RELEASE_2_4_2)
|
#if defined(ARDUINO_ESP8266_RELEASE_2_3_0) || defined(ARDUINO_ESP8266_RELEASE_2_4_0) || defined(ARDUINO_ESP8266_RELEASE_2_4_1) || defined(ARDUINO_ESP8266_RELEASE_2_4_2)
|
||||||
//#warning **** Tasmota is using v2.4.0 timer.c as planned ****
|
#warning **** Tasmota is using v2.4.0 timer.c as planned ****
|
||||||
|
|
||||||
#include "wiring_private.h"
|
#include "wiring_private.h"
|
||||||
#include "pins_arduino.h"
|
#include "pins_arduino.h"
|
||||||
|
@ -108,4 +108,4 @@ void ICACHE_RAM_ATTR timer0_detachInterrupt(void) {
|
||||||
ETS_CCOMPARE0_DISABLE();
|
ETS_CCOMPARE0_DISABLE();
|
||||||
}
|
}
|
||||||
|
|
||||||
//#endif // ARDUINO_ESP8266_RELEASE
|
#endif // ARDUINO_ESP8266_RELEASE
|
||||||
|
|
|
@ -19,10 +19,10 @@
|
||||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Use PWM from core 2.4.0 as all other version produce LED flickering when settings are saved to flash. Still true for 2.5.0
|
// Use PWM from core 2.4.0 as all versions below 2.5.0-beta3 produce LED flickering when settings are saved to flash
|
||||||
//#include <core_version.h>
|
#include <core_version.h>
|
||||||
//#if defined(ARDUINO_ESP8266_RELEASE_2_3_0) || defined(ARDUINO_ESP8266_RELEASE_2_4_0) || defined(ARDUINO_ESP8266_RELEASE_2_4_1) || defined(ARDUINO_ESP8266_RELEASE_2_4_2)
|
#if defined(ARDUINO_ESP8266_RELEASE_2_3_0) || defined(ARDUINO_ESP8266_RELEASE_2_4_0) || defined(ARDUINO_ESP8266_RELEASE_2_4_1) || defined(ARDUINO_ESP8266_RELEASE_2_4_2)
|
||||||
//#warning **** Tasmota is using v2.4.0 wiring_digital.c as planned ****
|
#warning **** Tasmota is using v2.4.0 wiring_digital.c as planned ****
|
||||||
|
|
||||||
#define ARDUINO_MAIN
|
#define ARDUINO_MAIN
|
||||||
#include "wiring_private.h"
|
#include "wiring_private.h"
|
||||||
|
@ -214,4 +214,4 @@ extern int digitalRead(uint8_t pin) __attribute__ ((weak, alias("__digitalRead")
|
||||||
extern void attachInterrupt(uint8_t pin, voidFuncPtr handler, int mode) __attribute__ ((weak, alias("__attachInterrupt")));
|
extern void attachInterrupt(uint8_t pin, voidFuncPtr handler, int mode) __attribute__ ((weak, alias("__attachInterrupt")));
|
||||||
extern void detachInterrupt(uint8_t pin) __attribute__ ((weak, alias("__detachInterrupt")));
|
extern void detachInterrupt(uint8_t pin) __attribute__ ((weak, alias("__detachInterrupt")));
|
||||||
|
|
||||||
//#endif // ARDUINO_ESP8266_RELEASE
|
#endif // ARDUINO_ESP8266_RELEASE
|
||||||
|
|
|
@ -19,10 +19,10 @@
|
||||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Use PWM from core 2.4.0 as all other version produce flicker when settings are saved to flash. Still true for 2.5.0
|
// Use PWM from core 2.4.0 as all versions below 2.5.0-beta3 produce LED flickering when settings are saved to flash
|
||||||
//#include <core_version.h>
|
#include <core_version.h>
|
||||||
//#if defined(ARDUINO_ESP8266_RELEASE_2_3_0) || defined(ARDUINO_ESP8266_RELEASE_2_4_0) || defined(ARDUINO_ESP8266_RELEASE_2_4_1) || defined(ARDUINO_ESP8266_RELEASE_2_4_2)
|
#if defined(ARDUINO_ESP8266_RELEASE_2_3_0) || defined(ARDUINO_ESP8266_RELEASE_2_4_0) || defined(ARDUINO_ESP8266_RELEASE_2_4_1) || defined(ARDUINO_ESP8266_RELEASE_2_4_2)
|
||||||
//#warning **** Tasmota is using v2.4.0 wiring_pwm.c as planned ****
|
#warning **** Tasmota is using v2.4.0 wiring_pwm.c as planned ****
|
||||||
|
|
||||||
#include "wiring_private.h"
|
#include "wiring_private.h"
|
||||||
#include "pins_arduino.h"
|
#include "pins_arduino.h"
|
||||||
|
@ -226,4 +226,4 @@ extern void analogWrite(uint8_t pin, int val) __attribute__ ((weak, alias("__ana
|
||||||
extern void analogWriteFreq(uint32_t freq) __attribute__ ((weak, alias("__analogWriteFreq")));
|
extern void analogWriteFreq(uint32_t freq) __attribute__ ((weak, alias("__analogWriteFreq")));
|
||||||
extern void analogWriteRange(uint32_t range) __attribute__ ((weak, alias("__analogWriteRange")));
|
extern void analogWriteRange(uint32_t range) __attribute__ ((weak, alias("__analogWriteRange")));
|
||||||
|
|
||||||
//#endif // ARDUINO_ESP8266_RELEASE
|
#endif // ARDUINO_ESP8266_RELEASE
|
||||||
|
|
|
@ -183,21 +183,21 @@ struct SYSCFG {
|
||||||
char ota_url[101]; // 017
|
char ota_url[101]; // 017
|
||||||
char mqtt_prefix[3][11]; // 07C
|
char mqtt_prefix[3][11]; // 07C
|
||||||
uint8_t baudrate; // 09D
|
uint8_t baudrate; // 09D
|
||||||
byte seriallog_level; // 09E
|
uint8_t seriallog_level; // 09E
|
||||||
uint8_t sta_config; // 09F
|
uint8_t sta_config; // 09F
|
||||||
byte sta_active; // 0A0
|
uint8_t sta_active; // 0A0
|
||||||
char sta_ssid[2][33]; // 0A1 - Keep together with sta_pwd as being copied as one chunck with reset 4/5
|
char sta_ssid[2][33]; // 0A1 - Keep together with sta_pwd as being copied as one chunck with reset 4/5
|
||||||
char sta_pwd[2][65]; // 0E3 - Keep together with sta_ssid as being copied as one chunck with reset 4/5
|
char sta_pwd[2][65]; // 0E3 - Keep together with sta_ssid as being copied as one chunck with reset 4/5
|
||||||
char hostname[33]; // 165
|
char hostname[33]; // 165
|
||||||
char syslog_host[33]; // 186
|
char syslog_host[33]; // 186
|
||||||
uint8_t rule_stop; // 1A7
|
uint8_t rule_stop; // 1A7
|
||||||
uint16_t syslog_port; // 1A8
|
uint16_t syslog_port; // 1A8
|
||||||
byte syslog_level; // 1AA
|
uint8_t syslog_level; // 1AA
|
||||||
uint8_t webserver; // 1AB
|
uint8_t webserver; // 1AB
|
||||||
byte weblog_level; // 1AC
|
uint8_t weblog_level; // 1AC
|
||||||
uint8_t mqtt_fingerprint[2][20]; // 1AD
|
uint8_t mqtt_fingerprint[2][20]; // 1AD
|
||||||
|
|
||||||
byte free_1D5[20]; // 1D5 Free since 5.12.0e
|
uint8_t free_1D5[20]; // 1D5 Free since 5.12.0e
|
||||||
|
|
||||||
char mqtt_host[33]; // 1E9
|
char mqtt_host[33]; // 1E9
|
||||||
uint16_t mqtt_port; // 20A
|
uint16_t mqtt_port; // 20A
|
||||||
|
@ -282,13 +282,13 @@ struct SYSCFG {
|
||||||
uint8_t light_speed; // 4A2
|
uint8_t light_speed; // 4A2
|
||||||
uint8_t light_scheme; // 4A3
|
uint8_t light_scheme; // 4A3
|
||||||
uint8_t light_width; // 4A4
|
uint8_t light_width; // 4A4
|
||||||
byte knx_GA_registered; // 4A5 Number of Group Address to read
|
uint8_t knx_GA_registered; // 4A5 Number of Group Address to read
|
||||||
uint16_t light_wakeup; // 4A6
|
uint16_t light_wakeup; // 4A6
|
||||||
byte knx_CB_registered; // 4A8 Number of Group Address to write
|
uint8_t knx_CB_registered; // 4A8 Number of Group Address to write
|
||||||
char web_password[33]; // 4A9
|
char web_password[33]; // 4A9
|
||||||
uint8_t interlock[MAX_INTERLOCKS]; // 4CA
|
uint8_t interlock[MAX_INTERLOCKS]; // 4CA
|
||||||
char ntp_server[3][33]; // 4CE
|
char ntp_server[3][33]; // 4CE
|
||||||
byte ina219_mode; // 531
|
uint8_t ina219_mode; // 531
|
||||||
uint16_t pulse_timer[MAX_PULSETIMERS]; // 532
|
uint16_t pulse_timer[MAX_PULSETIMERS]; // 532
|
||||||
uint16_t button_debounce; // 542
|
uint16_t button_debounce; // 542
|
||||||
uint32_t ip_address[4]; // 544
|
uint32_t ip_address[4]; // 544
|
||||||
|
@ -307,17 +307,17 @@ struct SYSCFG {
|
||||||
uint16_t knx_physsical_addr; // 6B8 (address_t is a uint16_t)
|
uint16_t knx_physsical_addr; // 6B8 (address_t is a uint16_t)
|
||||||
uint16_t knx_GA_addr[MAX_KNX_GA]; // 6BA (address_t is a uint16_t) x KNX_max_GA
|
uint16_t knx_GA_addr[MAX_KNX_GA]; // 6BA (address_t is a uint16_t) x KNX_max_GA
|
||||||
uint16_t knx_CB_addr[MAX_KNX_CB]; // 6CE (address_t is a uint16_t) x KNX_max_CB
|
uint16_t knx_CB_addr[MAX_KNX_CB]; // 6CE (address_t is a uint16_t) x KNX_max_CB
|
||||||
byte knx_GA_param[MAX_KNX_GA]; // 6E2 Type of Input (relay changed, button pressed, sensor read <-teleperiod)
|
uint8_t knx_GA_param[MAX_KNX_GA]; // 6E2 Type of Input (relay changed, button pressed, sensor read <-teleperiod)
|
||||||
byte knx_CB_param[MAX_KNX_CB]; // 6EC Type of Output (set relay, toggle relay, reply sensor value)
|
uint8_t knx_CB_param[MAX_KNX_CB]; // 6EC Type of Output (set relay, toggle relay, reply sensor value)
|
||||||
Mcp230xxCfg mcp230xx_config[16]; // 6F6
|
Mcp230xxCfg mcp230xx_config[16]; // 6F6
|
||||||
uint8_t mcp230xx_int_prio; // 716
|
uint8_t mcp230xx_int_prio; // 716
|
||||||
|
|
||||||
byte free_717[1]; // 717
|
uint8_t free_717[1]; // 717
|
||||||
|
|
||||||
uint16_t mcp230xx_int_timer; // 718
|
uint16_t mcp230xx_int_timer; // 718
|
||||||
uint8_t rgbwwTable[5]; // 71A
|
uint8_t rgbwwTable[5]; // 71A
|
||||||
|
|
||||||
byte free_71F[117]; // 71F
|
uint8_t free_71F[117]; // 71F
|
||||||
|
|
||||||
uint32_t drivers[3]; // 794
|
uint32_t drivers[3]; // 794
|
||||||
uint32_t monitors; // 7A0
|
uint32_t monitors; // 7A0
|
||||||
|
@ -326,7 +326,7 @@ struct SYSCFG {
|
||||||
uint32_t energy_kWhtotal_time; // 7B4
|
uint32_t energy_kWhtotal_time; // 7B4
|
||||||
unsigned long weight_item; // 7B8 Weight of one item in gram * 10
|
unsigned long weight_item; // 7B8 Weight of one item in gram * 10
|
||||||
|
|
||||||
byte free_7BC[2]; // 7BC
|
uint8_t free_7BC[2]; // 7BC
|
||||||
|
|
||||||
uint16_t weight_max; // 7BE Total max weight in kilogram
|
uint16_t weight_max; // 7BE Total max weight in kilogram
|
||||||
unsigned long weight_reference; // 7C0 Reference weight in gram
|
unsigned long weight_reference; // 7C0 Reference weight in gram
|
||||||
|
@ -346,7 +346,7 @@ struct RTCRBT {
|
||||||
|
|
||||||
struct RTCMEM {
|
struct RTCMEM {
|
||||||
uint16_t valid; // 290 (RTC memory offset 100)
|
uint16_t valid; // 290 (RTC memory offset 100)
|
||||||
byte oswatch_blocked_loop; // 292
|
uint8_t oswatch_blocked_loop; // 292
|
||||||
uint8_t ota_loader; // 293
|
uint8_t ota_loader; // 293
|
||||||
unsigned long energy_kWhtoday; // 294
|
unsigned long energy_kWhtoday; // 294
|
||||||
unsigned long energy_kWhtotal; // 298
|
unsigned long energy_kWhtotal; // 298
|
||||||
|
@ -376,7 +376,7 @@ struct XDRVMAILBOX {
|
||||||
uint16_t data_len;
|
uint16_t data_len;
|
||||||
uint16_t payload16;
|
uint16_t payload16;
|
||||||
int16_t payload;
|
int16_t payload;
|
||||||
uint8_t grpflg;
|
bool grpflg;
|
||||||
uint8_t notused;
|
uint8_t notused;
|
||||||
char *topic;
|
char *topic;
|
||||||
char *data;
|
char *data;
|
||||||
|
|
|
@ -97,7 +97,7 @@ void RtcSettingsLoad(void)
|
||||||
RtcSettings.valid = RTC_MEM_VALID;
|
RtcSettings.valid = RTC_MEM_VALID;
|
||||||
RtcSettings.energy_kWhtoday = Settings.energy_kWhtoday;
|
RtcSettings.energy_kWhtoday = Settings.energy_kWhtoday;
|
||||||
RtcSettings.energy_kWhtotal = Settings.energy_kWhtotal;
|
RtcSettings.energy_kWhtotal = Settings.energy_kWhtotal;
|
||||||
for (byte i = 0; i < MAX_COUNTERS; i++) {
|
for (uint8_t i = 0; i < MAX_COUNTERS; i++) {
|
||||||
RtcSettings.pulse_counter[i] = Settings.pulse_counter[i];
|
RtcSettings.pulse_counter[i] = Settings.pulse_counter[i];
|
||||||
}
|
}
|
||||||
RtcSettings.power = Settings.power;
|
RtcSettings.power = Settings.power;
|
||||||
|
@ -106,7 +106,7 @@ void RtcSettingsLoad(void)
|
||||||
rtc_settings_crc = GetRtcSettingsCrc();
|
rtc_settings_crc = GetRtcSettingsCrc();
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean RtcSettingsValid(void)
|
bool RtcSettingsValid(void)
|
||||||
{
|
{
|
||||||
return (RTC_MEM_VALID == RtcSettings.valid);
|
return (RTC_MEM_VALID == RtcSettings.valid);
|
||||||
}
|
}
|
||||||
|
@ -147,7 +147,7 @@ void RtcRebootLoad(void)
|
||||||
rtc_reboot_crc = GetRtcRebootCrc();
|
rtc_reboot_crc = GetRtcRebootCrc();
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean RtcRebootValid(void)
|
bool RtcRebootValid(void)
|
||||||
{
|
{
|
||||||
return (RTC_MEM_VALID == RtcReboot.valid);
|
return (RTC_MEM_VALID == RtcReboot.valid);
|
||||||
}
|
}
|
||||||
|
@ -381,7 +381,7 @@ uint32_t GetSettingsAddress(void)
|
||||||
return settings_location * SPI_FLASH_SEC_SIZE;
|
return settings_location * SPI_FLASH_SEC_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SettingsSave(byte rotate)
|
void SettingsSave(uint8_t rotate)
|
||||||
{
|
{
|
||||||
/* Save configuration in eeprom or one of 7 slots below
|
/* Save configuration in eeprom or one of 7 slots below
|
||||||
*
|
*
|
||||||
|
@ -430,7 +430,7 @@ void SettingsSave(byte rotate)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!stop_flash_rotate && rotate) {
|
if (!stop_flash_rotate && rotate) {
|
||||||
for (byte i = 1; i < CFG_ROTATES; i++) {
|
for (uint8_t i = 1; i < CFG_ROTATES; i++) {
|
||||||
ESP.flashEraseSector(settings_location -i); // Delete previous configurations by resetting to 0xFF
|
ESP.flashEraseSector(settings_location -i); // Delete previous configurations by resetting to 0xFF
|
||||||
delay(1);
|
delay(1);
|
||||||
}
|
}
|
||||||
|
@ -457,7 +457,7 @@ void SettingsLoad(void)
|
||||||
|
|
||||||
bool bad_crc = false;
|
bool bad_crc = false;
|
||||||
settings_location = SETTINGS_LOCATION +1;
|
settings_location = SETTINGS_LOCATION +1;
|
||||||
for (byte i = 0; i < CFG_ROTATES; i++) {
|
for (uint8_t i = 0; i < CFG_ROTATES; i++) {
|
||||||
settings_location--;
|
settings_location--;
|
||||||
ESP.flashRead(settings_location * SPI_FLASH_SEC_SIZE, (uint32*)&Settings, sizeof(SYSCFG));
|
ESP.flashRead(settings_location * SPI_FLASH_SEC_SIZE, (uint32*)&Settings, sizeof(SYSCFG));
|
||||||
ESP.flashRead((settings_location -1) * SPI_FLASH_SEC_SIZE, (uint32*)&_SettingsH, sizeof(SYSCFGH));
|
ESP.flashRead((settings_location -1) * SPI_FLASH_SEC_SIZE, (uint32*)&_SettingsH, sizeof(SYSCFGH));
|
||||||
|
@ -495,7 +495,7 @@ void SettingsErase(uint8_t type)
|
||||||
_sectorEnd = SETTINGS_LOCATION +5;
|
_sectorEnd = SETTINGS_LOCATION +5;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean _serialoutput = (LOG_LEVEL_DEBUG_MORE <= seriallog_level);
|
bool _serialoutput = (LOG_LEVEL_DEBUG_MORE <= seriallog_level);
|
||||||
|
|
||||||
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_APPLICATION D_ERASE " %d " D_UNIT_SECTORS), _sectorEnd - _sectorStart);
|
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_APPLICATION D_ERASE " %d " D_UNIT_SECTORS), _sectorEnd - _sectorStart);
|
||||||
AddLog(LOG_LEVEL_DEBUG);
|
AddLog(LOG_LEVEL_DEBUG);
|
||||||
|
@ -574,8 +574,9 @@ void SettingsDefaultSet2(void)
|
||||||
|
|
||||||
// Module
|
// Module
|
||||||
// Settings.flag.interlock = 0;
|
// Settings.flag.interlock = 0;
|
||||||
|
Settings.interlock[0] = 0xFF; // Legacy support using all relays in one interlock group
|
||||||
Settings.module = MODULE;
|
Settings.module = MODULE;
|
||||||
// for (byte i = 0; i < sizeof(Settings.my_gp); i++) { Settings.my_gp.io[i] = GPIO_NONE; }
|
// for (uint8_t i = 0; i < sizeof(Settings.my_gp); i++) { Settings.my_gp.io[i] = GPIO_NONE; }
|
||||||
strlcpy(Settings.friendlyname[0], FRIENDLY_NAME, sizeof(Settings.friendlyname[0]));
|
strlcpy(Settings.friendlyname[0], FRIENDLY_NAME, sizeof(Settings.friendlyname[0]));
|
||||||
strlcpy(Settings.friendlyname[1], FRIENDLY_NAME"2", sizeof(Settings.friendlyname[1]));
|
strlcpy(Settings.friendlyname[1], FRIENDLY_NAME"2", sizeof(Settings.friendlyname[1]));
|
||||||
strlcpy(Settings.friendlyname[2], FRIENDLY_NAME"3", sizeof(Settings.friendlyname[2]));
|
strlcpy(Settings.friendlyname[2], FRIENDLY_NAME"3", sizeof(Settings.friendlyname[2]));
|
||||||
|
@ -590,7 +591,7 @@ void SettingsDefaultSet2(void)
|
||||||
Settings.blinkcount = APP_BLINKCOUNT;
|
Settings.blinkcount = APP_BLINKCOUNT;
|
||||||
Settings.ledstate = APP_LEDSTATE;
|
Settings.ledstate = APP_LEDSTATE;
|
||||||
Settings.pulse_timer[0] = APP_PULSETIME;
|
Settings.pulse_timer[0] = APP_PULSETIME;
|
||||||
// for (byte i = 1; i < MAX_PULSETIMERS; i++) { Settings.pulse_timer[i] = 0; }
|
// for (uint8_t i = 1; i < MAX_PULSETIMERS; i++) { Settings.pulse_timer[i] = 0; }
|
||||||
|
|
||||||
// Serial
|
// Serial
|
||||||
Settings.baudrate = APP_BAUDRATE / 1200;
|
Settings.baudrate = APP_BAUDRATE / 1200;
|
||||||
|
@ -630,7 +631,7 @@ void SettingsDefaultSet2(void)
|
||||||
Settings.param[P_HOLD_TIME] = KEY_HOLD_TIME; // Default 4 seconds hold time
|
Settings.param[P_HOLD_TIME] = KEY_HOLD_TIME; // Default 4 seconds hold time
|
||||||
|
|
||||||
// Switch
|
// Switch
|
||||||
for (byte i = 0; i < MAX_SWITCHES; i++) { Settings.switchmode[i] = SWITCH_MODE; }
|
for (uint8_t i = 0; i < MAX_SWITCHES; i++) { Settings.switchmode[i] = SWITCH_MODE; }
|
||||||
|
|
||||||
// MQTT
|
// MQTT
|
||||||
Settings.flag.mqtt_enabled = MQTT_USE;
|
Settings.flag.mqtt_enabled = MQTT_USE;
|
||||||
|
@ -664,12 +665,12 @@ void SettingsDefaultSet2(void)
|
||||||
char fingerprint[60];
|
char fingerprint[60];
|
||||||
strlcpy(fingerprint, MQTT_FINGERPRINT1, sizeof(fingerprint));
|
strlcpy(fingerprint, MQTT_FINGERPRINT1, sizeof(fingerprint));
|
||||||
char *p = fingerprint;
|
char *p = fingerprint;
|
||||||
for (byte i = 0; i < 20; i++) {
|
for (uint8_t i = 0; i < 20; i++) {
|
||||||
Settings.mqtt_fingerprint[0][i] = strtol(p, &p, 16);
|
Settings.mqtt_fingerprint[0][i] = strtol(p, &p, 16);
|
||||||
}
|
}
|
||||||
strlcpy(fingerprint, MQTT_FINGERPRINT2, sizeof(fingerprint));
|
strlcpy(fingerprint, MQTT_FINGERPRINT2, sizeof(fingerprint));
|
||||||
p = fingerprint;
|
p = fingerprint;
|
||||||
for (byte i = 0; i < 20; i++) {
|
for (uint8_t i = 0; i < 20; i++) {
|
||||||
Settings.mqtt_fingerprint[1][i] = strtol(p, &p, 16);
|
Settings.mqtt_fingerprint[1][i] = strtol(p, &p, 16);
|
||||||
}
|
}
|
||||||
Settings.tele_period = TELE_PERIOD;
|
Settings.tele_period = TELE_PERIOD;
|
||||||
|
@ -705,17 +706,17 @@ void SettingsDefaultSet2(void)
|
||||||
RtcSettings.energy_kWhtotal = 0;
|
RtcSettings.energy_kWhtotal = 0;
|
||||||
|
|
||||||
// RF Bridge
|
// RF Bridge
|
||||||
// for (byte i = 0; i < 17; i++) { Settings.rf_code[i][0] = 0; }
|
// for (uint8_t i = 0; i < 17; i++) { Settings.rf_code[i][0] = 0; }
|
||||||
memcpy_P(Settings.rf_code[0], kDefaultRfCode, 9);
|
memcpy_P(Settings.rf_code[0], kDefaultRfCode, 9);
|
||||||
|
|
||||||
// Domoticz
|
// Domoticz
|
||||||
Settings.domoticz_update_timer = DOMOTICZ_UPDATE_TIMER;
|
Settings.domoticz_update_timer = DOMOTICZ_UPDATE_TIMER;
|
||||||
// for (byte i = 0; i < MAX_DOMOTICZ_IDX; i++) {
|
// for (uint8_t i = 0; i < MAX_DOMOTICZ_IDX; i++) {
|
||||||
// Settings.domoticz_relay_idx[i] = 0;
|
// Settings.domoticz_relay_idx[i] = 0;
|
||||||
// Settings.domoticz_key_idx[i] = 0;
|
// Settings.domoticz_key_idx[i] = 0;
|
||||||
// Settings.domoticz_switch_idx[i] = 0;
|
// Settings.domoticz_switch_idx[i] = 0;
|
||||||
// }
|
// }
|
||||||
// for (byte i = 0; i < MAX_DOMOTICZ_SNS_IDX; i++) {
|
// for (uint8_t i = 0; i < MAX_DOMOTICZ_SNS_IDX; i++) {
|
||||||
// Settings.domoticz_sensor_idx[i] = 0;
|
// Settings.domoticz_sensor_idx[i] = 0;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
@ -730,7 +731,7 @@ void SettingsDefaultSet2(void)
|
||||||
// Rules
|
// Rules
|
||||||
// Settings.rule_enabled = 0;
|
// Settings.rule_enabled = 0;
|
||||||
// Settings.rule_once = 0;
|
// Settings.rule_once = 0;
|
||||||
// for (byte i = 1; i < MAX_RULE_SETS; i++) { Settings.rules[i][0] = '\0'; }
|
// for (uint8_t i = 1; i < MAX_RULE_SETS; i++) { Settings.rules[i][0] = '\0'; }
|
||||||
Settings.flag2.calc_resolution = CALC_RESOLUTION;
|
Settings.flag2.calc_resolution = CALC_RESOLUTION;
|
||||||
|
|
||||||
// Home Assistant
|
// Home Assistant
|
||||||
|
@ -748,7 +749,7 @@ void SettingsDefaultSet2(void)
|
||||||
//Settings.flag.decimal_text = 0;
|
//Settings.flag.decimal_text = 0;
|
||||||
Settings.pwm_frequency = PWM_FREQ;
|
Settings.pwm_frequency = PWM_FREQ;
|
||||||
Settings.pwm_range = PWM_RANGE;
|
Settings.pwm_range = PWM_RANGE;
|
||||||
for (byte i = 0; i < MAX_PWMS; i++) {
|
for (uint8_t i = 0; i < MAX_PWMS; i++) {
|
||||||
Settings.light_color[i] = 255;
|
Settings.light_color[i] = 255;
|
||||||
// Settings.pwm_value[i] = 0;
|
// Settings.pwm_value[i] = 0;
|
||||||
}
|
}
|
||||||
|
@ -777,8 +778,8 @@ void SettingsDefaultSet2(void)
|
||||||
strlcpy(Settings.ntp_server[0], NTP_SERVER1, sizeof(Settings.ntp_server[0]));
|
strlcpy(Settings.ntp_server[0], NTP_SERVER1, sizeof(Settings.ntp_server[0]));
|
||||||
strlcpy(Settings.ntp_server[1], NTP_SERVER2, sizeof(Settings.ntp_server[1]));
|
strlcpy(Settings.ntp_server[1], NTP_SERVER2, sizeof(Settings.ntp_server[1]));
|
||||||
strlcpy(Settings.ntp_server[2], NTP_SERVER3, sizeof(Settings.ntp_server[2]));
|
strlcpy(Settings.ntp_server[2], NTP_SERVER3, sizeof(Settings.ntp_server[2]));
|
||||||
for (byte j = 0; j < 3; j++) {
|
for (uint8_t j = 0; j < 3; j++) {
|
||||||
for (byte i = 0; i < strlen(Settings.ntp_server[j]); i++) {
|
for (uint8_t i = 0; i < strlen(Settings.ntp_server[j]); i++) {
|
||||||
if (Settings.ntp_server[j][i] == ',') {
|
if (Settings.ntp_server[j][i] == ',') {
|
||||||
Settings.ntp_server[j][i] = '.';
|
Settings.ntp_server[j][i] = '.';
|
||||||
}
|
}
|
||||||
|
@ -791,7 +792,7 @@ void SettingsDefaultSet2(void)
|
||||||
Settings.button_debounce = KEY_DEBOUNCE_TIME;
|
Settings.button_debounce = KEY_DEBOUNCE_TIME;
|
||||||
Settings.switch_debounce = SWITCH_DEBOUNCE_TIME;
|
Settings.switch_debounce = SWITCH_DEBOUNCE_TIME;
|
||||||
|
|
||||||
for (byte j = 0; j < 5; j++) {
|
for (uint8_t j = 0; j < 5; j++) {
|
||||||
Settings.rgbwwTable[j] = 255;
|
Settings.rgbwwTable[j] = 255;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -872,7 +873,7 @@ void SettingsDelta(void)
|
||||||
if (Settings.version != VERSION) { // Fix version dependent changes
|
if (Settings.version != VERSION) { // Fix version dependent changes
|
||||||
|
|
||||||
if (Settings.version < 0x05050000) {
|
if (Settings.version < 0x05050000) {
|
||||||
for (byte i = 0; i < 17; i++) { Settings.rf_code[i][0] = 0; }
|
for (uint8_t i = 0; i < 17; i++) { Settings.rf_code[i][0] = 0; }
|
||||||
memcpy_P(Settings.rf_code[0], kDefaultRfCode, 9);
|
memcpy_P(Settings.rf_code[0], kDefaultRfCode, 9);
|
||||||
}
|
}
|
||||||
if (Settings.version < 0x05080000) {
|
if (Settings.version < 0x05080000) {
|
||||||
|
@ -894,12 +895,12 @@ void SettingsDelta(void)
|
||||||
Settings.altitude = 0;
|
Settings.altitude = 0;
|
||||||
}
|
}
|
||||||
if (Settings.version < 0x0508000B) {
|
if (Settings.version < 0x0508000B) {
|
||||||
for (byte i = 0; i < sizeof(Settings.my_gp); i++) { // Move GPIO_LEDs
|
for (uint8_t i = 0; i < sizeof(Settings.my_gp); i++) { // Move GPIO_LEDs
|
||||||
if ((Settings.my_gp.io[i] >= 25) && (Settings.my_gp.io[i] <= 32)) { // Was GPIO_LED1
|
if ((Settings.my_gp.io[i] >= 25) && (Settings.my_gp.io[i] <= 32)) { // Was GPIO_LED1
|
||||||
Settings.my_gp.io[i] += 23; // Move GPIO_LED1
|
Settings.my_gp.io[i] += 23; // Move GPIO_LED1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (byte i = 0; i < MAX_PWMS; i++) { // Move pwm_value and reset additional pulse_timerrs
|
for (uint8_t i = 0; i < MAX_PWMS; i++) { // Move pwm_value and reset additional pulse_timerrs
|
||||||
Settings.pwm_value[i] = Settings.pulse_timer[4 +i];
|
Settings.pwm_value[i] = Settings.pulse_timer[4 +i];
|
||||||
Settings.pulse_timer[4 +i] = 0;
|
Settings.pulse_timer[4 +i] = 0;
|
||||||
}
|
}
|
||||||
|
@ -930,7 +931,7 @@ void SettingsDelta(void)
|
||||||
char fingerprint[60];
|
char fingerprint[60];
|
||||||
memcpy(fingerprint, Settings.mqtt_fingerprint, sizeof(fingerprint));
|
memcpy(fingerprint, Settings.mqtt_fingerprint, sizeof(fingerprint));
|
||||||
char *p = fingerprint;
|
char *p = fingerprint;
|
||||||
for (byte i = 0; i < 20; i++) {
|
for (uint8_t i = 0; i < 20; i++) {
|
||||||
Settings.mqtt_fingerprint[0][i] = strtol(p, &p, 16);
|
Settings.mqtt_fingerprint[0][i] = strtol(p, &p, 16);
|
||||||
Settings.mqtt_fingerprint[1][i] = Settings.mqtt_fingerprint[0][i];
|
Settings.mqtt_fingerprint[1][i] = Settings.mqtt_fingerprint[0][i];
|
||||||
}
|
}
|
||||||
|
@ -965,7 +966,7 @@ void SettingsDelta(void)
|
||||||
SettingsDefaultSet_5_13_1c();
|
SettingsDefaultSet_5_13_1c();
|
||||||
}
|
}
|
||||||
if (Settings.version < 0x050E0002) {
|
if (Settings.version < 0x050E0002) {
|
||||||
for (byte i = 1; i < MAX_RULE_SETS; i++) { Settings.rules[i][0] = '\0'; }
|
for (uint8_t i = 1; i < MAX_RULE_SETS; i++) { Settings.rules[i][0] = '\0'; }
|
||||||
Settings.rule_enabled = Settings.flag.mqtt_serial_raw; // Was rules_enabled until 5.14.0b
|
Settings.rule_enabled = Settings.flag.mqtt_serial_raw; // Was rules_enabled until 5.14.0b
|
||||||
Settings.rule_once = Settings.flag.pressure_conversion; // Was rules_once until 5.14.0b
|
Settings.rule_once = Settings.flag.pressure_conversion; // Was rules_once until 5.14.0b
|
||||||
}
|
}
|
||||||
|
@ -974,14 +975,14 @@ void SettingsDelta(void)
|
||||||
Settings.cfg_crc = GetSettingsCrc();
|
Settings.cfg_crc = GetSettingsCrc();
|
||||||
}
|
}
|
||||||
if (Settings.version < 0x06000002) {
|
if (Settings.version < 0x06000002) {
|
||||||
for (byte i = 0; i < MAX_SWITCHES; i++) {
|
for (uint8_t i = 0; i < MAX_SWITCHES; i++) {
|
||||||
if (i < 4) {
|
if (i < 4) {
|
||||||
Settings.switchmode[i] = Settings.interlock[i];
|
Settings.switchmode[i] = Settings.interlock[i];
|
||||||
} else {
|
} else {
|
||||||
Settings.switchmode[i] = SWITCH_MODE;
|
Settings.switchmode[i] = SWITCH_MODE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (byte i = 0; i < sizeof(Settings.my_gp); i++) {
|
for (uint8_t i = 0; i < sizeof(Settings.my_gp); i++) {
|
||||||
if (Settings.my_gp.io[i] >= GPIO_SWT5) { // Move up from GPIO_SWT5 to GPIO_KEY1
|
if (Settings.my_gp.io[i] >= GPIO_SWT5) { // Move up from GPIO_SWT5 to GPIO_KEY1
|
||||||
Settings.my_gp.io[i] += 4;
|
Settings.my_gp.io[i] += 4;
|
||||||
}
|
}
|
||||||
|
@ -1000,7 +1001,7 @@ void SettingsDelta(void)
|
||||||
Settings.switch_debounce = SWITCH_DEBOUNCE_TIME;
|
Settings.switch_debounce = SWITCH_DEBOUNCE_TIME;
|
||||||
}
|
}
|
||||||
if (Settings.version < 0x0602010A) {
|
if (Settings.version < 0x0602010A) {
|
||||||
for (byte j = 0; j < 5; j++) {
|
for (uint8_t j = 0; j < 5; j++) {
|
||||||
Settings.rgbwwTable[j] = 255;
|
Settings.rgbwwTable[j] = 255;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1023,7 +1024,8 @@ void SettingsDelta(void)
|
||||||
Settings.param[P_MDNS_DELAYED_START] = 0;
|
Settings.param[P_MDNS_DELAYED_START] = 0;
|
||||||
}
|
}
|
||||||
if (Settings.version < 0x0604010B) {
|
if (Settings.version < 0x0604010B) {
|
||||||
for (byte i = 0; i < MAX_INTERLOCKS; i++) { Settings.interlock[i] = 0; }
|
Settings.interlock[0] = 0xFF; // Legacy support using all relays in one interlock group
|
||||||
|
for (uint8_t i = 1; i < MAX_INTERLOCKS; i++) { Settings.interlock[i] = 0; }
|
||||||
}
|
}
|
||||||
|
|
||||||
Settings.version = VERSION;
|
Settings.version = VERSION;
|
||||||
|
|
|
@ -134,39 +134,39 @@ uint16_t seriallog_timer = 0; // Timer to disable Seriallog
|
||||||
uint16_t syslog_timer = 0; // Timer to re-enable syslog_level
|
uint16_t syslog_timer = 0; // Timer to re-enable syslog_level
|
||||||
int16_t save_data_counter; // Counter and flag for config save to Flash
|
int16_t save_data_counter; // Counter and flag for config save to Flash
|
||||||
RulesBitfield rules_flag; // Rule state flags (16 bits)
|
RulesBitfield rules_flag; // Rule state flags (16 bits)
|
||||||
uint8_t serial_local = 0; // Handle serial locally;
|
|
||||||
uint8_t fallback_topic_flag = 0; // Use Topic or FallbackTopic
|
|
||||||
uint8_t state_250mS = 0; // State 250msecond per second flag
|
uint8_t state_250mS = 0; // State 250msecond per second flag
|
||||||
uint8_t latching_relay_pulse = 0; // Latching relay pulse timer
|
uint8_t latching_relay_pulse = 0; // Latching relay pulse timer
|
||||||
uint8_t backlog_index = 0; // Command backlog index
|
uint8_t backlog_index = 0; // Command backlog index
|
||||||
uint8_t backlog_pointer = 0; // Command backlog pointer
|
uint8_t backlog_pointer = 0; // Command backlog pointer
|
||||||
uint8_t backlog_mutex = 0; // Command backlog pending
|
|
||||||
uint8_t interlock_mutex = 0; // Interlock power command pending
|
|
||||||
uint8_t sleep; // Current copy of Settings.sleep
|
uint8_t sleep; // Current copy of Settings.sleep
|
||||||
uint8_t stop_flash_rotate = 0; // Allow flash configuration rotation
|
|
||||||
uint8_t blinkstate = 0; // LED state
|
|
||||||
uint8_t blinkspeed = 1; // LED blink rate
|
uint8_t blinkspeed = 1; // LED blink rate
|
||||||
uint8_t pin[GPIO_MAX]; // Possible pin configurations
|
uint8_t pin[GPIO_MAX]; // Possible pin configurations
|
||||||
uint8_t led_inverted = 0; // LED inverted flag (1 = (0 = On, 1 = Off))
|
uint8_t led_inverted = 0; // LED inverted flag (1 = (0 = On, 1 = Off))
|
||||||
uint8_t pwm_inverted = 0; // PWM inverted flag (1 = inverted)
|
uint8_t pwm_inverted = 0; // PWM inverted flag (1 = inverted)
|
||||||
uint8_t counter_no_pullup = 0; // Counter input pullup flag (1 = No pullup)
|
uint8_t counter_no_pullup = 0; // Counter input pullup flag (1 = No pullup)
|
||||||
uint8_t dht_flg = 0; // DHT configured
|
|
||||||
uint8_t energy_flg = 0; // Energy monitor configured
|
uint8_t energy_flg = 0; // Energy monitor configured
|
||||||
uint8_t i2c_flg = 0; // I2C configured
|
|
||||||
uint8_t spi_flg = 0; // SPI configured
|
|
||||||
uint8_t soft_spi_flg = 0; // Software SPI configured
|
|
||||||
uint8_t light_type = 0; // Light types
|
uint8_t light_type = 0; // Light types
|
||||||
uint8_t ntp_force_sync = 0; // Force NTP sync
|
uint8_t serial_in_byte; // Received byte
|
||||||
byte serial_in_byte; // Received byte
|
uint8_t ota_retry_counter = OTA_ATTEMPTS; // OTA retry counter
|
||||||
byte ota_retry_counter = OTA_ATTEMPTS; // OTA retry counter
|
uint8_t web_log_index = 1; // Index in Web log buffer (should never be 0)
|
||||||
byte web_log_index = 1; // Index in Web log buffer (should never be 0)
|
uint8_t devices_present = 0; // Max number of devices supported
|
||||||
byte reset_web_log_flag = 0; // Reset web console log
|
uint8_t seriallog_level; // Current copy of Settings.seriallog_level
|
||||||
byte devices_present = 0; // Max number of devices supported
|
uint8_t syslog_level; // Current copy of Settings.syslog_level
|
||||||
byte seriallog_level; // Current copy of Settings.seriallog_level
|
//uint8_t mdns_delayed_start = 0; // mDNS delayed start
|
||||||
byte syslog_level; // Current copy of Settings.syslog_level
|
bool serial_local = false; // Handle serial locally;
|
||||||
//byte mdns_delayed_start = 0; // mDNS delayed start
|
bool fallback_topic_flag = false; // Use Topic or FallbackTopic
|
||||||
boolean latest_uptime_flag = true; // Signal latest uptime
|
bool backlog_mutex = false; // Command backlog pending
|
||||||
boolean pwm_present = false; // Any PWM channel configured with SetOption15 0
|
bool interlock_mutex = false; // Interlock power command pending
|
||||||
|
bool stop_flash_rotate = false; // Allow flash configuration rotation
|
||||||
|
bool blinkstate = false; // LED state
|
||||||
|
bool latest_uptime_flag = true; // Signal latest uptime
|
||||||
|
bool pwm_present = false; // Any PWM channel configured with SetOption15 0
|
||||||
|
bool dht_flg = false; // DHT configured
|
||||||
|
bool i2c_flg = false; // I2C configured
|
||||||
|
bool spi_flg = false; // SPI configured
|
||||||
|
bool soft_spi_flg = false; // Software SPI configured
|
||||||
|
bool ntp_force_sync = false; // Force NTP sync
|
||||||
|
bool reset_web_log_flag = false; // Reset web console log
|
||||||
myio my_module; // Active copy of Module GPIOs (17 x 8 bits)
|
myio my_module; // Active copy of Module GPIOs (17 x 8 bits)
|
||||||
gpio_flag my_module_flag; // Active copy of Module GPIO flags
|
gpio_flag my_module_flag; // Active copy of Module GPIO flags
|
||||||
StateBitfield global_state; // Global states (currently Wifi and Mqtt) (8 bits)
|
StateBitfield global_state; // Global states (currently Wifi and Mqtt) (8 bits)
|
||||||
|
@ -214,7 +214,7 @@ char* Format(char* output, const char* input, int size)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!digits) strlcpy(output, input, size);
|
if (!digits) { strlcpy(output, input, size); }
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -232,7 +232,7 @@ char* GetOtaUrl(char *otaurl, size_t otaurl_size)
|
||||||
return otaurl;
|
return otaurl;
|
||||||
}
|
}
|
||||||
|
|
||||||
char* GetTopic_P(char *stopic, byte prefix, char *topic, const char* subtopic)
|
char* GetTopic_P(char *stopic, uint8_t prefix, char *topic, const char* subtopic)
|
||||||
{
|
{
|
||||||
/* prefix 0 = Cmnd
|
/* prefix 0 = Cmnd
|
||||||
prefix 1 = Stat
|
prefix 1 = Stat
|
||||||
|
@ -256,7 +256,7 @@ char* GetTopic_P(char *stopic, byte prefix, char *topic, const char* subtopic)
|
||||||
if ((0 == prefix) && (-1 == fulltopic.indexOf(F(MQTT_TOKEN_PREFIX)))) {
|
if ((0 == prefix) && (-1 == fulltopic.indexOf(F(MQTT_TOKEN_PREFIX)))) {
|
||||||
fulltopic += F("/" MQTT_TOKEN_PREFIX); // Need prefix for commands to handle mqtt topic loops
|
fulltopic += F("/" MQTT_TOKEN_PREFIX); // Need prefix for commands to handle mqtt topic loops
|
||||||
}
|
}
|
||||||
for (byte i = 0; i < 3; i++) {
|
for (uint8_t i = 0; i < 3; i++) {
|
||||||
if ('\0' == Settings.mqtt_prefix[i][0]) {
|
if ('\0' == Settings.mqtt_prefix[i][0]) {
|
||||||
snprintf_P(Settings.mqtt_prefix[i], sizeof(Settings.mqtt_prefix[i]), kPrefixes[i]);
|
snprintf_P(Settings.mqtt_prefix[i], sizeof(Settings.mqtt_prefix[i]), kPrefixes[i]);
|
||||||
}
|
}
|
||||||
|
@ -275,14 +275,14 @@ char* GetTopic_P(char *stopic, byte prefix, char *topic, const char* subtopic)
|
||||||
return stopic;
|
return stopic;
|
||||||
}
|
}
|
||||||
|
|
||||||
char* GetFallbackTopic_P(char *stopic, byte prefix, const char* subtopic)
|
char* GetFallbackTopic_P(char *stopic, uint8_t prefix, const char* subtopic)
|
||||||
{
|
{
|
||||||
return GetTopic_P(stopic, prefix +4, NULL, subtopic);
|
return GetTopic_P(stopic, prefix +4, NULL, subtopic);
|
||||||
}
|
}
|
||||||
|
|
||||||
char* GetStateText(byte state)
|
char* GetStateText(uint8_t state)
|
||||||
{
|
{
|
||||||
if (state > 3) state = 1;
|
if (state > 3) { state = 1; }
|
||||||
return Settings.state_text[state];
|
return Settings.state_text[state];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -300,7 +300,7 @@ void SetLatchingRelay(power_t lpower, uint8_t state)
|
||||||
latching_relay_pulse = 2; // max 200mS (initiated by stateloop())
|
latching_relay_pulse = 2; // max 200mS (initiated by stateloop())
|
||||||
}
|
}
|
||||||
|
|
||||||
for (byte i = 0; i < devices_present; i++) {
|
for (uint8_t i = 0; i < devices_present; i++) {
|
||||||
uint8_t port = (i << 1) + ((latching_power >> i) &1);
|
uint8_t port = (i << 1) + ((latching_power >> i) &1);
|
||||||
if (pin[GPIO_REL1 +port] < 99) {
|
if (pin[GPIO_REL1 +port] < 99) {
|
||||||
digitalWrite(pin[GPIO_REL1 +port], bitRead(rel_inverted, port) ? !state : state);
|
digitalWrite(pin[GPIO_REL1 +port], bitRead(rel_inverted, port) ? !state : state);
|
||||||
|
@ -320,10 +320,10 @@ void SetDevicePower(power_t rpower, int source)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Settings.flag.interlock) { // Allow only one or no relay set
|
if (Settings.flag.interlock) { // Allow only one or no relay set
|
||||||
for (byte i = 0; i < MAX_INTERLOCKS; i++) {
|
for (uint8_t i = 0; i < MAX_INTERLOCKS; i++) {
|
||||||
power_t mask = 1;
|
power_t mask = 1;
|
||||||
uint8_t count = 0;
|
uint8_t count = 0;
|
||||||
for (byte j = 0; j < devices_present; j++) {
|
for (uint8_t j = 0; j < devices_present; j++) {
|
||||||
if ((Settings.interlock[i] & mask) && (rpower & mask)) { count++; }
|
if ((Settings.interlock[i] & mask) && (rpower & mask)) { count++; }
|
||||||
mask <<= 1;
|
mask <<= 1;
|
||||||
}
|
}
|
||||||
|
@ -355,7 +355,7 @@ void SetDevicePower(power_t rpower, int source)
|
||||||
SetLatchingRelay(rpower, 1);
|
SetLatchingRelay(rpower, 1);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for (byte i = 0; i < devices_present; i++) {
|
for (uint8_t i = 0; i < devices_present; i++) {
|
||||||
state = rpower &1;
|
state = rpower &1;
|
||||||
if ((i < MAX_RELAYS) && (pin[GPIO_REL1 +i] < 99)) {
|
if ((i < MAX_RELAYS) && (pin[GPIO_REL1 +i] < 99)) {
|
||||||
digitalWrite(pin[GPIO_REL1 +i], bitRead(rel_inverted, i) ? !state : state);
|
digitalWrite(pin[GPIO_REL1 +i], bitRead(rel_inverted, i) ? !state : state);
|
||||||
|
@ -367,7 +367,7 @@ void SetDevicePower(power_t rpower, int source)
|
||||||
|
|
||||||
void SetLedPower(uint8_t state)
|
void SetLedPower(uint8_t state)
|
||||||
{
|
{
|
||||||
if (state) state = 1;
|
if (state) { state = 1; }
|
||||||
|
|
||||||
uint8_t led_pin = 0;
|
uint8_t led_pin = 0;
|
||||||
if (pin[GPIO_LED2] < 99) { led_pin = 1; }
|
if (pin[GPIO_LED2] < 99) { led_pin = 1; }
|
||||||
|
@ -376,7 +376,7 @@ void SetLedPower(uint8_t state)
|
||||||
|
|
||||||
void SetLedLink(uint8_t state)
|
void SetLedLink(uint8_t state)
|
||||||
{
|
{
|
||||||
if (state) state = 1;
|
if (state) { state = 1; }
|
||||||
digitalWrite(pin[GPIO_LED1], (bitRead(led_inverted, 0)) ? !state : state);
|
digitalWrite(pin[GPIO_LED1], (bitRead(led_inverted, 0)) ? !state : state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -399,7 +399,7 @@ uint8_t GetFanspeed(void)
|
||||||
|
|
||||||
void SetFanspeed(uint8_t fanspeed)
|
void SetFanspeed(uint8_t fanspeed)
|
||||||
{
|
{
|
||||||
for (byte i = 0; i < MAX_FAN_SPEED -1; i++) {
|
for (uint8_t i = 0; i < MAX_FAN_SPEED -1; i++) {
|
||||||
uint8_t state = kIFan02Speed[fanspeed][i];
|
uint8_t state = kIFan02Speed[fanspeed][i];
|
||||||
// uint8_t state = pgm_read_byte(kIFan02Speed +(speed *3) +i);
|
// uint8_t state = pgm_read_byte(kIFan02Speed +(speed *3) +i);
|
||||||
ExecuteCommandPower(i +2, state, SRC_IGNORE); // Use relay 2, 3 and 4
|
ExecuteCommandPower(i +2, state, SRC_IGNORE); // Use relay 2, 3 and 4
|
||||||
|
@ -428,7 +428,7 @@ uint16_t GetPulseTimer(uint8_t index)
|
||||||
|
|
||||||
/********************************************************************************************/
|
/********************************************************************************************/
|
||||||
|
|
||||||
void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
|
void MqttDataHandler(char* topic, uint8_t* data, unsigned int data_len)
|
||||||
{
|
{
|
||||||
char *str;
|
char *str;
|
||||||
|
|
||||||
|
@ -450,10 +450,10 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
|
||||||
char stemp1[TOPSZ];
|
char stemp1[TOPSZ];
|
||||||
char *p;
|
char *p;
|
||||||
char *type = NULL;
|
char *type = NULL;
|
||||||
byte jsflg = 0;
|
uint8_t lines = 1;
|
||||||
byte lines = 1;
|
bool jsflg = false;
|
||||||
uint8_t grpflg = 0;
|
bool grpflg = false;
|
||||||
// uint8_t user_append_index = 0;
|
// bool user_append_index = false;
|
||||||
uint16_t i = 0;
|
uint16_t i = 0;
|
||||||
uint16_t index;
|
uint16_t index;
|
||||||
uint32_t address;
|
uint32_t address;
|
||||||
|
@ -462,7 +462,7 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
|
||||||
|
|
||||||
strlcpy(topicBuf, topic, sizeof(topicBuf));
|
strlcpy(topicBuf, topic, sizeof(topicBuf));
|
||||||
for (i = 0; i < data_len; i++) {
|
for (i = 0; i < data_len; i++) {
|
||||||
if (!isspace(data[i])) break;
|
if (!isspace(data[i])) { break; }
|
||||||
}
|
}
|
||||||
data_len -= i;
|
data_len -= i;
|
||||||
memcpy(dataBuf, data +i, sizeof(dataBuf));
|
memcpy(dataBuf, data +i, sizeof(dataBuf));
|
||||||
|
@ -473,9 +473,9 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
|
||||||
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_RESULT D_RECEIVED_TOPIC " %s, " D_DATA_SIZE " %d, " D_DATA " %s"),
|
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_RESULT D_RECEIVED_TOPIC " %s, " D_DATA_SIZE " %d, " D_DATA " %s"),
|
||||||
topicBuf, data_len, dataBuf);
|
topicBuf, data_len, dataBuf);
|
||||||
AddLog(LOG_LEVEL_DEBUG_MORE);
|
AddLog(LOG_LEVEL_DEBUG_MORE);
|
||||||
// if (LOG_LEVEL_DEBUG_MORE <= seriallog_level) Serial.println(dataBuf);
|
// if (LOG_LEVEL_DEBUG_MORE <= seriallog_level) { Serial.println(dataBuf); }
|
||||||
|
|
||||||
if (XdrvMqttData(topicBuf, sizeof(topicBuf), dataBuf, sizeof(dataBuf))) return;
|
if (XdrvMqttData(topicBuf, sizeof(topicBuf), dataBuf, sizeof(dataBuf))) { return; }
|
||||||
|
|
||||||
grpflg = (strstr(topicBuf, Settings.mqtt_grptopic) != NULL);
|
grpflg = (strstr(topicBuf, Settings.mqtt_grptopic) != NULL);
|
||||||
|
|
||||||
|
@ -495,7 +495,7 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
|
||||||
}
|
}
|
||||||
if (i < strlen(type)) {
|
if (i < strlen(type)) {
|
||||||
index = atoi(type +i);
|
index = atoi(type +i);
|
||||||
// user_append_index = 1;
|
// user_append_index = true;
|
||||||
}
|
}
|
||||||
type[i] = '\0';
|
type[i] = '\0';
|
||||||
}
|
}
|
||||||
|
@ -506,9 +506,9 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
|
||||||
|
|
||||||
if (type != NULL) {
|
if (type != NULL) {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_JSON_COMMAND "\":\"" D_JSON_ERROR "\"}"));
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_JSON_COMMAND "\":\"" D_JSON_ERROR "\"}"));
|
||||||
if (Settings.ledstate &0x02) blinks++;
|
if (Settings.ledstate &0x02) { blinks++; }
|
||||||
|
|
||||||
if (!strcmp(dataBuf,"?")) data_len = 0;
|
if (!strcmp(dataBuf,"?")) { data_len = 0; }
|
||||||
int16_t payload = -99; // No payload
|
int16_t payload = -99; // No payload
|
||||||
uint16_t payload16 = 0;
|
uint16_t payload16 = 0;
|
||||||
long payload32 = strtol(dataBuf, &p, 10);
|
long payload32 = strtol(dataBuf, &p, 10);
|
||||||
|
@ -571,10 +571,10 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_NVALUE, command, bl_delay);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_NVALUE, command, bl_delay);
|
||||||
}
|
}
|
||||||
else if ((CMND_POWER == command_code) && (index > 0) && (index <= devices_present)) {
|
else if ((CMND_POWER == command_code) && (index > 0) && (index <= devices_present)) {
|
||||||
if ((payload < 0) || (payload > 4)) payload = 9;
|
if ((payload < 0) || (payload > 4)) { payload = 9; }
|
||||||
// Settings.flag.device_index_enable = user_append_index;
|
// Settings.flag.device_index_enable = user_append_index;
|
||||||
ExecuteCommandPower(index, payload, SRC_IGNORE);
|
ExecuteCommandPower(index, payload, SRC_IGNORE);
|
||||||
fallback_topic_flag = 0;
|
fallback_topic_flag = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if ((CMND_FANSPEED == command_code) && (SONOFF_IFAN02 == Settings.module)) {
|
else if ((CMND_FANSPEED == command_code) && (SONOFF_IFAN02 == Settings.module)) {
|
||||||
|
@ -596,7 +596,7 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
|
||||||
else if (CMND_STATUS == command_code) {
|
else if (CMND_STATUS == command_code) {
|
||||||
if ((payload < 0) || (payload > MAX_STATUS)) payload = 99;
|
if ((payload < 0) || (payload > MAX_STATUS)) payload = 99;
|
||||||
PublishStatus(payload);
|
PublishStatus(payload);
|
||||||
fallback_topic_flag = 0;
|
fallback_topic_flag = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (CMND_STATE == command_code) {
|
else if (CMND_STATE == command_code) {
|
||||||
|
@ -664,7 +664,7 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
|
||||||
if ((payload >= POWER_ALL_OFF) && (payload <= POWER_ALL_OFF_PULSETIME_ON)) {
|
if ((payload >= POWER_ALL_OFF) && (payload <= POWER_ALL_OFF_PULSETIME_ON)) {
|
||||||
Settings.poweronstate = payload;
|
Settings.poweronstate = payload;
|
||||||
if (POWER_ALL_ALWAYS_ON == Settings.poweronstate) {
|
if (POWER_ALL_ALWAYS_ON == Settings.poweronstate) {
|
||||||
for (byte i = 1; i <= devices_present; i++) {
|
for (uint8_t i = 1; i <= devices_present; i++) {
|
||||||
ExecuteCommandPower(i, POWER_ON, SRC_IGNORE);
|
ExecuteCommandPower(i, POWER_ON, SRC_IGNORE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -718,8 +718,8 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ((CMND_SETOPTION == command_code) && (index < 82)) {
|
else if ((CMND_SETOPTION == command_code) && (index < 82)) {
|
||||||
byte ptype;
|
uint8_t ptype;
|
||||||
byte pindex;
|
uint8_t pindex;
|
||||||
if (index <= 31) { // SetOption0 .. 31 = Settings.flag
|
if (index <= 31) { // SetOption0 .. 31 = Settings.flag
|
||||||
ptype = 0;
|
ptype = 0;
|
||||||
pindex = index; // 0 .. 31
|
pindex = index; // 0 .. 31
|
||||||
|
@ -860,7 +860,7 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
|
||||||
Settings.last_module = Settings.module;
|
Settings.last_module = Settings.module;
|
||||||
Settings.module = payload;
|
Settings.module = payload;
|
||||||
if (Settings.last_module != payload) {
|
if (Settings.last_module != payload) {
|
||||||
for (byte i = 0; i < sizeof(Settings.my_gp); i++) {
|
for (uint8_t i = 0; i < sizeof(Settings.my_gp); i++) {
|
||||||
Settings.my_gp.io[i] = GPIO_NONE;
|
Settings.my_gp.io[i] = GPIO_NONE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -869,18 +869,18 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_NVALUE_SVALUE, command, Settings.module +1, ModuleName().c_str());
|
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_NVALUE_SVALUE, command, Settings.module +1, ModuleName().c_str());
|
||||||
}
|
}
|
||||||
else if (CMND_MODULES == command_code) {
|
else if (CMND_MODULES == command_code) {
|
||||||
for (byte i = 0; i < MAXMODULE; i++) {
|
for (uint8_t i = 0; i < MAXMODULE; i++) {
|
||||||
if (!jsflg) {
|
if (!jsflg) {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_MODULES "%d\":["), lines);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_MODULES "%d\":["), lines);
|
||||||
} else {
|
} else {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,"), mqtt_data);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,"), mqtt_data);
|
||||||
}
|
}
|
||||||
jsflg = 1;
|
jsflg = true;
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s\"%d (%s)\""), mqtt_data, i +1, AnyModuleName(i).c_str());
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s\"%d (%s)\""), mqtt_data, i +1, AnyModuleName(i).c_str());
|
||||||
if ((strlen(mqtt_data) > (LOGSZ - TOPSZ)) || (i == MAXMODULE -1)) {
|
if ((strlen(mqtt_data) > (LOGSZ - TOPSZ)) || (i == MAXMODULE -1)) {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s]}"), mqtt_data);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s]}"), mqtt_data);
|
||||||
MqttPublishPrefixTopic_P(RESULT_OR_STAT, type);
|
MqttPublishPrefixTopic_P(RESULT_OR_STAT, type);
|
||||||
jsflg = 0;
|
jsflg = false;
|
||||||
lines++;
|
lines++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -891,12 +891,12 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
|
||||||
ModuleGpios(&cmodule);
|
ModuleGpios(&cmodule);
|
||||||
if ((GPIO_USER == ValidGPIO(index, cmodule.io[index])) && (payload >= 0) && (payload < GPIO_SENSOR_END)) {
|
if ((GPIO_USER == ValidGPIO(index, cmodule.io[index])) && (payload >= 0) && (payload < GPIO_SENSOR_END)) {
|
||||||
bool present = false;
|
bool present = false;
|
||||||
for (byte i = 0; i < sizeof(kGpioNiceList); i++) {
|
for (uint8_t i = 0; i < sizeof(kGpioNiceList); i++) {
|
||||||
uint8_t midx = pgm_read_byte(kGpioNiceList + i);
|
uint8_t midx = pgm_read_byte(kGpioNiceList + i);
|
||||||
if (midx == payload) { present = true; }
|
if (midx == payload) { present = true; }
|
||||||
}
|
}
|
||||||
if (present) {
|
if (present) {
|
||||||
for (byte i = 0; i < sizeof(Settings.my_gp); i++) {
|
for (uint8_t i = 0; i < sizeof(Settings.my_gp); i++) {
|
||||||
if ((GPIO_USER == ValidGPIO(i, cmodule.io[i])) && (Settings.my_gp.io[i] == payload)) {
|
if ((GPIO_USER == ValidGPIO(i, cmodule.io[i])) && (Settings.my_gp.io[i] == payload)) {
|
||||||
Settings.my_gp.io[i] = GPIO_NONE;
|
Settings.my_gp.io[i] = GPIO_NONE;
|
||||||
}
|
}
|
||||||
|
@ -906,10 +906,10 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{"));
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{"));
|
||||||
for (byte i = 0; i < sizeof(Settings.my_gp); i++) {
|
for (uint8_t i = 0; i < sizeof(Settings.my_gp); i++) {
|
||||||
if (GPIO_USER == ValidGPIO(i, cmodule.io[i])) {
|
if (GPIO_USER == ValidGPIO(i, cmodule.io[i])) {
|
||||||
if (jsflg) snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,"), mqtt_data);
|
if (jsflg) snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,"), mqtt_data);
|
||||||
jsflg = 1;
|
jsflg = true;
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s\"" D_CMND_GPIO "%d\":\"%d (%s)\""),
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s\"" D_CMND_GPIO "%d\":\"%d (%s)\""),
|
||||||
mqtt_data, i, Settings.my_gp.io[i], GetTextIndexed(stemp1, sizeof(stemp1), Settings.my_gp.io[i], kSensorNames));
|
mqtt_data, i, Settings.my_gp.io[i], GetTextIndexed(stemp1, sizeof(stemp1), Settings.my_gp.io[i], kSensorNames));
|
||||||
}
|
}
|
||||||
|
@ -924,7 +924,7 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
|
||||||
myio cmodule;
|
myio cmodule;
|
||||||
ModuleGpios(&cmodule);
|
ModuleGpios(&cmodule);
|
||||||
uint8_t midx;
|
uint8_t midx;
|
||||||
for (byte i = 0; i < sizeof(kGpioNiceList); i++) {
|
for (uint8_t i = 0; i < sizeof(kGpioNiceList); i++) {
|
||||||
midx = pgm_read_byte(kGpioNiceList + i);
|
midx = pgm_read_byte(kGpioNiceList + i);
|
||||||
if (!GetUsedInModule(midx, cmodule.io)) {
|
if (!GetUsedInModule(midx, cmodule.io)) {
|
||||||
|
|
||||||
|
@ -933,12 +933,12 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
|
||||||
} else {
|
} else {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,"), mqtt_data);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,"), mqtt_data);
|
||||||
}
|
}
|
||||||
jsflg = 1;
|
jsflg = true;
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s\"%d (%s)\""), mqtt_data, midx, GetTextIndexed(stemp1, sizeof(stemp1), midx, kSensorNames));
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s\"%d (%s)\""), mqtt_data, midx, GetTextIndexed(stemp1, sizeof(stemp1), midx, kSensorNames));
|
||||||
if ((strlen(mqtt_data) > (LOGSZ - TOPSZ)) || (i == sizeof(kGpioNiceList) -1)) {
|
if ((strlen(mqtt_data) > (LOGSZ - TOPSZ)) || (i == sizeof(kGpioNiceList) -1)) {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s]}"), mqtt_data);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s]}"), mqtt_data);
|
||||||
MqttPublishPrefixTopic_P(RESULT_OR_STAT, type);
|
MqttPublishPrefixTopic_P(RESULT_OR_STAT, type);
|
||||||
jsflg = 0;
|
jsflg = false;
|
||||||
lines++;
|
lines++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -965,7 +965,7 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
|
||||||
else if (CMND_PWMRANGE == command_code) {
|
else if (CMND_PWMRANGE == command_code) {
|
||||||
if ((1 == payload) || ((payload > 254) && (payload < 1024))) {
|
if ((1 == payload) || ((payload > 254) && (payload < 1024))) {
|
||||||
Settings.pwm_range = (1 == payload) ? PWM_RANGE : payload;
|
Settings.pwm_range = (1 == payload) ? PWM_RANGE : payload;
|
||||||
for (byte i = 0; i < MAX_PWMS; i++) {
|
for (uint8_t i = 0; i < MAX_PWMS; i++) {
|
||||||
if (Settings.pwm_value[i] > Settings.pwm_range) {
|
if (Settings.pwm_value[i] > Settings.pwm_range) {
|
||||||
Settings.pwm_value[i] = Settings.pwm_range;
|
Settings.pwm_value[i] = Settings.pwm_range;
|
||||||
}
|
}
|
||||||
|
@ -1090,7 +1090,7 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
|
||||||
if (Settings.ntp_server[index -1][i] == ',') Settings.ntp_server[index -1][i] = '.';
|
if (Settings.ntp_server[index -1][i] == ',') Settings.ntp_server[index -1][i] = '.';
|
||||||
}
|
}
|
||||||
// restart_flag = 2; // Issue #3890
|
// restart_flag = 2; // Issue #3890
|
||||||
ntp_force_sync = 1;
|
ntp_force_sync = true;
|
||||||
}
|
}
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_INDEX_SVALUE, command, index, Settings.ntp_server[index -1]);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_INDEX_SVALUE, command, index, Settings.ntp_server[index -1]);
|
||||||
}
|
}
|
||||||
|
@ -1175,7 +1175,7 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
|
||||||
if (max_relays > 1) { // Only interlock with more than 1 relay
|
if (max_relays > 1) { // Only interlock with more than 1 relay
|
||||||
if (data_len > 0) {
|
if (data_len > 0) {
|
||||||
if (strstr(dataBuf, ",")) { // Interlock entry
|
if (strstr(dataBuf, ",")) { // Interlock entry
|
||||||
for (byte i = 0; i < MAX_INTERLOCKS; i++) { Settings.interlock[i] = 0; } // Reset current interlocks
|
for (uint8_t i = 0; i < MAX_INTERLOCKS; i++) { Settings.interlock[i] = 0; } // Reset current interlocks
|
||||||
char *group;
|
char *group;
|
||||||
char *q;
|
char *q;
|
||||||
uint8_t group_index = 0;
|
uint8_t group_index = 0;
|
||||||
|
@ -1194,9 +1194,9 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
|
||||||
}
|
}
|
||||||
group_index++;
|
group_index++;
|
||||||
}
|
}
|
||||||
for (byte i = 0; i < group_index; i++) {
|
for (uint8_t i = 0; i < group_index; i++) {
|
||||||
uint8_t minimal_bits = 0;
|
uint8_t minimal_bits = 0;
|
||||||
for (byte j = 0; j < max_relays; j++) {
|
for (uint8_t j = 0; j < max_relays; j++) {
|
||||||
if (bitRead(Settings.interlock[i], j)) { minimal_bits++; }
|
if (bitRead(Settings.interlock[i], j)) { minimal_bits++; }
|
||||||
}
|
}
|
||||||
if (minimal_bits < 2) { Settings.interlock[i] = 0; } // Discard single relay as interlock
|
if (minimal_bits < 2) { Settings.interlock[i] = 0; } // Discard single relay as interlock
|
||||||
|
@ -1210,13 +1210,13 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
|
||||||
}
|
}
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_INTERLOCK "\":\"%s\",\"" D_JSON_GROUPS "\":\""), GetStateText(Settings.flag.interlock));
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_INTERLOCK "\":\"%s\",\"" D_JSON_GROUPS "\":\""), GetStateText(Settings.flag.interlock));
|
||||||
uint8_t anygroup = 0;
|
uint8_t anygroup = 0;
|
||||||
for (byte i = 0; i < MAX_INTERLOCKS; i++) {
|
for (uint8_t i = 0; i < MAX_INTERLOCKS; i++) {
|
||||||
if (Settings.interlock[i]) {
|
if (Settings.interlock[i]) {
|
||||||
anygroup++;
|
anygroup++;
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s%s"), mqtt_data, (anygroup > 1) ? " " : "");
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s%s"), mqtt_data, (anygroup > 1) ? " " : "");
|
||||||
uint8_t anybit = 0;
|
uint8_t anybit = 0;
|
||||||
power_t mask = 1;
|
power_t mask = 1;
|
||||||
for (byte j = 0; j < max_relays; j++) {
|
for (uint8_t j = 0; j < max_relays; j++) {
|
||||||
if (Settings.interlock[i] & mask) {
|
if (Settings.interlock[i] & mask) {
|
||||||
anybit++;
|
anybit++;
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s%s%d"), mqtt_data, (anybit > 1) ? "," : "", j +1);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s%s%d"), mqtt_data, (anybit > 1) ? "," : "", j +1);
|
||||||
|
@ -1226,7 +1226,7 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!anygroup) {
|
if (!anygroup) {
|
||||||
for (byte j = 1; j <= max_relays; j++) {
|
for (uint8_t j = 1; j <= max_relays; j++) {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s%s%d"), mqtt_data, (j > 1) ? "," : "", j);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s%s%d"), mqtt_data, (j > 1) ? "," : "", j);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1277,7 +1277,7 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
|
||||||
} else {
|
} else {
|
||||||
Settings.timezone = 99;
|
Settings.timezone = 99;
|
||||||
}
|
}
|
||||||
ntp_force_sync = 1;
|
ntp_force_sync = true;
|
||||||
}
|
}
|
||||||
if (99 == Settings.timezone) {
|
if (99 == Settings.timezone) {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_NVALUE, command, Settings.timezone);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_NVALUE, command, Settings.timezone);
|
||||||
|
@ -1312,7 +1312,7 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
|
||||||
value = strtol(p, &p, 10);
|
value = strtol(p, &p, 10);
|
||||||
tpos++; // Next parameter
|
tpos++; // Next parameter
|
||||||
}
|
}
|
||||||
ntp_force_sync = 1;
|
ntp_force_sync = true;
|
||||||
} else {
|
} else {
|
||||||
if (0 == payload) {
|
if (0 == payload) {
|
||||||
if (0 == ts) {
|
if (0 == ts) {
|
||||||
|
@ -1321,7 +1321,7 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
|
||||||
SettingsResetDst();
|
SettingsResetDst();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ntp_force_sync = 1;
|
ntp_force_sync = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"%s\":{\"Hemisphere\":%d,\"Week\":%d,\"Month\":%d,\"Day\":%d,\"Hour\":%d,\"Offset\":%d}}"),
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"%s\":{\"Hemisphere\":%d,\"Week\":%d,\"Month\":%d,\"Day\":%d,\"Hour\":%d,\"Offset\":%d}}"),
|
||||||
|
@ -1374,12 +1374,12 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
|
||||||
type = (char*)topicBuf;
|
type = (char*)topicBuf;
|
||||||
}
|
}
|
||||||
if (mqtt_data[0] != '\0') MqttPublishPrefixTopic_P(RESULT_OR_STAT, type);
|
if (mqtt_data[0] != '\0') MqttPublishPrefixTopic_P(RESULT_OR_STAT, type);
|
||||||
fallback_topic_flag = 0;
|
fallback_topic_flag = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************************************/
|
/********************************************************************************************/
|
||||||
|
|
||||||
boolean SendKey(byte key, byte device, byte state)
|
bool SendKey(uint8_t key, uint8_t device, uint8_t state)
|
||||||
{
|
{
|
||||||
// key 0 = button_topic
|
// key 0 = button_topic
|
||||||
// key 1 = switch_topic
|
// key 1 = switch_topic
|
||||||
|
@ -1392,7 +1392,7 @@ boolean SendKey(byte key, byte device, byte state)
|
||||||
char stopic[TOPSZ];
|
char stopic[TOPSZ];
|
||||||
char scommand[CMDSZ];
|
char scommand[CMDSZ];
|
||||||
char key_topic[sizeof(Settings.button_topic)];
|
char key_topic[sizeof(Settings.button_topic)];
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
char *tmp = (key) ? Settings.switch_topic : Settings.button_topic;
|
char *tmp = (key) ? Settings.switch_topic : Settings.button_topic;
|
||||||
Format(key_topic, tmp, sizeof(key_topic));
|
Format(key_topic, tmp, sizeof(key_topic));
|
||||||
|
@ -1426,7 +1426,7 @@ boolean SendKey(byte key, byte device, byte state)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExecuteCommandPower(byte device, byte state, int source)
|
void ExecuteCommandPower(uint8_t device, uint8_t state, int source)
|
||||||
{
|
{
|
||||||
// device = Relay number 1 and up
|
// device = Relay number 1 and up
|
||||||
// state 0 = Relay Off
|
// state 0 = Relay Off
|
||||||
|
@ -1463,10 +1463,10 @@ void ExecuteCommandPower(byte device, byte state, int source)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Settings.flag.interlock && !interlock_mutex) { // Clear all but masked relay in interlock group
|
if (Settings.flag.interlock && !interlock_mutex) { // Clear all but masked relay in interlock group
|
||||||
interlock_mutex = 1;
|
interlock_mutex = true;
|
||||||
for (byte i = 0; i < MAX_INTERLOCKS; i++) {
|
for (uint8_t i = 0; i < MAX_INTERLOCKS; i++) {
|
||||||
if (Settings.interlock[i] & mask) { // Find interlock group
|
if (Settings.interlock[i] & mask) { // Find interlock group
|
||||||
for (byte j = 0; j < devices_present; j++) {
|
for (uint8_t j = 0; j < devices_present; j++) {
|
||||||
power_t imask = 1 << j;
|
power_t imask = 1 << j;
|
||||||
if ((Settings.interlock[i] & imask) && (power & imask) && (mask != imask)) {
|
if ((Settings.interlock[i] & imask) && (power & imask) && (mask != imask)) {
|
||||||
ExecuteCommandPower(j +1, POWER_OFF, SRC_IGNORE);
|
ExecuteCommandPower(j +1, POWER_OFF, SRC_IGNORE);
|
||||||
|
@ -1476,7 +1476,7 @@ void ExecuteCommandPower(byte device, byte state, int source)
|
||||||
break; // An interlocked relay is only present in one group so quit
|
break; // An interlocked relay is only present in one group so quit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
interlock_mutex = 0;
|
interlock_mutex = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (state) {
|
switch (state) {
|
||||||
|
@ -1517,7 +1517,7 @@ void ExecuteCommandPower(byte device, byte state, int source)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (POWER_BLINK_STOP == state) {
|
else if (POWER_BLINK_STOP == state) {
|
||||||
byte flag = (blink_mask & mask);
|
uint8_t flag = (blink_mask & mask);
|
||||||
blink_mask &= (POWER_MASK ^ mask); // Clear device mask
|
blink_mask &= (POWER_MASK ^ mask); // Clear device mask
|
||||||
MqttPublishPowerBlinkState(device);
|
MqttPublishPowerBlinkState(device);
|
||||||
if (flag) ExecuteCommandPower(device, (blink_powersave >> (device -1))&1, SRC_IGNORE); // Restore state
|
if (flag) ExecuteCommandPower(device, (blink_powersave >> (device -1))&1, SRC_IGNORE); // Restore state
|
||||||
|
@ -1530,7 +1530,7 @@ void StopAllPowerBlink(void)
|
||||||
{
|
{
|
||||||
power_t mask;
|
power_t mask;
|
||||||
|
|
||||||
for (byte i = 1; i <= devices_present; i++) {
|
for (uint8_t i = 1; i <= devices_present; i++) {
|
||||||
mask = 1 << (i -1);
|
mask = 1 << (i -1);
|
||||||
if (blink_mask & mask) {
|
if (blink_mask & mask) {
|
||||||
blink_mask &= (POWER_MASK ^ mask); // Clear device mask
|
blink_mask &= (POWER_MASK ^ mask); // Clear device mask
|
||||||
|
@ -1553,13 +1553,13 @@ void ExecuteCommand(char *cmnd, int source)
|
||||||
token = strtok(cmnd, " ");
|
token = strtok(cmnd, " ");
|
||||||
if (token != NULL) {
|
if (token != NULL) {
|
||||||
start = strrchr(token, '/'); // Skip possible cmnd/sonoff/ preamble
|
start = strrchr(token, '/'); // Skip possible cmnd/sonoff/ preamble
|
||||||
if (start) token = start +1;
|
if (start) { token = start +1; }
|
||||||
}
|
}
|
||||||
snprintf_P(stopic, sizeof(stopic), PSTR("/%s"), (token == NULL) ? "" : token);
|
snprintf_P(stopic, sizeof(stopic), PSTR("/%s"), (token == NULL) ? "" : token);
|
||||||
token = strtok(NULL, "");
|
token = strtok(NULL, "");
|
||||||
// snprintf_P(svalue, sizeof(svalue), (token == NULL) ? "" : token); // Fails with command FullTopic home/%prefix%/%topic% as it processes %p of %prefix%
|
// snprintf_P(svalue, sizeof(svalue), (token == NULL) ? "" : token); // Fails with command FullTopic home/%prefix%/%topic% as it processes %p of %prefix%
|
||||||
strlcpy(svalue, (token == NULL) ? "" : token, sizeof(svalue)); // Fixed 5.8.0b
|
strlcpy(svalue, (token == NULL) ? "" : token, sizeof(svalue)); // Fixed 5.8.0b
|
||||||
MqttDataHandler(stopic, (byte*)svalue, strlen(svalue));
|
MqttDataHandler(stopic, (uint8_t*)svalue, strlen(svalue));
|
||||||
}
|
}
|
||||||
|
|
||||||
void PublishStatus(uint8_t payload)
|
void PublishStatus(uint8_t payload)
|
||||||
|
@ -1569,20 +1569,20 @@ void PublishStatus(uint8_t payload)
|
||||||
char stemp2[MAX_SWITCHES * 3];
|
char stemp2[MAX_SWITCHES * 3];
|
||||||
|
|
||||||
// Workaround MQTT - TCP/IP stack queueing when SUB_PREFIX = PUB_PREFIX
|
// Workaround MQTT - TCP/IP stack queueing when SUB_PREFIX = PUB_PREFIX
|
||||||
if (!strcmp(Settings.mqtt_prefix[0],Settings.mqtt_prefix[1]) && (!payload)) option++; // TELE
|
if (!strcmp(Settings.mqtt_prefix[0],Settings.mqtt_prefix[1]) && (!payload)) { option++; } // TELE
|
||||||
|
|
||||||
if ((!Settings.flag.mqtt_enabled) && (6 == payload)) payload = 99;
|
if ((!Settings.flag.mqtt_enabled) && (6 == payload)) { payload = 99; }
|
||||||
if (!energy_flg && (9 == payload)) payload = 99;
|
if (!energy_flg && (9 == payload)) { payload = 99; }
|
||||||
|
|
||||||
if ((0 == payload) || (99 == payload)) {
|
if ((0 == payload) || (99 == payload)) {
|
||||||
uint8_t maxfn = (devices_present > MAX_FRIENDLYNAMES) ? MAX_FRIENDLYNAMES : (!devices_present) ? 1 : devices_present;
|
uint8_t maxfn = (devices_present > MAX_FRIENDLYNAMES) ? MAX_FRIENDLYNAMES : (!devices_present) ? 1 : devices_present;
|
||||||
if (SONOFF_IFAN02 == Settings.module) { maxfn = 1; }
|
if (SONOFF_IFAN02 == Settings.module) { maxfn = 1; }
|
||||||
stemp[0] = '\0';
|
stemp[0] = '\0';
|
||||||
for (byte i = 0; i < maxfn; i++) {
|
for (uint8_t i = 0; i < maxfn; i++) {
|
||||||
snprintf_P(stemp, sizeof(stemp), PSTR("%s%s\"%s\"" ), stemp, (i > 0 ? "," : ""), Settings.friendlyname[i]);
|
snprintf_P(stemp, sizeof(stemp), PSTR("%s%s\"%s\"" ), stemp, (i > 0 ? "," : ""), Settings.friendlyname[i]);
|
||||||
}
|
}
|
||||||
stemp2[0] = '\0';
|
stemp2[0] = '\0';
|
||||||
for (byte i = 0; i < MAX_SWITCHES; i++) {
|
for (uint8_t i = 0; i < MAX_SWITCHES; i++) {
|
||||||
snprintf_P(stemp2, sizeof(stemp2), PSTR("%s%s%d" ), stemp2, (i > 0 ? "," : ""), Settings.switchmode[i]);
|
snprintf_P(stemp2, sizeof(stemp2), PSTR("%s%s%d" ), stemp2, (i > 0 ? "," : ""), Settings.switchmode[i]);
|
||||||
}
|
}
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_STATUS "\":{\"" D_CMND_MODULE "\":%d,\"" D_CMND_FRIENDLYNAME "\":[%s],\"" D_CMND_TOPIC "\":\"%s\",\"" D_CMND_BUTTONTOPIC "\":\"%s\",\"" D_CMND_POWER "\":%d,\"" D_CMND_POWERONSTATE "\":%d,\"" D_CMND_LEDSTATE "\":%d,\"" D_CMND_SAVEDATA "\":%d,\"" D_JSON_SAVESTATE "\":%d,\"" D_CMND_SWITCHTOPIC "\":\"%s\",\"" D_CMND_SWITCHMODE "\":[%s],\"" D_CMND_BUTTONRETAIN "\":%d,\"" D_CMND_SWITCHRETAIN "\":%d,\"" D_CMND_SENSORRETAIN "\":%d,\"" D_CMND_POWERRETAIN "\":%d}}"),
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_STATUS "\":{\"" D_CMND_MODULE "\":%d,\"" D_CMND_FRIENDLYNAME "\":[%s],\"" D_CMND_TOPIC "\":\"%s\",\"" D_CMND_BUTTONTOPIC "\":\"%s\",\"" D_CMND_POWER "\":%d,\"" D_CMND_POWERONSTATE "\":%d,\"" D_CMND_LEDSTATE "\":%d,\"" D_CMND_SAVEDATA "\":%d,\"" D_JSON_SAVESTATE "\":%d,\"" D_CMND_SWITCHTOPIC "\":\"%s\",\"" D_CMND_SWITCHMODE "\":[%s],\"" D_CMND_BUTTONRETAIN "\":%d,\"" D_CMND_SWITCHRETAIN "\":%d,\"" D_CMND_SENSORRETAIN "\":%d,\"" D_CMND_POWERRETAIN "\":%d}}"),
|
||||||
|
@ -1675,7 +1675,7 @@ void MqttShowPWMState(void)
|
||||||
{
|
{
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s\"" D_CMND_PWM "\":{"), mqtt_data);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s\"" D_CMND_PWM "\":{"), mqtt_data);
|
||||||
bool first = true;
|
bool first = true;
|
||||||
for (byte i = 0; i < MAX_PWMS; i++) {
|
for (uint8_t i = 0; i < MAX_PWMS; i++) {
|
||||||
if (pin[GPIO_PWM1 + i] < 99) {
|
if (pin[GPIO_PWM1 + i] < 99) {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s%s\"" D_CMND_PWM "%d\":%d"), mqtt_data, first ? "" : ",", i+1, Settings.pwm_value[i]);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s%s\"" D_CMND_PWM "%d\":%d"), mqtt_data, first ? "" : ",", i+1, Settings.pwm_value[i]);
|
||||||
first = false;
|
first = false;
|
||||||
|
@ -1698,7 +1698,7 @@ void MqttShowState(void)
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"SleepMode\":\"%s\",\"Sleep\":%u,\"LoadAvg\":%u"),
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"SleepMode\":\"%s\",\"Sleep\":%u,\"LoadAvg\":%u"),
|
||||||
mqtt_data, GetTextIndexed(stemp1, sizeof(stemp1), Settings.flag3.sleep_normal, kSleepMode), sleep, loop_load_avg);
|
mqtt_data, GetTextIndexed(stemp1, sizeof(stemp1), Settings.flag3.sleep_normal, kSleepMode), sleep, loop_load_avg);
|
||||||
|
|
||||||
for (byte i = 0; i < devices_present; i++) {
|
for (uint8_t i = 0; i < devices_present; i++) {
|
||||||
if (i == light_device -1) {
|
if (i == light_device -1) {
|
||||||
LightState(1);
|
LightState(1);
|
||||||
} else {
|
} else {
|
||||||
|
@ -1719,22 +1719,22 @@ void MqttShowState(void)
|
||||||
mqtt_data, Settings.sta_active +1, Settings.sta_ssid[Settings.sta_active], WiFi.BSSIDstr().c_str(), WiFi.channel(), WifiGetRssiAsQuality(WiFi.RSSI()));
|
mqtt_data, Settings.sta_active +1, Settings.sta_ssid[Settings.sta_active], WiFi.BSSIDstr().c_str(), WiFi.channel(), WifiGetRssiAsQuality(WiFi.RSSI()));
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean MqttShowSensor(void)
|
bool MqttShowSensor(void)
|
||||||
{
|
{
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s{\"" D_JSON_TIME "\":\"%s\""), mqtt_data, GetDateAndTime(DT_LOCAL).c_str());
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s{\"" D_JSON_TIME "\":\"%s\""), mqtt_data, GetDateAndTime(DT_LOCAL).c_str());
|
||||||
int json_data_start = strlen(mqtt_data);
|
int json_data_start = strlen(mqtt_data);
|
||||||
for (byte i = 0; i < MAX_SWITCHES; i++) {
|
for (uint8_t i = 0; i < MAX_SWITCHES; i++) {
|
||||||
#ifdef USE_TM1638
|
#ifdef USE_TM1638
|
||||||
if ((pin[GPIO_SWT1 +i] < 99) || ((pin[GPIO_TM16CLK] < 99) && (pin[GPIO_TM16DIO] < 99) && (pin[GPIO_TM16STB] < 99))) {
|
if ((pin[GPIO_SWT1 +i] < 99) || ((pin[GPIO_TM16CLK] < 99) && (pin[GPIO_TM16DIO] < 99) && (pin[GPIO_TM16STB] < 99))) {
|
||||||
#else
|
#else
|
||||||
if (pin[GPIO_SWT1 +i] < 99) {
|
if (pin[GPIO_SWT1 +i] < 99) {
|
||||||
#endif // USE_TM1638
|
#endif // USE_TM1638
|
||||||
boolean swm = ((FOLLOW_INV == Settings.switchmode[i]) || (PUSHBUTTON_INV == Settings.switchmode[i]) || (PUSHBUTTONHOLD_INV == Settings.switchmode[i]));
|
bool swm = ((FOLLOW_INV == Settings.switchmode[i]) || (PUSHBUTTON_INV == Settings.switchmode[i]) || (PUSHBUTTONHOLD_INV == Settings.switchmode[i]));
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"" D_JSON_SWITCH "%d\":\"%s\""), mqtt_data, i +1, GetStateText(swm ^ SwitchLastState(i)));
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"" D_JSON_SWITCH "%d\":\"%s\""), mqtt_data, i +1, GetStateText(swm ^ SwitchLastState(i)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
XsnsCall(FUNC_JSON_APPEND);
|
XsnsCall(FUNC_JSON_APPEND);
|
||||||
boolean json_data_available = (strlen(mqtt_data) - json_data_start);
|
bool json_data_available = (strlen(mqtt_data) - json_data_start);
|
||||||
if (strstr_P(mqtt_data, PSTR(D_JSON_PRESSURE))) {
|
if (strstr_P(mqtt_data, PSTR(D_JSON_PRESSURE))) {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"" D_JSON_PRESSURE_UNIT "\":\"%s\""), mqtt_data, PressureUnit().c_str());
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"" D_JSON_PRESSURE_UNIT "\":\"%s\""), mqtt_data, PressureUnit().c_str());
|
||||||
}
|
}
|
||||||
|
@ -1839,7 +1839,7 @@ void Every100mSeconds(void)
|
||||||
if (!latching_relay_pulse) SetLatchingRelay(0, 0);
|
if (!latching_relay_pulse) SetLatchingRelay(0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (byte i = 0; i < MAX_PULSETIMERS; i++) {
|
for (uint8_t i = 0; i < MAX_PULSETIMERS; i++) {
|
||||||
if (pulse_timer[i] != 0L) { // Timer active?
|
if (pulse_timer[i] != 0L) { // Timer active?
|
||||||
if (TimeReached(pulse_timer[i])) { // Timer finished?
|
if (TimeReached(pulse_timer[i])) { // Timer finished?
|
||||||
pulse_timer[i] = 0L; // Turn off this timer
|
pulse_timer[i] = 0L; // Turn off this timer
|
||||||
|
@ -1865,9 +1865,9 @@ void Every100mSeconds(void)
|
||||||
// Backlog
|
// Backlog
|
||||||
if (TimeReached(backlog_delay)) {
|
if (TimeReached(backlog_delay)) {
|
||||||
if ((backlog_pointer != backlog_index) && !backlog_mutex) {
|
if ((backlog_pointer != backlog_index) && !backlog_mutex) {
|
||||||
backlog_mutex = 1;
|
backlog_mutex = true;
|
||||||
ExecuteCommand((char*)backlog[backlog_pointer].c_str(), SRC_BACKLOG);
|
ExecuteCommand((char*)backlog[backlog_pointer].c_str(), SRC_BACKLOG);
|
||||||
backlog_mutex = 0;
|
backlog_mutex = false;
|
||||||
backlog_pointer++;
|
backlog_pointer++;
|
||||||
if (backlog_pointer >= MAX_BACKLOG) { backlog_pointer = 0; }
|
if (backlog_pointer >= MAX_BACKLOG) { backlog_pointer = 0; }
|
||||||
}
|
}
|
||||||
|
@ -1898,7 +1898,7 @@ void Every250mSeconds(void)
|
||||||
}
|
}
|
||||||
if (blinks || restart_flag || ota_state_flag) {
|
if (blinks || restart_flag || ota_state_flag) {
|
||||||
if (restart_flag || ota_state_flag) { // Overrule blinks and keep led lit
|
if (restart_flag || ota_state_flag) { // Overrule blinks and keep led lit
|
||||||
blinkstate = 1; // Stay lit
|
blinkstate = true; // Stay lit
|
||||||
} else {
|
} else {
|
||||||
blinkspeed--;
|
blinkspeed--;
|
||||||
if (!blinkspeed) {
|
if (!blinkspeed) {
|
||||||
|
@ -1917,7 +1917,7 @@ void Every250mSeconds(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (Settings.ledstate &1) {
|
else if (Settings.ledstate &1) {
|
||||||
boolean tstate = power;
|
bool tstate = power;
|
||||||
if ((SONOFF_TOUCH == Settings.module) || (SONOFF_T11 == Settings.module) || (SONOFF_T12 == Settings.module) || (SONOFF_T13 == Settings.module)) {
|
if ((SONOFF_TOUCH == Settings.module) || (SONOFF_T11 == Settings.module) || (SONOFF_T12 == Settings.module) || (SONOFF_T13 == Settings.module)) {
|
||||||
tstate = (!power) ? 1 : 0; // As requested invert signal for Touch devices to find them in the dark
|
tstate = (!power) ? 1 : 0; // As requested invert signal for Touch devices to find them in the dark
|
||||||
}
|
}
|
||||||
|
@ -1958,7 +1958,7 @@ void Every250mSeconds(void)
|
||||||
char *bch = strrchr(mqtt_data, '/'); // Only consider filename after last backslash prevent change of urls having "-" in it
|
char *bch = strrchr(mqtt_data, '/'); // Only consider filename after last backslash prevent change of urls having "-" in it
|
||||||
char *pch = strrchr((bch != NULL) ? bch : mqtt_data, '-'); // Change from filename-DE.bin into filename-minimal.bin
|
char *pch = strrchr((bch != NULL) ? bch : mqtt_data, '-'); // Change from filename-DE.bin into filename-minimal.bin
|
||||||
char *ech = strrchr((bch != NULL) ? bch : mqtt_data, '.'); // Change from filename.bin into filename-minimal.bin
|
char *ech = strrchr((bch != NULL) ? bch : mqtt_data, '.'); // Change from filename.bin into filename-minimal.bin
|
||||||
if (!pch) pch = ech;
|
if (!pch) { pch = ech; }
|
||||||
if (pch) {
|
if (pch) {
|
||||||
mqtt_data[pch - mqtt_data] = '\0';
|
mqtt_data[pch - mqtt_data] = '\0';
|
||||||
char *ech = strrchr(Settings.ota_url, '.'); // Change from filename.bin into filename-minimal.bin
|
char *ech = strrchr(Settings.ota_url, '.'); // Change from filename.bin into filename-minimal.bin
|
||||||
|
@ -2008,7 +2008,7 @@ void Every250mSeconds(void)
|
||||||
if (save_data_counter <= 0) {
|
if (save_data_counter <= 0) {
|
||||||
if (Settings.flag.save_state) {
|
if (Settings.flag.save_state) {
|
||||||
power_t mask = POWER_MASK;
|
power_t mask = POWER_MASK;
|
||||||
for (byte i = 0; i < MAX_PULSETIMERS; i++) {
|
for (uint8_t i = 0; i < MAX_PULSETIMERS; i++) {
|
||||||
if ((Settings.pulse_timer[i] > 0) && (Settings.pulse_timer[i] < 30)) { // 3 seconds
|
if ((Settings.pulse_timer[i] > 0) && (Settings.pulse_timer[i] < 30)) { // 3 seconds
|
||||||
mask &= ~(1 << i);
|
mask &= ~(1 << i);
|
||||||
}
|
}
|
||||||
|
@ -2079,18 +2079,18 @@ void ArduinoOTAInit(void)
|
||||||
{
|
{
|
||||||
ArduinoOTA.setPort(8266);
|
ArduinoOTA.setPort(8266);
|
||||||
ArduinoOTA.setHostname(my_hostname);
|
ArduinoOTA.setHostname(my_hostname);
|
||||||
if (Settings.web_password[0] !=0) ArduinoOTA.setPassword(Settings.web_password);
|
if (Settings.web_password[0] !=0) { ArduinoOTA.setPassword(Settings.web_password); }
|
||||||
|
|
||||||
ArduinoOTA.onStart([]()
|
ArduinoOTA.onStart([]()
|
||||||
{
|
{
|
||||||
SettingsSave(1); // Free flash for OTA update
|
SettingsSave(1); // Free flash for OTA update
|
||||||
#ifdef USE_WEBSERVER
|
#ifdef USE_WEBSERVER
|
||||||
if (Settings.webserver) StopWebserver();
|
if (Settings.webserver) { StopWebserver(); }
|
||||||
#endif // USE_WEBSERVER
|
#endif // USE_WEBSERVER
|
||||||
#ifdef USE_ARILUX_RF
|
#ifdef USE_ARILUX_RF
|
||||||
AriluxRfDisable(); // Prevent restart exception on Arilux Interrupt routine
|
AriluxRfDisable(); // Prevent restart exception on Arilux Interrupt routine
|
||||||
#endif // USE_ARILUX_RF
|
#endif // USE_ARILUX_RF
|
||||||
if (Settings.flag.mqtt_enabled) MqttDisconnect();
|
if (Settings.flag.mqtt_enabled) { MqttDisconnect(); }
|
||||||
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_UPLOAD "Arduino OTA " D_UPLOAD_STARTED));
|
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_UPLOAD "Arduino OTA " D_UPLOAD_STARTED));
|
||||||
AddLog(LOG_LEVEL_INFO);
|
AddLog(LOG_LEVEL_INFO);
|
||||||
arduino_ota_triggered = true;
|
arduino_ota_triggered = true;
|
||||||
|
@ -2103,7 +2103,7 @@ void ArduinoOTAInit(void)
|
||||||
if ((LOG_LEVEL_DEBUG <= seriallog_level)) {
|
if ((LOG_LEVEL_DEBUG <= seriallog_level)) {
|
||||||
arduino_ota_progress_dot_count++;
|
arduino_ota_progress_dot_count++;
|
||||||
Serial.printf(".");
|
Serial.printf(".");
|
||||||
if (!(arduino_ota_progress_dot_count % 80)) Serial.println();
|
if (!(arduino_ota_progress_dot_count % 80)) { Serial.println(); }
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -2115,7 +2115,7 @@ void ArduinoOTAInit(void)
|
||||||
*/
|
*/
|
||||||
char error_str[100];
|
char error_str[100];
|
||||||
|
|
||||||
if ((LOG_LEVEL_DEBUG <= seriallog_level) && arduino_ota_progress_dot_count) Serial.println();
|
if ((LOG_LEVEL_DEBUG <= seriallog_level) && arduino_ota_progress_dot_count) { Serial.println(); }
|
||||||
switch (error) {
|
switch (error) {
|
||||||
case OTA_BEGIN_ERROR: strncpy_P(error_str, PSTR(D_UPLOAD_ERR_2), sizeof(error_str)); break;
|
case OTA_BEGIN_ERROR: strncpy_P(error_str, PSTR(D_UPLOAD_ERR_2), sizeof(error_str)); break;
|
||||||
case OTA_RECEIVE_ERROR: strncpy_P(error_str, PSTR(D_UPLOAD_ERR_5), sizeof(error_str)); break;
|
case OTA_RECEIVE_ERROR: strncpy_P(error_str, PSTR(D_UPLOAD_ERR_5), sizeof(error_str)); break;
|
||||||
|
@ -2130,7 +2130,7 @@ void ArduinoOTAInit(void)
|
||||||
|
|
||||||
ArduinoOTA.onEnd([]()
|
ArduinoOTA.onEnd([]()
|
||||||
{
|
{
|
||||||
if ((LOG_LEVEL_DEBUG <= seriallog_level)) Serial.println();
|
if ((LOG_LEVEL_DEBUG <= seriallog_level)) { Serial.println(); }
|
||||||
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_UPLOAD "Arduino OTA " D_SUCCESSFUL ". " D_RESTARTING));
|
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_UPLOAD "Arduino OTA " D_SUCCESSFUL ". " D_RESTARTING));
|
||||||
AddLog(LOG_LEVEL_INFO);
|
AddLog(LOG_LEVEL_INFO);
|
||||||
EspRestart();
|
EspRestart();
|
||||||
|
@ -2210,7 +2210,7 @@ void SerialInput(void)
|
||||||
|
|
||||||
else if (!Settings.flag.mqtt_serial && (serial_in_byte == '\n')) {
|
else if (!Settings.flag.mqtt_serial && (serial_in_byte == '\n')) {
|
||||||
serial_in_buffer[serial_in_byte_counter] = 0; // serial data completed
|
serial_in_buffer[serial_in_byte_counter] = 0; // serial data completed
|
||||||
seriallog_level = (Settings.seriallog_level < LOG_LEVEL_INFO) ? (byte)LOG_LEVEL_INFO : Settings.seriallog_level;
|
seriallog_level = (Settings.seriallog_level < LOG_LEVEL_INFO) ? (uint8_t)LOG_LEVEL_INFO : Settings.seriallog_level;
|
||||||
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_COMMAND "%s"), serial_in_buffer);
|
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_COMMAND "%s"), serial_in_buffer);
|
||||||
AddLog(LOG_LEVEL_INFO);
|
AddLog(LOG_LEVEL_INFO);
|
||||||
ExecuteCommand(serial_in_buffer, SRC_SERIAL);
|
ExecuteCommand(serial_in_buffer, SRC_SERIAL);
|
||||||
|
@ -2254,7 +2254,7 @@ void GpioInit(void)
|
||||||
|
|
||||||
myio def_gp;
|
myio def_gp;
|
||||||
ModuleGpios(&def_gp);
|
ModuleGpios(&def_gp);
|
||||||
for (byte i = 0; i < sizeof(Settings.my_gp); i++) {
|
for (uint8_t i = 0; i < sizeof(Settings.my_gp); i++) {
|
||||||
if (Settings.my_gp.io[i] > GPIO_NONE) {
|
if (Settings.my_gp.io[i] > GPIO_NONE) {
|
||||||
my_module.io[i] = Settings.my_gp.io[i];
|
my_module.io[i] = Settings.my_gp.io[i];
|
||||||
}
|
}
|
||||||
|
@ -2264,10 +2264,10 @@ void GpioInit(void)
|
||||||
}
|
}
|
||||||
my_module_flag = ModuleFlag();
|
my_module_flag = ModuleFlag();
|
||||||
|
|
||||||
for (byte i = 0; i < GPIO_MAX; i++) {
|
for (uint8_t i = 0; i < GPIO_MAX; i++) {
|
||||||
pin[i] = 99;
|
pin[i] = 99;
|
||||||
}
|
}
|
||||||
for (byte i = 0; i < sizeof(my_module.io); i++) {
|
for (uint8_t i = 0; i < sizeof(my_module.io); i++) {
|
||||||
mpin = ValidGPIO(i, my_module.io[i]);
|
mpin = ValidGPIO(i, my_module.io[i]);
|
||||||
|
|
||||||
// snprintf_P(log_data, sizeof(log_data), PSTR("DBG: gpio pin %d, mpin %d"), i, mpin);
|
// snprintf_P(log_data, sizeof(log_data), PSTR("DBG: gpio pin %d, mpin %d"), i, mpin);
|
||||||
|
@ -2279,9 +2279,18 @@ void GpioInit(void)
|
||||||
mpin -= (GPIO_SWT1_NP - GPIO_SWT1);
|
mpin -= (GPIO_SWT1_NP - GPIO_SWT1);
|
||||||
}
|
}
|
||||||
else if ((mpin >= GPIO_KEY1_NP) && (mpin < (GPIO_KEY1_NP + MAX_KEYS))) {
|
else if ((mpin >= GPIO_KEY1_NP) && (mpin < (GPIO_KEY1_NP + MAX_KEYS))) {
|
||||||
ButtonPullupFlag(mpin - GPIO_KEY1_NP);
|
ButtonPullupFlag(mpin - GPIO_KEY1_NP); // 0 .. 3
|
||||||
mpin -= (GPIO_KEY1_NP - GPIO_KEY1);
|
mpin -= (GPIO_KEY1_NP - GPIO_KEY1);
|
||||||
}
|
}
|
||||||
|
else if ((mpin >= GPIO_KEY1_INV) && (mpin < (GPIO_KEY1_INV + MAX_KEYS))) {
|
||||||
|
ButtonInvertFlag(mpin - GPIO_KEY1_INV); // 0 .. 3
|
||||||
|
mpin -= (GPIO_KEY1_INV - GPIO_KEY1);
|
||||||
|
}
|
||||||
|
else if ((mpin >= GPIO_KEY1_INV_NP) && (mpin < (GPIO_KEY1_INV_NP + MAX_KEYS))) {
|
||||||
|
ButtonPullupFlag(mpin - GPIO_KEY1_INV_NP); // 0 .. 3
|
||||||
|
ButtonInvertFlag(mpin - GPIO_KEY1_INV_NP); // 0 .. 3
|
||||||
|
mpin -= (GPIO_KEY1_INV_NP - GPIO_KEY1);
|
||||||
|
}
|
||||||
else if ((mpin >= GPIO_REL1_INV) && (mpin < (GPIO_REL1_INV + MAX_RELAYS))) {
|
else if ((mpin >= GPIO_REL1_INV) && (mpin < (GPIO_REL1_INV + MAX_RELAYS))) {
|
||||||
bitSet(rel_inverted, mpin - GPIO_REL1_INV);
|
bitSet(rel_inverted, mpin - GPIO_REL1_INV);
|
||||||
mpin -= (GPIO_REL1_INV - GPIO_REL1);
|
mpin -= (GPIO_REL1_INV - GPIO_REL1);
|
||||||
|
@ -2301,7 +2310,7 @@ void GpioInit(void)
|
||||||
#ifdef USE_DHT
|
#ifdef USE_DHT
|
||||||
else if ((mpin >= GPIO_DHT11) && (mpin <= GPIO_SI7021)) {
|
else if ((mpin >= GPIO_DHT11) && (mpin <= GPIO_SI7021)) {
|
||||||
if (DhtSetup(i, mpin)) {
|
if (DhtSetup(i, mpin)) {
|
||||||
dht_flg = 1;
|
dht_flg = true;
|
||||||
mpin = GPIO_DHT11;
|
mpin = GPIO_DHT11;
|
||||||
} else {
|
} else {
|
||||||
mpin = 0;
|
mpin = 0;
|
||||||
|
@ -2320,7 +2329,7 @@ void GpioInit(void)
|
||||||
#ifdef USE_SPI
|
#ifdef USE_SPI
|
||||||
spi_flg = ((((pin[GPIO_SPI_CS] < 99) && (pin[GPIO_SPI_CS] > 14)) || (pin[GPIO_SPI_CS] < 12)) || (((pin[GPIO_SPI_DC] < 99) && (pin[GPIO_SPI_DC] > 14)) || (pin[GPIO_SPI_DC] < 12)));
|
spi_flg = ((((pin[GPIO_SPI_CS] < 99) && (pin[GPIO_SPI_CS] > 14)) || (pin[GPIO_SPI_CS] < 12)) || (((pin[GPIO_SPI_DC] < 99) && (pin[GPIO_SPI_DC] > 14)) || (pin[GPIO_SPI_DC] < 12)));
|
||||||
if (spi_flg) {
|
if (spi_flg) {
|
||||||
for (byte i = 0; i < GPIO_MAX; i++) {
|
for (uint8_t i = 0; i < GPIO_MAX; i++) {
|
||||||
if ((pin[i] >= 12) && (pin[i] <=14)) pin[i] = 99;
|
if ((pin[i] >= 12) && (pin[i] <=14)) pin[i] = 99;
|
||||||
}
|
}
|
||||||
my_module.io[12] = GPIO_SPI_MISO;
|
my_module.io[12] = GPIO_SPI_MISO;
|
||||||
|
@ -2335,15 +2344,15 @@ void GpioInit(void)
|
||||||
|
|
||||||
#ifdef USE_I2C
|
#ifdef USE_I2C
|
||||||
i2c_flg = ((pin[GPIO_I2C_SCL] < 99) && (pin[GPIO_I2C_SDA] < 99));
|
i2c_flg = ((pin[GPIO_I2C_SCL] < 99) && (pin[GPIO_I2C_SDA] < 99));
|
||||||
if (i2c_flg) Wire.begin(pin[GPIO_I2C_SDA], pin[GPIO_I2C_SCL]);
|
if (i2c_flg) { Wire.begin(pin[GPIO_I2C_SDA], pin[GPIO_I2C_SCL]); }
|
||||||
#endif // USE_I2C
|
#endif // USE_I2C
|
||||||
|
|
||||||
devices_present = 1;
|
devices_present = 1;
|
||||||
|
|
||||||
light_type = LT_BASIC; // Use basic PWM control if SetOption15 = 0
|
light_type = LT_BASIC; // Use basic PWM control if SetOption15 = 0
|
||||||
if (Settings.flag.pwm_control) {
|
if (Settings.flag.pwm_control) {
|
||||||
for (byte i = 0; i < MAX_PWMS; i++) {
|
for (uint8_t i = 0; i < MAX_PWMS; i++) {
|
||||||
if (pin[GPIO_PWM1 +i] < 99) light_type++; // Use Dimmer/Color control for all PWM as SetOption15 = 1
|
if (pin[GPIO_PWM1 +i] < 99) { light_type++; } // Use Dimmer/Color control for all PWM as SetOption15 = 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2383,8 +2392,8 @@ void GpioInit(void)
|
||||||
light_type = LT_RGBWC;
|
light_type = LT_RGBWC;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (!light_type) devices_present = 0;
|
if (!light_type) { devices_present = 0; }
|
||||||
for (byte i = 0; i < MAX_RELAYS; i++) {
|
for (uint8_t i = 0; i < MAX_RELAYS; i++) {
|
||||||
if (pin[GPIO_REL1 +i] < 99) {
|
if (pin[GPIO_REL1 +i] < 99) {
|
||||||
pinMode(pin[GPIO_REL1 +i], OUTPUT);
|
pinMode(pin[GPIO_REL1 +i], OUTPUT);
|
||||||
devices_present++;
|
devices_present++;
|
||||||
|
@ -2396,7 +2405,7 @@ void GpioInit(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (byte i = 0; i < MAX_LEDS; i++) {
|
for (uint8_t i = 0; i < MAX_LEDS; i++) {
|
||||||
if (pin[GPIO_LED1 +i] < 99) {
|
if (pin[GPIO_LED1 +i] < 99) {
|
||||||
pinMode(pin[GPIO_LED1 +i], OUTPUT);
|
pinMode(pin[GPIO_LED1 +i], OUTPUT);
|
||||||
digitalWrite(pin[GPIO_LED1 +i], bitRead(led_inverted, i));
|
digitalWrite(pin[GPIO_LED1 +i], bitRead(led_inverted, i));
|
||||||
|
@ -2414,7 +2423,7 @@ void GpioInit(void)
|
||||||
}
|
}
|
||||||
#endif // USE_WS2812
|
#endif // USE_WS2812
|
||||||
if (!light_type) {
|
if (!light_type) {
|
||||||
for (byte i = 0; i < MAX_PWMS; i++) { // Basic PWM control only
|
for (uint8_t i = 0; i < MAX_PWMS; i++) { // Basic PWM control only
|
||||||
if (pin[GPIO_PWM1 +i] < 99) {
|
if (pin[GPIO_PWM1 +i] < 99) {
|
||||||
pwm_present = true;
|
pwm_present = true;
|
||||||
pinMode(pin[GPIO_PWM1 +i], OUTPUT);
|
pinMode(pin[GPIO_PWM1 +i], OUTPUT);
|
||||||
|
@ -2479,7 +2488,7 @@ void setup(void)
|
||||||
if (RtcReboot.fast_reboot_count > 1) { // Restart twice
|
if (RtcReboot.fast_reboot_count > 1) { // Restart twice
|
||||||
Settings.flag3.user_esp8285_enable = 0; // Disable ESP8285 Generic GPIOs interfering with flash SPI
|
Settings.flag3.user_esp8285_enable = 0; // Disable ESP8285 Generic GPIOs interfering with flash SPI
|
||||||
if (RtcReboot.fast_reboot_count > 2) { // Restart 3 times
|
if (RtcReboot.fast_reboot_count > 2) { // Restart 3 times
|
||||||
for (byte i = 0; i < MAX_RULE_SETS; i++) {
|
for (uint8_t i = 0; i < MAX_RULE_SETS; i++) {
|
||||||
if (bitRead(Settings.rule_stop, i)) {
|
if (bitRead(Settings.rule_stop, i)) {
|
||||||
bitWrite(Settings.rule_enabled, i, 0); // Disable rules causing boot loop
|
bitWrite(Settings.rule_enabled, i, 0); // Disable rules causing boot loop
|
||||||
}
|
}
|
||||||
|
@ -2489,7 +2498,7 @@ void setup(void)
|
||||||
Settings.rule_enabled = 0; // Disable all rules
|
Settings.rule_enabled = 0; // Disable all rules
|
||||||
}
|
}
|
||||||
if (RtcReboot.fast_reboot_count > 4) { // Restarted 5 times
|
if (RtcReboot.fast_reboot_count > 4) { // Restarted 5 times
|
||||||
for (byte i = 0; i < sizeof(Settings.my_gp); i++) {
|
for (uint8_t i = 0; i < sizeof(Settings.my_gp); i++) {
|
||||||
Settings.my_gp.io[i] = GPIO_NONE; // Reset user defined GPIO disabling sensors
|
Settings.my_gp.io[i] = GPIO_NONE; // Reset user defined GPIO disabling sensors
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2516,7 +2525,7 @@ void setup(void)
|
||||||
|
|
||||||
WifiConnect();
|
WifiConnect();
|
||||||
|
|
||||||
if (MOTOR == Settings.module) Settings.poweronstate = POWER_ALL_ON; // Needs always on else in limbo!
|
if (MOTOR == Settings.module) { Settings.poweronstate = POWER_ALL_ON; } // Needs always on else in limbo!
|
||||||
if (POWER_ALL_ALWAYS_ON == Settings.poweronstate) {
|
if (POWER_ALL_ALWAYS_ON == Settings.poweronstate) {
|
||||||
SetDevicePower(1, SRC_RESTART);
|
SetDevicePower(1, SRC_RESTART);
|
||||||
} else {
|
} else {
|
||||||
|
@ -2553,7 +2562,7 @@ void setup(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Issue #526 and #909
|
// Issue #526 and #909
|
||||||
for (byte i = 0; i < devices_present; i++) {
|
for (uint8_t i = 0; i < devices_present; i++) {
|
||||||
if ((i < MAX_RELAYS) && (pin[GPIO_REL1 +i] < 99)) {
|
if ((i < MAX_RELAYS) && (pin[GPIO_REL1 +i] < 99)) {
|
||||||
bitWrite(power, i, digitalRead(pin[GPIO_REL1 +i]) ^ bitRead(rel_inverted, i));
|
bitWrite(power, i, digitalRead(pin[GPIO_REL1 +i]) ^ bitRead(rel_inverted, i));
|
||||||
}
|
}
|
||||||
|
@ -2614,7 +2623,7 @@ void loop(void)
|
||||||
XsnsCall(FUNC_EVERY_250_MSECOND);
|
XsnsCall(FUNC_EVERY_250_MSECOND);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!serial_local) SerialInput();
|
if (!serial_local) { SerialInput(); }
|
||||||
|
|
||||||
#ifdef USE_ARDUINO_OTA
|
#ifdef USE_ARDUINO_OTA
|
||||||
MDNS.update();
|
MDNS.update();
|
||||||
|
|
|
@ -228,6 +228,10 @@ void KNX_CB_Action(message_t const &msg, void *arg);
|
||||||
#define CODE_IMAGE 6
|
#define CODE_IMAGE 6
|
||||||
|
|
||||||
#undef USE_ENERGY_SENSOR // Disable energy sensors (-14k code)
|
#undef USE_ENERGY_SENSOR // Disable energy sensors (-14k code)
|
||||||
|
#undef USE_PZEM004T // Disable PZEM004T energy sensor
|
||||||
|
#undef USE_PZEM_AC // Disable PZEM014,016 Energy monitor
|
||||||
|
#undef USE_PZEM_DC // Disable PZEM003,017 Energy monitor
|
||||||
|
#undef USE_MCP39F501 // Disable MCP39F501 Energy monitor as used in Shelly 2
|
||||||
#undef USE_EMULATION // Disable Belkin WeMo and Hue Bridge emulation for Alexa (-16k code, -2k mem)
|
#undef USE_EMULATION // Disable Belkin WeMo and Hue Bridge emulation for Alexa (-16k code, -2k mem)
|
||||||
#undef USE_DOMOTICZ // Disable Domoticz
|
#undef USE_DOMOTICZ // Disable Domoticz
|
||||||
#undef USE_HOME_ASSISTANT // Disable Home Assistant
|
#undef USE_HOME_ASSISTANT // Disable Home Assistant
|
||||||
|
|
|
@ -146,6 +146,14 @@ enum UserSelectablePins {
|
||||||
GPIO_MAX31855CS, // MAX31855 Serial interface
|
GPIO_MAX31855CS, // MAX31855 Serial interface
|
||||||
GPIO_MAX31855CLK, // MAX31855 Serial interface
|
GPIO_MAX31855CLK, // MAX31855 Serial interface
|
||||||
GPIO_MAX31855DO, // MAX31855 Serial interface
|
GPIO_MAX31855DO, // MAX31855 Serial interface
|
||||||
|
GPIO_KEY1_INV, // Inverted buttons
|
||||||
|
GPIO_KEY2_INV,
|
||||||
|
GPIO_KEY3_INV,
|
||||||
|
GPIO_KEY4_INV,
|
||||||
|
GPIO_KEY1_INV_NP, // Inverted buttons without pull-up
|
||||||
|
GPIO_KEY2_INV_NP,
|
||||||
|
GPIO_KEY3_INV_NP,
|
||||||
|
GPIO_KEY4_INV_NP,
|
||||||
GPIO_SENSOR_END };
|
GPIO_SENSOR_END };
|
||||||
|
|
||||||
// Programmer selectable GPIO functionality offset by user selectable GPIOs
|
// Programmer selectable GPIO functionality offset by user selectable GPIOs
|
||||||
|
@ -209,7 +217,10 @@ const char kSensorNames[] PROGMEM =
|
||||||
D_SENSOR_SSPI_MISO "|" D_SENSOR_SSPI_MOSI "|" D_SENSOR_SSPI_SCLK "|" D_SENSOR_SSPI_CS "|" D_SENSOR_SSPI_DC "|"
|
D_SENSOR_SSPI_MISO "|" D_SENSOR_SSPI_MOSI "|" D_SENSOR_SSPI_SCLK "|" D_SENSOR_SSPI_CS "|" D_SENSOR_SSPI_DC "|"
|
||||||
D_SENSOR_RF_SENSOR "|"
|
D_SENSOR_RF_SENSOR "|"
|
||||||
D_SENSOR_AZ_TX "|" D_SENSOR_AZ_RX "|"
|
D_SENSOR_AZ_TX "|" D_SENSOR_AZ_RX "|"
|
||||||
D_SENSOR_MAX31855_CS "|" D_SENSOR_MAX31855_CLK "|" D_SENSOR_MAX31855_DO;
|
D_SENSOR_MAX31855_CS "|" D_SENSOR_MAX31855_CLK "|" D_SENSOR_MAX31855_DO "|"
|
||||||
|
D_SENSOR_BUTTON "1i|" D_SENSOR_BUTTON "2i|" D_SENSOR_BUTTON "3i|" D_SENSOR_BUTTON "4i|"
|
||||||
|
D_SENSOR_BUTTON "1in|" D_SENSOR_BUTTON "2in|" D_SENSOR_BUTTON "3in|" D_SENSOR_BUTTON "4in"
|
||||||
|
;
|
||||||
|
|
||||||
/********************************************************************************************/
|
/********************************************************************************************/
|
||||||
|
|
||||||
|
@ -331,12 +342,20 @@ const uint8_t kGpioNiceList[] PROGMEM = {
|
||||||
GPIO_NONE, // Not used
|
GPIO_NONE, // Not used
|
||||||
GPIO_KEY1, // Buttons
|
GPIO_KEY1, // Buttons
|
||||||
GPIO_KEY1_NP,
|
GPIO_KEY1_NP,
|
||||||
|
GPIO_KEY1_INV,
|
||||||
|
GPIO_KEY1_INV_NP,
|
||||||
GPIO_KEY2,
|
GPIO_KEY2,
|
||||||
GPIO_KEY2_NP,
|
GPIO_KEY2_NP,
|
||||||
|
GPIO_KEY2_INV,
|
||||||
|
GPIO_KEY2_INV_NP,
|
||||||
GPIO_KEY3,
|
GPIO_KEY3,
|
||||||
GPIO_KEY3_NP,
|
GPIO_KEY3_NP,
|
||||||
|
GPIO_KEY3_INV,
|
||||||
|
GPIO_KEY3_INV_NP,
|
||||||
GPIO_KEY4,
|
GPIO_KEY4,
|
||||||
GPIO_KEY4_NP,
|
GPIO_KEY4_NP,
|
||||||
|
GPIO_KEY4_INV,
|
||||||
|
GPIO_KEY4_INV_NP,
|
||||||
GPIO_SWT1, // User connected external switches
|
GPIO_SWT1, // User connected external switches
|
||||||
GPIO_SWT1_NP,
|
GPIO_SWT1_NP,
|
||||||
GPIO_SWT2,
|
GPIO_SWT2,
|
||||||
|
@ -1780,6 +1799,27 @@ const mytmplt kModules[MAXMODULE] PROGMEM = {
|
||||||
/*
|
/*
|
||||||
Optionals
|
Optionals
|
||||||
|
|
||||||
|
{ "ESP RGBWWC", // esp rgbww controller https://github.com/pljakobs/esp_rgbww_controller/tree/v2.3
|
||||||
|
GPIO_KEY1, // GPIO00 Button
|
||||||
|
GPIO_USER, // GPIO01 Serial RXD and Optional sensor
|
||||||
|
0, // GPIO02
|
||||||
|
GPIO_USER, // GPIO03 Serial TXD and Optional sensor
|
||||||
|
GPIO_PWM5, // GPIO04 LED Warm White
|
||||||
|
GPIO_PWM4, // GPIO05 LED Cold White
|
||||||
|
// GPIO06 (SD_CLK Flash)
|
||||||
|
// GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT)
|
||||||
|
// GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT)
|
||||||
|
0, // GPIO09 (SD_DATA2 Flash QIO or ESP8285)
|
||||||
|
0, // GPIO10 (SD_DATA3 Flash QIO or ESP8285)
|
||||||
|
// GPIO11 (SD_CMD Flash)
|
||||||
|
GPIO_PWM2, // GPIO12 LED Green
|
||||||
|
GPIO_PWM1, // GPIO13 LED Red
|
||||||
|
GPIO_PWM3, // GPIO14 LED Blue
|
||||||
|
0, // GPIO15
|
||||||
|
GPIO_KEY2, // GPIO16 Button
|
||||||
|
0
|
||||||
|
}
|
||||||
|
|
||||||
{ "N0DY Relay", // N0DY Wifi Dual Relay (ESP-07)
|
{ "N0DY Relay", // N0DY Wifi Dual Relay (ESP-07)
|
||||||
// https://www.n0dy.com/product/web-controlled-dual-relay/
|
// https://www.n0dy.com/product/web-controlled-dual-relay/
|
||||||
// https://www.amazon.com/dp/B072MKV8ZM
|
// https://www.amazon.com/dp/B072MKV8ZM
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
#ifndef _SONOFF_VERSION_H_
|
#ifndef _SONOFF_VERSION_H_
|
||||||
#define _SONOFF_VERSION_H_
|
#define _SONOFF_VERSION_H_
|
||||||
|
|
||||||
#define VERSION 0x0604010B
|
#define VERSION 0x0604010C
|
||||||
|
|
||||||
#define D_PROGRAMNAME "Sonoff-Tasmota"
|
#define D_PROGRAMNAME "Sonoff-Tasmota"
|
||||||
#define D_AUTHOR "Theo Arends"
|
#define D_AUTHOR "Theo Arends"
|
||||||
|
|
|
@ -31,7 +31,7 @@ Ticker tickerOSWatch;
|
||||||
#define OSWATCH_RESET_TIME 120
|
#define OSWATCH_RESET_TIME 120
|
||||||
|
|
||||||
static unsigned long oswatch_last_loop_time;
|
static unsigned long oswatch_last_loop_time;
|
||||||
byte oswatch_blocked_loop = 0;
|
uint8_t oswatch_blocked_loop = 0;
|
||||||
|
|
||||||
#ifndef USE_WS2812_DMA // Collides with Neopixelbus but solves exception
|
#ifndef USE_WS2812_DMA // Collides with Neopixelbus but solves exception
|
||||||
//void OsWatchTicker() ICACHE_RAM_ATTR;
|
//void OsWatchTicker() ICACHE_RAM_ATTR;
|
||||||
|
@ -84,7 +84,7 @@ String GetResetReason(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean OsWatchBlockedLoop(void)
|
bool OsWatchBlockedLoop(void)
|
||||||
{
|
{
|
||||||
return oswatch_blocked_loop;
|
return oswatch_blocked_loop;
|
||||||
}
|
}
|
||||||
|
@ -374,10 +374,10 @@ uint8_t Shortcut(const char* str)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean ParseIp(uint32_t* addr, const char* str)
|
bool ParseIp(uint32_t* addr, const char* str)
|
||||||
{
|
{
|
||||||
uint8_t *part = (uint8_t*)addr;
|
uint8_t *part = (uint8_t*)addr;
|
||||||
byte i;
|
uint8_t i;
|
||||||
|
|
||||||
*addr = 0;
|
*addr = 0;
|
||||||
for (i = 0; i < 4; i++) {
|
for (i = 0; i < 4; i++) {
|
||||||
|
@ -391,7 +391,7 @@ boolean ParseIp(uint32_t* addr, const char* str)
|
||||||
return (3 == i);
|
return (3 == i);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MakeValidMqtt(byte option, char* str)
|
void MakeValidMqtt(uint8_t option, char* str)
|
||||||
{
|
{
|
||||||
// option 0 = replace by underscore
|
// option 0 = replace by underscore
|
||||||
// option 1 = delete character
|
// option 1 = delete character
|
||||||
|
@ -701,7 +701,7 @@ int GetStateNumber(char *state_text)
|
||||||
return state_number;
|
return state_number;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean GetUsedInModule(byte val, uint8_t *arr)
|
bool GetUsedInModule(uint8_t val, uint8_t *arr)
|
||||||
{
|
{
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
|
|
||||||
|
@ -749,7 +749,7 @@ boolean GetUsedInModule(byte val, uint8_t *arr)
|
||||||
offset = -(GPIO_CNTR1_NP - GPIO_CNTR1);
|
offset = -(GPIO_CNTR1_NP - GPIO_CNTR1);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (byte i = 0; i < MAX_GPIO_PIN; i++) {
|
for (uint8_t i = 0; i < MAX_GPIO_PIN; i++) {
|
||||||
if (arr[i] == val) { return true; }
|
if (arr[i] == val) { return true; }
|
||||||
if (arr[i] == val + offset) { return true; }
|
if (arr[i] == val + offset) { return true; }
|
||||||
}
|
}
|
||||||
|
@ -774,7 +774,7 @@ void SetSerialBaudrate(int baudrate)
|
||||||
|
|
||||||
void ClaimSerial(void)
|
void ClaimSerial(void)
|
||||||
{
|
{
|
||||||
serial_local = 1;
|
serial_local = true;
|
||||||
AddLog_P(LOG_LEVEL_INFO, PSTR("SNS: Hardware Serial"));
|
AddLog_P(LOG_LEVEL_INFO, PSTR("SNS: Hardware Serial"));
|
||||||
SetSeriallog(LOG_LEVEL_NONE);
|
SetSeriallog(LOG_LEVEL_NONE);
|
||||||
baudrate = Serial.baudRate();
|
baudrate = Serial.baudRate();
|
||||||
|
@ -899,7 +899,7 @@ uint32_t i2c_buffer = 0;
|
||||||
|
|
||||||
bool I2cValidRead(uint8_t addr, uint8_t reg, uint8_t size)
|
bool I2cValidRead(uint8_t addr, uint8_t reg, uint8_t size)
|
||||||
{
|
{
|
||||||
byte x = I2C_RETRY_COUNTER;
|
uint8_t x = I2C_RETRY_COUNTER;
|
||||||
|
|
||||||
i2c_buffer = 0;
|
i2c_buffer = 0;
|
||||||
do {
|
do {
|
||||||
|
@ -908,7 +908,7 @@ bool I2cValidRead(uint8_t addr, uint8_t reg, uint8_t size)
|
||||||
if (0 == Wire.endTransmission(false)) { // Try to become I2C Master, send data and collect bytes, keep master status for next request...
|
if (0 == Wire.endTransmission(false)) { // Try to become I2C Master, send data and collect bytes, keep master status for next request...
|
||||||
Wire.requestFrom((int)addr, (int)size); // send data n-bytes read
|
Wire.requestFrom((int)addr, (int)size); // send data n-bytes read
|
||||||
if (Wire.available() == size) {
|
if (Wire.available() == size) {
|
||||||
for (byte i = 0; i < size; i++) {
|
for (uint8_t i = 0; i < size; i++) {
|
||||||
i2c_buffer = i2c_buffer << 8 | Wire.read(); // receive DATA
|
i2c_buffer = i2c_buffer << 8 | Wire.read(); // receive DATA
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1000,7 +1000,7 @@ int32_t I2cRead24(uint8_t addr, uint8_t reg)
|
||||||
|
|
||||||
bool I2cWrite(uint8_t addr, uint8_t reg, uint32_t val, uint8_t size)
|
bool I2cWrite(uint8_t addr, uint8_t reg, uint32_t val, uint8_t size)
|
||||||
{
|
{
|
||||||
byte x = I2C_RETRY_COUNTER;
|
uint8_t x = I2C_RETRY_COUNTER;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
Wire.beginTransmission((uint8_t)addr); // start transmission to device
|
Wire.beginTransmission((uint8_t)addr); // start transmission to device
|
||||||
|
@ -1029,7 +1029,7 @@ int8_t I2cReadBuffer(uint8_t addr, uint8_t reg, uint8_t *reg_data, uint16_t len)
|
||||||
Wire.beginTransmission((uint8_t)addr);
|
Wire.beginTransmission((uint8_t)addr);
|
||||||
Wire.write((uint8_t)reg);
|
Wire.write((uint8_t)reg);
|
||||||
Wire.endTransmission();
|
Wire.endTransmission();
|
||||||
if (len != Wire.requestFrom((uint8_t)addr, (byte)len)) {
|
if (len != Wire.requestFrom((uint8_t)addr, (uint8_t)len)) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
while (len--) {
|
while (len--) {
|
||||||
|
@ -1060,9 +1060,9 @@ void I2cScan(char *devs, unsigned int devs_len)
|
||||||
// I2C_SDA_HELD_LOW 3 = I2C bus error. SDA line held low by slave/another_master after n bits
|
// I2C_SDA_HELD_LOW 3 = I2C bus error. SDA line held low by slave/another_master after n bits
|
||||||
// I2C_SDA_HELD_LOW_AFTER_INIT 4 = line busy. SDA again held low by another device. 2nd master?
|
// I2C_SDA_HELD_LOW_AFTER_INIT 4 = line busy. SDA again held low by another device. 2nd master?
|
||||||
|
|
||||||
byte error = 0;
|
uint8_t error = 0;
|
||||||
byte address = 0;
|
uint8_t address = 0;
|
||||||
byte any = 0;
|
uint8_t any = 0;
|
||||||
|
|
||||||
snprintf_P(devs, devs_len, PSTR("{\"" D_CMND_I2CSCAN "\":\"" D_JSON_I2CSCAN_DEVICES_FOUND_AT));
|
snprintf_P(devs, devs_len, PSTR("{\"" D_CMND_I2CSCAN "\":\"" D_JSON_I2CSCAN_DEVICES_FOUND_AT));
|
||||||
for (address = 1; address <= 127; address++) {
|
for (address = 1; address <= 127; address++) {
|
||||||
|
@ -1086,9 +1086,9 @@ void I2cScan(char *devs, unsigned int devs_len)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean I2cDevice(byte addr)
|
bool I2cDevice(uint8_t addr)
|
||||||
{
|
{
|
||||||
for (byte address = 1; address <= 127; address++) {
|
for (uint8_t address = 1; address <= 127; address++) {
|
||||||
Wire.beginTransmission(address);
|
Wire.beginTransmission(address);
|
||||||
if (!Wire.endTransmission() && (address == addr)) {
|
if (!Wire.endTransmission() && (address == addr)) {
|
||||||
return true;
|
return true;
|
||||||
|
@ -1107,7 +1107,7 @@ boolean I2cDevice(byte addr)
|
||||||
*
|
*
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
void SetSeriallog(byte loglevel)
|
void SetSeriallog(uint8_t loglevel)
|
||||||
{
|
{
|
||||||
Settings.seriallog_level = loglevel;
|
Settings.seriallog_level = loglevel;
|
||||||
seriallog_level = loglevel;
|
seriallog_level = loglevel;
|
||||||
|
@ -1115,7 +1115,7 @@ void SetSeriallog(byte loglevel)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_WEBSERVER
|
#ifdef USE_WEBSERVER
|
||||||
void GetLog(byte idx, char** entry_pp, size_t* len_p)
|
void GetLog(uint8_t idx, char** entry_pp, size_t* len_p)
|
||||||
{
|
{
|
||||||
char* entry_p = NULL;
|
char* entry_p = NULL;
|
||||||
size_t len = 0;
|
size_t len = 0;
|
||||||
|
@ -1123,7 +1123,7 @@ void GetLog(byte idx, char** entry_pp, size_t* len_p)
|
||||||
if (idx) {
|
if (idx) {
|
||||||
char* it = web_log;
|
char* it = web_log;
|
||||||
do {
|
do {
|
||||||
byte cur_idx = *it;
|
uint8_t cur_idx = *it;
|
||||||
it++;
|
it++;
|
||||||
size_t tmp = strchrspn(it, '\1');
|
size_t tmp = strchrspn(it, '\1');
|
||||||
tmp++; // Skip terminating '\1'
|
tmp++; // Skip terminating '\1'
|
||||||
|
@ -1164,7 +1164,7 @@ void Syslog(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddLog(byte loglevel)
|
void AddLog(uint8_t loglevel)
|
||||||
{
|
{
|
||||||
char mxtime[10]; // "13:45:21 "
|
char mxtime[10]; // "13:45:21 "
|
||||||
|
|
||||||
|
@ -1194,13 +1194,13 @@ void AddLog(byte loglevel)
|
||||||
if (!global_state.wifi_down && (loglevel <= syslog_level)) { Syslog(); }
|
if (!global_state.wifi_down && (loglevel <= syslog_level)) { Syslog(); }
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddLog_P(byte loglevel, const char *formatP)
|
void AddLog_P(uint8_t loglevel, const char *formatP)
|
||||||
{
|
{
|
||||||
snprintf_P(log_data, sizeof(log_data), formatP);
|
snprintf_P(log_data, sizeof(log_data), formatP);
|
||||||
AddLog(loglevel);
|
AddLog(loglevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddLog_P(byte loglevel, const char *formatP, const char *formatP2)
|
void AddLog_P(uint8_t loglevel, const char *formatP, const char *formatP2)
|
||||||
{
|
{
|
||||||
char message[100];
|
char message[100];
|
||||||
|
|
||||||
|
@ -1210,7 +1210,7 @@ void AddLog_P(byte loglevel, const char *formatP, const char *formatP2)
|
||||||
AddLog(loglevel);
|
AddLog(loglevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddLogBuffer(byte loglevel, uint8_t *buffer, int count)
|
void AddLogBuffer(uint8_t loglevel, uint8_t *buffer, int count)
|
||||||
{
|
{
|
||||||
snprintf_P(log_data, sizeof(log_data), PSTR("DMP:"));
|
snprintf_P(log_data, sizeof(log_data), PSTR("DMP:"));
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < count; i++) {
|
||||||
|
@ -1219,7 +1219,7 @@ void AddLogBuffer(byte loglevel, uint8_t *buffer, int count)
|
||||||
AddLog(loglevel);
|
AddLog(loglevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddLogSerial(byte loglevel)
|
void AddLogSerial(uint8_t loglevel)
|
||||||
{
|
{
|
||||||
AddLogBuffer(loglevel, (uint8_t*)serial_in_buffer, serial_in_byte_counter);
|
AddLogBuffer(loglevel, (uint8_t*)serial_in_buffer, serial_in_byte_counter);
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,8 +32,9 @@ uint8_t multiwindow[MAX_KEYS] = { 0 }; // Max time between button presses t
|
||||||
uint8_t multipress[MAX_KEYS] = { 0 }; // Number of button presses within multiwindow
|
uint8_t multipress[MAX_KEYS] = { 0 }; // Number of button presses within multiwindow
|
||||||
|
|
||||||
uint8_t dual_hex_code = 0; // Sonoff dual input flag
|
uint8_t dual_hex_code = 0; // Sonoff dual input flag
|
||||||
uint8_t key_no_pullup = 0;
|
uint8_t key_no_pullup = 0; // key no pullup flag (1 = no pullup)
|
||||||
uint8_t buttons_found = 0;
|
uint8_t key_inverted = 0; // Key inverted flag (1 = inverted)
|
||||||
|
uint8_t buttons_found = 0; // Number of buttons found flag
|
||||||
|
|
||||||
/********************************************************************************************/
|
/********************************************************************************************/
|
||||||
|
|
||||||
|
@ -42,6 +43,11 @@ void ButtonPullupFlag(uint8 button_bit)
|
||||||
bitSet(key_no_pullup, button_bit);
|
bitSet(key_no_pullup, button_bit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ButtonInvertFlag(uint8 button_bit)
|
||||||
|
{
|
||||||
|
bitSet(key_inverted, button_bit);
|
||||||
|
}
|
||||||
|
|
||||||
void ButtonInit(void)
|
void ButtonInit(void)
|
||||||
{
|
{
|
||||||
if (my_module_flag.pullup) {
|
if (my_module_flag.pullup) {
|
||||||
|
@ -51,7 +57,7 @@ void ButtonInit(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
buttons_found = 0;
|
buttons_found = 0;
|
||||||
for (byte i = 0; i < MAX_KEYS; i++) {
|
for (uint8_t i = 0; i < MAX_KEYS; i++) {
|
||||||
if (pin[GPIO_KEY1 +i] < 99) {
|
if (pin[GPIO_KEY1 +i] < 99) {
|
||||||
buttons_found++;
|
buttons_found++;
|
||||||
pinMode(pin[GPIO_KEY1 +i], bitRead(key_no_pullup, i) ? INPUT : ((16 == pin[GPIO_KEY1 +i]) ? INPUT_PULLDOWN_16 : INPUT_PULLUP));
|
pinMode(pin[GPIO_KEY1 +i], bitRead(key_no_pullup, i) ? INPUT : ((16 == pin[GPIO_KEY1 +i]) ? INPUT_PULLDOWN_16 : INPUT_PULLUP));
|
||||||
|
@ -59,7 +65,7 @@ void ButtonInit(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
byte ButtonSerial(byte serial_in_byte)
|
uint8_t ButtonSerial(uint8_t serial_in_byte)
|
||||||
{
|
{
|
||||||
if (dual_hex_code) {
|
if (dual_hex_code) {
|
||||||
dual_hex_code--;
|
dual_hex_code--;
|
||||||
|
@ -96,7 +102,7 @@ void ButtonHandler(void)
|
||||||
char scmnd[20];
|
char scmnd[20];
|
||||||
|
|
||||||
uint8_t maxdev = (devices_present > MAX_KEYS) ? MAX_KEYS : devices_present;
|
uint8_t maxdev = (devices_present > MAX_KEYS) ? MAX_KEYS : devices_present;
|
||||||
for (byte button_index = 0; button_index < maxdev; button_index++) {
|
for (uint8_t button_index = 0; button_index < maxdev; button_index++) {
|
||||||
button = NOT_PRESSED;
|
button = NOT_PRESSED;
|
||||||
button_present = 0;
|
button_present = 0;
|
||||||
|
|
||||||
|
@ -115,7 +121,7 @@ void ButtonHandler(void)
|
||||||
} else {
|
} else {
|
||||||
if (pin[GPIO_KEY1 +button_index] < 99) {
|
if (pin[GPIO_KEY1 +button_index] < 99) {
|
||||||
button_present = 1;
|
button_present = 1;
|
||||||
button = digitalRead(pin[GPIO_KEY1 +button_index]);
|
button = (digitalRead(pin[GPIO_KEY1 +button_index]) != bitRead(key_inverted, button_index));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -128,7 +134,7 @@ void ButtonHandler(void)
|
||||||
else if (SONOFF_4CHPRO == Settings.module) {
|
else if (SONOFF_4CHPRO == Settings.module) {
|
||||||
if (holdbutton[button_index]) { holdbutton[button_index]--; }
|
if (holdbutton[button_index]) { holdbutton[button_index]--; }
|
||||||
|
|
||||||
boolean button_pressed = false;
|
bool button_pressed = false;
|
||||||
if ((PRESSED == button) && (NOT_PRESSED == lastbutton[button_index])) {
|
if ((PRESSED == button) && (NOT_PRESSED == lastbutton[button_index])) {
|
||||||
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_APPLICATION D_BUTTON "%d " D_LEVEL_10), button_index +1);
|
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_APPLICATION D_BUTTON "%d " D_LEVEL_10), button_index +1);
|
||||||
AddLog(LOG_LEVEL_DEBUG);
|
AddLog(LOG_LEVEL_DEBUG);
|
||||||
|
@ -194,7 +200,7 @@ void ButtonHandler(void)
|
||||||
multiwindow[button_index]--;
|
multiwindow[button_index]--;
|
||||||
} else {
|
} else {
|
||||||
if (!restart_flag && !holdbutton[button_index] && (multipress[button_index] > 0) && (multipress[button_index] < MAX_BUTTON_COMMANDS +3)) {
|
if (!restart_flag && !holdbutton[button_index] && (multipress[button_index] > 0) && (multipress[button_index] < MAX_BUTTON_COMMANDS +3)) {
|
||||||
boolean single_press = false;
|
bool single_press = false;
|
||||||
if (multipress[button_index] < 3) { // Single or Double press
|
if (multipress[button_index] < 3) { // Single or Double press
|
||||||
if ((SONOFF_DUAL_R2 == Settings.module) || (SONOFF_DUAL == Settings.module) || (CH4 == Settings.module)) {
|
if ((SONOFF_DUAL_R2 == Settings.module) || (SONOFF_DUAL == Settings.module) || (CH4 == Settings.module)) {
|
||||||
single_press = true;
|
single_press = true;
|
||||||
|
|
|
@ -60,7 +60,7 @@ String GetBuildDateAndTime(void)
|
||||||
int year = 0;
|
int year = 0;
|
||||||
|
|
||||||
// sscanf(mdate, "%s %d %d", bdt, &day, &year); // Not implemented in 2.3.0 and probably too much code
|
// sscanf(mdate, "%s %d %d", bdt, &day, &year); // Not implemented in 2.3.0 and probably too much code
|
||||||
byte i = 0;
|
uint8_t i = 0;
|
||||||
for (char *str = strtok_r(mdate, " ", &p); str && i < 3; str = strtok_r(NULL, " ", &p)) {
|
for (char *str = strtok_r(mdate, " ", &p); str && i < 3; str = strtok_r(NULL, " ", &p)) {
|
||||||
switch (i++) {
|
switch (i++) {
|
||||||
case 0: // Month
|
case 0: // Month
|
||||||
|
@ -112,7 +112,7 @@ String GetDT(uint32_t time)
|
||||||
* "2017-03-07T11:08:02-07:00" - if DT_LOCAL and SetOption52 = 1
|
* "2017-03-07T11:08:02-07:00" - if DT_LOCAL and SetOption52 = 1
|
||||||
* "2017-03-07T11:08:02" - otherwise
|
* "2017-03-07T11:08:02" - otherwise
|
||||||
*/
|
*/
|
||||||
String GetDateAndTime(byte time_type)
|
String GetDateAndTime(uint8_t time_type)
|
||||||
{
|
{
|
||||||
// "2017-03-07T11:08:02-07:00" - ISO8601:2004
|
// "2017-03-07T11:08:02-07:00" - ISO8601:2004
|
||||||
uint32_t time = local_time;
|
uint32_t time = local_time;
|
||||||
|
@ -332,9 +332,9 @@ uint32_t Midnight(void)
|
||||||
return midnight;
|
return midnight;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean MidnightNow(void)
|
bool MidnightNow(void)
|
||||||
{
|
{
|
||||||
boolean mnflg = midnight_now;
|
bool mnflg = midnight_now;
|
||||||
if (mnflg) midnight_now = 0;
|
if (mnflg) midnight_now = 0;
|
||||||
return mnflg;
|
return mnflg;
|
||||||
}
|
}
|
||||||
|
@ -348,7 +348,7 @@ void RtcSecond(void)
|
||||||
if (!global_state.wifi_down && (offset == RtcTime.second) && ((RtcTime.year < 2016) || (ntp_sync_minute == RtcTime.minute) || ntp_force_sync)) {
|
if (!global_state.wifi_down && (offset == RtcTime.second) && ((RtcTime.year < 2016) || (ntp_sync_minute == RtcTime.minute) || ntp_force_sync)) {
|
||||||
ntp_time = sntp_get_current_timestamp();
|
ntp_time = sntp_get_current_timestamp();
|
||||||
if (ntp_time > 1451602800) { // Fix NTP bug in core 2.4.1/SDK 2.2.1 (returns Thu Jan 01 08:00:10 1970 after power on)
|
if (ntp_time > 1451602800) { // Fix NTP bug in core 2.4.1/SDK 2.2.1 (returns Thu Jan 01 08:00:10 1970 after power on)
|
||||||
ntp_force_sync = 0;
|
ntp_force_sync = false;
|
||||||
utc_time = ntp_time;
|
utc_time = ntp_time;
|
||||||
ntp_sync_minute = 60; // Sync so block further requests
|
ntp_sync_minute = 60; // Sync so block further requests
|
||||||
if (restart_time == 0) {
|
if (restart_time == 0) {
|
||||||
|
|
|
@ -71,7 +71,7 @@ void SwitchProbe(void)
|
||||||
uint8_t force_high = (Settings.switch_debounce % 50) &1; // 51, 101, 151 etc
|
uint8_t force_high = (Settings.switch_debounce % 50) &1; // 51, 101, 151 etc
|
||||||
uint8_t force_low = (Settings.switch_debounce % 50) &2; // 52, 102, 152 etc
|
uint8_t force_low = (Settings.switch_debounce % 50) &2; // 52, 102, 152 etc
|
||||||
|
|
||||||
for (byte i = 0; i < MAX_SWITCHES; i++) {
|
for (uint8_t i = 0; i < MAX_SWITCHES; i++) {
|
||||||
if (pin[GPIO_SWT1 +i] < 99) {
|
if (pin[GPIO_SWT1 +i] < 99) {
|
||||||
// Olimex user_switch2.c code to fix 50Hz induced pulses
|
// Olimex user_switch2.c code to fix 50Hz induced pulses
|
||||||
if (1 == digitalRead(pin[GPIO_SWT1 +i])) {
|
if (1 == digitalRead(pin[GPIO_SWT1 +i])) {
|
||||||
|
@ -117,7 +117,7 @@ void SwitchInit(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
switches_found = 0;
|
switches_found = 0;
|
||||||
for (byte i = 0; i < MAX_SWITCHES; i++) {
|
for (uint8_t i = 0; i < MAX_SWITCHES; i++) {
|
||||||
lastwallswitch[i] = 1; // Init global to virtual switch state;
|
lastwallswitch[i] = 1; // Init global to virtual switch state;
|
||||||
if (pin[GPIO_SWT1 +i] < 99) {
|
if (pin[GPIO_SWT1 +i] < 99) {
|
||||||
switches_found++;
|
switches_found++;
|
||||||
|
@ -133,7 +133,7 @@ void SwitchInit(void)
|
||||||
* Switch handler
|
* Switch handler
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
void SwitchHandler(byte mode)
|
void SwitchHandler(uint8_t mode)
|
||||||
{
|
{
|
||||||
if (uptime < 4) { return; } // Block GPIO for 4 seconds after poweron to workaround Wemos D1 / Obi RTS circuit
|
if (uptime < 4) { return; } // Block GPIO for 4 seconds after poweron to workaround Wemos D1 / Obi RTS circuit
|
||||||
|
|
||||||
|
@ -141,7 +141,7 @@ void SwitchHandler(byte mode)
|
||||||
uint8_t switchflag;
|
uint8_t switchflag;
|
||||||
uint16_t loops_per_second = 1000 / Settings.switch_debounce;
|
uint16_t loops_per_second = 1000 / Settings.switch_debounce;
|
||||||
|
|
||||||
for (byte i = 0; i < MAX_SWITCHES; i++) {
|
for (uint8_t i = 0; i < MAX_SWITCHES; i++) {
|
||||||
if ((pin[GPIO_SWT1 +i] < 99) || (mode)) {
|
if ((pin[GPIO_SWT1 +i] < 99) || (mode)) {
|
||||||
|
|
||||||
if (holdwallswitch[i]) {
|
if (holdwallswitch[i]) {
|
||||||
|
|
|
@ -32,6 +32,21 @@
|
||||||
#define WIFI_CHECK_SEC 20 // seconds
|
#define WIFI_CHECK_SEC 20 // seconds
|
||||||
#define WIFI_RETRY_OFFSET_SEC 20 // seconds
|
#define WIFI_RETRY_OFFSET_SEC 20 // seconds
|
||||||
|
|
||||||
|
/*
|
||||||
|
// This worked for 2_5_0_BETA2 but fails since then. Waiting for a solution from core team (#4952)
|
||||||
|
#ifdef USE_MQTT_TLS
|
||||||
|
#if defined(ARDUINO_ESP8266_RELEASE_2_3_0) || defined(ARDUINO_ESP8266_RELEASE_2_4_0) || defined(ARDUINO_ESP8266_RELEASE_2_4_1) || defined(ARDUINO_ESP8266_RELEASE_2_4_2)
|
||||||
|
#else
|
||||||
|
#define USING_AXTLS
|
||||||
|
#include <ESP8266WiFi.h>
|
||||||
|
// force use of AxTLS (BearSSL is now default) which uses less memory (#4952)
|
||||||
|
#include <WiFiClientSecureAxTLS.h>
|
||||||
|
using namespace axTLS;
|
||||||
|
#endif // ARDUINO_ESP8266_RELEASE prior to 2_5_0
|
||||||
|
#else
|
||||||
|
#include <ESP8266WiFi.h> // Wifi, MQTT, Ota, WifiManager
|
||||||
|
#endif // USE_MQTT_TLS
|
||||||
|
*/
|
||||||
#include <ESP8266WiFi.h> // Wifi, MQTT, Ota, WifiManager
|
#include <ESP8266WiFi.h> // Wifi, MQTT, Ota, WifiManager
|
||||||
|
|
||||||
uint8_t wifi_counter;
|
uint8_t wifi_counter;
|
||||||
|
@ -60,7 +75,7 @@ int WifiGetRssiAsQuality(int rssi)
|
||||||
return quality;
|
return quality;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean WifiConfigCounter(void)
|
bool WifiConfigCounter(void)
|
||||||
{
|
{
|
||||||
if (wifi_config_counter) {
|
if (wifi_config_counter) {
|
||||||
wifi_config_counter = WIFI_CONFIG_SEC;
|
wifi_config_counter = WIFI_CONFIG_SEC;
|
||||||
|
@ -95,12 +110,12 @@ void WifiWpsStatusCallback(wps_cb_status status)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean WifiWpsConfigDone(void)
|
bool WifiWpsConfigDone(void)
|
||||||
{
|
{
|
||||||
return (!wps_result);
|
return (!wps_result);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean WifiWpsConfigBegin(void)
|
bool WifiWpsConfigBegin(void)
|
||||||
{
|
{
|
||||||
wps_result = 99;
|
wps_result = 99;
|
||||||
if (!wifi_wps_disable()) { return false; }
|
if (!wifi_wps_disable()) { return false; }
|
||||||
|
|
|
@ -349,7 +349,7 @@ enum HttpOptions {HTTP_OFF, HTTP_USER, HTTP_ADMIN, HTTP_MANAGER};
|
||||||
DNSServer *DnsServer;
|
DNSServer *DnsServer;
|
||||||
ESP8266WebServer *WebServer;
|
ESP8266WebServer *WebServer;
|
||||||
|
|
||||||
boolean remove_duplicate_access_points = true;
|
bool remove_duplicate_access_points = true;
|
||||||
int minimum_signal_quality = -1;
|
int minimum_signal_quality = -1;
|
||||||
uint8_t webserver_state = HTTP_OFF;
|
uint8_t webserver_state = HTTP_OFF;
|
||||||
uint8_t upload_error = 0;
|
uint8_t upload_error = 0;
|
||||||
|
@ -415,7 +415,7 @@ void StartWebserver(int type, IPAddress ipweb)
|
||||||
XsnsCall(FUNC_WEB_ADD_HANDLER);
|
XsnsCall(FUNC_WEB_ADD_HANDLER);
|
||||||
#endif // Not BE_MINIMAL
|
#endif // Not BE_MINIMAL
|
||||||
}
|
}
|
||||||
reset_web_log_flag = 0;
|
reset_web_log_flag = false;
|
||||||
WebServer->begin(); // Web server start
|
WebServer->begin(); // Web server start
|
||||||
}
|
}
|
||||||
if (webserver_state != type) {
|
if (webserver_state != type) {
|
||||||
|
@ -640,13 +640,13 @@ void HandleRoot(void)
|
||||||
if (SONOFF_IFAN02 == Settings.module) {
|
if (SONOFF_IFAN02 == Settings.module) {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_DEVICE_CONTROL, 36, 1, D_BUTTON_TOGGLE, "");
|
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_DEVICE_CONTROL, 36, 1, D_BUTTON_TOGGLE, "");
|
||||||
page += mqtt_data;
|
page += mqtt_data;
|
||||||
for (byte i = 0; i < MAX_FAN_SPEED; i++) {
|
for (uint8_t i = 0; i < MAX_FAN_SPEED; i++) {
|
||||||
snprintf_P(stemp, sizeof(stemp), PSTR("%d"), i);
|
snprintf_P(stemp, sizeof(stemp), PSTR("%d"), i);
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_DEVICE_CONTROL, 16, i +2, stemp, "");
|
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_DEVICE_CONTROL, 16, i +2, stemp, "");
|
||||||
page += mqtt_data;
|
page += mqtt_data;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (byte idx = 1; idx <= devices_present; idx++) {
|
for (uint8_t idx = 1; idx <= devices_present; idx++) {
|
||||||
snprintf_P(stemp, sizeof(stemp), PSTR(" %d"), idx);
|
snprintf_P(stemp, sizeof(stemp), PSTR(" %d"), idx);
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_DEVICE_CONTROL,
|
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_DEVICE_CONTROL,
|
||||||
100 / devices_present, idx, (devices_present < 5) ? D_BUTTON_TOGGLE : "", (devices_present > 1) ? stemp : "");
|
100 / devices_present, idx, (devices_present < 5) ? D_BUTTON_TOGGLE : "", (devices_present > 1) ? stemp : "");
|
||||||
|
@ -658,10 +658,10 @@ void HandleRoot(void)
|
||||||
if (SONOFF_BRIDGE == Settings.module) {
|
if (SONOFF_BRIDGE == Settings.module) {
|
||||||
page += FPSTR(HTTP_TABLE100);
|
page += FPSTR(HTTP_TABLE100);
|
||||||
page += F("<tr>");
|
page += F("<tr>");
|
||||||
byte idx = 0;
|
uint8_t idx = 0;
|
||||||
for (byte i = 0; i < 4; i++) {
|
for (uint8_t i = 0; i < 4; i++) {
|
||||||
if (idx > 0) { page += F("</tr><tr>"); }
|
if (idx > 0) { page += F("</tr><tr>"); }
|
||||||
for (byte j = 0; j < 4; j++) {
|
for (uint8_t j = 0; j < 4; j++) {
|
||||||
idx++;
|
idx++;
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("<td style='width:25%'><button onclick='la(\"?k=%d\");'>%d</button></td>"), idx, idx); // ?k is related to WebGetArg("k", tmp, sizeof(tmp));
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("<td style='width:25%'><button onclick='la(\"?k=%d\");'>%d</button></td>"), idx, idx); // ?k is related to WebGetArg("k", tmp, sizeof(tmp));
|
||||||
page += mqtt_data;
|
page += mqtt_data;
|
||||||
|
@ -744,7 +744,7 @@ void HandleAjaxStatusRefresh(void)
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_DEVICE_STATE,
|
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_DEVICE_STATE,
|
||||||
mqtt_data, 64, (fanspeed) ? "bold" : "normal", 54, (fanspeed) ? svalue : GetStateText(0));
|
mqtt_data, 64, (fanspeed) ? "bold" : "normal", 54, (fanspeed) ? svalue : GetStateText(0));
|
||||||
} else {
|
} else {
|
||||||
for (byte idx = 1; idx <= devices_present; idx++) {
|
for (uint8_t idx = 1; idx <= devices_present; idx++) {
|
||||||
snprintf_P(svalue, sizeof(svalue), PSTR("%d"), bitRead(power, idx -1));
|
snprintf_P(svalue, sizeof(svalue), PSTR("%d"), bitRead(power, idx -1));
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_DEVICE_STATE,
|
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_DEVICE_STATE,
|
||||||
mqtt_data, 100 / devices_present, (bitRead(power, idx -1)) ? "bold" : "normal", fsize, (devices_present < 5) ? GetStateText(bitRead(power, idx -1)) : svalue);
|
mqtt_data, 100 / devices_present, (bitRead(power, idx -1)) ? "bold" : "normal", fsize, (devices_present < 5) ? GetStateText(bitRead(power, idx -1)) : svalue);
|
||||||
|
@ -755,7 +755,7 @@ void HandleAjaxStatusRefresh(void)
|
||||||
WebServer->send(200, FPSTR(HDR_CTYPE_HTML), mqtt_data);
|
WebServer->send(200, FPSTR(HDR_CTYPE_HTML), mqtt_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean HttpCheckPriviledgedAccess(boolean autorequestauth = true)
|
bool HttpCheckPriviledgedAccess(bool autorequestauth = true)
|
||||||
{
|
{
|
||||||
if (HTTP_USER == webserver_state) {
|
if (HTTP_USER == webserver_state) {
|
||||||
HandleRoot();
|
HandleRoot();
|
||||||
|
@ -812,13 +812,13 @@ void HandleModuleConfiguration(void)
|
||||||
|
|
||||||
if (WebServer->hasArg("m")) {
|
if (WebServer->hasArg("m")) {
|
||||||
String page = "";
|
String page = "";
|
||||||
for (byte i = 0; i < MAXMODULE; i++) {
|
for (uint8_t i = 0; i < MAXMODULE; i++) {
|
||||||
midx = pgm_read_byte(kModuleNiceList + i);
|
midx = pgm_read_byte(kModuleNiceList + i);
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_SCRIPT_MODULE3, midx, AnyModuleName(midx).c_str(), midx +1);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_SCRIPT_MODULE3, midx, AnyModuleName(midx).c_str(), midx +1);
|
||||||
page += mqtt_data;
|
page += mqtt_data;
|
||||||
}
|
}
|
||||||
page += "}3"; // String separator means do not use "}3" in Module name and Sensor name
|
page += "}3"; // String separator means do not use "}3" in Module name and Sensor name
|
||||||
for (byte j = 0; j < sizeof(kGpioNiceList); j++) {
|
for (uint8_t j = 0; j < sizeof(kGpioNiceList); j++) {
|
||||||
midx = pgm_read_byte(kGpioNiceList + j);
|
midx = pgm_read_byte(kGpioNiceList + j);
|
||||||
if (!GetUsedInModule(midx, cmodule.io)) {
|
if (!GetUsedInModule(midx, cmodule.io)) {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_SCRIPT_MODULE3, midx, GetTextIndexed(stemp, sizeof(stemp), midx, kSensorNames), midx);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_SCRIPT_MODULE3, midx, GetTextIndexed(stemp, sizeof(stemp), midx, kSensorNames), midx);
|
||||||
|
@ -835,7 +835,7 @@ void HandleModuleConfiguration(void)
|
||||||
page.replace(F("{v}"), FPSTR(S_CONFIGURE_MODULE));
|
page.replace(F("{v}"), FPSTR(S_CONFIGURE_MODULE));
|
||||||
page += FPSTR(HTTP_SCRIPT_MODULE1);
|
page += FPSTR(HTTP_SCRIPT_MODULE1);
|
||||||
page.replace(F("}4"), String(Settings.module));
|
page.replace(F("}4"), String(Settings.module));
|
||||||
for (byte i = 0; i < sizeof(cmodule); i++) {
|
for (uint8_t i = 0; i < sizeof(cmodule); i++) {
|
||||||
if (GPIO_USER == ValidGPIO(i, cmodule.io[i])) {
|
if (GPIO_USER == ValidGPIO(i, cmodule.io[i])) {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("sk(%d,%d);"), my_module.io[i], i); // g0 - g16
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("sk(%d,%d);"), my_module.io[i], i); // g0 - g16
|
||||||
page += mqtt_data;
|
page += mqtt_data;
|
||||||
|
@ -853,7 +853,7 @@ void HandleModuleConfiguration(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
page += F("<br/><table>");
|
page += F("<br/><table>");
|
||||||
for (byte i = 0; i < sizeof(cmodule); i++) {
|
for (uint8_t i = 0; i < sizeof(cmodule); i++) {
|
||||||
if (GPIO_USER == ValidGPIO(i, cmodule.io[i])) {
|
if (GPIO_USER == ValidGPIO(i, cmodule.io[i])) {
|
||||||
snprintf_P(stemp, 3, PINS_WEMOS +i*2);
|
snprintf_P(stemp, 3, PINS_WEMOS +i*2);
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("<tr><td style='width:190px'>%s <b>" D_GPIO "%d</b> %s</td><td style='width:160px'><select id='g%d' name='g%d'></select></td></tr>"),
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("<tr><td style='width:190px'>%s <b>" D_GPIO "%d</b> %s</td><td style='width:160px'><select id='g%d' name='g%d'></select></td></tr>"),
|
||||||
|
@ -873,7 +873,7 @@ void ModuleSaveSettings(void)
|
||||||
char stemp[TOPSZ];
|
char stemp[TOPSZ];
|
||||||
|
|
||||||
WebGetArg("g99", tmp, sizeof(tmp));
|
WebGetArg("g99", tmp, sizeof(tmp));
|
||||||
byte new_module = (!strlen(tmp)) ? MODULE : atoi(tmp);
|
uint8_t new_module = (!strlen(tmp)) ? MODULE : atoi(tmp);
|
||||||
Settings.last_module = Settings.module;
|
Settings.last_module = Settings.module;
|
||||||
Settings.module = new_module;
|
Settings.module = new_module;
|
||||||
if (Settings.last_module == new_module) {
|
if (Settings.last_module == new_module) {
|
||||||
|
@ -884,7 +884,7 @@ void ModuleSaveSettings(void)
|
||||||
myio cmodule;
|
myio cmodule;
|
||||||
ModuleGpios(&cmodule);
|
ModuleGpios(&cmodule);
|
||||||
String gpios = "";
|
String gpios = "";
|
||||||
for (byte i = 0; i < sizeof(cmodule); i++) {
|
for (uint8_t i = 0; i < sizeof(cmodule); i++) {
|
||||||
if (Settings.last_module != new_module) {
|
if (Settings.last_module != new_module) {
|
||||||
Settings.my_gp.io[i] = 0;
|
Settings.my_gp.io[i] = 0;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1057,14 +1057,14 @@ void HandleLoggingConfiguration(void)
|
||||||
page += FPSTR(HTTP_HEAD_STYLE);
|
page += FPSTR(HTTP_HEAD_STYLE);
|
||||||
|
|
||||||
page += FPSTR(HTTP_FORM_LOG1);
|
page += FPSTR(HTTP_FORM_LOG1);
|
||||||
for (byte idx = 0; idx < 3; idx++) {
|
for (uint8_t idx = 0; idx < 3; idx++) {
|
||||||
page += FPSTR(HTTP_FORM_LOG2);
|
page += FPSTR(HTTP_FORM_LOG2);
|
||||||
switch (idx) {
|
switch (idx) {
|
||||||
case 0:
|
case 0:
|
||||||
page.replace(F("{b0"), F(D_SERIAL_LOG_LEVEL));
|
page.replace(F("{b0"), F(D_SERIAL_LOG_LEVEL));
|
||||||
page.replace(F("{b1"), STR(SERIAL_LOG_LEVEL));
|
page.replace(F("{b1"), STR(SERIAL_LOG_LEVEL));
|
||||||
page.replace(F("{b2"), F("ls"));
|
page.replace(F("{b2"), F("ls"));
|
||||||
for (byte i = LOG_LEVEL_NONE; i < LOG_LEVEL_ALL; i++) {
|
for (uint8_t i = LOG_LEVEL_NONE; i < LOG_LEVEL_ALL; i++) {
|
||||||
page.replace("{a" + String(i), (i == Settings.seriallog_level) ? F(" selected ") : F(" "));
|
page.replace("{a" + String(i), (i == Settings.seriallog_level) ? F(" selected ") : F(" "));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1072,7 +1072,7 @@ void HandleLoggingConfiguration(void)
|
||||||
page.replace(F("{b0"), F(D_WEB_LOG_LEVEL));
|
page.replace(F("{b0"), F(D_WEB_LOG_LEVEL));
|
||||||
page.replace(F("{b1"), STR(WEB_LOG_LEVEL));
|
page.replace(F("{b1"), STR(WEB_LOG_LEVEL));
|
||||||
page.replace(F("{b2"), F("lw"));
|
page.replace(F("{b2"), F("lw"));
|
||||||
for (byte i = LOG_LEVEL_NONE; i < LOG_LEVEL_ALL; i++) {
|
for (uint8_t i = LOG_LEVEL_NONE; i < LOG_LEVEL_ALL; i++) {
|
||||||
page.replace("{a" + String(i), (i == Settings.weblog_level) ? F(" selected ") : F(" "));
|
page.replace("{a" + String(i), (i == Settings.weblog_level) ? F(" selected ") : F(" "));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1080,7 +1080,7 @@ void HandleLoggingConfiguration(void)
|
||||||
page.replace(F("{b0"), F(D_SYS_LOG_LEVEL));
|
page.replace(F("{b0"), F(D_SYS_LOG_LEVEL));
|
||||||
page.replace(F("{b1"), STR(SYS_LOG_LEVEL));
|
page.replace(F("{b1"), STR(SYS_LOG_LEVEL));
|
||||||
page.replace(F("{b2"), F("ll"));
|
page.replace(F("{b2"), F("ll"));
|
||||||
for (byte i = LOG_LEVEL_NONE; i < LOG_LEVEL_ALL; i++) {
|
for (uint8_t i = LOG_LEVEL_NONE; i < LOG_LEVEL_ALL; i++) {
|
||||||
page.replace("{a" + String(i), (i == Settings.syslog_level) ? F(" selected ") : F(" "));
|
page.replace("{a" + String(i), (i == Settings.syslog_level) ? F(" selected ") : F(" "));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1145,7 +1145,7 @@ void HandleOtherConfiguration(void)
|
||||||
|
|
||||||
uint8_t maxfn = (devices_present > MAX_FRIENDLYNAMES) ? MAX_FRIENDLYNAMES : (!devices_present) ? 1 : devices_present;
|
uint8_t maxfn = (devices_present > MAX_FRIENDLYNAMES) ? MAX_FRIENDLYNAMES : (!devices_present) ? 1 : devices_present;
|
||||||
if (SONOFF_IFAN02 == Settings.module) { maxfn = 1; }
|
if (SONOFF_IFAN02 == Settings.module) { maxfn = 1; }
|
||||||
for (byte i = 0; i < maxfn; i++) {
|
for (uint8_t i = 0; i < maxfn; i++) {
|
||||||
page += FPSTR(HTTP_FORM_OTHER2);
|
page += FPSTR(HTTP_FORM_OTHER2);
|
||||||
page.replace(F("{1"), String(i +1));
|
page.replace(F("{1"), String(i +1));
|
||||||
snprintf_P(stemp, sizeof(stemp), PSTR(FRIENDLY_NAME"%d"), i +1);
|
snprintf_P(stemp, sizeof(stemp), PSTR(FRIENDLY_NAME"%d"), i +1);
|
||||||
|
@ -1154,7 +1154,7 @@ void HandleOtherConfiguration(void)
|
||||||
}
|
}
|
||||||
#ifdef USE_EMULATION
|
#ifdef USE_EMULATION
|
||||||
page += FPSTR(HTTP_FORM_OTHER3a);
|
page += FPSTR(HTTP_FORM_OTHER3a);
|
||||||
for (byte i = 0; i < EMUL_MAX; i++) {
|
for (uint8_t i = 0; i < EMUL_MAX; i++) {
|
||||||
page += FPSTR(HTTP_FORM_OTHER3b);
|
page += FPSTR(HTTP_FORM_OTHER3b);
|
||||||
page.replace(F("{1"), String(i));
|
page.replace(F("{1"), String(i));
|
||||||
page.replace(F("{2"), (i == Settings.flag2.emulation) ? F(" checked") : F(""));
|
page.replace(F("{2"), (i == Settings.flag2.emulation) ? F(" checked") : F(""));
|
||||||
|
@ -1183,7 +1183,7 @@ void OtherSaveSettings(void)
|
||||||
Settings.flag2.emulation = (!strlen(tmp)) ? 0 : atoi(tmp);
|
Settings.flag2.emulation = (!strlen(tmp)) ? 0 : atoi(tmp);
|
||||||
#endif // USE_EMULATION
|
#endif // USE_EMULATION
|
||||||
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_OTHER D_MQTT_ENABLE " %s, " D_CMND_EMULATION " %d, " D_CMND_FRIENDLYNAME), GetStateText(Settings.flag.mqtt_enabled), Settings.flag2.emulation);
|
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_OTHER D_MQTT_ENABLE " %s, " D_CMND_EMULATION " %d, " D_CMND_FRIENDLYNAME), GetStateText(Settings.flag.mqtt_enabled), Settings.flag2.emulation);
|
||||||
for (byte i = 0; i < MAX_FRIENDLYNAMES; i++) {
|
for (uint8_t i = 0; i < MAX_FRIENDLYNAMES; i++) {
|
||||||
snprintf_P(stemp, sizeof(stemp), PSTR("a%d"), i +1);
|
snprintf_P(stemp, sizeof(stemp), PSTR("a%d"), i +1);
|
||||||
WebGetArg(stemp, tmp, sizeof(tmp));
|
WebGetArg(stemp, tmp, sizeof(tmp));
|
||||||
snprintf_P(stemp2, sizeof(stemp2), PSTR(FRIENDLY_NAME"%d"), i +1);
|
snprintf_P(stemp2, sizeof(stemp2), PSTR(FRIENDLY_NAME"%d"), i +1);
|
||||||
|
@ -1313,7 +1313,7 @@ void HandleInformation(void)
|
||||||
func += F("}1" D_RESTART_REASON "}2"); func += GetResetReason();
|
func += F("}1" D_RESTART_REASON "}2"); func += GetResetReason();
|
||||||
uint8_t maxfn = (devices_present > MAX_FRIENDLYNAMES) ? MAX_FRIENDLYNAMES : devices_present;
|
uint8_t maxfn = (devices_present > MAX_FRIENDLYNAMES) ? MAX_FRIENDLYNAMES : devices_present;
|
||||||
if (SONOFF_IFAN02 == Settings.module) { maxfn = 1; }
|
if (SONOFF_IFAN02 == Settings.module) { maxfn = 1; }
|
||||||
for (byte i = 0; i < maxfn; i++) {
|
for (uint8_t i = 0; i < maxfn; i++) {
|
||||||
func += F("}1" D_FRIENDLY_NAME " "); func += i +1; func += F("}2"); func += Settings.friendlyname[i];
|
func += F("}1" D_FRIENDLY_NAME " "); func += i +1; func += F("}2"); func += Settings.friendlyname[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1509,7 +1509,7 @@ void HandleUploadDone(void)
|
||||||
void HandleUploadLoop(void)
|
void HandleUploadLoop(void)
|
||||||
{
|
{
|
||||||
// Based on ESP8266HTTPUpdateServer.cpp uses ESP8266WebServer Parsing.cpp and Cores Updater.cpp (Update)
|
// Based on ESP8266HTTPUpdateServer.cpp uses ESP8266WebServer Parsing.cpp and Cores Updater.cpp (Update)
|
||||||
boolean _serialoutput = (LOG_LEVEL_DEBUG <= seriallog_level);
|
bool _serialoutput = (LOG_LEVEL_DEBUG <= seriallog_level);
|
||||||
|
|
||||||
if (HTTP_USER == webserver_state) { return; }
|
if (HTTP_USER == webserver_state) { return; }
|
||||||
if (upload_error) {
|
if (upload_error) {
|
||||||
|
@ -1729,13 +1729,13 @@ void HandleHttpCommand(void)
|
||||||
|
|
||||||
String message = F("{\"" D_RSLT_WARNING "\":\"");
|
String message = F("{\"" D_RSLT_WARNING "\":\"");
|
||||||
if (valid) {
|
if (valid) {
|
||||||
byte curridx = web_log_index;
|
uint8_t curridx = web_log_index;
|
||||||
WebGetArg("cmnd", svalue, sizeof(svalue));
|
WebGetArg("cmnd", svalue, sizeof(svalue));
|
||||||
if (strlen(svalue)) {
|
if (strlen(svalue)) {
|
||||||
ExecuteWebCommand(svalue, SRC_WEBCOMMAND);
|
ExecuteWebCommand(svalue, SRC_WEBCOMMAND);
|
||||||
|
|
||||||
if (web_log_index != curridx) {
|
if (web_log_index != curridx) {
|
||||||
byte counter = curridx;
|
uint8_t counter = curridx;
|
||||||
message = F("{");
|
message = F("{");
|
||||||
do {
|
do {
|
||||||
char* tmp;
|
char* tmp;
|
||||||
|
@ -1791,8 +1791,8 @@ void HandleAjaxConsoleRefresh(void)
|
||||||
if (!HttpCheckPriviledgedAccess()) { return; }
|
if (!HttpCheckPriviledgedAccess()) { return; }
|
||||||
|
|
||||||
char svalue[INPUT_BUFFER_SIZE]; // Large to serve Backlog
|
char svalue[INPUT_BUFFER_SIZE]; // Large to serve Backlog
|
||||||
byte cflg = 1;
|
bool cflg = true;
|
||||||
byte counter = 0; // Initial start, should never be 0 again
|
uint8_t counter = 0; // Initial start, should never be 0 again
|
||||||
|
|
||||||
WebGetArg("c1", svalue, sizeof(svalue));
|
WebGetArg("c1", svalue, sizeof(svalue));
|
||||||
if (strlen(svalue)) {
|
if (strlen(svalue)) {
|
||||||
|
@ -1804,16 +1804,16 @@ void HandleAjaxConsoleRefresh(void)
|
||||||
WebGetArg("c2", svalue, sizeof(svalue));
|
WebGetArg("c2", svalue, sizeof(svalue));
|
||||||
if (strlen(svalue)) { counter = atoi(svalue); }
|
if (strlen(svalue)) { counter = atoi(svalue); }
|
||||||
|
|
||||||
byte last_reset_web_log_flag = reset_web_log_flag;
|
bool last_reset_web_log_flag = reset_web_log_flag;
|
||||||
String message = F("}9"); // Cannot load mqtt_data here as <> will be encoded by replacements below
|
String message = F("}9"); // Cannot load mqtt_data here as <> will be encoded by replacements below
|
||||||
if (!reset_web_log_flag) {
|
if (!reset_web_log_flag) {
|
||||||
counter = 0;
|
counter = 0;
|
||||||
reset_web_log_flag = 1;
|
reset_web_log_flag = true;
|
||||||
}
|
}
|
||||||
if (counter != web_log_index) {
|
if (counter != web_log_index) {
|
||||||
if (!counter) {
|
if (!counter) {
|
||||||
counter = web_log_index;
|
counter = web_log_index;
|
||||||
cflg = 0;
|
cflg = false;
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
char* tmp;
|
char* tmp;
|
||||||
|
@ -1823,7 +1823,7 @@ void HandleAjaxConsoleRefresh(void)
|
||||||
if (cflg) {
|
if (cflg) {
|
||||||
message += F("\n");
|
message += F("\n");
|
||||||
} else {
|
} else {
|
||||||
cflg = 1;
|
cflg = true;
|
||||||
}
|
}
|
||||||
strlcpy(mqtt_data, tmp, len);
|
strlcpy(mqtt_data, tmp, len);
|
||||||
message += mqtt_data;
|
message += mqtt_data;
|
||||||
|
@ -1870,7 +1870,7 @@ void HandleNotFound(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Redirect to captive portal if we got a request for another domain. Return true in that case so the page handler do not try to handle the request again. */
|
/* Redirect to captive portal if we got a request for another domain. Return true in that case so the page handler do not try to handle the request again. */
|
||||||
boolean CaptivePortal(void)
|
bool CaptivePortal(void)
|
||||||
{
|
{
|
||||||
if ((HTTP_MANAGER == webserver_state) && !ValidIpAddress(WebServer->hostHeader())) {
|
if ((HTTP_MANAGER == webserver_state) && !ValidIpAddress(WebServer->hostHeader())) {
|
||||||
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP D_REDIRECTED));
|
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP D_REDIRECTED));
|
||||||
|
@ -1884,7 +1884,7 @@ boolean CaptivePortal(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Is this an IP? */
|
/** Is this an IP? */
|
||||||
boolean ValidIpAddress(String str)
|
bool ValidIpAddress(String str)
|
||||||
{
|
{
|
||||||
for (uint16_t i = 0; i < str.length(); i++) {
|
for (uint16_t i = 0; i < str.length(); i++) {
|
||||||
int c = str.charAt(i);
|
int c = str.charAt(i);
|
||||||
|
@ -1984,7 +1984,7 @@ int WebSend(char *buffer)
|
||||||
WiFiClient client;
|
WiFiClient client;
|
||||||
|
|
||||||
bool connected = false;
|
bool connected = false;
|
||||||
byte retry = 2;
|
uint8_t retry = 2;
|
||||||
while ((retry > 0) && !connected) {
|
while ((retry > 0) && !connected) {
|
||||||
--retry;
|
--retry;
|
||||||
connected = client.connect(host_ip, nport);
|
connected = client.connect(host_ip, nport);
|
||||||
|
@ -2085,9 +2085,9 @@ bool WebCommand(void)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xdrv01(byte function)
|
bool Xdrv01(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
switch (function) {
|
switch (function) {
|
||||||
case FUNC_LOOP:
|
case FUNC_LOOP:
|
||||||
|
|
|
@ -84,7 +84,7 @@ bool mqtt_allowed = false; // MQTT enabled and parameters valid
|
||||||
* bool MqttIsConnected()
|
* bool MqttIsConnected()
|
||||||
* void MqttDisconnect()
|
* void MqttDisconnect()
|
||||||
* void MqttSubscribeLib(char *topic)
|
* void MqttSubscribeLib(char *topic)
|
||||||
* bool MqttPublishLib(const char* topic, boolean retained)
|
* bool MqttPublishLib(const char* topic, bool retained)
|
||||||
* void MqttLoop()
|
* void MqttLoop()
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
|
@ -115,7 +115,7 @@ void MqttSubscribeLib(char *topic)
|
||||||
MqttClient.loop(); // Solve LmacRxBlk:1 messages
|
MqttClient.loop(); // Solve LmacRxBlk:1 messages
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MqttPublishLib(const char* topic, boolean retained)
|
bool MqttPublishLib(const char* topic, bool retained)
|
||||||
{
|
{
|
||||||
bool result = MqttClient.publish(topic, mqtt_data, retained);
|
bool result = MqttClient.publish(topic, mqtt_data, retained);
|
||||||
yield(); // #3313
|
yield(); // #3313
|
||||||
|
@ -152,7 +152,7 @@ void MqttSubscribeLib(char *topic)
|
||||||
MqttClient.Subscribe(topic, 0);
|
MqttClient.Subscribe(topic, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MqttPublishLib(const char* topic, boolean retained)
|
bool MqttPublishLib(const char* topic, bool retained)
|
||||||
{
|
{
|
||||||
return MqttClient.Publish(topic, mqtt_data, strlen(mqtt_data), 0, retained);
|
return MqttClient.Publish(topic, mqtt_data, strlen(mqtt_data), 0, retained);
|
||||||
}
|
}
|
||||||
|
@ -180,13 +180,13 @@ void MqttDisconnect(void)
|
||||||
void MqttMyDataCb(MQTTClient* client, char* topic, char* data, int data_len)
|
void MqttMyDataCb(MQTTClient* client, char* topic, char* data, int data_len)
|
||||||
//void MqttMyDataCb(MQTTClient *client, char topic[], char data[], int data_len)
|
//void MqttMyDataCb(MQTTClient *client, char topic[], char data[], int data_len)
|
||||||
{
|
{
|
||||||
// MqttDataHandler((char*)topic, (byte*)data, data_len);
|
// MqttDataHandler((char*)topic, (uint8_t*)data, data_len);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void MqttMyDataCb(String &topic, String &data)
|
void MqttMyDataCb(String &topic, String &data)
|
||||||
{
|
{
|
||||||
MqttDataHandler((char*)topic.c_str(), (byte*)data.c_str(), data.length());
|
MqttDataHandler((char*)topic.c_str(), (uint8_t*)data.c_str(), data.length());
|
||||||
}
|
}
|
||||||
|
|
||||||
void MqttSubscribeLib(char *topic)
|
void MqttSubscribeLib(char *topic)
|
||||||
|
@ -194,7 +194,7 @@ void MqttSubscribeLib(char *topic)
|
||||||
MqttClient.subscribe(topic, 0);
|
MqttClient.subscribe(topic, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MqttPublishLib(const char* topic, boolean retained)
|
bool MqttPublishLib(const char* topic, bool retained)
|
||||||
{
|
{
|
||||||
return MqttClient.publish(topic, mqtt_data, strlen(mqtt_data), retained, 0);
|
return MqttClient.publish(topic, mqtt_data, strlen(mqtt_data), retained, 0);
|
||||||
}
|
}
|
||||||
|
@ -257,7 +257,7 @@ void MqttSubscribe(char *topic)
|
||||||
MqttSubscribeLib(topic);
|
MqttSubscribeLib(topic);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MqttPublishDirect(const char* topic, boolean retained)
|
void MqttPublishDirect(const char* topic, bool retained)
|
||||||
{
|
{
|
||||||
char sretained[CMDSZ];
|
char sretained[CMDSZ];
|
||||||
char slog_type[10];
|
char slog_type[10];
|
||||||
|
@ -291,7 +291,7 @@ void MqttPublishDirect(const char* topic, boolean retained)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MqttPublish(const char* topic, boolean retained)
|
void MqttPublish(const char* topic, bool retained)
|
||||||
{
|
{
|
||||||
char *me;
|
char *me;
|
||||||
|
|
||||||
|
@ -309,7 +309,7 @@ void MqttPublish(const char* topic)
|
||||||
MqttPublish(topic, false);
|
MqttPublish(topic, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MqttPublishPrefixTopic_P(uint8_t prefix, const char* subtopic, boolean retained)
|
void MqttPublishPrefixTopic_P(uint8_t prefix, const char* subtopic, bool retained)
|
||||||
{
|
{
|
||||||
/* prefix 0 = cmnd using subtopic
|
/* prefix 0 = cmnd using subtopic
|
||||||
* prefix 1 = stat using subtopic
|
* prefix 1 = stat using subtopic
|
||||||
|
@ -322,7 +322,7 @@ void MqttPublishPrefixTopic_P(uint8_t prefix, const char* subtopic, boolean reta
|
||||||
char stopic[TOPSZ];
|
char stopic[TOPSZ];
|
||||||
|
|
||||||
snprintf_P(romram, sizeof(romram), ((prefix > 3) && !Settings.flag.mqtt_response) ? S_RSLT_RESULT : subtopic);
|
snprintf_P(romram, sizeof(romram), ((prefix > 3) && !Settings.flag.mqtt_response) ? S_RSLT_RESULT : subtopic);
|
||||||
for (byte i = 0; i < strlen(romram); i++) {
|
for (uint8_t i = 0; i < strlen(romram); i++) {
|
||||||
romram[i] = toupper(romram[i]);
|
romram[i] = toupper(romram[i]);
|
||||||
}
|
}
|
||||||
prefix &= 3;
|
prefix &= 3;
|
||||||
|
@ -335,7 +335,7 @@ void MqttPublishPrefixTopic_P(uint8_t prefix, const char* subtopic)
|
||||||
MqttPublishPrefixTopic_P(prefix, subtopic, false);
|
MqttPublishPrefixTopic_P(prefix, subtopic, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MqttPublishPowerState(byte device)
|
void MqttPublishPowerState(uint8_t device)
|
||||||
{
|
{
|
||||||
char stopic[TOPSZ];
|
char stopic[TOPSZ];
|
||||||
char scommand[33];
|
char scommand[33];
|
||||||
|
@ -364,7 +364,7 @@ void MqttPublishPowerState(byte device)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MqttPublishPowerBlinkState(byte device)
|
void MqttPublishPowerBlinkState(uint8_t device)
|
||||||
{
|
{
|
||||||
char scommand[33];
|
char scommand[33];
|
||||||
|
|
||||||
|
@ -433,7 +433,7 @@ void MqttConnected(void)
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_JSON_RESTARTREASON "\":\"%s\"}"),
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_JSON_RESTARTREASON "\":\"%s\"}"),
|
||||||
(GetResetReason() == "Exception") ? ESP.getResetInfo().c_str() : GetResetReason().c_str());
|
(GetResetReason() == "Exception") ? ESP.getResetInfo().c_str() : GetResetReason().c_str());
|
||||||
MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_INFO "3"));
|
MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_INFO "3"));
|
||||||
for (byte i = 1; i <= devices_present; i++) {
|
for (uint8_t i = 1; i <= devices_present; i++) {
|
||||||
MqttPublishPowerState(i);
|
MqttPublishPowerState(i);
|
||||||
if (SONOFF_IFAN02 == Settings.module) { break; } // Report status of light relay only
|
if (SONOFF_IFAN02 == Settings.module) { break; } // Report status of light relay only
|
||||||
}
|
}
|
||||||
|
@ -450,15 +450,15 @@ void MqttConnected(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_MQTT_TLS
|
#ifdef USE_MQTT_TLS
|
||||||
boolean MqttCheckTls(void)
|
bool MqttCheckTls(void)
|
||||||
{
|
{
|
||||||
char fingerprint1[60];
|
char fingerprint1[60];
|
||||||
char fingerprint2[60];
|
char fingerprint2[60];
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
fingerprint1[0] = '\0';
|
fingerprint1[0] = '\0';
|
||||||
fingerprint2[0] = '\0';
|
fingerprint2[0] = '\0';
|
||||||
for (byte i = 0; i < sizeof(Settings.mqtt_fingerprint[0]); i++) {
|
for (uint8_t i = 0; i < sizeof(Settings.mqtt_fingerprint[0]); i++) {
|
||||||
snprintf_P(fingerprint1, sizeof(fingerprint1), PSTR("%s%s%02X"), fingerprint1, (i) ? " " : "", Settings.mqtt_fingerprint[0][i]);
|
snprintf_P(fingerprint1, sizeof(fingerprint1), PSTR("%s%s%02X"), fingerprint1, (i) ? " " : "", Settings.mqtt_fingerprint[0][i]);
|
||||||
snprintf_P(fingerprint2, sizeof(fingerprint2), PSTR("%s%s%02X"), fingerprint2, (i) ? " " : "", Settings.mqtt_fingerprint[1][i]);
|
snprintf_P(fingerprint2, sizeof(fingerprint2), PSTR("%s%s%02X"), fingerprint2, (i) ? " " : "", Settings.mqtt_fingerprint[1][i]);
|
||||||
}
|
}
|
||||||
|
@ -638,7 +638,7 @@ bool MqttCommand(void)
|
||||||
uint16_t data_len = XdrvMailbox.data_len;
|
uint16_t data_len = XdrvMailbox.data_len;
|
||||||
uint16_t payload16 = XdrvMailbox.payload16;
|
uint16_t payload16 = XdrvMailbox.payload16;
|
||||||
int16_t payload = XdrvMailbox.payload;
|
int16_t payload = XdrvMailbox.payload;
|
||||||
uint8_t grpflg = XdrvMailbox.grpflg;
|
bool grpflg = XdrvMailbox.grpflg;
|
||||||
char *type = XdrvMailbox.topic;
|
char *type = XdrvMailbox.topic;
|
||||||
char *dataBuf = XdrvMailbox.data;
|
char *dataBuf = XdrvMailbox.data;
|
||||||
|
|
||||||
|
@ -682,13 +682,13 @@ bool MqttCommand(void)
|
||||||
if ((data_len > 0) && (data_len < sizeof(fingerprint))) {
|
if ((data_len > 0) && (data_len < sizeof(fingerprint))) {
|
||||||
strlcpy(fingerprint, (SC_CLEAR == Shortcut(dataBuf)) ? "" : (SC_DEFAULT == Shortcut(dataBuf)) ? (1 == index) ? MQTT_FINGERPRINT1 : MQTT_FINGERPRINT2 : dataBuf, sizeof(fingerprint));
|
strlcpy(fingerprint, (SC_CLEAR == Shortcut(dataBuf)) ? "" : (SC_DEFAULT == Shortcut(dataBuf)) ? (1 == index) ? MQTT_FINGERPRINT1 : MQTT_FINGERPRINT2 : dataBuf, sizeof(fingerprint));
|
||||||
char *p = fingerprint;
|
char *p = fingerprint;
|
||||||
for (byte i = 0; i < 20; i++) {
|
for (uint8_t i = 0; i < 20; i++) {
|
||||||
Settings.mqtt_fingerprint[index -1][i] = strtol(p, &p, 16);
|
Settings.mqtt_fingerprint[index -1][i] = strtol(p, &p, 16);
|
||||||
}
|
}
|
||||||
restart_flag = 2;
|
restart_flag = 2;
|
||||||
}
|
}
|
||||||
fingerprint[0] = '\0';
|
fingerprint[0] = '\0';
|
||||||
for (byte i = 0; i < sizeof(Settings.mqtt_fingerprint[index -1]); i++) {
|
for (uint8_t i = 0; i < sizeof(Settings.mqtt_fingerprint[index -1]); i++) {
|
||||||
snprintf_P(fingerprint, sizeof(fingerprint), PSTR("%s%s%02X"), fingerprint, (i) ? " " : "", Settings.mqtt_fingerprint[index -1][i]);
|
snprintf_P(fingerprint, sizeof(fingerprint), PSTR("%s%s%02X"), fingerprint, (i) ? " " : "", Settings.mqtt_fingerprint[index -1][i]);
|
||||||
}
|
}
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_INDEX_SVALUE, command, index, fingerprint);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_INDEX_SVALUE, command, index, fingerprint);
|
||||||
|
@ -949,9 +949,9 @@ void MqttSaveSettings(void)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xdrv02(byte function)
|
bool Xdrv02(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (Settings.flag.mqtt_enabled) {
|
if (Settings.flag.mqtt_enabled) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -72,24 +72,23 @@ uint8_t energy_power_delta = 0;
|
||||||
|
|
||||||
bool energy_type_dc = false;
|
bool energy_type_dc = false;
|
||||||
bool energy_power_on = true;
|
bool energy_power_on = true;
|
||||||
|
bool energy_min_power_flag = false;
|
||||||
|
bool energy_max_power_flag = false;
|
||||||
|
bool energy_min_voltage_flag = false;
|
||||||
|
bool energy_max_voltage_flag = false;
|
||||||
|
bool energy_min_current_flag = false;
|
||||||
|
bool energy_max_current_flag = false;
|
||||||
|
|
||||||
byte energy_min_power_flag = 0;
|
uint8_t energy_power_steady_cntr = 8; // Allow for power on stabilization
|
||||||
byte energy_max_power_flag = 0;
|
uint8_t energy_max_energy_state = 0;
|
||||||
byte energy_min_voltage_flag = 0;
|
|
||||||
byte energy_max_voltage_flag = 0;
|
|
||||||
byte energy_min_current_flag = 0;
|
|
||||||
byte energy_max_current_flag = 0;
|
|
||||||
|
|
||||||
byte energy_power_steady_cntr = 8; // Allow for power on stabilization
|
|
||||||
byte energy_max_energy_state = 0;
|
|
||||||
|
|
||||||
#if FEATURE_POWER_LIMIT
|
#if FEATURE_POWER_LIMIT
|
||||||
byte energy_mplr_counter = 0;
|
uint8_t energy_mplr_counter = 0;
|
||||||
uint16_t energy_mplh_counter = 0;
|
uint16_t energy_mplh_counter = 0;
|
||||||
uint16_t energy_mplw_counter = 0;
|
uint16_t energy_mplw_counter = 0;
|
||||||
#endif // FEATURE_POWER_LIMIT
|
#endif // FEATURE_POWER_LIMIT
|
||||||
|
|
||||||
byte energy_fifth_second = 0;
|
uint8_t energy_fifth_second = 0;
|
||||||
Ticker ticker_energy;
|
Ticker ticker_energy;
|
||||||
|
|
||||||
int energy_command_code = 0;
|
int energy_command_code = 0;
|
||||||
|
@ -147,9 +146,9 @@ void EnergySaveState(void)
|
||||||
Settings.energy_kWhtotal = RtcSettings.energy_kWhtotal;
|
Settings.energy_kWhtotal = RtcSettings.energy_kWhtotal;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean EnergyMargin(byte type, uint16_t margin, uint16_t value, byte &flag, byte &save_flag)
|
bool EnergyMargin(bool type, uint16_t margin, uint16_t value, bool &flag, bool &save_flag)
|
||||||
{
|
{
|
||||||
byte change;
|
bool change;
|
||||||
|
|
||||||
if (!margin) return false;
|
if (!margin) return false;
|
||||||
change = save_flag;
|
change = save_flag;
|
||||||
|
@ -173,8 +172,8 @@ void EnergyMarginCheck(void)
|
||||||
uint16_t energy_power_u = 0;
|
uint16_t energy_power_u = 0;
|
||||||
uint16_t energy_voltage_u = 0;
|
uint16_t energy_voltage_u = 0;
|
||||||
uint16_t energy_current_u = 0;
|
uint16_t energy_current_u = 0;
|
||||||
boolean flag;
|
bool flag;
|
||||||
boolean jsonflg;
|
bool jsonflg;
|
||||||
|
|
||||||
if (energy_power_steady_cntr) {
|
if (energy_power_steady_cntr) {
|
||||||
energy_power_steady_cntr--;
|
energy_power_steady_cntr--;
|
||||||
|
@ -204,30 +203,30 @@ void EnergyMarginCheck(void)
|
||||||
// AddLog(LOG_LEVEL_DEBUG);
|
// AddLog(LOG_LEVEL_DEBUG);
|
||||||
|
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{"));
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{"));
|
||||||
jsonflg = 0;
|
jsonflg = false;
|
||||||
if (EnergyMargin(0, Settings.energy_min_power, energy_power_u, flag, energy_min_power_flag)) {
|
if (EnergyMargin(false, Settings.energy_min_power, energy_power_u, flag, energy_min_power_flag)) {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s%s\"" D_CMND_POWERLOW "\":\"%s\""), mqtt_data, (jsonflg)?",":"", GetStateText(flag));
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s%s\"" D_CMND_POWERLOW "\":\"%s\""), mqtt_data, (jsonflg)?",":"", GetStateText(flag));
|
||||||
jsonflg = 1;
|
jsonflg = true;
|
||||||
}
|
}
|
||||||
if (EnergyMargin(1, Settings.energy_max_power, energy_power_u, flag, energy_max_power_flag)) {
|
if (EnergyMargin(true, Settings.energy_max_power, energy_power_u, flag, energy_max_power_flag)) {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s%s\"" D_CMND_POWERHIGH "\":\"%s\""), mqtt_data, (jsonflg)?",":"", GetStateText(flag));
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s%s\"" D_CMND_POWERHIGH "\":\"%s\""), mqtt_data, (jsonflg)?",":"", GetStateText(flag));
|
||||||
jsonflg = 1;
|
jsonflg = true;
|
||||||
}
|
}
|
||||||
if (EnergyMargin(0, Settings.energy_min_voltage, energy_voltage_u, flag, energy_min_voltage_flag)) {
|
if (EnergyMargin(false, Settings.energy_min_voltage, energy_voltage_u, flag, energy_min_voltage_flag)) {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s%s\"" D_CMND_VOLTAGELOW "\":\"%s\""), mqtt_data, (jsonflg)?",":"", GetStateText(flag));
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s%s\"" D_CMND_VOLTAGELOW "\":\"%s\""), mqtt_data, (jsonflg)?",":"", GetStateText(flag));
|
||||||
jsonflg = 1;
|
jsonflg = true;
|
||||||
}
|
}
|
||||||
if (EnergyMargin(1, Settings.energy_max_voltage, energy_voltage_u, flag, energy_max_voltage_flag)) {
|
if (EnergyMargin(true, Settings.energy_max_voltage, energy_voltage_u, flag, energy_max_voltage_flag)) {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s%s\"" D_CMND_VOLTAGEHIGH "\":\"%s\""), mqtt_data, (jsonflg)?",":"", GetStateText(flag));
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s%s\"" D_CMND_VOLTAGEHIGH "\":\"%s\""), mqtt_data, (jsonflg)?",":"", GetStateText(flag));
|
||||||
jsonflg = 1;
|
jsonflg = true;
|
||||||
}
|
}
|
||||||
if (EnergyMargin(0, Settings.energy_min_current, energy_current_u, flag, energy_min_current_flag)) {
|
if (EnergyMargin(false, Settings.energy_min_current, energy_current_u, flag, energy_min_current_flag)) {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s%s\"" D_CMND_CURRENTLOW "\":\"%s\""), mqtt_data, (jsonflg)?",":"", GetStateText(flag));
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s%s\"" D_CMND_CURRENTLOW "\":\"%s\""), mqtt_data, (jsonflg)?",":"", GetStateText(flag));
|
||||||
jsonflg = 1;
|
jsonflg = true;
|
||||||
}
|
}
|
||||||
if (EnergyMargin(1, Settings.energy_max_current, energy_current_u, flag, energy_max_current_flag)) {
|
if (EnergyMargin(true, Settings.energy_max_current, energy_current_u, flag, energy_max_current_flag)) {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s%s\"" D_CMND_CURRENTHIGH "\":\"%s\""), mqtt_data, (jsonflg)?",":"", GetStateText(flag));
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s%s\"" D_CMND_CURRENTHIGH "\":\"%s\""), mqtt_data, (jsonflg)?",":"", GetStateText(flag));
|
||||||
jsonflg = 1;
|
jsonflg = true;
|
||||||
}
|
}
|
||||||
if (jsonflg) {
|
if (jsonflg) {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s}"), mqtt_data);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s}"), mqtt_data);
|
||||||
|
@ -310,7 +309,7 @@ void EnergyMqttShow(void)
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_JSON_TIME "\":\"%s\""), GetDateAndTime(DT_LOCAL).c_str());
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_JSON_TIME "\":\"%s\""), GetDateAndTime(DT_LOCAL).c_str());
|
||||||
int tele_period_save = tele_period;
|
int tele_period_save = tele_period;
|
||||||
tele_period = 2;
|
tele_period = 2;
|
||||||
EnergyShow(1);
|
EnergyShow(true);
|
||||||
tele_period = tele_period_save;
|
tele_period = tele_period_save;
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s}"), mqtt_data);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s}"), mqtt_data);
|
||||||
MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_SENSOR), Settings.flag.mqtt_sensor_retain);
|
MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_SENSOR), Settings.flag.mqtt_sensor_retain);
|
||||||
|
@ -321,12 +320,12 @@ void EnergyMqttShow(void)
|
||||||
* Commands
|
* Commands
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean EnergyCommand(void)
|
bool EnergyCommand(void)
|
||||||
{
|
{
|
||||||
char command [CMDSZ];
|
char command [CMDSZ];
|
||||||
char sunit[CMDSZ];
|
char sunit[CMDSZ];
|
||||||
boolean serviced = true;
|
bool serviced = true;
|
||||||
uint8_t status_flag = 0;
|
bool status_flag = false;
|
||||||
uint8_t unit = 0;
|
uint8_t unit = 0;
|
||||||
unsigned long nvalue = 0;
|
unsigned long nvalue = 0;
|
||||||
|
|
||||||
|
@ -417,7 +416,7 @@ boolean EnergyCommand(void)
|
||||||
|
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"%s\":{\"" D_JSON_TOTAL "\":%s,\"" D_JSON_YESTERDAY "\":%s,\"" D_JSON_TODAY "\":%s}}"),
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"%s\":{\"" D_JSON_TOTAL "\":%s,\"" D_JSON_YESTERDAY "\":%s,\"" D_JSON_TODAY "\":%s}}"),
|
||||||
command, energy_total_chr, energy_yesterday_chr, energy_daily_chr);
|
command, energy_total_chr, energy_yesterday_chr, energy_daily_chr);
|
||||||
status_flag = 1;
|
status_flag = true;
|
||||||
}
|
}
|
||||||
else if ((CMND_POWERCAL == command_code) && XnrgCall(FUNC_COMMAND)) { // microseconds
|
else if ((CMND_POWERCAL == command_code) && XnrgCall(FUNC_COMMAND)) { // microseconds
|
||||||
if ((XdrvMailbox.payload > 999) && (XdrvMailbox.payload < 32001)) { Settings.energy_power_calibration = XdrvMailbox.payload; }
|
if ((XdrvMailbox.payload > 999) && (XdrvMailbox.payload < 32001)) { Settings.energy_power_calibration = XdrvMailbox.payload; }
|
||||||
|
@ -568,7 +567,7 @@ const char HTTP_ENERGY_SNS4[] PROGMEM = "%s"
|
||||||
"{s}" D_ENERGY_TOTAL "{m}%s " D_UNIT_KILOWATTHOUR "{e}"; // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
"{s}" D_ENERGY_TOTAL "{m}%s " D_UNIT_KILOWATTHOUR "{e}"; // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
||||||
#endif // USE_WEBSERVER
|
#endif // USE_WEBSERVER
|
||||||
|
|
||||||
void EnergyShow(boolean json)
|
void EnergyShow(bool json)
|
||||||
{
|
{
|
||||||
char speriod[20];
|
char speriod[20];
|
||||||
char sfrequency[20];
|
char sfrequency[20];
|
||||||
|
@ -681,9 +680,9 @@ void EnergyShow(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xdrv03(byte function)
|
bool Xdrv03(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (FUNC_PRE_INIT == function) {
|
if (FUNC_PRE_INIT == function) {
|
||||||
EnergyDrvInit();
|
EnergyDrvInit();
|
||||||
|
@ -704,9 +703,9 @@ boolean Xdrv03(byte function)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean Xsns03(byte function)
|
bool Xsns03(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (energy_flg) {
|
if (energy_flg) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
@ -717,11 +716,11 @@ boolean Xsns03(byte function)
|
||||||
EnergyMarginCheck();
|
EnergyMarginCheck();
|
||||||
break;
|
break;
|
||||||
case FUNC_JSON_APPEND:
|
case FUNC_JSON_APPEND:
|
||||||
EnergyShow(1);
|
EnergyShow(true);
|
||||||
break;
|
break;
|
||||||
#ifdef USE_WEBSERVER
|
#ifdef USE_WEBSERVER
|
||||||
case FUNC_WEB_APPEND:
|
case FUNC_WEB_APPEND:
|
||||||
EnergyShow(0);
|
EnergyShow(false);
|
||||||
break;
|
break;
|
||||||
#endif // USE_WEBSERVER
|
#endif // USE_WEBSERVER
|
||||||
case FUNC_SAVE_BEFORE_RESTART:
|
case FUNC_SAVE_BEFORE_RESTART:
|
||||||
|
|
|
@ -367,7 +367,7 @@ void LightInit(void)
|
||||||
Settings.light_color[0] = 255; // One channel only supports Dimmer but needs max color
|
Settings.light_color[0] = 255; // One channel only supports Dimmer but needs max color
|
||||||
}
|
}
|
||||||
if (light_type < LT_PWM6) { // PWM
|
if (light_type < LT_PWM6) { // PWM
|
||||||
for (byte i = 0; i < light_type; i++) {
|
for (uint8_t i = 0; i < light_type; i++) {
|
||||||
Settings.pwm_value[i] = 0; // Disable direct PWM control
|
Settings.pwm_value[i] = 0; // Disable direct PWM control
|
||||||
if (pin[GPIO_PWM1 +i] < 99) {
|
if (pin[GPIO_PWM1 +i] < 99) {
|
||||||
pinMode(pin[GPIO_PWM1 +i], OUTPUT);
|
pinMode(pin[GPIO_PWM1 +i], OUTPUT);
|
||||||
|
@ -487,7 +487,7 @@ void LightSetDimmer(uint8_t myDimmer)
|
||||||
Settings.light_color[0] = 255; // One PWM channel only supports Dimmer but needs max color
|
Settings.light_color[0] = 255; // One PWM channel only supports Dimmer but needs max color
|
||||||
}
|
}
|
||||||
float dimmer = 100 / (float)myDimmer;
|
float dimmer = 100 / (float)myDimmer;
|
||||||
for (byte i = 0; i < light_subtype; i++) {
|
for (uint8_t i = 0; i < light_subtype; i++) {
|
||||||
if (Settings.flag.light_signal) {
|
if (Settings.flag.light_signal) {
|
||||||
temp = (float)light_signal_color[i] / dimmer;
|
temp = (float)light_signal_color[i] / dimmer;
|
||||||
} else {
|
} else {
|
||||||
|
@ -501,7 +501,7 @@ void LightSetColor(void)
|
||||||
{
|
{
|
||||||
uint8_t highest = 0;
|
uint8_t highest = 0;
|
||||||
|
|
||||||
for (byte i = 0; i < light_subtype; i++) {
|
for (uint8_t i = 0; i < light_subtype; i++) {
|
||||||
if (highest < light_current_color[i]) {
|
if (highest < light_current_color[i]) {
|
||||||
highest = light_current_color[i];
|
highest = light_current_color[i];
|
||||||
}
|
}
|
||||||
|
@ -509,7 +509,7 @@ void LightSetColor(void)
|
||||||
float mDim = (float)highest / 2.55;
|
float mDim = (float)highest / 2.55;
|
||||||
Settings.light_dimmer = (uint8_t)mDim;
|
Settings.light_dimmer = (uint8_t)mDim;
|
||||||
float dimmer = 100 / mDim;
|
float dimmer = 100 / mDim;
|
||||||
for (byte i = 0; i < light_subtype; i++) {
|
for (uint8_t i = 0; i < light_subtype; i++) {
|
||||||
float temp = (float)light_current_color[i] * dimmer;
|
float temp = (float)light_current_color[i] * dimmer;
|
||||||
Settings.light_color[i] = (uint8_t)temp;
|
Settings.light_color[i] = (uint8_t)temp;
|
||||||
}
|
}
|
||||||
|
@ -547,7 +547,7 @@ char* LightGetColor(uint8_t type, char* scolor)
|
||||||
{
|
{
|
||||||
LightSetDimmer(Settings.light_dimmer);
|
LightSetDimmer(Settings.light_dimmer);
|
||||||
scolor[0] = '\0';
|
scolor[0] = '\0';
|
||||||
for (byte i = 0; i < light_subtype; i++) {
|
for (uint8_t i = 0; i < light_subtype; i++) {
|
||||||
if (!type && Settings.flag.decimal_text) {
|
if (!type && Settings.flag.decimal_text) {
|
||||||
snprintf_P(scolor, 25, PSTR("%s%s%d"), scolor, (i > 0) ? "," : "", light_current_color[i]);
|
snprintf_P(scolor, 25, PSTR("%s%s%d"), scolor, (i > 0) ? "," : "", light_current_color[i]);
|
||||||
} else {
|
} else {
|
||||||
|
@ -590,7 +590,7 @@ void LightState(uint8_t append)
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"" D_CMND_HSBCOLOR "\":\"%d,%d,%d\""), mqtt_data, h,s,b);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"" D_CMND_HSBCOLOR "\":\"%d,%d,%d\""), mqtt_data, h,s,b);
|
||||||
// Add status for each channel
|
// Add status for each channel
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"" D_CMND_CHANNEL "\":[" ), mqtt_data);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"" D_CMND_CHANNEL "\":[" ), mqtt_data);
|
||||||
for (byte i = 0; i < light_subtype; i++) {
|
for (uint8_t i = 0; i < light_subtype; i++) {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s%s%d" ), mqtt_data, (i > 0 ? "," : ""), light_current_color[i] * 100 / 255);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s%s%d" ), mqtt_data, (i > 0 ? "," : ""), light_current_color[i] * 100 / 255);
|
||||||
}
|
}
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s]" ), mqtt_data);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s]" ), mqtt_data);
|
||||||
|
@ -637,7 +637,7 @@ void LightPreparePower(void)
|
||||||
void LightFade(void)
|
void LightFade(void)
|
||||||
{
|
{
|
||||||
if (0 == Settings.light_fade) {
|
if (0 == Settings.light_fade) {
|
||||||
for (byte i = 0; i < light_subtype; i++) {
|
for (uint8_t i = 0; i < light_subtype; i++) {
|
||||||
light_new_color[i] = light_current_color[i];
|
light_new_color[i] = light_current_color[i];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -646,7 +646,7 @@ void LightFade(void)
|
||||||
shift = (strip_timer_counter % (Settings.light_speed -6)) ? 0 : 8;
|
shift = (strip_timer_counter % (Settings.light_speed -6)) ? 0 : 8;
|
||||||
}
|
}
|
||||||
if (shift) {
|
if (shift) {
|
||||||
for (byte i = 0; i < light_subtype; i++) {
|
for (uint8_t i = 0; i < light_subtype; i++) {
|
||||||
if (light_new_color[i] != light_current_color[i]) {
|
if (light_new_color[i] != light_current_color[i]) {
|
||||||
if (light_new_color[i] < light_current_color[i]) {
|
if (light_new_color[i] < light_current_color[i]) {
|
||||||
light_new_color[i] += ((light_current_color[i] - light_new_color[i]) >> shift) +1;
|
light_new_color[i] += ((light_current_color[i] - light_new_color[i]) >> shift) +1;
|
||||||
|
@ -681,7 +681,7 @@ void LightWheel(uint8_t wheel_pos)
|
||||||
light_entry_color[3] = 0;
|
light_entry_color[3] = 0;
|
||||||
light_entry_color[4] = 0;
|
light_entry_color[4] = 0;
|
||||||
float dimmer = 100 / (float)Settings.light_dimmer;
|
float dimmer = 100 / (float)Settings.light_dimmer;
|
||||||
for (byte i = 0; i < LST_RGB; i++) {
|
for (uint8_t i = 0; i < LST_RGB; i++) {
|
||||||
float temp = (float)light_entry_color[i] / dimmer;
|
float temp = (float)light_entry_color[i] / dimmer;
|
||||||
light_entry_color[i] = (uint8_t)temp;
|
light_entry_color[i] = (uint8_t)temp;
|
||||||
}
|
}
|
||||||
|
@ -700,7 +700,7 @@ void LightCycleColor(int8_t direction)
|
||||||
void LightRandomColor(void)
|
void LightRandomColor(void)
|
||||||
{
|
{
|
||||||
uint8_t light_update = 0;
|
uint8_t light_update = 0;
|
||||||
for (byte i = 0; i < LST_RGB; i++) {
|
for (uint8_t i = 0; i < LST_RGB; i++) {
|
||||||
if (light_new_color[i] != light_current_color[i]) {
|
if (light_new_color[i] != light_current_color[i]) {
|
||||||
light_update = 1;
|
light_update = 1;
|
||||||
}
|
}
|
||||||
|
@ -736,7 +736,7 @@ void LightAnimate(void)
|
||||||
if (!light_power) { // Power Off
|
if (!light_power) { // Power Off
|
||||||
sleep = Settings.sleep;
|
sleep = Settings.sleep;
|
||||||
strip_timer_counter = 0;
|
strip_timer_counter = 0;
|
||||||
for (byte i = 0; i < light_subtype; i++) {
|
for (uint8_t i = 0; i < light_subtype; i++) {
|
||||||
light_still_on += light_new_color[i];
|
light_still_on += light_new_color[i];
|
||||||
}
|
}
|
||||||
if (light_still_on && Settings.light_fade && (Settings.light_scheme < LS_MAX)) {
|
if (light_still_on && Settings.light_fade && (Settings.light_scheme < LS_MAX)) {
|
||||||
|
@ -744,19 +744,19 @@ void LightAnimate(void)
|
||||||
if (speed > 6) {
|
if (speed > 6) {
|
||||||
speed = 6;
|
speed = 6;
|
||||||
}
|
}
|
||||||
for (byte i = 0; i < light_subtype; i++) {
|
for (uint8_t i = 0; i < light_subtype; i++) {
|
||||||
if (light_new_color[i] > 0) {
|
if (light_new_color[i] > 0) {
|
||||||
light_new_color[i] -= (light_new_color[i] >> speed) +1;
|
light_new_color[i] -= (light_new_color[i] >> speed) +1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (byte i = 0; i < light_subtype; i++) {
|
for (uint8_t i = 0; i < light_subtype; i++) {
|
||||||
light_new_color[i] = 0;
|
light_new_color[i] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
sleep = 0;
|
sleep = (LS_POWER == Settings.light_scheme) ? Settings.sleep : 0; // If no animation then use sleep as is
|
||||||
switch (Settings.light_scheme) {
|
switch (Settings.light_scheme) {
|
||||||
case LS_POWER:
|
case LS_POWER:
|
||||||
LightSetDimmer(Settings.light_dimmer);
|
LightSetDimmer(Settings.light_dimmer);
|
||||||
|
@ -765,7 +765,7 @@ void LightAnimate(void)
|
||||||
case LS_WAKEUP:
|
case LS_WAKEUP:
|
||||||
if (2 == light_wakeup_active) {
|
if (2 == light_wakeup_active) {
|
||||||
light_wakeup_active = 1;
|
light_wakeup_active = 1;
|
||||||
for (byte i = 0; i < light_subtype; i++) {
|
for (uint8_t i = 0; i < light_subtype; i++) {
|
||||||
light_new_color[i] = 0;
|
light_new_color[i] = 0;
|
||||||
}
|
}
|
||||||
light_wakeup_counter = 0;
|
light_wakeup_counter = 0;
|
||||||
|
@ -777,7 +777,7 @@ void LightAnimate(void)
|
||||||
light_wakeup_dimmer++;
|
light_wakeup_dimmer++;
|
||||||
if (light_wakeup_dimmer <= Settings.light_dimmer) {
|
if (light_wakeup_dimmer <= Settings.light_dimmer) {
|
||||||
LightSetDimmer(light_wakeup_dimmer);
|
LightSetDimmer(light_wakeup_dimmer);
|
||||||
for (byte i = 0; i < light_subtype; i++) {
|
for (uint8_t i = 0; i < light_subtype; i++) {
|
||||||
light_new_color[i] = light_current_color[i];
|
light_new_color[i] = light_current_color[i];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -807,14 +807,14 @@ void LightAnimate(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((Settings.light_scheme < LS_MAX) || !light_power) {
|
if ((Settings.light_scheme < LS_MAX) || !light_power) {
|
||||||
for (byte i = 0; i < light_subtype; i++) {
|
for (uint8_t i = 0; i < light_subtype; i++) {
|
||||||
if (light_last_color[i] != light_new_color[i]) {
|
if (light_last_color[i] != light_new_color[i]) {
|
||||||
light_update = 1;
|
light_update = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (light_update) {
|
if (light_update) {
|
||||||
light_update = 0;
|
light_update = 0;
|
||||||
for (byte i = 0; i < light_subtype; i++) {
|
for (uint8_t i = 0; i < light_subtype; i++) {
|
||||||
light_last_color[i] = light_new_color[i];
|
light_last_color[i] = light_new_color[i];
|
||||||
cur_col[i] = light_last_color[i]*Settings.rgbwwTable[i]/255;
|
cur_col[i] = light_last_color[i]*Settings.rgbwwTable[i]/255;
|
||||||
cur_col[i] = (Settings.light_correction) ? ledTable[cur_col[i]] : cur_col[i];
|
cur_col[i] = (Settings.light_correction) ? ledTable[cur_col[i]] : cur_col[i];
|
||||||
|
@ -1012,7 +1012,7 @@ void LightSetHsb(float hue, float sat, float bri, uint16_t ct, bool gotct)
|
||||||
* Commands
|
* Commands
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean LightColorEntry(char *buffer, uint8_t buffer_length)
|
bool LightColorEntry(char *buffer, uint8_t buffer_length)
|
||||||
{
|
{
|
||||||
char scolor[10];
|
char scolor[10];
|
||||||
char *p;
|
char *p;
|
||||||
|
@ -1048,7 +1048,7 @@ boolean LightColorEntry(char *buffer, uint8_t buffer_length)
|
||||||
entry_type = 2; // Decimal
|
entry_type = 2; // Decimal
|
||||||
}
|
}
|
||||||
else if (((2 * light_subtype) == buffer_length) || (buffer_length > 3)) { // Hexadecimal entry
|
else if (((2 * light_subtype) == buffer_length) || (buffer_length > 3)) { // Hexadecimal entry
|
||||||
for (byte i = 0; i < buffer_length / 2; i++) {
|
for (uint8_t i = 0; i < buffer_length / 2; i++) {
|
||||||
strlcpy(scolor, buffer + (i *2), 3);
|
strlcpy(scolor, buffer + (i *2), 3);
|
||||||
light_entry_color[i] = (uint8_t)strtol(scolor, &p, 16);
|
light_entry_color[i] = (uint8_t)strtol(scolor, &p, 16);
|
||||||
}
|
}
|
||||||
|
@ -1081,12 +1081,12 @@ boolean LightColorEntry(char *buffer, uint8_t buffer_length)
|
||||||
|
|
||||||
/********************************************************************************************/
|
/********************************************************************************************/
|
||||||
|
|
||||||
boolean LightCommand(void)
|
bool LightCommand(void)
|
||||||
{
|
{
|
||||||
char command [CMDSZ];
|
char command [CMDSZ];
|
||||||
boolean serviced = true;
|
bool serviced = true;
|
||||||
boolean coldim = false;
|
bool coldim = false;
|
||||||
boolean valid_entry = false;
|
bool valid_entry = false;
|
||||||
char scolor[25];
|
char scolor[25];
|
||||||
char option = (1 == XdrvMailbox.data_len) ? XdrvMailbox.data[0] : '\0';
|
char option = (1 == XdrvMailbox.data_len) ? XdrvMailbox.data[0] : '\0';
|
||||||
|
|
||||||
|
@ -1118,7 +1118,7 @@ boolean LightCommand(void)
|
||||||
Settings.light_scheme = 0;
|
Settings.light_scheme = 0;
|
||||||
coldim = true;
|
coldim = true;
|
||||||
} else { // Color3, 4, 5 and 6
|
} else { // Color3, 4, 5 and 6
|
||||||
for (byte i = 0; i < LST_RGB; i++) {
|
for (uint8_t i = 0; i < LST_RGB; i++) {
|
||||||
Settings.ws_color[XdrvMailbox.index -3][i] = light_entry_color[i];
|
Settings.ws_color[XdrvMailbox.index -3][i] = light_entry_color[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1129,7 +1129,7 @@ boolean LightCommand(void)
|
||||||
}
|
}
|
||||||
if (XdrvMailbox.index >= 3) {
|
if (XdrvMailbox.index >= 3) {
|
||||||
scolor[0] = '\0';
|
scolor[0] = '\0';
|
||||||
for (byte i = 0; i < LST_RGB; i++) {
|
for (uint8_t i = 0; i < LST_RGB; i++) {
|
||||||
if (Settings.flag.decimal_text) {
|
if (Settings.flag.decimal_text) {
|
||||||
snprintf_P(scolor, 25, PSTR("%s%s%d"), scolor, (i > 0) ? "," : "", Settings.ws_color[XdrvMailbox.index -3][i]);
|
snprintf_P(scolor, 25, PSTR("%s%s%d"), scolor, (i > 0) ? "," : "", Settings.ws_color[XdrvMailbox.index -3][i]);
|
||||||
} else {
|
} else {
|
||||||
|
@ -1343,7 +1343,7 @@ boolean LightCommand(void)
|
||||||
light_update = 1;
|
light_update = 1;
|
||||||
}
|
}
|
||||||
scolor[0] = '\0';
|
scolor[0] = '\0';
|
||||||
for (byte i = 0; i < LST_RGBWC; i++) {
|
for (uint8_t i = 0; i < LST_RGBWC; i++) {
|
||||||
snprintf_P(scolor, 25, PSTR("%s%s%d"), scolor, (i > 0) ? "," : "", Settings.rgbwwTable[i]);
|
snprintf_P(scolor, 25, PSTR("%s%s%d"), scolor, (i > 0) ? "," : "", Settings.rgbwwTable[i]);
|
||||||
}
|
}
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_INDEX_SVALUE, command, XdrvMailbox.index, scolor);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_INDEX_SVALUE, command, XdrvMailbox.index, scolor);
|
||||||
|
@ -1402,9 +1402,9 @@ boolean LightCommand(void)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xdrv04(byte function)
|
bool Xdrv04(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (light_type) {
|
if (light_type) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -181,10 +181,10 @@ void IrReceiveCheck(void)
|
||||||
TOSHIBA
|
TOSHIBA
|
||||||
********************/
|
********************/
|
||||||
|
|
||||||
boolean IrHvacToshiba(const char *HVAC_Mode, const char *HVAC_FanMode, boolean HVAC_Power, int HVAC_Temp)
|
bool IrHvacToshiba(const char *HVAC_Mode, const char *HVAC_FanMode, bool HVAC_Power, int HVAC_Temp)
|
||||||
{
|
{
|
||||||
uint16_t rawdata[2 + 2 * 8 * HVAC_TOSHIBA_DATALEN + 2];
|
uint16_t rawdata[2 + 2 * 8 * HVAC_TOSHIBA_DATALEN + 2];
|
||||||
byte data[HVAC_TOSHIBA_DATALEN] = {0xF2, 0x0D, 0x03, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00};
|
uint8_t data[HVAC_TOSHIBA_DATALEN] = {0xF2, 0x0D, 0x03, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00};
|
||||||
|
|
||||||
char *p;
|
char *p;
|
||||||
uint8_t mode;
|
uint8_t mode;
|
||||||
|
@ -201,7 +201,7 @@ boolean IrHvacToshiba(const char *HVAC_Mode, const char *HVAC_FanMode, boolean H
|
||||||
data[6] = (p - kHvacModeOptions) ^ 0x03; // HOT = 0x03, DRY = 0x02, COOL = 0x01, AUTO = 0x00
|
data[6] = (p - kHvacModeOptions) ^ 0x03; // HOT = 0x03, DRY = 0x02, COOL = 0x01, AUTO = 0x00
|
||||||
|
|
||||||
if (!HVAC_Power) {
|
if (!HVAC_Power) {
|
||||||
data[6] = (byte)0x07; // Turn OFF HVAC
|
data[6] = (uint8_t)0x07; // Turn OFF HVAC
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HVAC_FanMode == NULL) {
|
if (HVAC_FanMode == NULL) {
|
||||||
|
@ -220,7 +220,7 @@ boolean IrHvacToshiba(const char *HVAC_Mode, const char *HVAC_FanMode, boolean H
|
||||||
mode = mode << 5; // AUTO = 0x00, SPEED = 0x40, 0x60, 0x80, 0xA0, 0xC0, SILENT = 0x00
|
mode = mode << 5; // AUTO = 0x00, SPEED = 0x40, 0x60, 0x80, 0xA0, 0xC0, SILENT = 0x00
|
||||||
data[6] = data[6] | mode;
|
data[6] = data[6] | mode;
|
||||||
|
|
||||||
byte Temp;
|
uint8_t Temp;
|
||||||
if (HVAC_Temp > 30) {
|
if (HVAC_Temp > 30) {
|
||||||
Temp = 30;
|
Temp = 30;
|
||||||
}
|
}
|
||||||
|
@ -230,15 +230,15 @@ boolean IrHvacToshiba(const char *HVAC_Mode, const char *HVAC_FanMode, boolean H
|
||||||
else {
|
else {
|
||||||
Temp = HVAC_Temp;
|
Temp = HVAC_Temp;
|
||||||
}
|
}
|
||||||
data[5] = (byte)(Temp - 17) << 4;
|
data[5] = (uint8_t)(Temp - 17) << 4;
|
||||||
|
|
||||||
data[HVAC_TOSHIBA_DATALEN - 1] = 0;
|
data[HVAC_TOSHIBA_DATALEN - 1] = 0;
|
||||||
for (int x = 0; x < HVAC_TOSHIBA_DATALEN - 1; x++) {
|
for (int x = 0; x < HVAC_TOSHIBA_DATALEN - 1; x++) {
|
||||||
data[HVAC_TOSHIBA_DATALEN - 1] = (byte)data[x] ^ data[HVAC_TOSHIBA_DATALEN - 1]; // CRC is a simple bits addition
|
data[HVAC_TOSHIBA_DATALEN - 1] = (uint8_t)data[x] ^ data[HVAC_TOSHIBA_DATALEN - 1]; // CRC is a simple bits addition
|
||||||
}
|
}
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
byte mask = 1;
|
uint8_t mask = 1;
|
||||||
|
|
||||||
//header
|
//header
|
||||||
rawdata[i++] = HVAC_TOSHIBA_HDR_MARK;
|
rawdata[i++] = HVAC_TOSHIBA_HDR_MARK;
|
||||||
|
@ -275,7 +275,7 @@ boolean IrHvacToshiba(const char *HVAC_Mode, const char *HVAC_FanMode, boolean H
|
||||||
MITSUBISHI
|
MITSUBISHI
|
||||||
********************/
|
********************/
|
||||||
|
|
||||||
boolean IrHvacMitsubishi(const char *HVAC_Mode, const char *HVAC_FanMode, boolean HVAC_Power, int HVAC_Temp)
|
bool IrHvacMitsubishi(const char *HVAC_Mode, const char *HVAC_FanMode, bool HVAC_Power, int HVAC_Temp)
|
||||||
{
|
{
|
||||||
char *p;
|
char *p;
|
||||||
uint8_t mode;
|
uint8_t mode;
|
||||||
|
@ -324,14 +324,14 @@ boolean IrHvacMitsubishi(const char *HVAC_Mode, const char *HVAC_FanMode, boolea
|
||||||
LG
|
LG
|
||||||
********************/
|
********************/
|
||||||
|
|
||||||
boolean IrHvacLG(const char *HVAC_Mode, const char *HVAC_FanMode, boolean HVAC_Power, int HVAC_Temp)
|
bool IrHvacLG(const char *HVAC_Mode, const char *HVAC_FanMode, bool HVAC_Power, int HVAC_Temp)
|
||||||
{
|
{
|
||||||
uint32_t LG_Code;
|
uint32_t LG_Code;
|
||||||
byte data[HVAC_LG_DATALEN];
|
uint8_t data[HVAC_LG_DATALEN];
|
||||||
static boolean hvacOn = false;
|
static bool hvacOn = false;
|
||||||
char *p;
|
char *p;
|
||||||
uint8_t mode;
|
uint8_t mode;
|
||||||
byte Temp;
|
uint8_t Temp;
|
||||||
|
|
||||||
// Constant data
|
// Constant data
|
||||||
data[0] = 0x08;
|
data[0] = 0x08;
|
||||||
|
@ -339,11 +339,11 @@ boolean IrHvacLG(const char *HVAC_Mode, const char *HVAC_FanMode, boolean HVAC_P
|
||||||
data[2] = 0x00;
|
data[2] = 0x00;
|
||||||
|
|
||||||
if (!HVAC_Power) {
|
if (!HVAC_Power) {
|
||||||
data[2] = (byte)0x0C; // Turn OFF HVAC, code 0x88C0051
|
data[2] = (uint8_t)0x0C; // Turn OFF HVAC, code 0x88C0051
|
||||||
data[3] = (byte)0x00;
|
data[3] = (uint8_t)0x00;
|
||||||
data[4] = (byte)0x00;
|
data[4] = (uint8_t)0x00;
|
||||||
data[5] = (byte)0x05;
|
data[5] = (uint8_t)0x05;
|
||||||
data[6] = (byte)0x01;
|
data[6] = (uint8_t)0x01;
|
||||||
hvacOn = false;
|
hvacOn = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -392,7 +392,7 @@ boolean IrHvacLG(const char *HVAC_Mode, const char *HVAC_FanMode, boolean HVAC_P
|
||||||
else {
|
else {
|
||||||
Temp = HVAC_Temp;
|
Temp = HVAC_Temp;
|
||||||
}
|
}
|
||||||
data[4] = (byte)(Temp - 15);
|
data[4] = (uint8_t)(Temp - 15);
|
||||||
|
|
||||||
// Set code for HVAC fan mode - data[5]
|
// Set code for HVAC fan mode - data[5]
|
||||||
if (HVAC_FanMode == NULL) {
|
if (HVAC_FanMode == NULL) {
|
||||||
|
@ -442,7 +442,7 @@ boolean IrHvacLG(const char *HVAC_Mode, const char *HVAC_FanMode, boolean HVAC_P
|
||||||
Fujitsu
|
Fujitsu
|
||||||
********************/
|
********************/
|
||||||
|
|
||||||
boolean IrHvacFujitsu(const char *HVAC_Mode, const char *HVAC_FanMode, boolean HVAC_Power, int HVAC_Temp)
|
bool IrHvacFujitsu(const char *HVAC_Mode, const char *HVAC_FanMode, bool HVAC_Power, int HVAC_Temp)
|
||||||
{
|
{
|
||||||
const char kFujitsuHvacModeOptions[] = "HDCAF";
|
const char kFujitsuHvacModeOptions[] = "HDCAF";
|
||||||
|
|
||||||
|
@ -457,8 +457,8 @@ boolean IrHvacFujitsu(const char *HVAC_Mode, const char *HVAC_FanMode, boolean H
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
byte modes[5] = {FUJITSU_AC_MODE_HEAT, FUJITSU_AC_MODE_DRY, FUJITSU_AC_MODE_COOL, FUJITSU_AC_MODE_AUTO, FUJITSU_AC_MODE_FAN};
|
uint8_t modes[5] = {FUJITSU_AC_MODE_HEAT, FUJITSU_AC_MODE_DRY, FUJITSU_AC_MODE_COOL, FUJITSU_AC_MODE_AUTO, FUJITSU_AC_MODE_FAN};
|
||||||
byte fanModes[7] = {FUJITSU_AC_FAN_AUTO, FUJITSU_AC_FAN_LOW, FUJITSU_AC_FAN_MED, FUJITSU_AC_FAN_HIGH, FUJITSU_AC_FAN_HIGH, FUJITSU_AC_FAN_HIGH, FUJITSU_AC_FAN_QUIET};
|
uint8_t fanModes[7] = {FUJITSU_AC_FAN_AUTO, FUJITSU_AC_FAN_LOW, FUJITSU_AC_FAN_MED, FUJITSU_AC_FAN_HIGH, FUJITSU_AC_FAN_HIGH, FUJITSU_AC_FAN_HIGH, FUJITSU_AC_FAN_QUIET};
|
||||||
ac.setCmd(FUJITSU_AC_CMD_TURN_ON);
|
ac.setCmd(FUJITSU_AC_CMD_TURN_ON);
|
||||||
ac.setSwing(FUJITSU_AC_SWING_VERT);
|
ac.setSwing(FUJITSU_AC_SWING_VERT);
|
||||||
|
|
||||||
|
@ -505,11 +505,11 @@ boolean IrHvacFujitsu(const char *HVAC_Mode, const char *HVAC_FanMode, boolean H
|
||||||
{ "Vendor": "<Toshiba|Mitsubishi>", "Power": <0|1>, "Mode": "<Hot|Cold|Dry|Auto>", "FanSpeed": "<1|2|3|4|5|Auto|Silence>", "Temp": <17..30> }
|
{ "Vendor": "<Toshiba|Mitsubishi>", "Power": <0|1>, "Mode": "<Hot|Cold|Dry|Auto>", "FanSpeed": "<1|2|3|4|5|Auto|Silence>", "Temp": <17..30> }
|
||||||
*/
|
*/
|
||||||
|
|
||||||
boolean IrSendCommand(void)
|
bool IrSendCommand(void)
|
||||||
{
|
{
|
||||||
char command [CMDSZ];
|
char command [CMDSZ];
|
||||||
boolean serviced = true;
|
bool serviced = true;
|
||||||
boolean error = false;
|
bool error = false;
|
||||||
|
|
||||||
int command_code = GetCommandCode(command, sizeof(command), XdrvMailbox.topic, kIrRemoteCommands);
|
int command_code = GetCommandCode(command, sizeof(command), XdrvMailbox.topic, kIrRemoteCommands);
|
||||||
if (-1 == command_code) {
|
if (-1 == command_code) {
|
||||||
|
@ -531,7 +531,7 @@ boolean IrSendCommand(void)
|
||||||
if (count) { // At least two raw data values
|
if (count) { // At least two raw data values
|
||||||
count++;
|
count++;
|
||||||
uint16_t raw_array[count]; // It's safe to use stack for up to 240 packets (limited by mqtt_data length)
|
uint16_t raw_array[count]; // It's safe to use stack for up to 240 packets (limited by mqtt_data length)
|
||||||
byte i = 0;
|
uint8_t i = 0;
|
||||||
for (str = strtok_r(NULL, ", ", &p); str && i < count; str = strtok_r(NULL, ", ", &p)) {
|
for (str = strtok_r(NULL, ", ", &p); str && i < count; str = strtok_r(NULL, ", ", &p)) {
|
||||||
raw_array[i++] = strtoul(str, NULL, 0); // Allow decimal (5246996) and hexadecimal (0x501014) input
|
raw_array[i++] = strtoul(str, NULL, 0); // Allow decimal (5246996) and hexadecimal (0x501014) input
|
||||||
}
|
}
|
||||||
|
@ -611,7 +611,7 @@ boolean IrSendCommand(void)
|
||||||
const char *HVAC_FanMode;
|
const char *HVAC_FanMode;
|
||||||
const char *HVAC_Vendor;
|
const char *HVAC_Vendor;
|
||||||
int HVAC_Temp = 21;
|
int HVAC_Temp = 21;
|
||||||
boolean HVAC_Power = true;
|
bool HVAC_Power = true;
|
||||||
|
|
||||||
if (XdrvMailbox.data_len) {
|
if (XdrvMailbox.data_len) {
|
||||||
char dataBufUc[XdrvMailbox.data_len];
|
char dataBufUc[XdrvMailbox.data_len];
|
||||||
|
@ -666,9 +666,9 @@ boolean IrSendCommand(void)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xdrv05(byte function)
|
bool Xdrv05(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if ((pin[GPIO_IRSEND] < 99) || (pin[GPIO_IRRECV] < 99)) {
|
if ((pin[GPIO_IRSEND] < 99) || (pin[GPIO_IRRECV] < 99)) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -251,7 +251,7 @@ void SonoffBridgeReceived(void)
|
||||||
low_time = serial_in_buffer[3] << 8 | serial_in_buffer[4]; // Low time in uSec
|
low_time = serial_in_buffer[3] << 8 | serial_in_buffer[4]; // Low time in uSec
|
||||||
high_time = serial_in_buffer[5] << 8 | serial_in_buffer[6]; // High time in uSec
|
high_time = serial_in_buffer[5] << 8 | serial_in_buffer[6]; // High time in uSec
|
||||||
if (low_time && high_time) {
|
if (low_time && high_time) {
|
||||||
for (byte i = 0; i < 9; i++) {
|
for (uint8_t i = 0; i < 9; i++) {
|
||||||
Settings.rf_code[sonoff_bridge_learn_key][i] = serial_in_buffer[i +1];
|
Settings.rf_code[sonoff_bridge_learn_key][i] = serial_in_buffer[i +1];
|
||||||
}
|
}
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_INDEX_SVALUE, D_CMND_RFKEY, sonoff_bridge_learn_key, D_JSON_LEARNED);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_INDEX_SVALUE, D_CMND_RFKEY, sonoff_bridge_learn_key, D_JSON_LEARNED);
|
||||||
|
@ -274,7 +274,7 @@ void SonoffBridgeReceived(void)
|
||||||
sonoff_bridge_last_received_id = received_id;
|
sonoff_bridge_last_received_id = received_id;
|
||||||
sonoff_bridge_last_time = now;
|
sonoff_bridge_last_time = now;
|
||||||
strncpy_P(rfkey, PSTR("\"" D_JSON_NONE "\""), sizeof(rfkey));
|
strncpy_P(rfkey, PSTR("\"" D_JSON_NONE "\""), sizeof(rfkey));
|
||||||
for (byte i = 1; i <= 16; i++) {
|
for (uint8_t i = 1; i <= 16; i++) {
|
||||||
if (Settings.rf_code[i][0]) {
|
if (Settings.rf_code[i][0]) {
|
||||||
uint32_t send_id = Settings.rf_code[i][6] << 16 | Settings.rf_code[i][7] << 8 | Settings.rf_code[i][8];
|
uint32_t send_id = Settings.rf_code[i][6] << 16 | Settings.rf_code[i][7] << 8 | Settings.rf_code[i][8];
|
||||||
if (send_id == received_id) {
|
if (send_id == received_id) {
|
||||||
|
@ -300,7 +300,7 @@ void SonoffBridgeReceived(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean SonoffBridgeSerialInput(void)
|
bool SonoffBridgeSerialInput(void)
|
||||||
{
|
{
|
||||||
// iTead Rf Universal Transceiver Module Serial Protocol Version 1.0 (20170420)
|
// iTead Rf Universal Transceiver Module Serial Protocol Version 1.0 (20170420)
|
||||||
static int8_t receive_len = 0;
|
static int8_t receive_len = 0;
|
||||||
|
@ -352,7 +352,7 @@ boolean SonoffBridgeSerialInput(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SonoffBridgeSendCommand(byte code)
|
void SonoffBridgeSendCommand(uint8_t code)
|
||||||
{
|
{
|
||||||
Serial.write(0xAA); // Start of Text
|
Serial.write(0xAA); // Start of Text
|
||||||
Serial.write(code); // Command or Acknowledge
|
Serial.write(code); // Command or Acknowledge
|
||||||
|
@ -370,7 +370,7 @@ void SonoffBridgeSendCode(uint32_t code)
|
||||||
{
|
{
|
||||||
Serial.write(0xAA); // Start of Text
|
Serial.write(0xAA); // Start of Text
|
||||||
Serial.write(0xA5); // Send following code
|
Serial.write(0xA5); // Send following code
|
||||||
for (byte i = 0; i < 6; i++) {
|
for (uint8_t i = 0; i < 6; i++) {
|
||||||
Serial.write(Settings.rf_code[0][i]);
|
Serial.write(Settings.rf_code[0][i]);
|
||||||
}
|
}
|
||||||
Serial.write((code >> 16) & 0xff);
|
Serial.write((code >> 16) & 0xff);
|
||||||
|
@ -387,7 +387,7 @@ void SonoffBridgeSend(uint8_t idx, uint8_t key)
|
||||||
key--; // Support 1 to 16
|
key--; // Support 1 to 16
|
||||||
Serial.write(0xAA); // Start of Text
|
Serial.write(0xAA); // Start of Text
|
||||||
Serial.write(0xA5); // Send following code
|
Serial.write(0xA5); // Send following code
|
||||||
for (byte i = 0; i < 8; i++) {
|
for (uint8_t i = 0; i < 8; i++) {
|
||||||
Serial.write(Settings.rf_code[idx][i]);
|
Serial.write(Settings.rf_code[idx][i]);
|
||||||
}
|
}
|
||||||
if (0 == idx) {
|
if (0 == idx) {
|
||||||
|
@ -418,10 +418,10 @@ void SonoffBridgeLearn(uint8_t key)
|
||||||
* Commands
|
* Commands
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean SonoffBridgeCommand(void)
|
bool SonoffBridgeCommand(void)
|
||||||
{
|
{
|
||||||
char command [CMDSZ];
|
char command [CMDSZ];
|
||||||
boolean serviced = true;
|
bool serviced = true;
|
||||||
|
|
||||||
int command_code = GetCommandCode(command, sizeof(command), XdrvMailbox.topic, kSonoffBridgeCommands);
|
int command_code = GetCommandCode(command, sizeof(command), XdrvMailbox.topic, kSonoffBridgeCommands);
|
||||||
if (-1 == command_code) {
|
if (-1 == command_code) {
|
||||||
|
@ -485,7 +485,7 @@ boolean SonoffBridgeCommand(void)
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_INDEX_SVALUE, command, XdrvMailbox.index, D_JSON_SET_TO_DEFAULT);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_INDEX_SVALUE, command, XdrvMailbox.index, D_JSON_SET_TO_DEFAULT);
|
||||||
}
|
}
|
||||||
else if (4 == XdrvMailbox.payload) { // Save RF data provided by RFSync, RfLow, RfHigh and last RfCode
|
else if (4 == XdrvMailbox.payload) { // Save RF data provided by RFSync, RfLow, RfHigh and last RfCode
|
||||||
for (byte i = 0; i < 6; i++) {
|
for (uint8_t i = 0; i < 6; i++) {
|
||||||
Settings.rf_code[XdrvMailbox.index][i] = Settings.rf_code[0][i];
|
Settings.rf_code[XdrvMailbox.index][i] = Settings.rf_code[0][i];
|
||||||
}
|
}
|
||||||
Settings.rf_code[XdrvMailbox.index][6] = (sonoff_bridge_last_send_code >> 16) & 0xff;
|
Settings.rf_code[XdrvMailbox.index][6] = (sonoff_bridge_last_send_code >> 16) & 0xff;
|
||||||
|
@ -566,9 +566,9 @@ void SonoffBridgeInit(void)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xdrv06(byte function)
|
bool Xdrv06(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (SONOFF_BRIDGE == Settings.module) {
|
if (SONOFF_BRIDGE == Settings.module) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -41,8 +41,8 @@ const char S_JSON_DOMOTICZ_COMMAND_INDEX_LVALUE[] PROGMEM = "{\"" D_CMND_DOMOTIC
|
||||||
char domoticz_in_topic[] = DOMOTICZ_IN_TOPIC;
|
char domoticz_in_topic[] = DOMOTICZ_IN_TOPIC;
|
||||||
char domoticz_out_topic[] = DOMOTICZ_OUT_TOPIC;
|
char domoticz_out_topic[] = DOMOTICZ_OUT_TOPIC;
|
||||||
|
|
||||||
boolean domoticz_subscribe = false;
|
bool domoticz_subscribe = false;
|
||||||
byte domoticz_update_flag = 1;
|
uint8_t domoticz_update_flag = 1;
|
||||||
int domoticz_update_timer = 0;
|
int domoticz_update_timer = 0;
|
||||||
unsigned long fan_debounce = 0; // iFan02 state debounce timer
|
unsigned long fan_debounce = 0; // iFan02 state debounce timer
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ void DomoticzUpdateFanState()
|
||||||
domoticz_update_flag = 1;
|
domoticz_update_flag = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MqttPublishDomoticzPowerState(byte device)
|
void MqttPublishDomoticzPowerState(uint8_t device)
|
||||||
{
|
{
|
||||||
if (Settings.flag.mqtt_enabled) {
|
if (Settings.flag.mqtt_enabled) {
|
||||||
if ((device < 1) || (device > devices_present)) { device = 1; }
|
if ((device < 1) || (device > devices_present)) { device = 1; }
|
||||||
|
@ -114,7 +114,7 @@ void MqttPublishDomoticzPowerState(byte device)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DomoticzUpdatePowerState(byte device)
|
void DomoticzUpdatePowerState(uint8_t device)
|
||||||
{
|
{
|
||||||
if (domoticz_update_flag) {
|
if (domoticz_update_flag) {
|
||||||
MqttPublishDomoticzPowerState(device);
|
MqttPublishDomoticzPowerState(device);
|
||||||
|
@ -128,7 +128,7 @@ void DomoticzMqttUpdate(void)
|
||||||
domoticz_update_timer--;
|
domoticz_update_timer--;
|
||||||
if (domoticz_update_timer <= 0) {
|
if (domoticz_update_timer <= 0) {
|
||||||
domoticz_update_timer = Settings.domoticz_update_timer;
|
domoticz_update_timer = Settings.domoticz_update_timer;
|
||||||
for (byte i = 1; i <= devices_present; i++) {
|
for (uint8_t i = 1; i <= devices_present; i++) {
|
||||||
if ((SONOFF_IFAN02 == Settings.module) && (i > 1)) {
|
if ((SONOFF_IFAN02 == Settings.module) && (i > 1)) {
|
||||||
MqttPublishDomoticzFanState();
|
MqttPublishDomoticzFanState();
|
||||||
break;
|
break;
|
||||||
|
@ -143,7 +143,7 @@ void DomoticzMqttUpdate(void)
|
||||||
void DomoticzMqttSubscribe(void)
|
void DomoticzMqttSubscribe(void)
|
||||||
{
|
{
|
||||||
uint8_t maxdev = (devices_present > MAX_DOMOTICZ_IDX) ? MAX_DOMOTICZ_IDX : devices_present;
|
uint8_t maxdev = (devices_present > MAX_DOMOTICZ_IDX) ? MAX_DOMOTICZ_IDX : devices_present;
|
||||||
for (byte i = 0; i < maxdev; i++) {
|
for (uint8_t i = 0; i < maxdev; i++) {
|
||||||
if (Settings.domoticz_relay_idx[i]) {
|
if (Settings.domoticz_relay_idx[i]) {
|
||||||
domoticz_subscribe = true;
|
domoticz_subscribe = true;
|
||||||
}
|
}
|
||||||
|
@ -181,7 +181,7 @@ void DomoticzMqttSubscribe(void)
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
boolean DomoticzMqttData(void)
|
bool DomoticzMqttData(void)
|
||||||
{
|
{
|
||||||
char stemp1[10];
|
char stemp1[10];
|
||||||
unsigned long idx = 0;
|
unsigned long idx = 0;
|
||||||
|
@ -211,7 +211,7 @@ boolean DomoticzMqttData(void)
|
||||||
|
|
||||||
if ((idx > 0) && (nvalue >= 0) && (nvalue <= 15)) {
|
if ((idx > 0) && (nvalue >= 0) && (nvalue <= 15)) {
|
||||||
uint8_t maxdev = (devices_present > MAX_DOMOTICZ_IDX) ? MAX_DOMOTICZ_IDX : devices_present;
|
uint8_t maxdev = (devices_present > MAX_DOMOTICZ_IDX) ? MAX_DOMOTICZ_IDX : devices_present;
|
||||||
for (byte i = 0; i < maxdev; i++) {
|
for (uint8_t i = 0; i < maxdev; i++) {
|
||||||
if (idx == Settings.domoticz_relay_idx[i]) {
|
if (idx == Settings.domoticz_relay_idx[i]) {
|
||||||
bool iscolordimmer = strcmp_P(domoticz["dtype"],PSTR("Color Switch")) == 0;
|
bool iscolordimmer = strcmp_P(domoticz["dtype"],PSTR("Color Switch")) == 0;
|
||||||
snprintf_P(stemp1, sizeof(stemp1), PSTR("%d"), i +1);
|
snprintf_P(stemp1, sizeof(stemp1), PSTR("%d"), i +1);
|
||||||
|
@ -287,10 +287,10 @@ boolean DomoticzMqttData(void)
|
||||||
* Commands
|
* Commands
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean DomoticzCommand(void)
|
bool DomoticzCommand(void)
|
||||||
{
|
{
|
||||||
char command [CMDSZ];
|
char command [CMDSZ];
|
||||||
boolean serviced = true;
|
bool serviced = true;
|
||||||
uint8_t dmtcz_len = strlen(D_CMND_DOMOTICZ); // Prep for string length change
|
uint8_t dmtcz_len = strlen(D_CMND_DOMOTICZ); // Prep for string length change
|
||||||
|
|
||||||
if (!strncasecmp_P(XdrvMailbox.topic, PSTR(D_CMND_DOMOTICZ), dmtcz_len)) { // Prefix
|
if (!strncasecmp_P(XdrvMailbox.topic, PSTR(D_CMND_DOMOTICZ), dmtcz_len)) { // Prefix
|
||||||
|
@ -336,9 +336,9 @@ boolean DomoticzCommand(void)
|
||||||
return serviced;
|
return serviced;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean DomoticzSendKey(byte key, byte device, byte state, byte svalflg)
|
bool DomoticzSendKey(uint8_t key, uint8_t device, uint8_t state, uint8_t svalflg)
|
||||||
{
|
{
|
||||||
boolean result = 0;
|
bool result = 0;
|
||||||
|
|
||||||
if (device <= MAX_DOMOTICZ_IDX) {
|
if (device <= MAX_DOMOTICZ_IDX) {
|
||||||
if ((Settings.domoticz_key_idx[device -1] || Settings.domoticz_switch_idx[device -1]) && (svalflg)) {
|
if ((Settings.domoticz_key_idx[device -1] || Settings.domoticz_switch_idx[device -1]) && (svalflg)) {
|
||||||
|
@ -374,7 +374,7 @@ uint8_t DomoticzHumidityState(char *hum)
|
||||||
return (!h) ? 0 : (h < 40) ? 2 : (h > 70) ? 3 : 1;
|
return (!h) ? 0 : (h < 40) ? 2 : (h > 70) ? 3 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DomoticzSensor(byte idx, char *data)
|
void DomoticzSensor(uint8_t idx, char *data)
|
||||||
{
|
{
|
||||||
if (Settings.domoticz_sensor_idx[idx]) {
|
if (Settings.domoticz_sensor_idx[idx]) {
|
||||||
char dmess[90];
|
char dmess[90];
|
||||||
|
@ -392,7 +392,7 @@ void DomoticzSensor(byte idx, char *data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DomoticzSensor(byte idx, uint32_t value)
|
void DomoticzSensor(uint8_t idx, uint32_t value)
|
||||||
{
|
{
|
||||||
char data[16];
|
char data[16];
|
||||||
snprintf_P(data, sizeof(data), PSTR("%d"), value);
|
snprintf_P(data, sizeof(data), PSTR("%d"), value);
|
||||||
|
@ -497,7 +497,7 @@ void DomoticzSaveSettings(void)
|
||||||
char ssensor_indices[6 * MAX_DOMOTICZ_SNS_IDX];
|
char ssensor_indices[6 * MAX_DOMOTICZ_SNS_IDX];
|
||||||
char tmp[100];
|
char tmp[100];
|
||||||
|
|
||||||
for (byte i = 0; i < MAX_DOMOTICZ_IDX; i++) {
|
for (uint8_t i = 0; i < MAX_DOMOTICZ_IDX; i++) {
|
||||||
snprintf_P(stemp, sizeof(stemp), PSTR("r%d"), i +1);
|
snprintf_P(stemp, sizeof(stemp), PSTR("r%d"), i +1);
|
||||||
WebGetArg(stemp, tmp, sizeof(tmp));
|
WebGetArg(stemp, tmp, sizeof(tmp));
|
||||||
Settings.domoticz_relay_idx[i] = (!strlen(tmp)) ? 0 : atoi(tmp);
|
Settings.domoticz_relay_idx[i] = (!strlen(tmp)) ? 0 : atoi(tmp);
|
||||||
|
@ -509,7 +509,7 @@ void DomoticzSaveSettings(void)
|
||||||
Settings.domoticz_switch_idx[i] = (!strlen(tmp)) ? 0 : atoi(tmp);
|
Settings.domoticz_switch_idx[i] = (!strlen(tmp)) ? 0 : atoi(tmp);
|
||||||
}
|
}
|
||||||
ssensor_indices[0] = '\0';
|
ssensor_indices[0] = '\0';
|
||||||
for (byte i = 0; i < DZ_MAX_SENSORS; i++) {
|
for (uint8_t i = 0; i < DZ_MAX_SENSORS; i++) {
|
||||||
snprintf_P(stemp, sizeof(stemp), PSTR("l%d"), i +1);
|
snprintf_P(stemp, sizeof(stemp), PSTR("l%d"), i +1);
|
||||||
WebGetArg(stemp, tmp, sizeof(tmp));
|
WebGetArg(stemp, tmp, sizeof(tmp));
|
||||||
Settings.domoticz_sensor_idx[i] = (!strlen(tmp)) ? 0 : atoi(tmp);
|
Settings.domoticz_sensor_idx[i] = (!strlen(tmp)) ? 0 : atoi(tmp);
|
||||||
|
@ -531,9 +531,9 @@ void DomoticzSaveSettings(void)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xdrv07(byte function)
|
bool Xdrv07(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (Settings.flag.mqtt_enabled) {
|
if (Settings.flag.mqtt_enabled) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -42,7 +42,7 @@ void SerialBridgeInput(void)
|
||||||
{
|
{
|
||||||
while (SerialBridgeSerial->available()) {
|
while (SerialBridgeSerial->available()) {
|
||||||
yield();
|
yield();
|
||||||
uint8_t serial_in_byte = SerialBridgeSerial->read();
|
uint8_t serial_in_uint8_t = SerialBridgeSerial->read();
|
||||||
|
|
||||||
if (serial_in_byte > 127) { // binary data...
|
if (serial_in_byte > 127) { // binary data...
|
||||||
serial_bridge_in_byte_counter = 0;
|
serial_bridge_in_byte_counter = 0;
|
||||||
|
@ -90,10 +90,10 @@ void SerialBridgeInit(void)
|
||||||
* Commands
|
* Commands
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean SerialBridgeCommand(void)
|
bool SerialBridgeCommand(void)
|
||||||
{
|
{
|
||||||
char command [CMDSZ];
|
char command [CMDSZ];
|
||||||
boolean serviced = true;
|
bool serviced = true;
|
||||||
|
|
||||||
int command_code = GetCommandCode(command, sizeof(command), XdrvMailbox.topic, kSerialBridgeCommands);
|
int command_code = GetCommandCode(command, sizeof(command), XdrvMailbox.topic, kSerialBridgeCommands);
|
||||||
if (-1 == command_code) {
|
if (-1 == command_code) {
|
||||||
|
@ -149,9 +149,9 @@ boolean SerialBridgeCommand(void)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xdrv08(byte function)
|
bool Xdrv08(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (serial_bridge_active) {
|
if (serial_bridge_active) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -219,7 +219,7 @@ void ApplyTimerOffsets(Timer *duskdawn)
|
||||||
duskdawn->time = timeBuffer;
|
duskdawn->time = timeBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
String GetSun(byte dawn)
|
String GetSun(uint8_t dawn)
|
||||||
{
|
{
|
||||||
char stime[6];
|
char stime[6];
|
||||||
|
|
||||||
|
@ -232,7 +232,7 @@ String GetSun(byte dawn)
|
||||||
return String(stime);
|
return String(stime);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t GetSunMinutes(byte dawn)
|
uint16_t GetSunMinutes(uint8_t dawn)
|
||||||
{
|
{
|
||||||
uint8_t hour[2];
|
uint8_t hour[2];
|
||||||
uint8_t minute[2];
|
uint8_t minute[2];
|
||||||
|
@ -246,7 +246,7 @@ uint16_t GetSunMinutes(byte dawn)
|
||||||
|
|
||||||
/*******************************************************************************************/
|
/*******************************************************************************************/
|
||||||
|
|
||||||
void TimerSetRandomWindow(byte index)
|
void TimerSetRandomWindow(uint8_t index)
|
||||||
{
|
{
|
||||||
timer_window[index] = 0;
|
timer_window[index] = 0;
|
||||||
if (Settings.timer[index].window) {
|
if (Settings.timer[index].window) {
|
||||||
|
@ -256,7 +256,7 @@ void TimerSetRandomWindow(byte index)
|
||||||
|
|
||||||
void TimerSetRandomWindows(void)
|
void TimerSetRandomWindows(void)
|
||||||
{
|
{
|
||||||
for (byte i = 0; i < MAX_TIMERS; i++) { TimerSetRandomWindow(i); }
|
for (uint8_t i = 0; i < MAX_TIMERS; i++) { TimerSetRandomWindow(i); }
|
||||||
}
|
}
|
||||||
|
|
||||||
void TimerEverySecond(void)
|
void TimerEverySecond(void)
|
||||||
|
@ -268,7 +268,7 @@ void TimerEverySecond(void)
|
||||||
int16_t time = (RtcTime.hour *60) + RtcTime.minute;
|
int16_t time = (RtcTime.hour *60) + RtcTime.minute;
|
||||||
uint8_t days = 1 << (RtcTime.day_of_week -1);
|
uint8_t days = 1 << (RtcTime.day_of_week -1);
|
||||||
|
|
||||||
for (byte i = 0; i < MAX_TIMERS; i++) {
|
for (uint8_t i = 0; i < MAX_TIMERS; i++) {
|
||||||
// if (Settings.timer[i].device >= devices_present) Settings.timer[i].data = 0; // Reset timer due to change in devices present
|
// if (Settings.timer[i].device >= devices_present) Settings.timer[i].data = 0; // Reset timer due to change in devices present
|
||||||
Timer xtimer = Settings.timer[i];
|
Timer xtimer = Settings.timer[i];
|
||||||
uint16_t set_time = xtimer.time;
|
uint16_t set_time = xtimer.time;
|
||||||
|
@ -308,7 +308,7 @@ void PrepShowTimer(uint8_t index)
|
||||||
|
|
||||||
Timer xtimer = Settings.timer[index -1];
|
Timer xtimer = Settings.timer[index -1];
|
||||||
|
|
||||||
for (byte i = 0; i < 7; i++) {
|
for (uint8_t i = 0; i < 7; i++) {
|
||||||
uint8_t mask = 1 << i;
|
uint8_t mask = 1 << i;
|
||||||
snprintf(days, sizeof(days), "%s%d", days, ((xtimer.days & mask) > 0));
|
snprintf(days, sizeof(days), "%s%d", days, ((xtimer.days & mask) > 0));
|
||||||
}
|
}
|
||||||
|
@ -337,11 +337,11 @@ void PrepShowTimer(uint8_t index)
|
||||||
* Commands
|
* Commands
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean TimerCommand(void)
|
bool TimerCommand(void)
|
||||||
{
|
{
|
||||||
char command[CMDSZ];
|
char command[CMDSZ];
|
||||||
char dataBufUc[XdrvMailbox.data_len];
|
char dataBufUc[XdrvMailbox.data_len];
|
||||||
boolean serviced = true;
|
bool serviced = true;
|
||||||
uint8_t index = XdrvMailbox.index;
|
uint8_t index = XdrvMailbox.index;
|
||||||
|
|
||||||
UpperCase(dataBufUc, XdrvMailbox.data);
|
UpperCase(dataBufUc, XdrvMailbox.data);
|
||||||
|
@ -464,9 +464,9 @@ boolean TimerCommand(void)
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_SVALUE, command, GetStateText(Settings.flag3.timers_enable));
|
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_SVALUE, command, GetStateText(Settings.flag3.timers_enable));
|
||||||
MqttPublishPrefixTopic_P(RESULT_OR_STAT, command);
|
MqttPublishPrefixTopic_P(RESULT_OR_STAT, command);
|
||||||
|
|
||||||
byte jsflg = 0;
|
uint8_t jsflg = 0;
|
||||||
byte lines = 1;
|
uint8_t lines = 1;
|
||||||
for (byte i = 0; i < MAX_TIMERS; i++) {
|
for (uint8_t i = 0; i < MAX_TIMERS; i++) {
|
||||||
if (!jsflg) {
|
if (!jsflg) {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_TIMERS "%d\":{"), lines++);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_TIMERS "%d\":{"), lines++);
|
||||||
} else {
|
} else {
|
||||||
|
@ -699,7 +699,7 @@ void HandleTimerConfiguration(void)
|
||||||
page.replace(F("</style>"), FPSTR(HTTP_TIMER_STYLE));
|
page.replace(F("</style>"), FPSTR(HTTP_TIMER_STYLE));
|
||||||
page += FPSTR(HTTP_FORM_TIMER);
|
page += FPSTR(HTTP_FORM_TIMER);
|
||||||
page.replace(F("{e0"), (Settings.flag3.timers_enable) ? F(" checked") : F(""));
|
page.replace(F("{e0"), (Settings.flag3.timers_enable) ? F(" checked") : F(""));
|
||||||
for (byte i = 0; i < MAX_TIMERS; i++) {
|
for (uint8_t i = 0; i < MAX_TIMERS; i++) {
|
||||||
if (i > 0) { page += F(","); }
|
if (i > 0) { page += F(","); }
|
||||||
page += String(Settings.timer[i].data);
|
page += String(Settings.timer[i].data);
|
||||||
}
|
}
|
||||||
|
@ -725,7 +725,7 @@ void TimerSaveSettings(void)
|
||||||
WebGetArg("t0", tmp, sizeof(tmp));
|
WebGetArg("t0", tmp, sizeof(tmp));
|
||||||
char *p = tmp;
|
char *p = tmp;
|
||||||
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_MQTT D_CMND_TIMERS " %d"), Settings.flag3.timers_enable);
|
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_MQTT D_CMND_TIMERS " %d"), Settings.flag3.timers_enable);
|
||||||
for (byte i = 0; i < MAX_TIMERS; i++) {
|
for (uint8_t i = 0; i < MAX_TIMERS; i++) {
|
||||||
timer.data = strtol(p, &p, 10);
|
timer.data = strtol(p, &p, 10);
|
||||||
p++; // Skip comma
|
p++; // Skip comma
|
||||||
if (timer.time < 1440) {
|
if (timer.time < 1440) {
|
||||||
|
@ -744,9 +744,9 @@ void TimerSaveSettings(void)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xdrv09(byte function)
|
bool Xdrv09(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
switch (function) {
|
switch (function) {
|
||||||
case FUNC_PRE_INIT:
|
case FUNC_PRE_INIT:
|
||||||
|
|
|
@ -106,7 +106,7 @@ uint8_t mems_event = 0;
|
||||||
|
|
||||||
/*******************************************************************************************/
|
/*******************************************************************************************/
|
||||||
|
|
||||||
bool RulesRuleMatch(byte rule_set, String &event, String &rule)
|
bool RulesRuleMatch(uint8_t rule_set, String &event, String &rule)
|
||||||
{
|
{
|
||||||
// event = {"INA219":{"Voltage":4.494,"Current":0.020,"Power":0.089}}
|
// event = {"INA219":{"Voltage":4.494,"Current":0.020,"Power":0.089}}
|
||||||
// event = {"System":{"Boot":1}}
|
// event = {"System":{"Boot":1}}
|
||||||
|
@ -153,14 +153,14 @@ bool RulesRuleMatch(byte rule_set, String &event, String &rule)
|
||||||
double rule_value = 0;
|
double rule_value = 0;
|
||||||
if (pos > 0) {
|
if (pos > 0) {
|
||||||
String rule_param = rule_name.substring(pos + 1);
|
String rule_param = rule_name.substring(pos + 1);
|
||||||
for (byte i = 0; i < MAX_RULE_VARS; i++) {
|
for (uint8_t i = 0; i < MAX_RULE_VARS; i++) {
|
||||||
snprintf_P(stemp, sizeof(stemp), PSTR("%%VAR%d%%"), i +1);
|
snprintf_P(stemp, sizeof(stemp), PSTR("%%VAR%d%%"), i +1);
|
||||||
if (rule_param.startsWith(stemp)) {
|
if (rule_param.startsWith(stemp)) {
|
||||||
rule_param = vars[i];
|
rule_param = vars[i];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (byte i = 0; i < MAX_RULE_MEMS; i++) {
|
for (uint8_t i = 0; i < MAX_RULE_MEMS; i++) {
|
||||||
snprintf_P(stemp, sizeof(stemp), PSTR("%%MEM%d%%"), i +1);
|
snprintf_P(stemp, sizeof(stemp), PSTR("%%MEM%d%%"), i +1);
|
||||||
if (rule_param.startsWith(stemp)) {
|
if (rule_param.startsWith(stemp)) {
|
||||||
rule_param = Settings.mems[i];
|
rule_param = Settings.mems[i];
|
||||||
|
@ -262,7 +262,7 @@ bool RulesRuleMatch(byte rule_set, String &event, String &rule)
|
||||||
|
|
||||||
/*******************************************************************************************/
|
/*******************************************************************************************/
|
||||||
|
|
||||||
bool RuleSetProcess(byte rule_set, String &event_saved)
|
bool RuleSetProcess(uint8_t rule_set, String &event_saved)
|
||||||
{
|
{
|
||||||
bool serviced = false;
|
bool serviced = false;
|
||||||
char stemp[10];
|
char stemp[10];
|
||||||
|
@ -315,11 +315,11 @@ bool RuleSetProcess(byte rule_set, String &event_saved)
|
||||||
// if (!ucommand.startsWith("BACKLOG")) { commands = "backlog " + commands; } // Always use Backlog to prevent power race exception
|
// if (!ucommand.startsWith("BACKLOG")) { commands = "backlog " + commands; } // Always use Backlog to prevent power race exception
|
||||||
if (ucommand.indexOf("EVENT ") != -1) { commands = "backlog " + commands; } // Always use Backlog with event to prevent rule event loop exception
|
if (ucommand.indexOf("EVENT ") != -1) { commands = "backlog " + commands; } // Always use Backlog with event to prevent rule event loop exception
|
||||||
commands.replace(F("%value%"), rules_event_value);
|
commands.replace(F("%value%"), rules_event_value);
|
||||||
for (byte i = 0; i < MAX_RULE_VARS; i++) {
|
for (uint8_t i = 0; i < MAX_RULE_VARS; i++) {
|
||||||
snprintf_P(stemp, sizeof(stemp), PSTR("%%var%d%%"), i +1);
|
snprintf_P(stemp, sizeof(stemp), PSTR("%%var%d%%"), i +1);
|
||||||
commands.replace(stemp, vars[i]);
|
commands.replace(stemp, vars[i]);
|
||||||
}
|
}
|
||||||
for (byte i = 0; i < MAX_RULE_MEMS; i++) {
|
for (uint8_t i = 0; i < MAX_RULE_MEMS; i++) {
|
||||||
snprintf_P(stemp, sizeof(stemp), PSTR("%%mem%d%%"), i +1);
|
snprintf_P(stemp, sizeof(stemp), PSTR("%%mem%d%%"), i +1);
|
||||||
commands.replace(stemp, Settings.mems[i]);
|
commands.replace(stemp, Settings.mems[i]);
|
||||||
}
|
}
|
||||||
|
@ -363,7 +363,7 @@ bool RulesProcessEvent(char *json_event)
|
||||||
//snprintf_P(log_data, sizeof(log_data), PSTR("RUL: Event %s"), event_saved.c_str());
|
//snprintf_P(log_data, sizeof(log_data), PSTR("RUL: Event %s"), event_saved.c_str());
|
||||||
//AddLog(LOG_LEVEL_DEBUG);
|
//AddLog(LOG_LEVEL_DEBUG);
|
||||||
|
|
||||||
for (byte i = 0; i < MAX_RULE_SETS; i++) {
|
for (uint8_t i = 0; i < MAX_RULE_SETS; i++) {
|
||||||
if (strlen(Settings.rules[i]) && bitRead(Settings.rule_enabled, i)) {
|
if (strlen(Settings.rules[i]) && bitRead(Settings.rule_enabled, i)) {
|
||||||
if (RuleSetProcess(i, event_saved)) { serviced = true; }
|
if (RuleSetProcess(i, event_saved)) { serviced = true; }
|
||||||
}
|
}
|
||||||
|
@ -379,7 +379,7 @@ bool RulesProcess(void)
|
||||||
void RulesInit(void)
|
void RulesInit(void)
|
||||||
{
|
{
|
||||||
rules_flag.data = 0;
|
rules_flag.data = 0;
|
||||||
for (byte i = 0; i < MAX_RULE_SETS; i++) {
|
for (uint8_t i = 0; i < MAX_RULE_SETS; i++) {
|
||||||
if (Settings.rules[i][0] == '\0') {
|
if (Settings.rules[i][0] == '\0') {
|
||||||
bitWrite(Settings.rule_enabled, i, 0);
|
bitWrite(Settings.rule_enabled, i, 0);
|
||||||
bitWrite(Settings.rule_once, i, 0);
|
bitWrite(Settings.rule_once, i, 0);
|
||||||
|
@ -396,7 +396,7 @@ void RulesEvery50ms(void)
|
||||||
if (-1 == rules_new_power) { rules_new_power = power; }
|
if (-1 == rules_new_power) { rules_new_power = power; }
|
||||||
if (rules_new_power != rules_old_power) {
|
if (rules_new_power != rules_old_power) {
|
||||||
if (rules_old_power != -1) {
|
if (rules_old_power != -1) {
|
||||||
for (byte i = 0; i < devices_present; i++) {
|
for (uint8_t i = 0; i < devices_present; i++) {
|
||||||
uint8_t new_state = (rules_new_power >> i) &1;
|
uint8_t new_state = (rules_new_power >> i) &1;
|
||||||
if (new_state != ((rules_old_power >> i) &1)) {
|
if (new_state != ((rules_old_power >> i) &1)) {
|
||||||
snprintf_P(json_event, sizeof(json_event), PSTR("{\"Power%d\":{\"State\":%d}}"), i +1, new_state);
|
snprintf_P(json_event, sizeof(json_event), PSTR("{\"Power%d\":{\"State\":%d}}"), i +1, new_state);
|
||||||
|
@ -405,19 +405,19 @@ void RulesEvery50ms(void)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Boot time POWER OUTPUTS (Relays) Status
|
// Boot time POWER OUTPUTS (Relays) Status
|
||||||
for (byte i = 0; i < devices_present; i++) {
|
for (uint8_t i = 0; i < devices_present; i++) {
|
||||||
uint8_t new_state = (rules_new_power >> i) &1;
|
uint8_t new_state = (rules_new_power >> i) &1;
|
||||||
snprintf_P(json_event, sizeof(json_event), PSTR("{\"Power%d\":{\"Boot\":%d}}"), i +1, new_state);
|
snprintf_P(json_event, sizeof(json_event), PSTR("{\"Power%d\":{\"Boot\":%d}}"), i +1, new_state);
|
||||||
RulesProcessEvent(json_event);
|
RulesProcessEvent(json_event);
|
||||||
}
|
}
|
||||||
// Boot time SWITCHES Status
|
// Boot time SWITCHES Status
|
||||||
for (byte i = 0; i < MAX_SWITCHES; i++) {
|
for (uint8_t i = 0; i < MAX_SWITCHES; i++) {
|
||||||
#ifdef USE_TM1638
|
#ifdef USE_TM1638
|
||||||
if ((pin[GPIO_SWT1 +i] < 99) || ((pin[GPIO_TM16CLK] < 99) && (pin[GPIO_TM16DIO] < 99) && (pin[GPIO_TM16STB] < 99))) {
|
if ((pin[GPIO_SWT1 +i] < 99) || ((pin[GPIO_TM16CLK] < 99) && (pin[GPIO_TM16DIO] < 99) && (pin[GPIO_TM16STB] < 99))) {
|
||||||
#else
|
#else
|
||||||
if (pin[GPIO_SWT1 +i] < 99) {
|
if (pin[GPIO_SWT1 +i] < 99) {
|
||||||
#endif // USE_TM1638
|
#endif // USE_TM1638
|
||||||
boolean swm = ((FOLLOW_INV == Settings.switchmode[i]) || (PUSHBUTTON_INV == Settings.switchmode[i]) || (PUSHBUTTONHOLD_INV == Settings.switchmode[i]));
|
bool swm = ((FOLLOW_INV == Settings.switchmode[i]) || (PUSHBUTTON_INV == Settings.switchmode[i]) || (PUSHBUTTONHOLD_INV == Settings.switchmode[i]));
|
||||||
snprintf_P(json_event, sizeof(json_event), PSTR("{\"" D_JSON_SWITCH "%d\":{\"Boot\":%d}}"), i +1, (swm ^ SwitchLastState(i)));
|
snprintf_P(json_event, sizeof(json_event), PSTR("{\"" D_JSON_SWITCH "%d\":{\"Boot\":%d}}"), i +1, (swm ^ SwitchLastState(i)));
|
||||||
RulesProcessEvent(json_event);
|
RulesProcessEvent(json_event);
|
||||||
}
|
}
|
||||||
|
@ -454,7 +454,7 @@ void RulesEvery50ms(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (vars_event) {
|
else if (vars_event) {
|
||||||
for (byte i = 0; i < MAX_RULE_VARS-1; i++) {
|
for (uint8_t i = 0; i < MAX_RULE_VARS-1; i++) {
|
||||||
if (bitRead(vars_event, i)) {
|
if (bitRead(vars_event, i)) {
|
||||||
bitClear(vars_event, i);
|
bitClear(vars_event, i);
|
||||||
snprintf_P(json_event, sizeof(json_event), PSTR("{\"Var%d\":{\"State\":%s}}"), i+1, vars[i]);
|
snprintf_P(json_event, sizeof(json_event), PSTR("{\"Var%d\":{\"State\":%s}}"), i+1, vars[i]);
|
||||||
|
@ -464,7 +464,7 @@ void RulesEvery50ms(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (mems_event) {
|
else if (mems_event) {
|
||||||
for (byte i = 0; i < MAX_RULE_MEMS-1; i++) {
|
for (uint8_t i = 0; i < MAX_RULE_MEMS-1; i++) {
|
||||||
if (bitRead(mems_event, i)) {
|
if (bitRead(mems_event, i)) {
|
||||||
bitClear(mems_event, i);
|
bitClear(mems_event, i);
|
||||||
snprintf_P(json_event, sizeof(json_event), PSTR("{\"Mem%d\":{\"State\":%s}}"), i+1, Settings.mems[i]);
|
snprintf_P(json_event, sizeof(json_event), PSTR("{\"Mem%d\":{\"State\":%s}}"), i+1, Settings.mems[i]);
|
||||||
|
@ -475,7 +475,7 @@ void RulesEvery50ms(void)
|
||||||
}
|
}
|
||||||
else if (rules_flag.data) {
|
else if (rules_flag.data) {
|
||||||
uint16_t mask = 1;
|
uint16_t mask = 1;
|
||||||
for (byte i = 0; i < MAX_RULES_FLAG; i++) {
|
for (uint8_t i = 0; i < MAX_RULES_FLAG; i++) {
|
||||||
if (rules_flag.data & mask) {
|
if (rules_flag.data & mask) {
|
||||||
rules_flag.data ^= mask;
|
rules_flag.data ^= mask;
|
||||||
json_event[0] = '\0';
|
json_event[0] = '\0';
|
||||||
|
@ -529,7 +529,7 @@ void RulesEverySecond(void)
|
||||||
RulesProcessEvent(json_event);
|
RulesProcessEvent(json_event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (byte i = 0; i < MAX_RULE_TIMERS; i++) {
|
for (uint8_t i = 0; i < MAX_RULE_TIMERS; i++) {
|
||||||
if (rules_timer[i] != 0L) { // Timer active?
|
if (rules_timer[i] != 0L) { // Timer active?
|
||||||
if (TimeReached(rules_timer[i])) { // Timer finished?
|
if (TimeReached(rules_timer[i])) { // Timer finished?
|
||||||
rules_timer[i] = 0L; // Turn off this timer
|
rules_timer[i] = 0L; // Turn off this timer
|
||||||
|
@ -553,10 +553,10 @@ void RulesTeleperiod(void)
|
||||||
rules_teleperiod = 0;
|
rules_teleperiod = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean RulesCommand(void)
|
bool RulesCommand(void)
|
||||||
{
|
{
|
||||||
char command[CMDSZ];
|
char command[CMDSZ];
|
||||||
boolean serviced = true;
|
bool serviced = true;
|
||||||
uint8_t index = XdrvMailbox.index;
|
uint8_t index = XdrvMailbox.index;
|
||||||
|
|
||||||
int command_code = GetCommandCode(command, sizeof(command), XdrvMailbox.topic, kRulesCommands);
|
int command_code = GetCommandCode(command, sizeof(command), XdrvMailbox.topic, kRulesCommands);
|
||||||
|
@ -614,7 +614,7 @@ boolean RulesCommand(void)
|
||||||
rules_timer[index -1] = (XdrvMailbox.payload > 0) ? millis() + (1000 * XdrvMailbox.payload) : 0;
|
rules_timer[index -1] = (XdrvMailbox.payload > 0) ? millis() + (1000 * XdrvMailbox.payload) : 0;
|
||||||
}
|
}
|
||||||
mqtt_data[0] = '\0';
|
mqtt_data[0] = '\0';
|
||||||
for (byte i = 0; i < MAX_RULE_TIMERS; i++) {
|
for (uint8_t i = 0; i < MAX_RULE_TIMERS; i++) {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s%c\"T%d\":%d"), mqtt_data, (i) ? ',' : '{', i +1, (rules_timer[i]) ? (rules_timer[i] - millis()) / 1000 : 0);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s%c\"T%d\":%d"), mqtt_data, (i) ? ',' : '{', i +1, (rules_timer[i]) ? (rules_timer[i] - millis()) / 1000 : 0);
|
||||||
}
|
}
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s}"), mqtt_data);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s}"), mqtt_data);
|
||||||
|
@ -700,9 +700,9 @@ double map_double(double x, double in_min, double in_max, double out_min, double
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xdrv10(byte function)
|
bool Xdrv10(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
switch (function) {
|
switch (function) {
|
||||||
case FUNC_PRE_INIT:
|
case FUNC_PRE_INIT:
|
||||||
|
|
|
@ -39,12 +39,12 @@ Variables in settings.h
|
||||||
|
|
||||||
bool Settings.flag.knx_enabled Enable/Disable KNX Protocol
|
bool Settings.flag.knx_enabled Enable/Disable KNX Protocol
|
||||||
uint16_t Settings.knx_physsical_addr Physical KNX address of this device
|
uint16_t Settings.knx_physsical_addr Physical KNX address of this device
|
||||||
byte Settings.knx_GA_registered Number of group address to read
|
uint8_t Settings.knx_GA_registered Number of group address to read
|
||||||
byte Settings.knx_CB_registered Number of group address to write
|
uint8_t Settings.knx_CB_registered Number of group address to write
|
||||||
uint16_t Settings.knx_GA_addr[MAX_KNX_GA] Group address to read
|
uint16_t Settings.knx_GA_addr[MAX_KNX_GA] Group address to read
|
||||||
uint16_t Settings.knx_CB_addr[MAX_KNX_CB] Group address to write
|
uint16_t Settings.knx_CB_addr[MAX_KNX_CB] Group address to write
|
||||||
byte Settings.knx_GA_param[MAX_KNX_GA] Type of Input (relay changed, button pressed, sensor read)
|
uint8_t Settings.knx_GA_param[MAX_KNX_GA] Type of Input (relay changed, button pressed, sensor read)
|
||||||
byte Settings.knx_CB_param[MAX_KNX_CB] Type of Output (set relay, toggle relay, reply sensor value)
|
uint8_t Settings.knx_CB_param[MAX_KNX_CB] Type of Output (set relay, toggle relay, reply sensor value)
|
||||||
|
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
|
@ -61,11 +61,11 @@ address_t KNX_addr; // KNX Address converter variable
|
||||||
|
|
||||||
float last_temp;
|
float last_temp;
|
||||||
float last_hum;
|
float last_hum;
|
||||||
byte toggle_inhibit;
|
uint8_t toggle_inhibit;
|
||||||
|
|
||||||
typedef struct __device_parameters
|
typedef struct __device_parameters
|
||||||
{
|
{
|
||||||
byte type; // PARAMETER_ID. Used as type of GA = relay, button, sensor, etc, (INPUTS)
|
uint8_t type; // PARAMETER_ID. Used as type of GA = relay, button, sensor, etc, (INPUTS)
|
||||||
// used when an action on device triggers a MSG to send on KNX
|
// used when an action on device triggers a MSG to send on KNX
|
||||||
// Needed because this is the value that the ESP_KNX_IP library will pass as parameter
|
// Needed because this is the value that the ESP_KNX_IP library will pass as parameter
|
||||||
// to identify the action to perform when a MSG is received
|
// to identify the action to perform when a MSG is received
|
||||||
|
@ -200,9 +200,9 @@ enum KnxCommands { CMND_KNXTXCMND, CMND_KNXTXVAL, CMND_KNX_ENABLED, CMND_KNX_ENH
|
||||||
const char kKnxCommands[] PROGMEM = D_CMND_KNXTXCMND "|" D_CMND_KNXTXVAL "|" D_CMND_KNX_ENABLED "|"
|
const char kKnxCommands[] PROGMEM = D_CMND_KNXTXCMND "|" D_CMND_KNXTXVAL "|" D_CMND_KNX_ENABLED "|"
|
||||||
D_CMND_KNX_ENHANCED "|" D_CMND_KNX_PA "|" D_CMND_KNX_GA "|" D_CMND_KNX_CB ;
|
D_CMND_KNX_ENHANCED "|" D_CMND_KNX_PA "|" D_CMND_KNX_GA "|" D_CMND_KNX_CB ;
|
||||||
|
|
||||||
byte KNX_GA_Search( byte param, byte start = 0 )
|
uint8_t KNX_GA_Search( uint8_t param, uint8_t start = 0 )
|
||||||
{
|
{
|
||||||
for (byte i = start; i < Settings.knx_GA_registered; ++i)
|
for (uint8_t i = start; i < Settings.knx_GA_registered; ++i)
|
||||||
{
|
{
|
||||||
if ( Settings.knx_GA_param[i] == param )
|
if ( Settings.knx_GA_param[i] == param )
|
||||||
{
|
{
|
||||||
|
@ -216,9 +216,9 @@ byte KNX_GA_Search( byte param, byte start = 0 )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
byte KNX_CB_Search( byte param, byte start = 0 )
|
uint8_t KNX_CB_Search( uint8_t param, uint8_t start = 0 )
|
||||||
{
|
{
|
||||||
for (byte i = start; i < Settings.knx_CB_registered; ++i)
|
for (uint8_t i = start; i < Settings.knx_CB_registered; ++i)
|
||||||
{
|
{
|
||||||
if ( Settings.knx_CB_param[i] == param )
|
if ( Settings.knx_CB_param[i] == param )
|
||||||
{
|
{
|
||||||
|
@ -232,7 +232,7 @@ byte KNX_CB_Search( byte param, byte start = 0 )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void KNX_ADD_GA( byte GAop, byte GA_FNUM, byte GA_AREA, byte GA_FDEF )
|
void KNX_ADD_GA( uint8_t GAop, uint8_t GA_FNUM, uint8_t GA_AREA, uint8_t GA_FDEF )
|
||||||
{
|
{
|
||||||
// Check if all GA were assigned. If yes-> return
|
// Check if all GA were assigned. If yes-> return
|
||||||
if ( Settings.knx_GA_registered >= MAX_KNX_GA ) { return; }
|
if ( Settings.knx_GA_registered >= MAX_KNX_GA ) { return; }
|
||||||
|
@ -255,12 +255,12 @@ void KNX_ADD_GA( byte GAop, byte GA_FNUM, byte GA_AREA, byte GA_FDEF )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void KNX_DEL_GA( byte GAnum )
|
void KNX_DEL_GA( uint8_t GAnum )
|
||||||
{
|
{
|
||||||
|
|
||||||
byte dest_offset = 0;
|
uint8_t dest_offset = 0;
|
||||||
byte src_offset = 0;
|
uint8_t src_offset = 0;
|
||||||
byte len = 0;
|
uint8_t len = 0;
|
||||||
|
|
||||||
// Delete GA
|
// Delete GA
|
||||||
Settings.knx_GA_param[GAnum-1] = 0;
|
Settings.knx_GA_param[GAnum-1] = 0;
|
||||||
|
@ -291,7 +291,7 @@ void KNX_DEL_GA( byte GAnum )
|
||||||
|
|
||||||
if (len > 0)
|
if (len > 0)
|
||||||
{
|
{
|
||||||
memmove(Settings.knx_GA_param + dest_offset, Settings.knx_GA_param + src_offset, len * sizeof(byte));
|
memmove(Settings.knx_GA_param + dest_offset, Settings.knx_GA_param + src_offset, len * sizeof(uint8_t));
|
||||||
memmove(Settings.knx_GA_addr + dest_offset, Settings.knx_GA_addr + src_offset, len * sizeof(uint16_t));
|
memmove(Settings.knx_GA_addr + dest_offset, Settings.knx_GA_addr + src_offset, len * sizeof(uint16_t));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -303,7 +303,7 @@ void KNX_DEL_GA( byte GAnum )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void KNX_ADD_CB( byte CBop, byte CB_FNUM, byte CB_AREA, byte CB_FDEF )
|
void KNX_ADD_CB( uint8_t CBop, uint8_t CB_FNUM, uint8_t CB_AREA, uint8_t CB_FDEF )
|
||||||
{
|
{
|
||||||
// Check if all callbacks were assigned. If yes-> return
|
// Check if all callbacks were assigned. If yes-> return
|
||||||
if ( Settings.knx_CB_registered >= MAX_KNX_CB ) { return; }
|
if ( Settings.knx_CB_registered >= MAX_KNX_CB ) { return; }
|
||||||
|
@ -338,12 +338,12 @@ void KNX_ADD_CB( byte CBop, byte CB_FNUM, byte CB_AREA, byte CB_FDEF )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void KNX_DEL_CB( byte CBnum )
|
void KNX_DEL_CB( uint8_t CBnum )
|
||||||
{
|
{
|
||||||
byte oldparam = Settings.knx_CB_param[CBnum-1];
|
uint8_t oldparam = Settings.knx_CB_param[CBnum-1];
|
||||||
byte dest_offset = 0;
|
uint8_t dest_offset = 0;
|
||||||
byte src_offset = 0;
|
uint8_t src_offset = 0;
|
||||||
byte len = 0;
|
uint8_t len = 0;
|
||||||
|
|
||||||
// Delete assigment
|
// Delete assigment
|
||||||
knx.callback_unassign(CBnum-1);
|
knx.callback_unassign(CBnum-1);
|
||||||
|
@ -375,7 +375,7 @@ void KNX_DEL_CB( byte CBnum )
|
||||||
|
|
||||||
if (len > 0)
|
if (len > 0)
|
||||||
{
|
{
|
||||||
memmove(Settings.knx_CB_param + dest_offset, Settings.knx_CB_param + src_offset, len * sizeof(byte));
|
memmove(Settings.knx_CB_param + dest_offset, Settings.knx_CB_param + src_offset, len * sizeof(uint8_t));
|
||||||
memmove(Settings.knx_CB_addr + dest_offset, Settings.knx_CB_addr + src_offset, len * sizeof(uint16_t));
|
memmove(Settings.knx_CB_addr + dest_offset, Settings.knx_CB_addr + src_offset, len * sizeof(uint16_t));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -395,7 +395,7 @@ void KNX_DEL_CB( byte CBnum )
|
||||||
bool KNX_CONFIG_NOT_MATCH(void)
|
bool KNX_CONFIG_NOT_MATCH(void)
|
||||||
{
|
{
|
||||||
// Check for configured parameters that the device does not have (module changed)
|
// Check for configured parameters that the device does not have (module changed)
|
||||||
for (byte i = 0; i < KNX_MAX_device_param; ++i)
|
for (uint8_t i = 0; i < KNX_MAX_device_param; ++i)
|
||||||
{
|
{
|
||||||
if ( !device_param[i].show ) { // device has this parameter ?
|
if ( !device_param[i].show ) { // device has this parameter ?
|
||||||
// if not, search for all registered group address to this parameter for deletion
|
// if not, search for all registered group address to this parameter for deletion
|
||||||
|
@ -417,7 +417,7 @@ bool KNX_CONFIG_NOT_MATCH(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for invalid or erroneous configuration (tasmota flashed without clearing the memory)
|
// Check for invalid or erroneous configuration (tasmota flashed without clearing the memory)
|
||||||
for (byte i = 0; i < Settings.knx_GA_registered; ++i)
|
for (uint8_t i = 0; i < Settings.knx_GA_registered; ++i)
|
||||||
{
|
{
|
||||||
if ( Settings.knx_GA_param[i] != 0 ) // the GA[i] have a parameter defined?
|
if ( Settings.knx_GA_param[i] != 0 ) // the GA[i] have a parameter defined?
|
||||||
{
|
{
|
||||||
|
@ -427,7 +427,7 @@ bool KNX_CONFIG_NOT_MATCH(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (byte i = 0; i < Settings.knx_CB_registered; ++i)
|
for (uint8_t i = 0; i < Settings.knx_CB_registered; ++i)
|
||||||
{
|
{
|
||||||
if ( Settings.knx_CB_param[i] != 0 ) // the CB[i] have a parameter defined?
|
if ( Settings.knx_CB_param[i] != 0 ) // the CB[i] have a parameter defined?
|
||||||
{
|
{
|
||||||
|
@ -529,8 +529,8 @@ void KNX_INIT(void)
|
||||||
// Register Group Addresses to listen to
|
// Register Group Addresses to listen to
|
||||||
// Search on the settings if there is a group address set for receive KNX messages for the type: device_param[j].type
|
// Search on the settings if there is a group address set for receive KNX messages for the type: device_param[j].type
|
||||||
// If there is, register the group address on the KNX_IP Library to Receive data for Executing Callbacks
|
// If there is, register the group address on the KNX_IP Library to Receive data for Executing Callbacks
|
||||||
byte j;
|
uint8_t j;
|
||||||
for (byte i = 0; i < Settings.knx_CB_registered; ++i)
|
for (uint8_t i = 0; i < Settings.knx_CB_registered; ++i)
|
||||||
{
|
{
|
||||||
j = Settings.knx_CB_param[i];
|
j = Settings.knx_CB_param[i];
|
||||||
if ( j > 0 )
|
if ( j > 0 )
|
||||||
|
@ -652,14 +652,14 @@ void KNX_CB_Action(message_t const &msg, void *arg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void KnxUpdatePowerState(byte device, power_t state)
|
void KnxUpdatePowerState(uint8_t device, power_t state)
|
||||||
{
|
{
|
||||||
if (!(Settings.flag.knx_enabled)) { return; }
|
if (!(Settings.flag.knx_enabled)) { return; }
|
||||||
|
|
||||||
device_param[device -1].last_state = bitRead(state, device -1); // power state (on/off)
|
device_param[device -1].last_state = bitRead(state, device -1); // power state (on/off)
|
||||||
|
|
||||||
// Search all the registered GA that has that output (variable: device) as parameter
|
// Search all the registered GA that has that output (variable: device) as parameter
|
||||||
byte i = KNX_GA_Search(device);
|
uint8_t i = KNX_GA_Search(device);
|
||||||
while ( i != KNX_Empty ) {
|
while ( i != KNX_Empty ) {
|
||||||
KNX_addr.value = Settings.knx_GA_addr[i];
|
KNX_addr.value = Settings.knx_GA_addr[i];
|
||||||
knx.write_1bit(KNX_addr, device_param[device -1].last_state);
|
knx.write_1bit(KNX_addr, device_param[device -1].last_state);
|
||||||
|
@ -678,7 +678,7 @@ void KnxUpdatePowerState(byte device, power_t state)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void KnxSendButtonPower(byte key, byte device, byte state)
|
void KnxSendButtonPower(uint8_t key, uint8_t device, uint8_t state)
|
||||||
{
|
{
|
||||||
// key 0 = button_topic
|
// key 0 = button_topic
|
||||||
// key 1 = switch_topic
|
// key 1 = switch_topic
|
||||||
|
@ -692,7 +692,7 @@ void KnxSendButtonPower(byte key, byte device, byte state)
|
||||||
// {
|
// {
|
||||||
|
|
||||||
// Search all the registered GA that has that output (variable: device) as parameter
|
// Search all the registered GA that has that output (variable: device) as parameter
|
||||||
byte i = KNX_GA_Search(device + 8);
|
uint8_t i = KNX_GA_Search(device + 8);
|
||||||
while ( i != KNX_Empty ) {
|
while ( i != KNX_Empty ) {
|
||||||
KNX_addr.value = Settings.knx_GA_addr[i];
|
KNX_addr.value = Settings.knx_GA_addr[i];
|
||||||
knx.write_1bit(KNX_addr, !(state == 0));
|
knx.write_1bit(KNX_addr, !(state == 0));
|
||||||
|
@ -712,7 +712,7 @@ void KnxSendButtonPower(byte key, byte device, byte state)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void KnxSensor(byte sensor_type, float value)
|
void KnxSensor(uint8_t sensor_type, float value)
|
||||||
{
|
{
|
||||||
if (sensor_type == KNX_TEMPERATURE)
|
if (sensor_type == KNX_TEMPERATURE)
|
||||||
{
|
{
|
||||||
|
@ -724,7 +724,7 @@ void KnxSensor(byte sensor_type, float value)
|
||||||
|
|
||||||
if (!(Settings.flag.knx_enabled)) { return; }
|
if (!(Settings.flag.knx_enabled)) { return; }
|
||||||
|
|
||||||
byte i = KNX_GA_Search(sensor_type);
|
uint8_t i = KNX_GA_Search(sensor_type);
|
||||||
while ( i != KNX_Empty ) {
|
while ( i != KNX_Empty ) {
|
||||||
KNX_addr.value = Settings.knx_GA_addr[i];
|
KNX_addr.value = Settings.knx_GA_addr[i];
|
||||||
knx.write_2byte_float(KNX_addr, value);
|
knx.write_2byte_float(KNX_addr, value);
|
||||||
|
@ -822,13 +822,13 @@ void HandleKNXConfiguration(void)
|
||||||
if ( WebServer->arg("btn_add") == "1" ) {
|
if ( WebServer->arg("btn_add") == "1" ) {
|
||||||
|
|
||||||
stmp = WebServer->arg("GAop"); //option selected
|
stmp = WebServer->arg("GAop"); //option selected
|
||||||
byte GAop = stmp.toInt();
|
uint8_t GAop = stmp.toInt();
|
||||||
stmp = WebServer->arg("GA_FNUM");
|
stmp = WebServer->arg("GA_FNUM");
|
||||||
byte GA_FNUM = stmp.toInt();
|
uint8_t GA_FNUM = stmp.toInt();
|
||||||
stmp = WebServer->arg("GA_AREA");
|
stmp = WebServer->arg("GA_AREA");
|
||||||
byte GA_AREA = stmp.toInt();
|
uint8_t GA_AREA = stmp.toInt();
|
||||||
stmp = WebServer->arg("GA_FDEF");
|
stmp = WebServer->arg("GA_FDEF");
|
||||||
byte GA_FDEF = stmp.toInt();
|
uint8_t GA_FDEF = stmp.toInt();
|
||||||
|
|
||||||
if (GAop) {
|
if (GAop) {
|
||||||
KNX_ADD_GA( GAop, GA_FNUM, GA_AREA, GA_FDEF );
|
KNX_ADD_GA( GAop, GA_FNUM, GA_AREA, GA_FDEF );
|
||||||
|
@ -838,13 +838,13 @@ void HandleKNXConfiguration(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
stmp = WebServer->arg("CBop"); //option selected
|
stmp = WebServer->arg("CBop"); //option selected
|
||||||
byte CBop = stmp.toInt();
|
uint8_t CBop = stmp.toInt();
|
||||||
stmp = WebServer->arg("CB_FNUM");
|
stmp = WebServer->arg("CB_FNUM");
|
||||||
byte CB_FNUM = stmp.toInt();
|
uint8_t CB_FNUM = stmp.toInt();
|
||||||
stmp = WebServer->arg("CB_AREA");
|
stmp = WebServer->arg("CB_AREA");
|
||||||
byte CB_AREA = stmp.toInt();
|
uint8_t CB_AREA = stmp.toInt();
|
||||||
stmp = WebServer->arg("CB_FDEF");
|
stmp = WebServer->arg("CB_FDEF");
|
||||||
byte CB_FDEF = stmp.toInt();
|
uint8_t CB_FDEF = stmp.toInt();
|
||||||
|
|
||||||
if (CBop) {
|
if (CBop) {
|
||||||
KNX_ADD_CB( CBop, CB_FNUM, CB_AREA, CB_FDEF );
|
KNX_ADD_CB( CBop, CB_FNUM, CB_AREA, CB_FDEF );
|
||||||
|
@ -855,7 +855,7 @@ void HandleKNXConfiguration(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
stmp = WebServer->arg("btn_del_ga");
|
stmp = WebServer->arg("btn_del_ga");
|
||||||
byte GA_NUM = stmp.toInt();
|
uint8_t GA_NUM = stmp.toInt();
|
||||||
|
|
||||||
KNX_DEL_GA(GA_NUM);
|
KNX_DEL_GA(GA_NUM);
|
||||||
|
|
||||||
|
@ -864,7 +864,7 @@ void HandleKNXConfiguration(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
stmp = WebServer->arg("btn_del_cb");
|
stmp = WebServer->arg("btn_del_cb");
|
||||||
byte CB_NUM = stmp.toInt();
|
uint8_t CB_NUM = stmp.toInt();
|
||||||
|
|
||||||
KNX_DEL_CB(CB_NUM);
|
KNX_DEL_CB(CB_NUM);
|
||||||
|
|
||||||
|
@ -884,7 +884,7 @@ void HandleKNXConfiguration(void)
|
||||||
if ( Settings.flag.knx_enable_enhancement ) { page += F(" checked"); }
|
if ( Settings.flag.knx_enable_enhancement ) { page += F(" checked"); }
|
||||||
|
|
||||||
page += FPSTR(HTTP_FORM_KNX2);
|
page += FPSTR(HTTP_FORM_KNX2);
|
||||||
for (byte i = 0; i < KNX_MAX_device_param ; i++)
|
for (uint8_t i = 0; i < KNX_MAX_device_param ; i++)
|
||||||
{
|
{
|
||||||
if ( device_param[i].show )
|
if ( device_param[i].show )
|
||||||
{
|
{
|
||||||
|
@ -911,7 +911,7 @@ void HandleKNXConfiguration(void)
|
||||||
page.replace(F("btndis"), F("disabled"));
|
page.replace(F("btndis"), F("disabled"));
|
||||||
}
|
}
|
||||||
page.replace(F("fncbtnadd"), F("GAwarning"));
|
page.replace(F("fncbtnadd"), F("GAwarning"));
|
||||||
for (byte i = 0; i < Settings.knx_GA_registered ; ++i)
|
for (uint8_t i = 0; i < Settings.knx_GA_registered ; ++i)
|
||||||
{
|
{
|
||||||
if ( Settings.knx_GA_param[i] )
|
if ( Settings.knx_GA_param[i] )
|
||||||
{
|
{
|
||||||
|
@ -934,8 +934,8 @@ void HandleKNXConfiguration(void)
|
||||||
page.replace(F("GAarea"), F("CB_AREA"));
|
page.replace(F("GAarea"), F("CB_AREA"));
|
||||||
page.replace(F("GAfdef"), F("CB_FDEF"));
|
page.replace(F("GAfdef"), F("CB_FDEF"));
|
||||||
page += FPSTR(HTTP_FORM_KNX4);
|
page += FPSTR(HTTP_FORM_KNX4);
|
||||||
byte j;
|
uint8_t j;
|
||||||
for (byte i = 0; i < KNX_MAX_device_param ; i++)
|
for (uint8_t i = 0; i < KNX_MAX_device_param ; i++)
|
||||||
{
|
{
|
||||||
// Check How many Relays are available and add: RelayX and TogleRelayX
|
// Check How many Relays are available and add: RelayX and TogleRelayX
|
||||||
if ( (i > 8) && (i < 16) ) { j=i-8; } else { j=i; }
|
if ( (i > 8) && (i < 16) ) { j=i-8; } else { j=i; }
|
||||||
|
@ -959,7 +959,7 @@ void HandleKNXConfiguration(void)
|
||||||
}
|
}
|
||||||
page.replace(F("fncbtnadd"), F("CBwarning"));
|
page.replace(F("fncbtnadd"), F("CBwarning"));
|
||||||
|
|
||||||
for (byte i = 0; i < Settings.knx_CB_registered ; ++i)
|
for (uint8_t i = 0; i < Settings.knx_CB_registered ; ++i)
|
||||||
{
|
{
|
||||||
if ( Settings.knx_CB_param[i] )
|
if ( Settings.knx_CB_param[i] )
|
||||||
{
|
{
|
||||||
|
@ -1028,7 +1028,7 @@ void KNX_Save_Settings(void)
|
||||||
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_KNX "GA: %d"),
|
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_KNX "GA: %d"),
|
||||||
Settings.knx_GA_registered );
|
Settings.knx_GA_registered );
|
||||||
AddLog(LOG_LEVEL_DEBUG);
|
AddLog(LOG_LEVEL_DEBUG);
|
||||||
for (byte i = 0; i < Settings.knx_GA_registered ; ++i)
|
for (uint8_t i = 0; i < Settings.knx_GA_registered ; ++i)
|
||||||
{
|
{
|
||||||
KNX_addr.value = Settings.knx_GA_addr[i];
|
KNX_addr.value = Settings.knx_GA_addr[i];
|
||||||
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_KNX "GA #%d: %s " D_TO " %d/%d/%d"),
|
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_KNX "GA #%d: %s " D_TO " %d/%d/%d"),
|
||||||
|
@ -1040,7 +1040,7 @@ void KNX_Save_Settings(void)
|
||||||
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_KNX "CB: %d"),
|
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_KNX "CB: %d"),
|
||||||
Settings.knx_CB_registered );
|
Settings.knx_CB_registered );
|
||||||
AddLog(LOG_LEVEL_DEBUG);
|
AddLog(LOG_LEVEL_DEBUG);
|
||||||
for (byte i = 0; i < Settings.knx_CB_registered ; ++i)
|
for (uint8_t i = 0; i < Settings.knx_CB_registered ; ++i)
|
||||||
{
|
{
|
||||||
KNX_addr.value = Settings.knx_CB_addr[i];
|
KNX_addr.value = Settings.knx_CB_addr[i];
|
||||||
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_KNX "CB #%d: %d/%d/%d " D_TO " %s"),
|
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_KNX "CB #%d: %d/%d/%d " D_TO " %s"),
|
||||||
|
@ -1055,7 +1055,7 @@ void KNX_Save_Settings(void)
|
||||||
#endif // USE_WEBSERVER
|
#endif // USE_WEBSERVER
|
||||||
|
|
||||||
|
|
||||||
boolean KnxCommand(void)
|
bool KnxCommand(void)
|
||||||
{
|
{
|
||||||
char command[CMDSZ];
|
char command[CMDSZ];
|
||||||
uint8_t index = XdrvMailbox.index;
|
uint8_t index = XdrvMailbox.index;
|
||||||
|
@ -1068,7 +1068,7 @@ boolean KnxCommand(void)
|
||||||
// XdrvMailbox.payload <- data to send
|
// XdrvMailbox.payload <- data to send
|
||||||
if (!(Settings.flag.knx_enabled)) { return false; }
|
if (!(Settings.flag.knx_enabled)) { return false; }
|
||||||
// Search all the registered GA that has that output (variable: KNX SLOTx) as parameter
|
// Search all the registered GA that has that output (variable: KNX SLOTx) as parameter
|
||||||
byte i = KNX_GA_Search(index + KNX_SLOT1 -1);
|
uint8_t i = KNX_GA_Search(index + KNX_SLOT1 -1);
|
||||||
while ( i != KNX_Empty ) {
|
while ( i != KNX_Empty ) {
|
||||||
KNX_addr.value = Settings.knx_GA_addr[i];
|
KNX_addr.value = Settings.knx_GA_addr[i];
|
||||||
knx.write_1bit(KNX_addr, !(XdrvMailbox.payload == 0));
|
knx.write_1bit(KNX_addr, !(XdrvMailbox.payload == 0));
|
||||||
|
@ -1093,7 +1093,7 @@ boolean KnxCommand(void)
|
||||||
// XdrvMailbox.payload <- data to send
|
// XdrvMailbox.payload <- data to send
|
||||||
if (!(Settings.flag.knx_enabled)) { return false; }
|
if (!(Settings.flag.knx_enabled)) { return false; }
|
||||||
// Search all the registered GA that has that output (variable: KNX SLOTx) as parameter
|
// Search all the registered GA that has that output (variable: KNX SLOTx) as parameter
|
||||||
byte i = KNX_GA_Search(index + KNX_SLOT1 -1);
|
uint8_t i = KNX_GA_Search(index + KNX_SLOT1 -1);
|
||||||
while ( i != KNX_Empty ) {
|
while ( i != KNX_Empty ) {
|
||||||
KNX_addr.value = Settings.knx_GA_addr[i];
|
KNX_addr.value = Settings.knx_GA_addr[i];
|
||||||
|
|
||||||
|
@ -1288,9 +1288,9 @@ boolean KnxCommand(void)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xdrv11(byte function)
|
bool Xdrv11(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
switch (function) {
|
switch (function) {
|
||||||
case FUNC_PRE_INIT:
|
case FUNC_PRE_INIT:
|
||||||
KNX_INIT();
|
KNX_INIT();
|
||||||
|
|
|
@ -250,7 +250,7 @@ void HAssAnnounceRelayLight(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAssAnnounceButtonSwitch(byte device, char* topic, byte present, byte key, byte toggle)
|
void HAssAnnounceButtonSwitch(uint8_t device, char* topic, uint8_t present, uint8_t key, uint8_t toggle)
|
||||||
{
|
{
|
||||||
// key 0 = button
|
// key 0 = button
|
||||||
// key 1 = switch
|
// key 1 = switch
|
||||||
|
@ -306,9 +306,9 @@ void HAssAnnounceSwitches(void)
|
||||||
char *tmp = Settings.switch_topic;
|
char *tmp = Settings.switch_topic;
|
||||||
Format(sw_topic, tmp, sizeof(sw_topic));
|
Format(sw_topic, tmp, sizeof(sw_topic));
|
||||||
if ((strlen(sw_topic) != 0) && strcmp(sw_topic, "0")) {
|
if ((strlen(sw_topic) != 0) && strcmp(sw_topic, "0")) {
|
||||||
for (byte switch_index = 0; switch_index < MAX_SWITCHES; switch_index++) {
|
for (uint8_t switch_index = 0; switch_index < MAX_SWITCHES; switch_index++) {
|
||||||
byte switch_present = 0;
|
uint8_t switch_present = 0;
|
||||||
byte toggle = 1;
|
uint8_t toggle = 1;
|
||||||
|
|
||||||
if (pin[GPIO_SWT1 + switch_index] < 99) {
|
if (pin[GPIO_SWT1 + switch_index] < 99) {
|
||||||
switch_present = 1;
|
switch_present = 1;
|
||||||
|
@ -335,9 +335,9 @@ void HAssAnnounceButtons(void)
|
||||||
char *tmp = Settings.button_topic;
|
char *tmp = Settings.button_topic;
|
||||||
Format(key_topic, tmp, sizeof(key_topic));
|
Format(key_topic, tmp, sizeof(key_topic));
|
||||||
if ((strlen(key_topic) != 0) && strcmp(key_topic, "0")) {
|
if ((strlen(key_topic) != 0) && strcmp(key_topic, "0")) {
|
||||||
for (byte button_index = 0; button_index < MAX_KEYS; button_index++) {
|
for (uint8_t button_index = 0; button_index < MAX_KEYS; button_index++) {
|
||||||
byte button_present = 0;
|
uint8_t button_present = 0;
|
||||||
byte toggle = 1;
|
uint8_t toggle = 1;
|
||||||
|
|
||||||
if (!button_index && ((SONOFF_DUAL == Settings.module) || (CH4 == Settings.module))) {
|
if (!button_index && ((SONOFF_DUAL == Settings.module) || (CH4 == Settings.module))) {
|
||||||
button_present = 1;
|
button_present = 1;
|
||||||
|
@ -509,9 +509,9 @@ void HAssDiscover(void)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xdrv12(byte function)
|
bool Xdrv12(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (Settings.flag.mqtt_enabled) {
|
if (Settings.flag.mqtt_enabled) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -495,7 +495,7 @@ void DisplayText(void)
|
||||||
void DisplayClearScreenBuffer(void)
|
void DisplayClearScreenBuffer(void)
|
||||||
{
|
{
|
||||||
if (disp_screen_buffer_cols) {
|
if (disp_screen_buffer_cols) {
|
||||||
for (byte i = 0; i < disp_screen_buffer_rows; i++) {
|
for (uint8_t i = 0; i < disp_screen_buffer_rows; i++) {
|
||||||
memset(disp_screen_buffer[i], 0, disp_screen_buffer_cols);
|
memset(disp_screen_buffer[i], 0, disp_screen_buffer_cols);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -504,7 +504,7 @@ void DisplayClearScreenBuffer(void)
|
||||||
void DisplayFreeScreenBuffer(void)
|
void DisplayFreeScreenBuffer(void)
|
||||||
{
|
{
|
||||||
if (disp_screen_buffer != NULL) {
|
if (disp_screen_buffer != NULL) {
|
||||||
for (byte i = 0; i < disp_screen_buffer_rows; i++) {
|
for (uint8_t i = 0; i < disp_screen_buffer_rows; i++) {
|
||||||
if (disp_screen_buffer[i] != NULL) { free(disp_screen_buffer[i]); }
|
if (disp_screen_buffer[i] != NULL) { free(disp_screen_buffer[i]); }
|
||||||
}
|
}
|
||||||
free(disp_screen_buffer);
|
free(disp_screen_buffer);
|
||||||
|
@ -519,7 +519,7 @@ void DisplayAllocScreenBuffer(void)
|
||||||
disp_screen_buffer_rows = Settings.display_rows;
|
disp_screen_buffer_rows = Settings.display_rows;
|
||||||
disp_screen_buffer = (char**)malloc(sizeof(*disp_screen_buffer) * disp_screen_buffer_rows);
|
disp_screen_buffer = (char**)malloc(sizeof(*disp_screen_buffer) * disp_screen_buffer_rows);
|
||||||
if (disp_screen_buffer != NULL) {
|
if (disp_screen_buffer != NULL) {
|
||||||
for (byte i = 0; i < disp_screen_buffer_rows; i++) {
|
for (uint8_t i = 0; i < disp_screen_buffer_rows; i++) {
|
||||||
disp_screen_buffer[i] = (char*)malloc(sizeof(*disp_screen_buffer[i]) * (Settings.display_cols[0] +1));
|
disp_screen_buffer[i] = (char*)malloc(sizeof(*disp_screen_buffer[i]) * (Settings.display_cols[0] +1));
|
||||||
if (disp_screen_buffer[i] == NULL) {
|
if (disp_screen_buffer[i] == NULL) {
|
||||||
DisplayFreeScreenBuffer();
|
DisplayFreeScreenBuffer();
|
||||||
|
@ -542,7 +542,7 @@ void DisplayReAllocScreenBuffer(void)
|
||||||
|
|
||||||
void DisplayFillScreen(uint8_t line)
|
void DisplayFillScreen(uint8_t line)
|
||||||
{
|
{
|
||||||
byte len = disp_screen_buffer_cols - strlen(disp_screen_buffer[line]);
|
uint8_t len = disp_screen_buffer_cols - strlen(disp_screen_buffer[line]);
|
||||||
if (len) {
|
if (len) {
|
||||||
memset(disp_screen_buffer[line] + strlen(disp_screen_buffer[line]), 0x20, len);
|
memset(disp_screen_buffer[line] + strlen(disp_screen_buffer[line]), 0x20, len);
|
||||||
disp_screen_buffer[line][disp_screen_buffer_cols -1] = 0;
|
disp_screen_buffer[line][disp_screen_buffer_cols -1] = 0;
|
||||||
|
@ -554,7 +554,7 @@ void DisplayFillScreen(uint8_t line)
|
||||||
void DisplayClearLogBuffer(void)
|
void DisplayClearLogBuffer(void)
|
||||||
{
|
{
|
||||||
if (disp_log_buffer_cols) {
|
if (disp_log_buffer_cols) {
|
||||||
for (byte i = 0; i < DISPLAY_LOG_ROWS; i++) {
|
for (uint8_t i = 0; i < DISPLAY_LOG_ROWS; i++) {
|
||||||
memset(disp_log_buffer[i], 0, disp_log_buffer_cols);
|
memset(disp_log_buffer[i], 0, disp_log_buffer_cols);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -563,7 +563,7 @@ void DisplayClearLogBuffer(void)
|
||||||
void DisplayFreeLogBuffer(void)
|
void DisplayFreeLogBuffer(void)
|
||||||
{
|
{
|
||||||
if (disp_log_buffer != NULL) {
|
if (disp_log_buffer != NULL) {
|
||||||
for (byte i = 0; i < DISPLAY_LOG_ROWS; i++) {
|
for (uint8_t i = 0; i < DISPLAY_LOG_ROWS; i++) {
|
||||||
if (disp_log_buffer[i] != NULL) { free(disp_log_buffer[i]); }
|
if (disp_log_buffer[i] != NULL) { free(disp_log_buffer[i]); }
|
||||||
}
|
}
|
||||||
free(disp_log_buffer);
|
free(disp_log_buffer);
|
||||||
|
@ -576,7 +576,7 @@ void DisplayAllocLogBuffer(void)
|
||||||
if (!disp_log_buffer_cols) {
|
if (!disp_log_buffer_cols) {
|
||||||
disp_log_buffer = (char**)malloc(sizeof(*disp_log_buffer) * DISPLAY_LOG_ROWS);
|
disp_log_buffer = (char**)malloc(sizeof(*disp_log_buffer) * DISPLAY_LOG_ROWS);
|
||||||
if (disp_log_buffer != NULL) {
|
if (disp_log_buffer != NULL) {
|
||||||
for (byte i = 0; i < DISPLAY_LOG_ROWS; i++) {
|
for (uint8_t i = 0; i < DISPLAY_LOG_ROWS; i++) {
|
||||||
disp_log_buffer[i] = (char*)malloc(sizeof(*disp_log_buffer[i]) * (Settings.display_cols[0] +1));
|
disp_log_buffer[i] = (char*)malloc(sizeof(*disp_log_buffer[i]) * (Settings.display_cols[0] +1));
|
||||||
if (disp_log_buffer[i] == NULL) {
|
if (disp_log_buffer[i] == NULL) {
|
||||||
DisplayFreeLogBuffer();
|
DisplayFreeLogBuffer();
|
||||||
|
@ -845,7 +845,7 @@ void DisplayMqttSubscribe(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean DisplayMqttData(void)
|
bool DisplayMqttData(void)
|
||||||
{
|
{
|
||||||
if (disp_subscribed) {
|
if (disp_subscribed) {
|
||||||
char stopic[TOPSZ];
|
char stopic[TOPSZ];
|
||||||
|
@ -908,10 +908,10 @@ void DisplaySetPower(void)
|
||||||
* Commands
|
* Commands
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean DisplayCommand(void)
|
bool DisplayCommand(void)
|
||||||
{
|
{
|
||||||
char command [CMDSZ];
|
char command [CMDSZ];
|
||||||
boolean serviced = true;
|
bool serviced = true;
|
||||||
uint8_t disp_len = strlen(D_CMND_DISPLAY); // Prep for string length change
|
uint8_t disp_len = strlen(D_CMND_DISPLAY); // Prep for string length change
|
||||||
|
|
||||||
if (!strncasecmp_P(XdrvMailbox.topic, PSTR(D_CMND_DISPLAY), disp_len)) { // Prefix
|
if (!strncasecmp_P(XdrvMailbox.topic, PSTR(D_CMND_DISPLAY), disp_len)) { // Prefix
|
||||||
|
@ -1076,9 +1076,9 @@ boolean DisplayCommand(void)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xdrv13(byte function)
|
bool Xdrv13(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if ((i2c_flg || spi_flg || soft_spi_flg) && XdspPresent()) {
|
if ((i2c_flg || spi_flg || soft_spi_flg) && XdspPresent()) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -178,9 +178,9 @@ void MP3_CMD(uint8_t mp3cmd,uint16_t val) {
|
||||||
* check the MP3 commands
|
* check the MP3 commands
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean MP3PlayerCmd(void) {
|
bool MP3PlayerCmd(void) {
|
||||||
char command[CMDSZ];
|
char command[CMDSZ];
|
||||||
boolean serviced = true;
|
bool serviced = true;
|
||||||
uint8_t disp_len = strlen(D_CMND_MP3);
|
uint8_t disp_len = strlen(D_CMND_MP3);
|
||||||
|
|
||||||
if (!strncasecmp_P(XdrvMailbox.topic, PSTR(D_CMND_MP3), disp_len)) { // prefix
|
if (!strncasecmp_P(XdrvMailbox.topic, PSTR(D_CMND_MP3), disp_len)) { // prefix
|
||||||
|
@ -226,9 +226,9 @@ boolean MP3PlayerCmd(void) {
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xdrv14(byte function)
|
bool Xdrv14(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (pin[GPIO_MP3_DFR562] < 99) {
|
if (pin[GPIO_MP3_DFR562] < 99) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -103,8 +103,8 @@ void PCA9685_SetPWM(uint8_t pin, uint16_t pwm, bool inverted) {
|
||||||
|
|
||||||
bool PCA9685_Command(void)
|
bool PCA9685_Command(void)
|
||||||
{
|
{
|
||||||
boolean serviced = true;
|
bool serviced = true;
|
||||||
boolean validpin = false;
|
bool validpin = false;
|
||||||
uint8_t paramcount = 0;
|
uint8_t paramcount = 0;
|
||||||
if (XdrvMailbox.data_len > 0) {
|
if (XdrvMailbox.data_len > 0) {
|
||||||
paramcount=1;
|
paramcount=1;
|
||||||
|
@ -178,9 +178,9 @@ void PCA9685_OutputTelemetry(bool telemetry) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean Xdrv15(byte function)
|
bool Xdrv15(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (i2c_flg) {
|
if (i2c_flg) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -47,7 +47,7 @@
|
||||||
TasmotaSerial *TuyaSerial = nullptr;
|
TasmotaSerial *TuyaSerial = nullptr;
|
||||||
|
|
||||||
uint8_t tuya_new_dim = 0; // Tuya dimmer value temp
|
uint8_t tuya_new_dim = 0; // Tuya dimmer value temp
|
||||||
boolean tuya_ignore_dim = false; // Flag to skip serial send to prevent looping when processing inbound states from the faceplate interaction
|
bool tuya_ignore_dim = false; // Flag to skip serial send to prevent looping when processing inbound states from the faceplate interaction
|
||||||
uint8_t tuya_cmd_status = 0; // Current status of serial-read
|
uint8_t tuya_cmd_status = 0; // Current status of serial-read
|
||||||
uint8_t tuya_cmd_checksum = 0; // Checksum of tuya command
|
uint8_t tuya_cmd_checksum = 0; // Checksum of tuya command
|
||||||
uint8_t tuya_data_len = 0; // Data lenght of command
|
uint8_t tuya_data_len = 0; // Data lenght of command
|
||||||
|
@ -106,17 +106,17 @@ void TuyaSendState(uint8_t id, uint8_t type, uint8_t* value){
|
||||||
TuyaSendCmd(TUYA_CMD_SET_DP, payload_buffer, payload_len);
|
TuyaSendCmd(TUYA_CMD_SET_DP, payload_buffer, payload_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TuyaSendBool(uint8_t id, boolean value){
|
void TuyaSendBool(uint8_t id, bool value){
|
||||||
TuyaSendState(id, TUYA_TYPE_BOOL, &value);
|
TuyaSendState(id, TUYA_TYPE_BOOL, (uint8_t*)&value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TuyaSendValue(uint8_t id, uint32_t value){
|
void TuyaSendValue(uint8_t id, uint32_t value){
|
||||||
TuyaSendState(id, TUYA_TYPE_VALUE, (uint8_t*)(&value));
|
TuyaSendState(id, TUYA_TYPE_VALUE, (uint8_t*)(&value));
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean TuyaSetPower(void)
|
bool TuyaSetPower(void)
|
||||||
{
|
{
|
||||||
boolean status = false;
|
bool status = false;
|
||||||
|
|
||||||
uint8_t rpower = XdrvMailbox.index;
|
uint8_t rpower = XdrvMailbox.index;
|
||||||
int16_t source = XdrvMailbox.payload;
|
int16_t source = XdrvMailbox.payload;
|
||||||
|
@ -133,7 +133,7 @@ boolean TuyaSetPower(void)
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean TuyaSetChannels(void)
|
bool TuyaSetChannels(void)
|
||||||
{
|
{
|
||||||
LightSerialDuty(((uint8_t*)XdrvMailbox.data)[0]);
|
LightSerialDuty(((uint8_t*)XdrvMailbox.data)[0]);
|
||||||
return true;
|
return true;
|
||||||
|
@ -246,9 +246,9 @@ void TuyaPacketProcess(void)
|
||||||
if (tuya_buffer[5] == 2) {
|
if (tuya_buffer[5] == 2) {
|
||||||
uint8_t led1_gpio = tuya_buffer[6];
|
uint8_t led1_gpio = tuya_buffer[6];
|
||||||
uint8_t key1_gpio = tuya_buffer[7];
|
uint8_t key1_gpio = tuya_buffer[7];
|
||||||
boolean key1_set = false;
|
bool key1_set = false;
|
||||||
boolean led1_set = false;
|
bool led1_set = false;
|
||||||
for (byte i = 0; i < sizeof(Settings.my_gp); i++) {
|
for (uint8_t i = 0; i < sizeof(Settings.my_gp); i++) {
|
||||||
if (Settings.my_gp.io[i] == GPIO_LED1) led1_set = true;
|
if (Settings.my_gp.io[i] == GPIO_LED1) led1_set = true;
|
||||||
else if (Settings.my_gp.io[i] == GPIO_KEY1) key1_set = true;
|
else if (Settings.my_gp.io[i] == GPIO_KEY1) key1_set = true;
|
||||||
}
|
}
|
||||||
|
@ -273,7 +273,7 @@ void TuyaPacketProcess(void)
|
||||||
* API Functions
|
* API Functions
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean TuyaModuleSelected(void)
|
bool TuyaModuleSelected(void)
|
||||||
{
|
{
|
||||||
if (!(pin[GPIO_TUYA_RX] < 99) || !(pin[GPIO_TUYA_TX] < 99)) { // fallback to hardware-serial if not explicitly selected
|
if (!(pin[GPIO_TUYA_RX] < 99) || !(pin[GPIO_TUYA_TX] < 99)) { // fallback to hardware-serial if not explicitly selected
|
||||||
pin[GPIO_TUYA_TX] = 1;
|
pin[GPIO_TUYA_TX] = 1;
|
||||||
|
@ -309,7 +309,7 @@ void TuyaSerialInput(void)
|
||||||
{
|
{
|
||||||
while (TuyaSerial->available()) {
|
while (TuyaSerial->available()) {
|
||||||
yield();
|
yield();
|
||||||
byte serial_in_byte = TuyaSerial->read();
|
uint8_t serial_in_byte = TuyaSerial->read();
|
||||||
|
|
||||||
if (serial_in_byte == 0x55) { // Start TUYA Packet
|
if (serial_in_byte == 0x55) { // Start TUYA Packet
|
||||||
tuya_cmd_status = 1;
|
tuya_cmd_status = 1;
|
||||||
|
@ -361,7 +361,7 @@ void TuyaSerialInput(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
boolean TuyaButtonPressed(void)
|
bool TuyaButtonPressed(void)
|
||||||
{
|
{
|
||||||
if (!XdrvMailbox.index && ((PRESSED == XdrvMailbox.payload) && (NOT_PRESSED == lastbutton[XdrvMailbox.index]))) {
|
if (!XdrvMailbox.index && ((PRESSED == XdrvMailbox.payload) && (NOT_PRESSED == lastbutton[XdrvMailbox.index]))) {
|
||||||
snprintf_P(log_data, sizeof(log_data), PSTR("TYA: Reset GPIO triggered"));
|
snprintf_P(log_data, sizeof(log_data), PSTR("TYA: Reset GPIO triggered"));
|
||||||
|
@ -398,9 +398,9 @@ void TuyaSetWifiLed(void){
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xdrv16(byte function)
|
bool Xdrv16(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (TUYA_DIMMER == Settings.module) {
|
if (TUYA_DIMMER == Settings.module) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -88,10 +88,10 @@ void RfInit(void)
|
||||||
* Commands
|
* Commands
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean RfSendCommand(void)
|
bool RfSendCommand(void)
|
||||||
{
|
{
|
||||||
boolean serviced = true;
|
bool serviced = true;
|
||||||
boolean error = false;
|
bool error = false;
|
||||||
|
|
||||||
if (!strcasecmp_P(XdrvMailbox.topic, PSTR(D_CMND_RFSEND))) {
|
if (!strcasecmp_P(XdrvMailbox.topic, PSTR(D_CMND_RFSEND))) {
|
||||||
if (XdrvMailbox.data_len) {
|
if (XdrvMailbox.data_len) {
|
||||||
|
@ -116,7 +116,7 @@ boolean RfSendCommand(void)
|
||||||
} else {
|
} else {
|
||||||
// RFsend data, bits, protocol, repeat, pulse
|
// RFsend data, bits, protocol, repeat, pulse
|
||||||
char *p;
|
char *p;
|
||||||
byte i = 0;
|
uint8_t i = 0;
|
||||||
for (char *str = strtok_r(XdrvMailbox.data, ", ", &p); str && i < 5; str = strtok_r(NULL, ", ", &p)) {
|
for (char *str = strtok_r(XdrvMailbox.data, ", ", &p); str && i < 5; str = strtok_r(NULL, ", ", &p)) {
|
||||||
switch (i++) {
|
switch (i++) {
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -166,9 +166,9 @@ boolean RfSendCommand(void)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xdrv17(byte function)
|
bool Xdrv17(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if ((pin[GPIO_RFSEND] < 99) || (pin[GPIO_RFRECV] < 99)) {
|
if ((pin[GPIO_RFSEND] < 99) || (pin[GPIO_RFRECV] < 99)) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
|
|
||||||
TasmotaSerial *ArmtronixSerial = nullptr;
|
TasmotaSerial *ArmtronixSerial = nullptr;
|
||||||
|
|
||||||
boolean armtronix_ignore_dim = false; // Flag to skip serial send to prevent looping when processing inbound states from the faceplate interaction
|
bool armtronix_ignore_dim = false; // Flag to skip serial send to prevent looping when processing inbound states from the faceplate interaction
|
||||||
int8_t armtronix_wifi_state = -2; // Keep MCU wifi-status in sync with WifiState()
|
int8_t armtronix_wifi_state = -2; // Keep MCU wifi-status in sync with WifiState()
|
||||||
int8_t armtronix_dimState[2]; // Dimmer state values.
|
int8_t armtronix_dimState[2]; // Dimmer state values.
|
||||||
int8_t armtronix_knobState[2]; // Dimmer state values.
|
int8_t armtronix_knobState[2]; // Dimmer state values.
|
||||||
|
@ -40,7 +40,7 @@ int8_t armtronix_knobState[2]; // Dimmer state values.
|
||||||
* Internal Functions
|
* Internal Functions
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean ArmtronixSetChannels(void)
|
bool ArmtronixSetChannels(void)
|
||||||
{
|
{
|
||||||
LightSerial2Duty(((uint8_t*)XdrvMailbox.data)[0], ((uint8_t*)XdrvMailbox.data)[1]);
|
LightSerial2Duty(((uint8_t*)XdrvMailbox.data)[0], ((uint8_t*)XdrvMailbox.data)[1]);
|
||||||
return true;
|
return true;
|
||||||
|
@ -84,7 +84,7 @@ void ArmtronixRequestState(void)
|
||||||
* API Functions
|
* API Functions
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean ArmtronixModuleSelected(void)
|
bool ArmtronixModuleSelected(void)
|
||||||
{
|
{
|
||||||
light_type = LT_SERIAL2;
|
light_type = LT_SERIAL2;
|
||||||
return true;
|
return true;
|
||||||
|
@ -169,9 +169,9 @@ void ArmtronixSetWifiLed(void)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xdrv18(byte function)
|
bool Xdrv18(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (ARMTRONIX_DIMMERS == Settings.module) {
|
if (ARMTRONIX_DIMMERS == Settings.module) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
|
|
||||||
TasmotaSerial *PS16DZSerial = nullptr;
|
TasmotaSerial *PS16DZSerial = nullptr;
|
||||||
|
|
||||||
boolean ps16dz_ignore_dim = false; // Flag to skip serial send to prevent looping when processing inbound states from the faceplate interaction
|
bool ps16dz_ignore_dim = false; // Flag to skip serial send to prevent looping when processing inbound states from the faceplate interaction
|
||||||
|
|
||||||
//uint64_t ps16dz_seq = 0;
|
//uint64_t ps16dz_seq = 0;
|
||||||
|
|
||||||
|
@ -75,9 +75,9 @@ void PS16DZSendCommand(char type = 0, uint8_t value = 0)
|
||||||
PS16DZSerial->flush();
|
PS16DZSerial->flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean PS16DZSetPower(void)
|
bool PS16DZSetPower(void)
|
||||||
{
|
{
|
||||||
boolean status = false;
|
bool status = false;
|
||||||
|
|
||||||
uint8_t rpower = XdrvMailbox.index;
|
uint8_t rpower = XdrvMailbox.index;
|
||||||
int16_t source = XdrvMailbox.payload;
|
int16_t source = XdrvMailbox.payload;
|
||||||
|
@ -91,7 +91,7 @@ boolean PS16DZSetPower(void)
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean PS16DZSetChannels(void)
|
bool PS16DZSetChannels(void)
|
||||||
{
|
{
|
||||||
PS16DZSerialDuty(((uint8_t*)XdrvMailbox.data)[0]);
|
PS16DZSerialDuty(((uint8_t*)XdrvMailbox.data)[0]);
|
||||||
return true;
|
return true;
|
||||||
|
@ -128,7 +128,7 @@ void PS16DZResetWifi(void)
|
||||||
* API Functions
|
* API Functions
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean PS16DZModuleSelected(void)
|
bool PS16DZModuleSelected(void)
|
||||||
{
|
{
|
||||||
light_type = LT_SERIAL1;
|
light_type = LT_SERIAL1;
|
||||||
return true;
|
return true;
|
||||||
|
@ -153,7 +153,7 @@ void PS16DZSerialInput(void)
|
||||||
char scmnd[20];
|
char scmnd[20];
|
||||||
while (PS16DZSerial->available()) {
|
while (PS16DZSerial->available()) {
|
||||||
yield();
|
yield();
|
||||||
byte serial_in_byte = PS16DZSerial->read();
|
uint8_t serial_in_byte = PS16DZSerial->read();
|
||||||
if (serial_in_byte != 0x1B){
|
if (serial_in_byte != 0x1B){
|
||||||
if (ps16dz_byte_counter >= PS16DZ_BUFFER_SIZE - 1) {
|
if (ps16dz_byte_counter >= PS16DZ_BUFFER_SIZE - 1) {
|
||||||
memset(ps16dz_rx_buffer, 0, PS16DZ_BUFFER_SIZE);
|
memset(ps16dz_rx_buffer, 0, PS16DZ_BUFFER_SIZE);
|
||||||
|
@ -176,7 +176,7 @@ void PS16DZSerialInput(void)
|
||||||
char* token2 = strtok_r(token, ":", &end_token);
|
char* token2 = strtok_r(token, ":", &end_token);
|
||||||
char* token3 = strtok_r(NULL, ":", &end_token);
|
char* token3 = strtok_r(NULL, ":", &end_token);
|
||||||
if(!strncmp(token2, "\"switch\"", 8)){
|
if(!strncmp(token2, "\"switch\"", 8)){
|
||||||
boolean ps16dz_power = !strncmp(token3, "\"on\"", 4)?true:false;
|
bool ps16dz_power = !strncmp(token3, "\"on\"", 4)?true:false;
|
||||||
snprintf_P(log_data, sizeof(log_data), PSTR("PSZ: power received: %s"), token3);
|
snprintf_P(log_data, sizeof(log_data), PSTR("PSZ: power received: %s"), token3);
|
||||||
AddLog(LOG_LEVEL_DEBUG);
|
AddLog(LOG_LEVEL_DEBUG);
|
||||||
if((power || Settings.light_dimmer > 0) && (power !=ps16dz_power)) {
|
if((power || Settings.light_dimmer > 0) && (power !=ps16dz_power)) {
|
||||||
|
@ -225,9 +225,9 @@ void PS16DZSerialInput(void)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xdrv19(byte function)
|
bool Xdrv19(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (PS_16_DZ == Settings.module) {
|
if (PS_16_DZ == Settings.module) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -71,7 +71,7 @@ uint8_t CPU_show_freemem = 0;
|
||||||
/*******************************************************************************************/
|
/*******************************************************************************************/
|
||||||
|
|
||||||
#ifdef DEBUG_THEO
|
#ifdef DEBUG_THEO
|
||||||
void ExceptionTest(byte type)
|
void ExceptionTest(uint8_t type)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
Exception (28):
|
Exception (28):
|
||||||
|
@ -334,11 +334,11 @@ void DebugCfgPeek(char* parms)
|
||||||
uint32_t data32 = (buffer[address +3] << 24) + (buffer[address +2] << 16) + data16;
|
uint32_t data32 = (buffer[address +3] << 24) + (buffer[address +2] << 16) + data16;
|
||||||
|
|
||||||
snprintf_P(log_data, sizeof(log_data), PSTR("%03X:"), address);
|
snprintf_P(log_data, sizeof(log_data), PSTR("%03X:"), address);
|
||||||
for (byte i = 0; i < 4; i++) {
|
for (uint8_t i = 0; i < 4; i++) {
|
||||||
snprintf_P(log_data, sizeof(log_data), PSTR("%s %02X"), log_data, buffer[address +i]);
|
snprintf_P(log_data, sizeof(log_data), PSTR("%s %02X"), log_data, buffer[address +i]);
|
||||||
}
|
}
|
||||||
snprintf_P(log_data, sizeof(log_data), PSTR("%s |"), log_data);
|
snprintf_P(log_data, sizeof(log_data), PSTR("%s |"), log_data);
|
||||||
for (byte i = 0; i < 4; i++) {
|
for (uint8_t i = 0; i < 4; i++) {
|
||||||
snprintf_P(log_data, sizeof(log_data), PSTR("%s%c"), log_data, ((buffer[address +i] > 0x20) && (buffer[address +i] < 0x7F)) ? (char)buffer[address +i] : ' ');
|
snprintf_P(log_data, sizeof(log_data), PSTR("%s%c"), log_data, ((buffer[address +i] > 0x20) && (buffer[address +i] < 0x7F)) ? (char)buffer[address +i] : ' ');
|
||||||
}
|
}
|
||||||
snprintf_P(log_data, sizeof(log_data), PSTR("%s| 0x%02X (%d), 0x%04X (%d), 0x%0LX (%lu)"), log_data, data8, data8, data16, data16, data32, data32);
|
snprintf_P(log_data, sizeof(log_data), PSTR("%s| 0x%02X (%d), 0x%04X (%d), 0x%0LX (%lu)"), log_data, data8, data8, data16, data16, data32, data32);
|
||||||
|
@ -359,7 +359,7 @@ void DebugCfgPoke(char* parms)
|
||||||
uint32_t data32 = (buffer[address +3] << 24) + (buffer[address +2] << 16) + (buffer[address +1] << 8) + buffer[address];
|
uint32_t data32 = (buffer[address +3] << 24) + (buffer[address +2] << 16) + (buffer[address +1] << 8) + buffer[address];
|
||||||
|
|
||||||
uint8_t *nbuffer = (uint8_t *) &data;
|
uint8_t *nbuffer = (uint8_t *) &data;
|
||||||
for (byte i = 0; i < 4; i++) { buffer[address +i] = nbuffer[+i]; }
|
for (uint8_t i = 0; i < 4; i++) { buffer[address +i] = nbuffer[+i]; }
|
||||||
|
|
||||||
uint32_t ndata32 = (buffer[address +3] << 24) + (buffer[address +2] << 16) + (buffer[address +1] << 8) + buffer[address];
|
uint32_t ndata32 = (buffer[address +3] << 24) + (buffer[address +2] << 16) + (buffer[address +1] << 8) + buffer[address];
|
||||||
|
|
||||||
|
@ -433,10 +433,10 @@ void SetFlashMode(uint8_t mode)
|
||||||
|
|
||||||
/*******************************************************************************************/
|
/*******************************************************************************************/
|
||||||
|
|
||||||
boolean DebugCommand(void)
|
bool DebugCommand(void)
|
||||||
{
|
{
|
||||||
char command[CMDSZ];
|
char command[CMDSZ];
|
||||||
boolean serviced = true;
|
bool serviced = true;
|
||||||
|
|
||||||
int command_code = GetCommandCode(command, sizeof(command), XdrvMailbox.topic, kDebugCommands);
|
int command_code = GetCommandCode(command, sizeof(command), XdrvMailbox.topic, kDebugCommands);
|
||||||
if (-1 == command_code) {
|
if (-1 == command_code) {
|
||||||
|
@ -516,9 +516,9 @@ boolean DebugCommand(void)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xdrv99(byte function)
|
bool Xdrv99(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
switch (function) {
|
switch (function) {
|
||||||
case FUNC_PRE_INIT:
|
case FUNC_PRE_INIT:
|
||||||
|
|
|
@ -18,9 +18,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef XFUNC_PTR_IN_ROM
|
#ifdef XFUNC_PTR_IN_ROM
|
||||||
boolean (* const xdrv_func_ptr[])(byte) PROGMEM = { // Driver Function Pointers
|
bool (* const xdrv_func_ptr[])(uint8_t) PROGMEM = { // Driver Function Pointers
|
||||||
#else
|
#else
|
||||||
boolean (* const xdrv_func_ptr[])(byte) = { // Driver Function Pointers
|
bool (* const xdrv_func_ptr[])(uint8_t) = { // Driver Function Pointers
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef XDRV_01
|
#ifdef XDRV_01
|
||||||
|
@ -192,7 +192,7 @@ boolean (* const xdrv_func_ptr[])(byte) = { // Driver Function Pointers
|
||||||
|
|
||||||
const uint8_t xdrv_present = sizeof(xdrv_func_ptr) / sizeof(xdrv_func_ptr[0]); // Number of drivers found
|
const uint8_t xdrv_present = sizeof(xdrv_func_ptr) / sizeof(xdrv_func_ptr[0]); // Number of drivers found
|
||||||
|
|
||||||
boolean XdrvCommand(uint8_t grpflg, char *type, uint16_t index, char *dataBuf, uint16_t data_len, int16_t payload, uint16_t payload16)
|
bool XdrvCommand(bool grpflg, char *type, uint16_t index, char *dataBuf, uint16_t data_len, int16_t payload, uint16_t payload16)
|
||||||
{
|
{
|
||||||
// XdrvMailbox.valid = 1;
|
// XdrvMailbox.valid = 1;
|
||||||
XdrvMailbox.index = index;
|
XdrvMailbox.index = index;
|
||||||
|
@ -206,7 +206,7 @@ boolean XdrvCommand(uint8_t grpflg, char *type, uint16_t index, char *dataBuf, u
|
||||||
return XdrvCall(FUNC_COMMAND);
|
return XdrvCall(FUNC_COMMAND);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean XdrvMqttData(char *topicBuf, uint16_t stopicBuf, char *dataBuf, uint16_t sdataBuf)
|
bool XdrvMqttData(char *topicBuf, uint16_t stopicBuf, char *dataBuf, uint16_t sdataBuf)
|
||||||
{
|
{
|
||||||
XdrvMailbox.index = stopicBuf;
|
XdrvMailbox.index = stopicBuf;
|
||||||
XdrvMailbox.data_len = sdataBuf;
|
XdrvMailbox.data_len = sdataBuf;
|
||||||
|
@ -216,7 +216,7 @@ boolean XdrvMqttData(char *topicBuf, uint16_t stopicBuf, char *dataBuf, uint16_t
|
||||||
return XdrvCall(FUNC_MQTT_DATA);
|
return XdrvCall(FUNC_MQTT_DATA);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean XdrvRulesProcess(void)
|
bool XdrvRulesProcess(void)
|
||||||
{
|
{
|
||||||
return XdrvCall(FUNC_RULES_PROCESS);
|
return XdrvCall(FUNC_RULES_PROCESS);
|
||||||
}
|
}
|
||||||
|
@ -233,11 +233,11 @@ void ShowFreeMem(const char *where)
|
||||||
* Function call to all xdrv
|
* Function call to all xdrv
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean XdrvCall(byte Function)
|
bool XdrvCall(uint8_t Function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
for (byte x = 0; x < xdrv_present; x++) {
|
for (uint8_t x = 0; x < xdrv_present; x++) {
|
||||||
// WifiAddDelayWhenDisconnected();
|
// WifiAddDelayWhenDisconnected();
|
||||||
result = xdrv_func_ptr[x](Function);
|
result = xdrv_func_ptr[x](Function);
|
||||||
|
|
||||||
|
|
|
@ -97,7 +97,7 @@ void LcdDisplayOnOff(uint8_t on)
|
||||||
|
|
||||||
#ifdef USE_DISPLAY_MODES1TO5
|
#ifdef USE_DISPLAY_MODES1TO5
|
||||||
|
|
||||||
void LcdCenter(byte row, char* txt)
|
void LcdCenter(uint8_t row, char* txt)
|
||||||
{
|
{
|
||||||
int offset;
|
int offset;
|
||||||
int len;
|
int len;
|
||||||
|
@ -112,9 +112,9 @@ void LcdCenter(byte row, char* txt)
|
||||||
lcd->print(line);
|
lcd->print(line);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean LcdPrintLog(void)
|
bool LcdPrintLog(void)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
disp_refresh--;
|
disp_refresh--;
|
||||||
if (!disp_refresh) {
|
if (!disp_refresh) {
|
||||||
|
@ -125,7 +125,7 @@ boolean LcdPrintLog(void)
|
||||||
if (txt != NULL) {
|
if (txt != NULL) {
|
||||||
uint8_t last_row = Settings.display_rows -1;
|
uint8_t last_row = Settings.display_rows -1;
|
||||||
|
|
||||||
for (byte i = 0; i < last_row; i++) {
|
for (uint8_t i = 0; i < last_row; i++) {
|
||||||
strlcpy(disp_screen_buffer[i], disp_screen_buffer[i +1], disp_screen_buffer_cols);
|
strlcpy(disp_screen_buffer[i], disp_screen_buffer[i +1], disp_screen_buffer_cols);
|
||||||
lcd->setCursor(0, i); // Col 0, Row i
|
lcd->setCursor(0, i); // Col 0, Row i
|
||||||
lcd->print(disp_screen_buffer[i +1]);
|
lcd->print(disp_screen_buffer[i +1]);
|
||||||
|
@ -181,9 +181,9 @@ void LcdRefresh(void) // Every second
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xdsp01(byte function)
|
bool Xdsp01(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (i2c_flg) {
|
if (i2c_flg) {
|
||||||
if (FUNC_DISPLAY_INIT_DRIVER == function) {
|
if (FUNC_DISPLAY_INIT_DRIVER == function) {
|
||||||
|
|
|
@ -147,7 +147,7 @@ void Ssd1306PrintLog(void)
|
||||||
oled->clearDisplay();
|
oled->clearDisplay();
|
||||||
oled->setTextSize(Settings.display_size);
|
oled->setTextSize(Settings.display_size);
|
||||||
oled->setCursor(0,0);
|
oled->setCursor(0,0);
|
||||||
for (byte i = 0; i < last_row; i++) {
|
for (uint8_t i = 0; i < last_row; i++) {
|
||||||
strlcpy(disp_screen_buffer[i], disp_screen_buffer[i +1], disp_screen_buffer_cols);
|
strlcpy(disp_screen_buffer[i], disp_screen_buffer[i +1], disp_screen_buffer_cols);
|
||||||
oled->println(disp_screen_buffer[i]);
|
oled->println(disp_screen_buffer[i]);
|
||||||
}
|
}
|
||||||
|
@ -200,9 +200,9 @@ void Ssd1306Refresh(void) // Every second
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xdsp02(byte function)
|
bool Xdsp02(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (i2c_flg) {
|
if (i2c_flg) {
|
||||||
if (FUNC_DISPLAY_INIT_DRIVER == function) {
|
if (FUNC_DISPLAY_INIT_DRIVER == function) {
|
||||||
|
|
|
@ -47,14 +47,14 @@ uint8_t mtx_done = 0;
|
||||||
|
|
||||||
void MatrixWrite(void)
|
void MatrixWrite(void)
|
||||||
{
|
{
|
||||||
for (byte i = 0; i < mtx_matrices; i++) {
|
for (uint8_t i = 0; i < mtx_matrices; i++) {
|
||||||
matrix[i]->writeDisplay();
|
matrix[i]->writeDisplay();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MatrixClear(void)
|
void MatrixClear(void)
|
||||||
{
|
{
|
||||||
for (byte i = 0; i < mtx_matrices; i++) {
|
for (uint8_t i = 0; i < mtx_matrices; i++) {
|
||||||
matrix[i]->clear();
|
matrix[i]->clear();
|
||||||
}
|
}
|
||||||
MatrixWrite();
|
MatrixWrite();
|
||||||
|
@ -62,7 +62,7 @@ void MatrixClear(void)
|
||||||
|
|
||||||
void MatrixFixed(char* txt)
|
void MatrixFixed(char* txt)
|
||||||
{
|
{
|
||||||
for (byte i = 0; i < mtx_matrices; i++) {
|
for (uint8_t i = 0; i < mtx_matrices; i++) {
|
||||||
matrix[i]->clear();
|
matrix[i]->clear();
|
||||||
matrix[i]->setCursor(-i *8, 0);
|
matrix[i]->setCursor(-i *8, 0);
|
||||||
matrix[i]->print(txt);
|
matrix[i]->print(txt);
|
||||||
|
@ -77,7 +77,7 @@ void MatrixCenter(char* txt)
|
||||||
|
|
||||||
int len = strlen(txt);
|
int len = strlen(txt);
|
||||||
offset = (len < 8) ? offset = ((mtx_matrices *8) - (len *6)) / 2 : 0;
|
offset = (len < 8) ? offset = ((mtx_matrices *8) - (len *6)) / 2 : 0;
|
||||||
for (byte i = 0; i < mtx_matrices; i++) {
|
for (uint8_t i = 0; i < mtx_matrices; i++) {
|
||||||
matrix[i]->clear();
|
matrix[i]->clear();
|
||||||
matrix[i]->setCursor(-(i *8)+offset, 0);
|
matrix[i]->setCursor(-(i *8)+offset, 0);
|
||||||
matrix[i]->print(txt);
|
matrix[i]->print(txt);
|
||||||
|
@ -102,7 +102,7 @@ void MatrixScrollLeft(char* txt, int loop)
|
||||||
disp_refresh--;
|
disp_refresh--;
|
||||||
if (!disp_refresh) {
|
if (!disp_refresh) {
|
||||||
disp_refresh = Settings.display_refresh;
|
disp_refresh = Settings.display_refresh;
|
||||||
for (byte i = 0; i < mtx_matrices; i++) {
|
for (uint8_t i = 0; i < mtx_matrices; i++) {
|
||||||
matrix[i]->clear();
|
matrix[i]->clear();
|
||||||
matrix[i]->setCursor(mtx_x - i *8, 0);
|
matrix[i]->setCursor(mtx_x - i *8, 0);
|
||||||
matrix[i]->print(txt);
|
matrix[i]->print(txt);
|
||||||
|
@ -145,9 +145,9 @@ void MatrixScrollUp(char* txt, int loop)
|
||||||
words[wordcounter++] = p;
|
words[wordcounter++] = p;
|
||||||
p = strtok(NULL, separators);
|
p = strtok(NULL, separators);
|
||||||
}
|
}
|
||||||
for (byte i = 0; i < mtx_matrices; i++) {
|
for (uint8_t i = 0; i < mtx_matrices; i++) {
|
||||||
matrix[i]->clear();
|
matrix[i]->clear();
|
||||||
for (byte j = 0; j < wordcounter; j++) {
|
for (uint8_t j = 0; j < wordcounter; j++) {
|
||||||
matrix[i]->setCursor(-i *8, mtx_y + (j *8));
|
matrix[i]->setCursor(-i *8, mtx_y + (j *8));
|
||||||
matrix[i]->println(words[j]);
|
matrix[i]->println(words[j]);
|
||||||
}
|
}
|
||||||
|
@ -170,7 +170,7 @@ void MatrixScrollUp(char* txt, int loop)
|
||||||
|
|
||||||
void MatrixInitMode(void)
|
void MatrixInitMode(void)
|
||||||
{
|
{
|
||||||
for (byte i = 0; i < mtx_matrices; i++) {
|
for (uint8_t i = 0; i < mtx_matrices; i++) {
|
||||||
matrix[i]->setRotation(Settings.display_rotate); // 1
|
matrix[i]->setRotation(Settings.display_rotate); // 1
|
||||||
matrix[i]->setBrightness(Settings.display_dimmer);
|
matrix[i]->setBrightness(Settings.display_dimmer);
|
||||||
matrix[i]->blinkRate(0); // 0 - 3
|
matrix[i]->blinkRate(0); // 0 - 3
|
||||||
|
@ -327,9 +327,9 @@ void MatrixRefresh(void) // Every second
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xdsp03(byte function)
|
bool Xdsp03(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (i2c_flg) {
|
if (i2c_flg) {
|
||||||
if (FUNC_DISPLAY_INIT_DRIVER == function) {
|
if (FUNC_DISPLAY_INIT_DRIVER == function) {
|
||||||
|
|
|
@ -148,7 +148,7 @@ void Ili9341PrintLog(void)
|
||||||
|
|
||||||
char* txt = DisplayLogBuffer('\370');
|
char* txt = DisplayLogBuffer('\370');
|
||||||
if (txt != NULL) {
|
if (txt != NULL) {
|
||||||
byte size = Settings.display_size;
|
uint8_t size = Settings.display_size;
|
||||||
uint16_t theight = size * TFT_FONT_HEIGTH;
|
uint16_t theight = size * TFT_FONT_HEIGTH;
|
||||||
|
|
||||||
tft->setTextSize(size);
|
tft->setTextSize(size);
|
||||||
|
@ -167,7 +167,7 @@ void Ili9341PrintLog(void)
|
||||||
|
|
||||||
tft_scroll = theight; // Start below header
|
tft_scroll = theight; // Start below header
|
||||||
tft->setCursor(0, tft_scroll);
|
tft->setCursor(0, tft_scroll);
|
||||||
for (byte i = 0; i < last_row; i++) {
|
for (uint8_t i = 0; i < last_row; i++) {
|
||||||
strlcpy(disp_screen_buffer[i], disp_screen_buffer[i +1], disp_screen_buffer_cols);
|
strlcpy(disp_screen_buffer[i], disp_screen_buffer[i +1], disp_screen_buffer_cols);
|
||||||
// tft->fillRect(0, tft_scroll, tft->width(), theight, ILI9341_BLACK); // Erase line
|
// tft->fillRect(0, tft_scroll, tft->width(), theight, ILI9341_BLACK); // Erase line
|
||||||
tft->print(disp_screen_buffer[i]);
|
tft->print(disp_screen_buffer[i]);
|
||||||
|
@ -222,9 +222,9 @@ void Ili9341Refresh(void) // Every second
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xdsp04(byte function)
|
bool Xdsp04(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (spi_flg) {
|
if (spi_flg) {
|
||||||
if (FUNC_DISPLAY_INIT_DRIVER == function) {
|
if (FUNC_DISPLAY_INIT_DRIVER == function) {
|
||||||
|
|
|
@ -165,6 +165,7 @@ void EpdDisplayFrame(void)
|
||||||
{
|
{
|
||||||
epd.SetFrameMemory(paint.GetImage(), 0, 0, paint.GetWidth(), paint.GetHeight());
|
epd.SetFrameMemory(paint.GetImage(), 0, 0, paint.GetWidth(), paint.GetHeight());
|
||||||
epd.DisplayFrame();
|
epd.DisplayFrame();
|
||||||
|
epd.Sleep();
|
||||||
}
|
}
|
||||||
|
|
||||||
void EpdDrawStringAt(uint16_t x, uint16_t y, char *str, uint8_t color, uint8_t flag)
|
void EpdDrawStringAt(uint16_t x, uint16_t y, char *str, uint8_t color, uint8_t flag)
|
||||||
|
@ -202,7 +203,7 @@ void EpdPrintLog(void)
|
||||||
|
|
||||||
char* txt = DisplayLogBuffer('\040');
|
char* txt = DisplayLogBuffer('\040');
|
||||||
if (txt != NULL) {
|
if (txt != NULL) {
|
||||||
byte size = Settings.display_size;
|
uint8_t size = Settings.display_size;
|
||||||
uint16_t theight = size * EPD_FONT_HEIGTH;
|
uint16_t theight = size * EPD_FONT_HEIGTH;
|
||||||
|
|
||||||
EpdSetFont(size);
|
EpdSetFont(size);
|
||||||
|
@ -210,7 +211,7 @@ void EpdPrintLog(void)
|
||||||
|
|
||||||
// epd_scroll = theight; // Start below header
|
// epd_scroll = theight; // Start below header
|
||||||
epd_scroll = 0; // Start at top with no header
|
epd_scroll = 0; // Start at top with no header
|
||||||
for (byte i = 0; i < last_row; i++) {
|
for (uint8_t i = 0; i < last_row; i++) {
|
||||||
strlcpy(disp_screen_buffer[i], disp_screen_buffer[i +1], disp_screen_buffer_cols);
|
strlcpy(disp_screen_buffer[i], disp_screen_buffer[i +1], disp_screen_buffer_cols);
|
||||||
EpdDrawStringAt(0, epd_scroll, disp_screen_buffer[i], COLORED, 0);
|
EpdDrawStringAt(0, epd_scroll, disp_screen_buffer[i], COLORED, 0);
|
||||||
epd_scroll += theight;
|
epd_scroll += theight;
|
||||||
|
@ -266,9 +267,9 @@ void EpdRefresh(void) // Every second
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xdsp05(byte function)
|
bool Xdsp05(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (spi_flg || soft_spi_flg) {
|
if (spi_flg || soft_spi_flg) {
|
||||||
if (FUNC_DISPLAY_INIT_DRIVER == function) {
|
if (FUNC_DISPLAY_INIT_DRIVER == function) {
|
||||||
|
|
|
@ -20,9 +20,9 @@
|
||||||
#ifdef USE_DISPLAY
|
#ifdef USE_DISPLAY
|
||||||
|
|
||||||
#ifdef XFUNC_PTR_IN_ROM
|
#ifdef XFUNC_PTR_IN_ROM
|
||||||
boolean (* const xdsp_func_ptr[])(byte) PROGMEM = { // Display Function Pointers
|
bool (* const xdsp_func_ptr[])(uint8_t) PROGMEM = { // Display Function Pointers
|
||||||
#else
|
#else
|
||||||
boolean (* const xdsp_func_ptr[])(byte) = { // Display Function Pointers
|
bool (* const xdsp_func_ptr[])(uint8_t) = { // Display Function Pointers
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef XDSP_01
|
#ifdef XDSP_01
|
||||||
|
@ -119,11 +119,11 @@ uint8_t XdspPresent(void)
|
||||||
return xdsp_present;
|
return xdsp_present;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean XdspCall(byte Function)
|
bool XdspCall(uint8_t Function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
for (byte x = 0; x < xdsp_present; x++) {
|
for (uint8_t x = 0; x < xdsp_present; x++) {
|
||||||
result = xdsp_func_ptr[x](Function);
|
result = xdsp_func_ptr[x](Function);
|
||||||
|
|
||||||
if (result && (FUNC_DISPLAY_MODEL == Function)) {
|
if (result && (FUNC_DISPLAY_MODEL == Function)) {
|
||||||
|
|
|
@ -62,11 +62,11 @@ unsigned long hlw_power_ratio = 0;
|
||||||
unsigned long hlw_voltage_ratio = 0;
|
unsigned long hlw_voltage_ratio = 0;
|
||||||
unsigned long hlw_current_ratio = 0;
|
unsigned long hlw_current_ratio = 0;
|
||||||
|
|
||||||
byte hlw_select_ui_flag = 0;
|
uint8_t hlw_select_ui_flag = 0;
|
||||||
byte hlw_ui_flag = 1;
|
uint8_t hlw_ui_flag = 1;
|
||||||
byte hlw_model_type = 0;
|
uint8_t hlw_model_type = 0;
|
||||||
byte hlw_load_off = 1;
|
uint8_t hlw_load_off = 1;
|
||||||
byte hlw_cf1_timer = 0;
|
uint8_t hlw_cf1_timer = 0;
|
||||||
|
|
||||||
#ifndef USE_WS2812_DMA // Collides with Neopixelbus but solves exception
|
#ifndef USE_WS2812_DMA // Collides with Neopixelbus but solves exception
|
||||||
void HlwCfInterrupt(void) ICACHE_RAM_ATTR;
|
void HlwCfInterrupt(void) ICACHE_RAM_ATTR;
|
||||||
|
@ -246,9 +246,9 @@ void HlwDrvInit(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean HlwCommand(void)
|
bool HlwCommand(void)
|
||||||
{
|
{
|
||||||
boolean serviced = true;
|
bool serviced = true;
|
||||||
|
|
||||||
if ((CMND_POWERCAL == energy_command_code) || (CMND_VOLTAGECAL == energy_command_code) || (CMND_CURRENTCAL == energy_command_code)) {
|
if ((CMND_POWERCAL == energy_command_code) || (CMND_VOLTAGECAL == energy_command_code) || (CMND_CURRENTCAL == energy_command_code)) {
|
||||||
// Service in xdrv_03_energy.ino
|
// Service in xdrv_03_energy.ino
|
||||||
|
@ -277,7 +277,7 @@ boolean HlwCommand(void)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
int Xnrg01(byte function)
|
int Xnrg01(uint8_t function)
|
||||||
{
|
{
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
|
||||||
|
|
|
@ -137,7 +137,7 @@ bool CseSerialInput(void)
|
||||||
AddLogSerial(LOG_LEVEL_DEBUG_MORE);
|
AddLogSerial(LOG_LEVEL_DEBUG_MORE);
|
||||||
|
|
||||||
uint8_t checksum = 0;
|
uint8_t checksum = 0;
|
||||||
for (byte i = 2; i < 23; i++) { checksum += serial_in_buffer[i]; }
|
for (uint8_t i = 2; i < 23; i++) { checksum += serial_in_buffer[i]; }
|
||||||
if (checksum == serial_in_buffer[23]) {
|
if (checksum == serial_in_buffer[23]) {
|
||||||
CseReceived();
|
CseReceived();
|
||||||
cse_receive_flag = 0;
|
cse_receive_flag = 0;
|
||||||
|
@ -199,9 +199,9 @@ void CseDrvInit(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean CseCommand(void)
|
bool CseCommand(void)
|
||||||
{
|
{
|
||||||
boolean serviced = true;
|
bool serviced = true;
|
||||||
|
|
||||||
if (CMND_POWERSET == energy_command_code) {
|
if (CMND_POWERSET == energy_command_code) {
|
||||||
if (XdrvMailbox.data_len && power_cycle) {
|
if (XdrvMailbox.data_len && power_cycle) {
|
||||||
|
@ -227,7 +227,7 @@ boolean CseCommand(void)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
int Xnrg02(byte function)
|
int Xnrg02(uint8_t function)
|
||||||
{
|
{
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
|
||||||
|
|
|
@ -226,7 +226,7 @@ void PzemDrvInit(void)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
int Xnrg03(byte function)
|
int Xnrg03(uint8_t function)
|
||||||
{
|
{
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
|
||||||
|
|
|
@ -112,7 +112,7 @@ uint8_t McpChecksum(uint8_t *data)
|
||||||
uint8_t offset = 0;
|
uint8_t offset = 0;
|
||||||
uint8_t len = data[1] -1;
|
uint8_t len = data[1] -1;
|
||||||
|
|
||||||
for (byte i = offset; i < len; i++) { checksum += data[i]; }
|
for (uint8_t i = offset; i < len; i++) { checksum += data[i]; }
|
||||||
return checksum;
|
return checksum;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -121,7 +121,7 @@ unsigned long McpExtractInt(char *data, uint8_t offset, uint8_t size)
|
||||||
unsigned long result = 0;
|
unsigned long result = 0;
|
||||||
unsigned long pow = 1;
|
unsigned long pow = 1;
|
||||||
|
|
||||||
for (byte i = 0; i < size; i++) {
|
for (uint8_t i = 0; i < size; i++) {
|
||||||
result = result + (uint8_t)data[offset + i] * pow;
|
result = result + (uint8_t)data[offset + i] * pow;
|
||||||
pow = pow * 256;
|
pow = pow * 256;
|
||||||
}
|
}
|
||||||
|
@ -130,7 +130,7 @@ unsigned long McpExtractInt(char *data, uint8_t offset, uint8_t size)
|
||||||
|
|
||||||
void McpSetInt(unsigned long value, uint8_t *data, uint8_t offset, size_t size)
|
void McpSetInt(unsigned long value, uint8_t *data, uint8_t offset, size_t size)
|
||||||
{
|
{
|
||||||
for (byte i = 0; i < size; i++) {
|
for (uint8_t i = 0; i < size; i++) {
|
||||||
data[offset + i] = ((value >> (i * 8)) & 0xFF);
|
data[offset + i] = ((value >> (i * 8)) & 0xFF);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -145,7 +145,7 @@ void McpSend(uint8_t *data)
|
||||||
|
|
||||||
// AddLogBuffer(LOG_LEVEL_DEBUG_MORE, data, data[1]);
|
// AddLogBuffer(LOG_LEVEL_DEBUG_MORE, data, data[1]);
|
||||||
|
|
||||||
for (byte i = 0; i < data[1]; i++) {
|
for (uint8_t i = 0; i < data[1]; i++) {
|
||||||
Serial.write(data[i]);
|
Serial.write(data[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -562,9 +562,9 @@ void McpDrvInit(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean McpCommand(void)
|
bool McpCommand(void)
|
||||||
{
|
{
|
||||||
boolean serviced = true;
|
bool serviced = true;
|
||||||
unsigned long value = 0;
|
unsigned long value = 0;
|
||||||
|
|
||||||
if (CMND_POWERSET == energy_command_code) {
|
if (CMND_POWERSET == energy_command_code) {
|
||||||
|
@ -616,7 +616,7 @@ boolean McpCommand(void)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
int Xnrg04(byte function)
|
int Xnrg04(uint8_t function)
|
||||||
{
|
{
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
|
||||||
|
|
|
@ -104,7 +104,7 @@ void PzemAcDrvInit(void)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
int Xnrg05(byte function)
|
int Xnrg05(uint8_t function)
|
||||||
{
|
{
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
|
||||||
|
|
|
@ -103,7 +103,7 @@ void PzemDcDrvInit(void)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
int Xnrg06(byte function)
|
int Xnrg06(uint8_t function)
|
||||||
{
|
{
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
|
||||||
|
|
|
@ -20,9 +20,9 @@
|
||||||
#ifdef USE_ENERGY_SENSOR
|
#ifdef USE_ENERGY_SENSOR
|
||||||
|
|
||||||
#ifdef XFUNC_PTR_IN_ROM
|
#ifdef XFUNC_PTR_IN_ROM
|
||||||
int (* const xnrg_func_ptr[])(byte) PROGMEM = { // Energy driver Function Pointers
|
int (* const xnrg_func_ptr[])(uint8_t) PROGMEM = { // Energy driver Function Pointers
|
||||||
#else
|
#else
|
||||||
int (* const xnrg_func_ptr[])(byte) = { // Energy driver Function Pointers
|
int (* const xnrg_func_ptr[])(uint8_t) = { // Energy driver Function Pointers
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef XNRG_01
|
#ifdef XNRG_01
|
||||||
|
@ -92,11 +92,11 @@ int (* const xnrg_func_ptr[])(byte) = { // Energy driver Function Pointers
|
||||||
|
|
||||||
const uint8_t xnrg_present = sizeof(xnrg_func_ptr) / sizeof(xnrg_func_ptr[0]); // Number of drivers found
|
const uint8_t xnrg_present = sizeof(xnrg_func_ptr) / sizeof(xnrg_func_ptr[0]); // Number of drivers found
|
||||||
|
|
||||||
int XnrgCall(byte Function)
|
int XnrgCall(uint8_t Function)
|
||||||
{
|
{
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
|
||||||
for (byte x = 0; x < xnrg_present; x++) {
|
for (uint8_t x = 0; x < xnrg_present; x++) {
|
||||||
result = xnrg_func_ptr[x](Function);
|
result = xnrg_func_ptr[x](Function);
|
||||||
|
|
||||||
if (result && ((FUNC_SERIAL == Function) ||
|
if (result && ((FUNC_SERIAL == Function) ||
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
#include <Ticker.h>
|
#include <Ticker.h>
|
||||||
Ticker TickerMSearch;
|
Ticker TickerMSearch;
|
||||||
|
|
||||||
boolean udp_connected = false;
|
bool udp_connected = false;
|
||||||
|
|
||||||
char packet_buffer[UDP_BUFFER_SIZE]; // buffer to hold incoming UDP packet
|
char packet_buffer[UDP_BUFFER_SIZE]; // buffer to hold incoming UDP packet
|
||||||
IPAddress ipMulticast(239,255,255,250); // Simple Service Discovery Protocol (SSDP)
|
IPAddress ipMulticast(239,255,255,250); // Simple Service Discovery Protocol (SSDP)
|
||||||
|
@ -197,7 +197,7 @@ void HueRespondToMSearch(void)
|
||||||
* Belkin WeMo and Philips Hue bridge UDP multicast support
|
* Belkin WeMo and Philips Hue bridge UDP multicast support
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean UdpDisconnect(void)
|
bool UdpDisconnect(void)
|
||||||
{
|
{
|
||||||
if (udp_connected) {
|
if (udp_connected) {
|
||||||
WiFiUDP::stopAll();
|
WiFiUDP::stopAll();
|
||||||
|
@ -207,7 +207,7 @@ boolean UdpDisconnect(void)
|
||||||
return udp_connected;
|
return udp_connected;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean UdpConnect(void)
|
bool UdpConnect(void)
|
||||||
{
|
{
|
||||||
if (!udp_connected) {
|
if (!udp_connected) {
|
||||||
if (PortUdp.beginMulticast(WiFi.localIP(), ipMulticast, port_multicast)) {
|
if (PortUdp.beginMulticast(WiFi.localIP(), ipMulticast, port_multicast)) {
|
||||||
|
@ -302,7 +302,7 @@ const char WEMO_EVENTSERVICE_XML[] PROGMEM =
|
||||||
"<serviceStateTable>"
|
"<serviceStateTable>"
|
||||||
"<stateVariable sendEvents=\"yes\">"
|
"<stateVariable sendEvents=\"yes\">"
|
||||||
"<name>BinaryState</name>"
|
"<name>BinaryState</name>"
|
||||||
"<dataType>Boolean</dataType>"
|
"<dataType>bool</dataType>"
|
||||||
"<defaultValue>0</defaultValue>"
|
"<defaultValue>0</defaultValue>"
|
||||||
"</stateVariable>"
|
"</stateVariable>"
|
||||||
"<stateVariable sendEvents=\"yes\">"
|
"<stateVariable sendEvents=\"yes\">"
|
||||||
|
@ -564,7 +564,7 @@ void HueConfig(String *path)
|
||||||
|
|
||||||
bool g_gotct = false;
|
bool g_gotct = false;
|
||||||
|
|
||||||
void HueLightStatus1(byte device, String *response)
|
void HueLightStatus1(uint8_t device, String *response)
|
||||||
{
|
{
|
||||||
float hue = 0;
|
float hue = 0;
|
||||||
float sat = 0;
|
float sat = 0;
|
||||||
|
@ -584,7 +584,7 @@ void HueLightStatus1(byte device, String *response)
|
||||||
response->replace("{m}", g_gotct?"ct":"hs");
|
response->replace("{m}", g_gotct?"ct":"hs");
|
||||||
}
|
}
|
||||||
|
|
||||||
void HueLightStatus2(byte device, String *response)
|
void HueLightStatus2(uint8_t device, String *response)
|
||||||
{
|
{
|
||||||
*response += FPSTR(HUE_LIGHTS_STATUS_JSON2);
|
*response += FPSTR(HUE_LIGHTS_STATUS_JSON2);
|
||||||
response->replace("{j1", Settings.friendlyname[device-1]);
|
response->replace("{j1", Settings.friendlyname[device-1]);
|
||||||
|
|
|
@ -172,7 +172,7 @@ void Ws2812Clock(void)
|
||||||
Ws2812UpdateHand((RtcTime.minute * 1000) / clksize, WS_MINUTE);
|
Ws2812UpdateHand((RtcTime.minute * 1000) / clksize, WS_MINUTE);
|
||||||
Ws2812UpdateHand(((RtcTime.hour % 12) * (5000 / clksize)) + ((RtcTime.minute * 1000) / (12 * clksize)), WS_HOUR);
|
Ws2812UpdateHand(((RtcTime.hour % 12) * (5000 / clksize)) + ((RtcTime.minute * 1000) / (12 * clksize)), WS_HOUR);
|
||||||
if (Settings.ws_color[WS_MARKER][WS_RED] + Settings.ws_color[WS_MARKER][WS_GREEN] + Settings.ws_color[WS_MARKER][WS_BLUE]) {
|
if (Settings.ws_color[WS_MARKER][WS_RED] + Settings.ws_color[WS_MARKER][WS_GREEN] + Settings.ws_color[WS_MARKER][WS_BLUE]) {
|
||||||
for (byte i = 0; i < 12; i++) {
|
for (uint8_t i = 0; i < 12; i++) {
|
||||||
Ws2812UpdateHand((i * 5000) / clksize, WS_MARKER);
|
Ws2812UpdateHand((i * 5000) / clksize, WS_MARKER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -395,7 +395,7 @@ char* Ws2812GetColor(uint16_t led, char* scolor)
|
||||||
sl_ledcolor[1] = lcolor.G;
|
sl_ledcolor[1] = lcolor.G;
|
||||||
sl_ledcolor[2] = lcolor.B;
|
sl_ledcolor[2] = lcolor.B;
|
||||||
scolor[0] = '\0';
|
scolor[0] = '\0';
|
||||||
for (byte i = 0; i < light_subtype; i++) {
|
for (uint8_t i = 0; i < light_subtype; i++) {
|
||||||
if (Settings.flag.decimal_text) {
|
if (Settings.flag.decimal_text) {
|
||||||
snprintf_P(scolor, 25, PSTR("%s%s%d"), scolor, (i > 0) ? "," : "", sl_ledcolor[i]);
|
snprintf_P(scolor, 25, PSTR("%s%s%d"), scolor, (i > 0) ? "," : "", sl_ledcolor[i]);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
unsigned long last_counter_timer[MAX_COUNTERS]; // Last counter time in micro seconds
|
unsigned long last_counter_timer[MAX_COUNTERS]; // Last counter time in micro seconds
|
||||||
|
|
||||||
void CounterUpdate(byte index)
|
void CounterUpdate(uint8_t index)
|
||||||
{
|
{
|
||||||
unsigned long counter_debounce_time = micros() - last_counter_timer[index -1];
|
unsigned long counter_debounce_time = micros() - last_counter_timer[index -1];
|
||||||
if (counter_debounce_time > Settings.pulse_counter_debounce * 1000) {
|
if (counter_debounce_time > Settings.pulse_counter_debounce * 1000) {
|
||||||
|
@ -65,7 +65,7 @@ void CounterUpdate4(void)
|
||||||
|
|
||||||
void CounterSaveState(void)
|
void CounterSaveState(void)
|
||||||
{
|
{
|
||||||
for (byte i = 0; i < MAX_COUNTERS; i++) {
|
for (uint8_t i = 0; i < MAX_COUNTERS; i++) {
|
||||||
if (pin[GPIO_CNTR1 +i] < 99) {
|
if (pin[GPIO_CNTR1 +i] < 99) {
|
||||||
Settings.pulse_counter[i] = RtcSettings.pulse_counter[i];
|
Settings.pulse_counter[i] = RtcSettings.pulse_counter[i];
|
||||||
}
|
}
|
||||||
|
@ -77,7 +77,7 @@ void CounterInit(void)
|
||||||
typedef void (*function) () ;
|
typedef void (*function) () ;
|
||||||
function counter_callbacks[] = { CounterUpdate1, CounterUpdate2, CounterUpdate3, CounterUpdate4 };
|
function counter_callbacks[] = { CounterUpdate1, CounterUpdate2, CounterUpdate3, CounterUpdate4 };
|
||||||
|
|
||||||
for (byte i = 0; i < MAX_COUNTERS; i++) {
|
for (uint8_t i = 0; i < MAX_COUNTERS; i++) {
|
||||||
if (pin[GPIO_CNTR1 +i] < 99) {
|
if (pin[GPIO_CNTR1 +i] < 99) {
|
||||||
pinMode(pin[GPIO_CNTR1 +i], bitRead(counter_no_pullup, i) ? INPUT : INPUT_PULLUP);
|
pinMode(pin[GPIO_CNTR1 +i], bitRead(counter_no_pullup, i) ? INPUT : INPUT_PULLUP);
|
||||||
attachInterrupt(pin[GPIO_CNTR1 +i], counter_callbacks[i], FALLING);
|
attachInterrupt(pin[GPIO_CNTR1 +i], counter_callbacks[i], FALLING);
|
||||||
|
@ -90,13 +90,13 @@ const char HTTP_SNS_COUNTER[] PROGMEM =
|
||||||
"%s{s}" D_COUNTER "%d{m}%s%s{e}"; // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
"%s{s}" D_COUNTER "%d{m}%s%s{e}"; // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
||||||
#endif // USE_WEBSERVER
|
#endif // USE_WEBSERVER
|
||||||
|
|
||||||
void CounterShow(boolean json)
|
void CounterShow(bool json)
|
||||||
{
|
{
|
||||||
char stemp[10];
|
char stemp[10];
|
||||||
|
|
||||||
byte dsxflg = 0;
|
uint8_t dsxflg = 0;
|
||||||
byte header = 0;
|
uint8_t header = 0;
|
||||||
for (byte i = 0; i < MAX_COUNTERS; i++) {
|
for (uint8_t i = 0; i < MAX_COUNTERS; i++) {
|
||||||
if (pin[GPIO_CNTR1 +i] < 99) {
|
if (pin[GPIO_CNTR1 +i] < 99) {
|
||||||
char counter[33];
|
char counter[33];
|
||||||
if (bitRead(Settings.pulse_counter_type, i)) {
|
if (bitRead(Settings.pulse_counter_type, i)) {
|
||||||
|
@ -141,9 +141,9 @@ void CounterShow(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns01(byte function)
|
bool Xsns01(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
switch (function) {
|
switch (function) {
|
||||||
case FUNC_INIT:
|
case FUNC_INIT:
|
||||||
|
|
|
@ -29,7 +29,7 @@ uint16_t adc_last_value = 0;
|
||||||
uint16_t AdcRead(void)
|
uint16_t AdcRead(void)
|
||||||
{
|
{
|
||||||
uint16_t analog = 0;
|
uint16_t analog = 0;
|
||||||
for (byte i = 0; i < 32; i++) {
|
for (uint8_t i = 0; i < 32; i++) {
|
||||||
analog += analogRead(A0);
|
analog += analogRead(A0);
|
||||||
delay(1);
|
delay(1);
|
||||||
}
|
}
|
||||||
|
@ -50,7 +50,7 @@ void AdcEvery250ms(void)
|
||||||
}
|
}
|
||||||
#endif // USE_RULES
|
#endif // USE_RULES
|
||||||
|
|
||||||
void AdcShow(boolean json)
|
void AdcShow(bool json)
|
||||||
{
|
{
|
||||||
uint16_t analog = AdcRead();
|
uint16_t analog = AdcRead();
|
||||||
|
|
||||||
|
@ -67,9 +67,9 @@ void AdcShow(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns02(byte function)
|
bool Xsns02(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (my_module_flag.adc0) {
|
if (my_module_flag.adc0) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -87,7 +87,7 @@ void SonoffScSerialInput(char *rcvstat)
|
||||||
value[i++] = atoi(str);
|
value[i++] = atoi(str);
|
||||||
}
|
}
|
||||||
if (value[0] > 0) {
|
if (value[0] > 0) {
|
||||||
for (byte i = 0; i < 5; i++) {
|
for (uint8_t i = 0; i < 5; i++) {
|
||||||
sc_value[i] = value[i];
|
sc_value[i] = value[i];
|
||||||
}
|
}
|
||||||
sc_value[2] = (11 - sc_value[2]) * 10; // Invert light level
|
sc_value[2] = (11 - sc_value[2]) * 10; // Invert light level
|
||||||
|
@ -110,7 +110,7 @@ const char HTTP_SNS_SCPLUS[] PROGMEM =
|
||||||
"%s{s}" D_LIGHT "{m}%d%%{e}{s}" D_NOISE "{m}%d%%{e}{s}" D_AIR_QUALITY "{m}%d%%{e}"; // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
"%s{s}" D_LIGHT "{m}%d%%{e}{s}" D_NOISE "{m}%d%%{e}{s}" D_AIR_QUALITY "{m}%d%%{e}"; // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
||||||
#endif // USE_WEBSERVER
|
#endif // USE_WEBSERVER
|
||||||
|
|
||||||
void SonoffScShow(boolean json)
|
void SonoffScShow(bool json)
|
||||||
{
|
{
|
||||||
if (sc_value[0] > 0) {
|
if (sc_value[0] > 0) {
|
||||||
float t = ConvertTemp(sc_value[1]);
|
float t = ConvertTemp(sc_value[1]);
|
||||||
|
@ -154,9 +154,9 @@ void SonoffScShow(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns04(byte function)
|
bool Xsns04(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (SONOFF_SC == Settings.module) {
|
if (SONOFF_SC == Settings.module) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -120,7 +120,7 @@ uint8_t OneWireRead(void)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean OneWireCrc8(uint8_t *addr)
|
bool OneWireCrc8(uint8_t *addr)
|
||||||
{
|
{
|
||||||
uint8_t crc = 0;
|
uint8_t crc = 0;
|
||||||
uint8_t len = 8;
|
uint8_t len = 8;
|
||||||
|
@ -149,7 +149,7 @@ void Ds18b20Convert(void)
|
||||||
// delay(750); // 750ms should be enough for 12bit conv
|
// delay(750); // 750ms should be enough for 12bit conv
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean Ds18b20Read(void)
|
bool Ds18b20Read(void)
|
||||||
{
|
{
|
||||||
uint8_t data[9];
|
uint8_t data[9];
|
||||||
int8_t sign = 1;
|
int8_t sign = 1;
|
||||||
|
@ -199,7 +199,7 @@ void Ds18b20EverySecond(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Ds18b20Show(boolean json)
|
void Ds18b20Show(bool json)
|
||||||
{
|
{
|
||||||
if (ds18b20_valid) { // Check for valid temperature
|
if (ds18b20_valid) { // Check for valid temperature
|
||||||
char temperature[33];
|
char temperature[33];
|
||||||
|
@ -228,9 +228,9 @@ void Ds18b20Show(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns05(byte function)
|
bool Xsns05(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (pin[GPIO_DSB] < 99) {
|
if (pin[GPIO_DSB] < 99) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -233,7 +233,7 @@ uint8_t OneWireSearch(uint8_t *newAddr)
|
||||||
return search_result;
|
return search_result;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean OneWireCrc8(uint8_t *addr)
|
bool OneWireCrc8(uint8_t *addr)
|
||||||
{
|
{
|
||||||
uint8_t crc = 0;
|
uint8_t crc = 0;
|
||||||
uint8_t len = 8;
|
uint8_t len = 8;
|
||||||
|
@ -424,7 +424,7 @@ void Ds18x20EverySecond(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Ds18x20Show(boolean json)
|
void Ds18x20Show(bool json)
|
||||||
{
|
{
|
||||||
for (uint8_t i = 0; i < ds18x20_sensors; i++) {
|
for (uint8_t i = 0; i < ds18x20_sensors; i++) {
|
||||||
uint8_t index = ds18x20_sensor[i].index;
|
uint8_t index = ds18x20_sensor[i].index;
|
||||||
|
@ -440,7 +440,7 @@ void Ds18x20Show(boolean json)
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"%s\":{\"" D_JSON_TEMPERATURE "\":%s}"), mqtt_data, ds18x20_types, temperature);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"%s\":{\"" D_JSON_TEMPERATURE "\":%s}"), mqtt_data, ds18x20_types, temperature);
|
||||||
} else {
|
} else {
|
||||||
char address[17];
|
char address[17];
|
||||||
for (byte j = 0; j < 6; j++) {
|
for (uint8_t j = 0; j < 6; j++) {
|
||||||
sprintf(address+2*j, "%02X", ds18x20_sensor[index].address[6-j]); // Skip sensor type and crc
|
sprintf(address+2*j, "%02X", ds18x20_sensor[index].address[6-j]); // Skip sensor type and crc
|
||||||
}
|
}
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"%s\":{\"" D_JSON_ID "\":\"%s\",\"" D_JSON_TEMPERATURE "\":%s}"), mqtt_data, ds18x20_types, address, temperature);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"%s\":{\"" D_JSON_ID "\":\"%s\",\"" D_JSON_TEMPERATURE "\":%s}"), mqtt_data, ds18x20_types, address, temperature);
|
||||||
|
@ -468,9 +468,9 @@ void Ds18x20Show(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns05(byte function)
|
bool Xsns05(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (pin[GPIO_DSB] < 99) {
|
if (pin[GPIO_DSB] < 99) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -65,11 +65,11 @@ void Ds18x20Search(void)
|
||||||
num_sensors++;
|
num_sensors++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (byte i = 0; i < num_sensors; i++) {
|
for (uint8_t i = 0; i < num_sensors; i++) {
|
||||||
ds18x20_index[i] = i;
|
ds18x20_index[i] = i;
|
||||||
}
|
}
|
||||||
for (byte i = 0; i < num_sensors; i++) {
|
for (uint8_t i = 0; i < num_sensors; i++) {
|
||||||
for (byte j = i + 1; j < num_sensors; j++) {
|
for (uint8_t j = i + 1; j < num_sensors; j++) {
|
||||||
if (uint32_t(ds18x20_address[ds18x20_index[i]]) > uint32_t(ds18x20_address[ds18x20_index[j]])) {
|
if (uint32_t(ds18x20_address[ds18x20_index[i]]) > uint32_t(ds18x20_address[ds18x20_index[j]])) {
|
||||||
std::swap(ds18x20_index[i], ds18x20_index[j]);
|
std::swap(ds18x20_index[i], ds18x20_index[j]);
|
||||||
}
|
}
|
||||||
|
@ -87,7 +87,7 @@ String Ds18x20Addresses(uint8_t sensor)
|
||||||
{
|
{
|
||||||
char address[20];
|
char address[20];
|
||||||
|
|
||||||
for (byte i = 0; i < 8; i++) {
|
for (uint8_t i = 0; i < 8; i++) {
|
||||||
sprintf(address+2*i, "%02X", ds18x20_address[ds18x20_index[sensor]][i]);
|
sprintf(address+2*i, "%02X", ds18x20_address[ds18x20_index[sensor]][i]);
|
||||||
}
|
}
|
||||||
return String(address);
|
return String(address);
|
||||||
|
@ -101,9 +101,9 @@ void Ds18x20Convert(void)
|
||||||
// delay(750); // 750ms should be enough for 12bit conv
|
// delay(750); // 750ms should be enough for 12bit conv
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean Ds18x20Read(uint8_t sensor, float &t)
|
bool Ds18x20Read(uint8_t sensor, float &t)
|
||||||
{
|
{
|
||||||
byte data[12];
|
uint8_t data[12];
|
||||||
int8_t sign = 1;
|
int8_t sign = 1;
|
||||||
uint16_t temp12 = 0;
|
uint16_t temp12 = 0;
|
||||||
int16_t temp14 = 0;
|
int16_t temp14 = 0;
|
||||||
|
@ -116,7 +116,7 @@ boolean Ds18x20Read(uint8_t sensor, float &t)
|
||||||
ds->select(ds18x20_address[ds18x20_index[sensor]]);
|
ds->select(ds18x20_address[ds18x20_index[sensor]]);
|
||||||
ds->write(W1_READ_SCRATCHPAD); // Read Scratchpad
|
ds->write(W1_READ_SCRATCHPAD); // Read Scratchpad
|
||||||
|
|
||||||
for (byte i = 0; i < 9; i++) {
|
for (uint8_t i = 0; i < 9; i++) {
|
||||||
data[i] = ds->read();
|
data[i] = ds->read();
|
||||||
}
|
}
|
||||||
if (OneWire::crc8(data, 8) == data[8]) {
|
if (OneWire::crc8(data, 8) == data[8]) {
|
||||||
|
@ -168,13 +168,13 @@ void Ds18x20Type(uint8_t sensor)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Ds18x20Show(boolean json)
|
void Ds18x20Show(bool json)
|
||||||
{
|
{
|
||||||
char stemp[10];
|
char stemp[10];
|
||||||
float t;
|
float t;
|
||||||
|
|
||||||
byte dsxflg = 0;
|
uint8_t dsxflg = 0;
|
||||||
for (byte i = 0; i < Ds18x20Sensors(); i++) {
|
for (uint8_t i = 0; i < Ds18x20Sensors(); i++) {
|
||||||
if (Ds18x20Read(i, t)) { // Check if read failed
|
if (Ds18x20Read(i, t)) { // Check if read failed
|
||||||
Ds18x20Type(i);
|
Ds18x20Type(i);
|
||||||
char temperature[33];
|
char temperature[33];
|
||||||
|
@ -220,9 +220,9 @@ void Ds18x20Show(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns05(byte function)
|
bool Xsns05(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (pin[GPIO_DSB] < 99) {
|
if (pin[GPIO_DSB] < 99) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -33,11 +33,11 @@
|
||||||
|
|
||||||
uint32_t dht_max_cycles;
|
uint32_t dht_max_cycles;
|
||||||
uint8_t dht_data[5];
|
uint8_t dht_data[5];
|
||||||
byte dht_sensors = 0;
|
uint8_t dht_sensors = 0;
|
||||||
|
|
||||||
struct DHTSTRUCT {
|
struct DHTSTRUCT {
|
||||||
byte pin;
|
uint8_t pin;
|
||||||
byte type;
|
uint8_t type;
|
||||||
char stype[12];
|
char stype[12];
|
||||||
uint32_t lastreadtime;
|
uint32_t lastreadtime;
|
||||||
uint8_t lastresult;
|
uint8_t lastresult;
|
||||||
|
@ -47,12 +47,12 @@ struct DHTSTRUCT {
|
||||||
|
|
||||||
void DhtReadPrep(void)
|
void DhtReadPrep(void)
|
||||||
{
|
{
|
||||||
for (byte i = 0; i < dht_sensors; i++) {
|
for (uint8_t i = 0; i < dht_sensors; i++) {
|
||||||
digitalWrite(Dht[i].pin, HIGH);
|
digitalWrite(Dht[i].pin, HIGH);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t DhtExpectPulse(byte sensor, bool level)
|
int32_t DhtExpectPulse(uint8_t sensor, bool level)
|
||||||
{
|
{
|
||||||
int32_t count = 0;
|
int32_t count = 0;
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ int32_t DhtExpectPulse(byte sensor, bool level)
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean DhtRead(byte sensor)
|
bool DhtRead(uint8_t sensor)
|
||||||
{
|
{
|
||||||
int32_t cycles[80];
|
int32_t cycles[80];
|
||||||
uint8_t error = 0;
|
uint8_t error = 0;
|
||||||
|
@ -134,7 +134,7 @@ boolean DhtRead(byte sensor)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DhtReadTempHum(byte sensor)
|
void DhtReadTempHum(uint8_t sensor)
|
||||||
{
|
{
|
||||||
if ((NAN == Dht[sensor].h) || (Dht[sensor].lastresult > DHT_MAX_RETRY)) { // Reset after 8 misses
|
if ((NAN == Dht[sensor].h) || (Dht[sensor].lastresult > DHT_MAX_RETRY)) { // Reset after 8 misses
|
||||||
Dht[sensor].t = NAN;
|
Dht[sensor].t = NAN;
|
||||||
|
@ -162,9 +162,9 @@ void DhtReadTempHum(byte sensor)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean DhtSetup(byte pin, byte type)
|
bool DhtSetup(uint8_t pin, uint8_t type)
|
||||||
{
|
{
|
||||||
boolean success = false;
|
bool success = false;
|
||||||
|
|
||||||
if (dht_sensors < DHT_MAX_SENSORS) {
|
if (dht_sensors < DHT_MAX_SENSORS) {
|
||||||
Dht[dht_sensors].pin = pin;
|
Dht[dht_sensors].pin = pin;
|
||||||
|
@ -181,7 +181,7 @@ void DhtInit(void)
|
||||||
{
|
{
|
||||||
dht_max_cycles = microsecondsToClockCycles(1000); // 1 millisecond timeout for reading pulses from DHT sensor.
|
dht_max_cycles = microsecondsToClockCycles(1000); // 1 millisecond timeout for reading pulses from DHT sensor.
|
||||||
|
|
||||||
for (byte i = 0; i < dht_sensors; i++) {
|
for (uint8_t i = 0; i < dht_sensors; i++) {
|
||||||
pinMode(Dht[i].pin, INPUT_PULLUP);
|
pinMode(Dht[i].pin, INPUT_PULLUP);
|
||||||
Dht[i].lastreadtime = 0;
|
Dht[i].lastreadtime = 0;
|
||||||
Dht[i].lastresult = 0;
|
Dht[i].lastresult = 0;
|
||||||
|
@ -198,16 +198,16 @@ void DhtEverySecond(void)
|
||||||
// <1mS
|
// <1mS
|
||||||
DhtReadPrep();
|
DhtReadPrep();
|
||||||
} else {
|
} else {
|
||||||
for (byte i = 0; i < dht_sensors; i++) {
|
for (uint8_t i = 0; i < dht_sensors; i++) {
|
||||||
// DHT11 and AM2301 25mS per sensor, SI7021 5mS per sensor
|
// DHT11 and AM2301 25mS per sensor, SI7021 5mS per sensor
|
||||||
DhtReadTempHum(i);
|
DhtReadTempHum(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DhtShow(boolean json)
|
void DhtShow(bool json)
|
||||||
{
|
{
|
||||||
for (byte i = 0; i < dht_sensors; i++) {
|
for (uint8_t i = 0; i < dht_sensors; i++) {
|
||||||
char temperature[33];
|
char temperature[33];
|
||||||
dtostrfd(Dht[i].t, Settings.flag2.temperature_resolution, temperature);
|
dtostrfd(Dht[i].t, Settings.flag2.temperature_resolution, temperature);
|
||||||
char humidity[33];
|
char humidity[33];
|
||||||
|
@ -239,9 +239,9 @@ void DhtShow(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns06(byte function)
|
bool Xsns06(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (dht_flg) {
|
if (dht_flg) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -44,21 +44,21 @@ uint8_t sht_valid = 0;
|
||||||
float sht_temperature = 0;
|
float sht_temperature = 0;
|
||||||
float sht_humidity = 0;
|
float sht_humidity = 0;
|
||||||
|
|
||||||
boolean ShtReset(void)
|
bool ShtReset(void)
|
||||||
{
|
{
|
||||||
pinMode(sht_sda_pin, INPUT_PULLUP);
|
pinMode(sht_sda_pin, INPUT_PULLUP);
|
||||||
pinMode(sht_scl_pin, OUTPUT);
|
pinMode(sht_scl_pin, OUTPUT);
|
||||||
delay(11);
|
delay(11);
|
||||||
for (byte i = 0; i < 9; i++) {
|
for (uint8_t i = 0; i < 9; i++) {
|
||||||
digitalWrite(sht_scl_pin, HIGH);
|
digitalWrite(sht_scl_pin, HIGH);
|
||||||
digitalWrite(sht_scl_pin, LOW);
|
digitalWrite(sht_scl_pin, LOW);
|
||||||
}
|
}
|
||||||
boolean success = ShtSendCommand(SHT1X_CMD_SOFT_RESET);
|
bool success = ShtSendCommand(SHT1X_CMD_SOFT_RESET);
|
||||||
delay(11);
|
delay(11);
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean ShtSendCommand(const byte cmd)
|
bool ShtSendCommand(const uint8_t cmd)
|
||||||
{
|
{
|
||||||
pinMode(sht_sda_pin, OUTPUT);
|
pinMode(sht_sda_pin, OUTPUT);
|
||||||
// Transmission Start sequence
|
// Transmission Start sequence
|
||||||
|
@ -72,7 +72,7 @@ boolean ShtSendCommand(const byte cmd)
|
||||||
// Send the command (address must be 000b)
|
// Send the command (address must be 000b)
|
||||||
shiftOut(sht_sda_pin, sht_scl_pin, MSBFIRST, cmd);
|
shiftOut(sht_sda_pin, sht_scl_pin, MSBFIRST, cmd);
|
||||||
// Wait for ACK
|
// Wait for ACK
|
||||||
boolean ackerror = false;
|
bool ackerror = false;
|
||||||
digitalWrite(sht_scl_pin, HIGH);
|
digitalWrite(sht_scl_pin, HIGH);
|
||||||
pinMode(sht_sda_pin, INPUT_PULLUP);
|
pinMode(sht_sda_pin, INPUT_PULLUP);
|
||||||
if (digitalRead(sht_sda_pin) != LOW) {
|
if (digitalRead(sht_sda_pin) != LOW) {
|
||||||
|
@ -90,10 +90,10 @@ boolean ShtSendCommand(const byte cmd)
|
||||||
return (!ackerror);
|
return (!ackerror);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean ShtAwaitResult(void)
|
bool ShtAwaitResult(void)
|
||||||
{
|
{
|
||||||
// Maximum 320ms for 14 bit measurement
|
// Maximum 320ms for 14 bit measurement
|
||||||
for (byte i = 0; i < 16; i++) {
|
for (uint8_t i = 0; i < 16; i++) {
|
||||||
if (LOW == digitalRead(sht_sda_pin)) {
|
if (LOW == digitalRead(sht_sda_pin)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -125,7 +125,7 @@ int ShtReadData(void)
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean ShtRead(void)
|
bool ShtRead(void)
|
||||||
{
|
{
|
||||||
if (sht_valid) { sht_valid--; }
|
if (sht_valid) { sht_valid--; }
|
||||||
if (!ShtReset()) { return false; }
|
if (!ShtReset()) { return false; }
|
||||||
|
@ -185,7 +185,7 @@ void ShtEverySecond(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShtShow(boolean json)
|
void ShtShow(bool json)
|
||||||
{
|
{
|
||||||
if (sht_valid) {
|
if (sht_valid) {
|
||||||
char temperature[33];
|
char temperature[33];
|
||||||
|
@ -219,9 +219,9 @@ void ShtShow(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns07(byte function)
|
bool Xsns07(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (i2c_flg) {
|
if (i2c_flg) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -140,7 +140,7 @@ void HtuInit(void)
|
||||||
HtuSetResolution(HTU21_RES_RH12_T14);
|
HtuSetResolution(HTU21_RES_RH12_T14);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean HtuRead(void)
|
bool HtuRead(void)
|
||||||
{
|
{
|
||||||
uint8_t checksum = 0;
|
uint8_t checksum = 0;
|
||||||
uint16_t sensorval = 0;
|
uint16_t sensorval = 0;
|
||||||
|
@ -246,7 +246,7 @@ void HtuEverySecond(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HtuShow(boolean json)
|
void HtuShow(bool json)
|
||||||
{
|
{
|
||||||
if (htu_valid) {
|
if (htu_valid) {
|
||||||
char temperature[33];
|
char temperature[33];
|
||||||
|
@ -280,9 +280,9 @@ void HtuShow(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns08(byte function)
|
bool Xsns08(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (i2c_flg) {
|
if (i2c_flg) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -101,7 +101,7 @@ typedef struct {
|
||||||
|
|
||||||
bmp180_cal_data_t *bmp180_cal_data = NULL;
|
bmp180_cal_data_t *bmp180_cal_data = NULL;
|
||||||
|
|
||||||
boolean Bmp180Calibration(uint8_t bmp_idx)
|
bool Bmp180Calibration(uint8_t bmp_idx)
|
||||||
{
|
{
|
||||||
if (!bmp180_cal_data) {
|
if (!bmp180_cal_data) {
|
||||||
bmp180_cal_data = (bmp180_cal_data_t*)malloc(BMP_MAX_SENSORS * sizeof(bmp180_cal_data_t));
|
bmp180_cal_data = (bmp180_cal_data_t*)malloc(BMP_MAX_SENSORS * sizeof(bmp180_cal_data_t));
|
||||||
|
@ -246,7 +246,7 @@ typedef struct {
|
||||||
|
|
||||||
Bme280CalibrationData_t *Bme280CalibrationData = NULL;
|
Bme280CalibrationData_t *Bme280CalibrationData = NULL;
|
||||||
|
|
||||||
boolean Bmx280Calibrate(uint8_t bmp_idx)
|
bool Bmx280Calibrate(uint8_t bmp_idx)
|
||||||
{
|
{
|
||||||
// if (I2cRead8(bmp_address, BMP_REGISTER_CHIPID) != BME280_CHIPID) return false;
|
// if (I2cRead8(bmp_address, BMP_REGISTER_CHIPID) != BME280_CHIPID) return false;
|
||||||
|
|
||||||
|
@ -351,7 +351,7 @@ static void BmeDelayMs(uint32_t ms)
|
||||||
delay(ms);
|
delay(ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean Bme680Init(uint8_t bmp_idx)
|
bool Bme680Init(uint8_t bmp_idx)
|
||||||
{
|
{
|
||||||
if (!gas_sensor) {
|
if (!gas_sensor) {
|
||||||
gas_sensor = (bme680_dev*)malloc(BMP_MAX_SENSORS * sizeof(bme680_dev));
|
gas_sensor = (bme680_dev*)malloc(BMP_MAX_SENSORS * sizeof(bme680_dev));
|
||||||
|
@ -455,14 +455,14 @@ void BmpDetect(void)
|
||||||
if (!bmp_sensors) { return; }
|
if (!bmp_sensors) { return; }
|
||||||
memset(bmp_sensors, 0, bmp_sensor_size); // Init defaults to 0
|
memset(bmp_sensors, 0, bmp_sensor_size); // Init defaults to 0
|
||||||
|
|
||||||
for (byte i = 0; i < BMP_MAX_SENSORS; i++) {
|
for (uint8_t i = 0; i < BMP_MAX_SENSORS; i++) {
|
||||||
uint8_t bmp_type = I2cRead8(bmp_addresses[i], BMP_REGISTER_CHIPID);
|
uint8_t bmp_type = I2cRead8(bmp_addresses[i], BMP_REGISTER_CHIPID);
|
||||||
if (bmp_type) {
|
if (bmp_type) {
|
||||||
bmp_sensors[bmp_count].bmp_address = bmp_addresses[i];
|
bmp_sensors[bmp_count].bmp_address = bmp_addresses[i];
|
||||||
bmp_sensors[bmp_count].bmp_type = bmp_type;
|
bmp_sensors[bmp_count].bmp_type = bmp_type;
|
||||||
bmp_sensors[bmp_count].bmp_model = 0;
|
bmp_sensors[bmp_count].bmp_model = 0;
|
||||||
|
|
||||||
boolean success = false;
|
bool success = false;
|
||||||
switch (bmp_type) {
|
switch (bmp_type) {
|
||||||
case BMP180_CHIPID:
|
case BMP180_CHIPID:
|
||||||
success = Bmp180Calibration(bmp_count);
|
success = Bmp180Calibration(bmp_count);
|
||||||
|
@ -494,7 +494,7 @@ void BmpRead(void)
|
||||||
{
|
{
|
||||||
if (!bmp_sensors) { return; }
|
if (!bmp_sensors) { return; }
|
||||||
|
|
||||||
for (byte bmp_idx = 0; bmp_idx < bmp_count; bmp_idx++) {
|
for (uint8_t bmp_idx = 0; bmp_idx < bmp_count; bmp_idx++) {
|
||||||
switch (bmp_sensors[bmp_idx].bmp_type) {
|
switch (bmp_sensors[bmp_idx].bmp_type) {
|
||||||
case BMP180_CHIPID:
|
case BMP180_CHIPID:
|
||||||
Bmp180Read(bmp_idx);
|
Bmp180Read(bmp_idx);
|
||||||
|
@ -525,11 +525,11 @@ void BmpEverySecond(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BmpShow(boolean json)
|
void BmpShow(bool json)
|
||||||
{
|
{
|
||||||
if (!bmp_sensors) { return; }
|
if (!bmp_sensors) { return; }
|
||||||
|
|
||||||
for (byte bmp_idx = 0; bmp_idx < bmp_count; bmp_idx++) {
|
for (uint8_t bmp_idx = 0; bmp_idx < bmp_count; bmp_idx++) {
|
||||||
if (bmp_sensors[bmp_idx].bmp_type) {
|
if (bmp_sensors[bmp_idx].bmp_type) {
|
||||||
float bmp_sealevel = 0.0;
|
float bmp_sealevel = 0.0;
|
||||||
if (bmp_sensors[bmp_idx].bmp_pressure != 0.0) {
|
if (bmp_sensors[bmp_idx].bmp_pressure != 0.0) {
|
||||||
|
@ -621,9 +621,9 @@ void BmpShow(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns09(byte function)
|
bool Xsns09(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (i2c_flg) {
|
if (i2c_flg) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -44,8 +44,8 @@ bool Bh1750Read(void)
|
||||||
if (bh1750_valid) { bh1750_valid--; }
|
if (bh1750_valid) { bh1750_valid--; }
|
||||||
|
|
||||||
if (2 != Wire.requestFrom(bh1750_address, (uint8_t)2)) { return false; }
|
if (2 != Wire.requestFrom(bh1750_address, (uint8_t)2)) { return false; }
|
||||||
byte msb = Wire.read();
|
uint8_t msb = Wire.read();
|
||||||
byte lsb = Wire.read();
|
uint8_t lsb = Wire.read();
|
||||||
bh1750_illuminance = ((msb << 8) | lsb) / 1.2;
|
bh1750_illuminance = ((msb << 8) | lsb) / 1.2;
|
||||||
bh1750_valid = SENSOR_MAX_MISS;
|
bh1750_valid = SENSOR_MAX_MISS;
|
||||||
return true;
|
return true;
|
||||||
|
@ -59,7 +59,7 @@ void Bh1750Detect(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (byte i = 0; i < sizeof(bh1750_addresses); i++) {
|
for (uint8_t i = 0; i < sizeof(bh1750_addresses); i++) {
|
||||||
bh1750_address = bh1750_addresses[i];
|
bh1750_address = bh1750_addresses[i];
|
||||||
Wire.beginTransmission(bh1750_address);
|
Wire.beginTransmission(bh1750_address);
|
||||||
Wire.write(BH1750_CONTINUOUS_HIGH_RES_MODE);
|
Wire.write(BH1750_CONTINUOUS_HIGH_RES_MODE);
|
||||||
|
@ -89,7 +89,7 @@ void Bh1750EverySecond(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Bh1750Show(boolean json)
|
void Bh1750Show(bool json)
|
||||||
{
|
{
|
||||||
if (bh1750_valid) {
|
if (bh1750_valid) {
|
||||||
if (json) {
|
if (json) {
|
||||||
|
@ -111,9 +111,9 @@ void Bh1750Show(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns10(byte function)
|
bool Xsns10(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (i2c_flg) {
|
if (i2c_flg) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -187,7 +187,7 @@ void Veml6070EverySecond(void)
|
||||||
|
|
||||||
/********************************************************************************************/
|
/********************************************************************************************/
|
||||||
|
|
||||||
void Veml6070ModeCmd(boolean mode_cmd)
|
void Veml6070ModeCmd(bool mode_cmd)
|
||||||
{
|
{
|
||||||
// mode_cmd 1 = on = 1[ms]
|
// mode_cmd 1 = on = 1[ms]
|
||||||
// mode_cmd 0 = off = 2[ms]
|
// mode_cmd 0 = off = 2[ms]
|
||||||
|
@ -270,7 +270,7 @@ double Veml6070UvPower(double uvrisk)
|
||||||
|
|
||||||
/********************************************************************************************/
|
/********************************************************************************************/
|
||||||
|
|
||||||
void Veml6070Show(boolean json)
|
void Veml6070Show(bool json)
|
||||||
{
|
{
|
||||||
if (veml6070_type) {
|
if (veml6070_type) {
|
||||||
// convert double values to string
|
// convert double values to string
|
||||||
|
@ -307,9 +307,9 @@ void Veml6070Show(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns11(byte function)
|
bool Xsns11(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (i2c_flg) {
|
if (i2c_flg) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -165,7 +165,7 @@ void Ads1115Detect(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (byte i = 0; i < sizeof(ads1115_addresses); i++) {
|
for (uint8_t i = 0; i < sizeof(ads1115_addresses); i++) {
|
||||||
ads1115_address = ads1115_addresses[i];
|
ads1115_address = ads1115_addresses[i];
|
||||||
if (I2cValidRead16(&buffer, ads1115_address, ADS1115_REG_POINTER_CONVERT)) {
|
if (I2cValidRead16(&buffer, ads1115_address, ADS1115_REG_POINTER_CONVERT)) {
|
||||||
Ads1115StartComparator(i, ADS1115_REG_CONFIG_MODE_CONTIN);
|
Ads1115StartComparator(i, ADS1115_REG_CONFIG_MODE_CONTIN);
|
||||||
|
@ -177,13 +177,13 @@ void Ads1115Detect(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Ads1115Show(boolean json)
|
void Ads1115Show(bool json)
|
||||||
{
|
{
|
||||||
if (ads1115_type) {
|
if (ads1115_type) {
|
||||||
char stemp[10];
|
char stemp[10];
|
||||||
|
|
||||||
byte dsxflg = 0;
|
uint8_t dsxflg = 0;
|
||||||
for (byte i = 0; i < 4; i++) {
|
for (uint8_t i = 0; i < 4; i++) {
|
||||||
int16_t adc_value = Ads1115GetConversion(i);
|
int16_t adc_value = Ads1115GetConversion(i);
|
||||||
|
|
||||||
if (json) {
|
if (json) {
|
||||||
|
@ -212,9 +212,9 @@ void Ads1115Show(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns12(byte function)
|
bool Xsns12(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (i2c_flg) {
|
if (i2c_flg) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -55,7 +55,7 @@ uint8_t ads1115_addresses[] = {
|
||||||
ADS1115_ADDRESS_ADDR_SCL // address pin tied to SCL pin
|
ADS1115_ADDRESS_ADDR_SCL // address pin tied to SCL pin
|
||||||
};
|
};
|
||||||
|
|
||||||
int16_t Ads1115GetConversion(byte channel)
|
int16_t Ads1115GetConversion(uint8_t channel)
|
||||||
{
|
{
|
||||||
switch (channel) {
|
switch (channel) {
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -81,7 +81,7 @@ void Ads1115Detect(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (byte i = 0; i < sizeof(ads1115_addresses); i++) {
|
for (uint8_t i = 0; i < sizeof(ads1115_addresses); i++) {
|
||||||
ads1115_address = ads1115_addresses[i];
|
ads1115_address = ads1115_addresses[i];
|
||||||
ADS1115 adc0(ads1115_address);
|
ADS1115 adc0(ads1115_address);
|
||||||
if (adc0.testConnection()) {
|
if (adc0.testConnection()) {
|
||||||
|
@ -97,13 +97,13 @@ void Ads1115Detect(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Ads1115Show(boolean json)
|
void Ads1115Show(bool json)
|
||||||
{
|
{
|
||||||
if (ads1115_type) {
|
if (ads1115_type) {
|
||||||
char stemp[10];
|
char stemp[10];
|
||||||
|
|
||||||
byte dsxflg = 0;
|
uint8_t dsxflg = 0;
|
||||||
for (byte i = 0; i < 4; i++) {
|
for (uint8_t i = 0; i < 4; i++) {
|
||||||
int16_t adc_value = Ads1115GetConversion(i);
|
int16_t adc_value = Ads1115GetConversion(i);
|
||||||
|
|
||||||
if (json) {
|
if (json) {
|
||||||
|
@ -132,9 +132,9 @@ void Ads1115Show(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns12(byte function)
|
bool Xsns12(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (i2c_flg) {
|
if (i2c_flg) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -177,7 +177,7 @@ bool Ina219Read(void)
|
||||||
|
|
||||||
bool Ina219CommandSensor(void)
|
bool Ina219CommandSensor(void)
|
||||||
{
|
{
|
||||||
boolean serviced = true;
|
bool serviced = true;
|
||||||
|
|
||||||
if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 2)) {
|
if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 2)) {
|
||||||
Settings.ina219_mode = XdrvMailbox.payload;
|
Settings.ina219_mode = XdrvMailbox.payload;
|
||||||
|
@ -194,7 +194,7 @@ void Ina219Detect(void)
|
||||||
{
|
{
|
||||||
if (ina219_type) { return; }
|
if (ina219_type) { return; }
|
||||||
|
|
||||||
for (byte i = 0; i < sizeof(ina219_addresses); i++) {
|
for (uint8_t i = 0; i < sizeof(ina219_addresses); i++) {
|
||||||
ina219_address = ina219_addresses[i];
|
ina219_address = ina219_addresses[i];
|
||||||
if (Ina219SetCalibration(Settings.ina219_mode)) {
|
if (Ina219SetCalibration(Settings.ina219_mode)) {
|
||||||
ina219_type = 1;
|
ina219_type = 1;
|
||||||
|
@ -229,7 +229,7 @@ const char HTTP_SNS_INA219_DATA[] PROGMEM = "%s"
|
||||||
"{s}INA219 " D_POWERUSAGE "{m}%s " D_UNIT_WATT "{e}";
|
"{s}INA219 " D_POWERUSAGE "{m}%s " D_UNIT_WATT "{e}";
|
||||||
#endif // USE_WEBSERVER
|
#endif // USE_WEBSERVER
|
||||||
|
|
||||||
void Ina219Show(boolean json)
|
void Ina219Show(bool json)
|
||||||
{
|
{
|
||||||
if (ina219_valid) {
|
if (ina219_valid) {
|
||||||
float fpower = ina219_voltage * ina219_current;
|
float fpower = ina219_voltage * ina219_current;
|
||||||
|
@ -261,9 +261,9 @@ void Ina219Show(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns13(byte function)
|
bool Xsns13(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (i2c_flg) {
|
if (i2c_flg) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -82,7 +82,7 @@ void Sht3xDetect(void)
|
||||||
|
|
||||||
float t;
|
float t;
|
||||||
float h;
|
float h;
|
||||||
for (byte i = 0; i < SHT3X_MAX_SENSORS; i++) {
|
for (uint8_t i = 0; i < SHT3X_MAX_SENSORS; i++) {
|
||||||
if (Sht3xRead(t, h, sht3x_addresses[i])) {
|
if (Sht3xRead(t, h, sht3x_addresses[i])) {
|
||||||
sht3x_sensors[sht3x_count].address = sht3x_addresses[i];
|
sht3x_sensors[sht3x_count].address = sht3x_addresses[i];
|
||||||
GetTextIndexed(sht3x_sensors[sht3x_count].types, sizeof(sht3x_sensors[sht3x_count].types), i, kShtTypes);
|
GetTextIndexed(sht3x_sensors[sht3x_count].types, sizeof(sht3x_sensors[sht3x_count].types), i, kShtTypes);
|
||||||
|
@ -93,13 +93,13 @@ void Sht3xDetect(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sht3xShow(boolean json)
|
void Sht3xShow(bool json)
|
||||||
{
|
{
|
||||||
if (sht3x_count) {
|
if (sht3x_count) {
|
||||||
float t;
|
float t;
|
||||||
float h;
|
float h;
|
||||||
char types[11];
|
char types[11];
|
||||||
for (byte i = 0; i < sht3x_count; i++) {
|
for (uint8_t i = 0; i < sht3x_count; i++) {
|
||||||
if (Sht3xRead(t, h, sht3x_sensors[i].address)) {
|
if (Sht3xRead(t, h, sht3x_sensors[i].address)) {
|
||||||
|
|
||||||
if (0 == i) { SetGlobalValues(t, h); }
|
if (0 == i) { SetGlobalValues(t, h); }
|
||||||
|
@ -140,9 +140,9 @@ void Sht3xShow(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns14(byte function)
|
bool Xsns14(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (i2c_flg) {
|
if (i2c_flg) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -98,17 +98,17 @@ uint8_t mhz_state = 0;
|
||||||
|
|
||||||
/*********************************************************************************************/
|
/*********************************************************************************************/
|
||||||
|
|
||||||
byte MhzCalculateChecksum(byte *array)
|
uint8_t MhzCalculateChecksum(uint8_t *array)
|
||||||
{
|
{
|
||||||
byte checksum = 0;
|
uint8_t checksum = 0;
|
||||||
for (byte i = 1; i < 8; i++) {
|
for (uint8_t i = 1; i < 8; i++) {
|
||||||
checksum += array[i];
|
checksum += array[i];
|
||||||
}
|
}
|
||||||
checksum = 255 - checksum;
|
checksum = 255 - checksum;
|
||||||
return (checksum +1);
|
return (checksum +1);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t MhzSendCmd(byte command_id)
|
size_t MhzSendCmd(uint8_t command_id)
|
||||||
{
|
{
|
||||||
uint8_t mhz_send[9] = { 0 };
|
uint8_t mhz_send[9] = { 0 };
|
||||||
|
|
||||||
|
@ -204,7 +204,7 @@ void MhzEverySecond(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
byte crc = MhzCalculateChecksum(mhz_response);
|
uint8_t crc = MhzCalculateChecksum(mhz_response);
|
||||||
if (mhz_response[8] != crc) {
|
if (mhz_response[8] != crc) {
|
||||||
// AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_DEBUG "MH-Z19 crc error"));
|
// AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_DEBUG "MH-Z19 crc error"));
|
||||||
return;
|
return;
|
||||||
|
@ -270,7 +270,7 @@ void MhzEverySecond(void)
|
||||||
|
|
||||||
bool MhzCommandSensor(void)
|
bool MhzCommandSensor(void)
|
||||||
{
|
{
|
||||||
boolean serviced = true;
|
bool serviced = true;
|
||||||
|
|
||||||
switch (XdrvMailbox.payload) {
|
switch (XdrvMailbox.payload) {
|
||||||
case 2:
|
case 2:
|
||||||
|
@ -319,7 +319,7 @@ void MhzInit(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MhzShow(boolean json)
|
void MhzShow(bool json)
|
||||||
{
|
{
|
||||||
char types[7] = "MHZ19B"; // MHZ19B for legacy reasons. Prefered is MHZ19
|
char types[7] = "MHZ19B"; // MHZ19B for legacy reasons. Prefered is MHZ19
|
||||||
char temperature[33];
|
char temperature[33];
|
||||||
|
@ -344,9 +344,9 @@ void MhzShow(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns15(byte function)
|
bool Xsns15(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (mhz_type) {
|
if (mhz_type) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -97,7 +97,7 @@ const char HTTP_SNS_TSL2561[] PROGMEM =
|
||||||
"%s{s}TSL2561 " D_ILLUMINANCE "{m}%u.%03u " D_UNIT_LUX "{e}"; // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
"%s{s}TSL2561 " D_ILLUMINANCE "{m}%u.%03u " D_UNIT_LUX "{e}"; // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
||||||
#endif // USE_WEBSERVER
|
#endif // USE_WEBSERVER
|
||||||
|
|
||||||
void Tsl2561Show(boolean json)
|
void Tsl2561Show(bool json)
|
||||||
{
|
{
|
||||||
if (tsl2561_valid) {
|
if (tsl2561_valid) {
|
||||||
if (json) {
|
if (json) {
|
||||||
|
@ -118,9 +118,9 @@ void Tsl2561Show(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns16(byte function)
|
bool Xsns16(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (i2c_flg) {
|
if (i2c_flg) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -145,7 +145,7 @@ void SenseairInit(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SenseairShow(boolean json)
|
void SenseairShow(bool json)
|
||||||
{
|
{
|
||||||
char temperature[33];
|
char temperature[33];
|
||||||
dtostrfd(senseair_temperature, Settings.flag2.temperature_resolution, temperature);
|
dtostrfd(senseair_temperature, Settings.flag2.temperature_resolution, temperature);
|
||||||
|
@ -177,9 +177,9 @@ void SenseairShow(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns17(byte function)
|
bool Xsns17(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (senseair_type) {
|
if (senseair_type) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -45,7 +45,7 @@ struct pms5003data {
|
||||||
|
|
||||||
/*********************************************************************************************/
|
/*********************************************************************************************/
|
||||||
|
|
||||||
boolean PmsReadData(void)
|
bool PmsReadData(void)
|
||||||
{
|
{
|
||||||
if (! PmsSerial->available()) {
|
if (! PmsSerial->available()) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -128,7 +128,7 @@ const char HTTP_PMS5003_SNS[] PROGMEM = "%s"
|
||||||
"{s}PMS5003 " D_PARTICALS_BEYOND " 10 " D_UNIT_MICROMETER "{m}%d " D_UNIT_PARTS_PER_DECILITER "{e}"; // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
"{s}PMS5003 " D_PARTICALS_BEYOND " 10 " D_UNIT_MICROMETER "{m}%d " D_UNIT_PARTS_PER_DECILITER "{e}"; // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
||||||
#endif // USE_WEBSERVER
|
#endif // USE_WEBSERVER
|
||||||
|
|
||||||
void PmsShow(boolean json)
|
void PmsShow(bool json)
|
||||||
{
|
{
|
||||||
if (pms_valid) {
|
if (pms_valid) {
|
||||||
if (json) {
|
if (json) {
|
||||||
|
@ -158,9 +158,9 @@ void PmsShow(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns18(byte function)
|
bool Xsns18(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (pms_type) {
|
if (pms_type) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -38,7 +38,7 @@ void MGSInit(void) {
|
||||||
gas.begin(MGS_SENSOR_ADDR);
|
gas.begin(MGS_SENSOR_ADDR);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean MGSPrepare(void)
|
bool MGSPrepare(void)
|
||||||
{
|
{
|
||||||
gas.begin(MGS_SENSOR_ADDR);
|
gas.begin(MGS_SENSOR_ADDR);
|
||||||
if (!gas.isError()) {
|
if (!gas.isError()) {
|
||||||
|
@ -61,7 +61,7 @@ char* measure_gas(int gas_type, char* buffer)
|
||||||
const char HTTP_MGS_GAS[] PROGMEM = "%s{s}MGS %s{m}%s " D_UNIT_PARTS_PER_MILLION "{e}"; // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
const char HTTP_MGS_GAS[] PROGMEM = "%s{s}MGS %s{m}%s " D_UNIT_PARTS_PER_MILLION "{e}"; // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
||||||
#endif // USE_WEBSERVER
|
#endif // USE_WEBSERVER
|
||||||
|
|
||||||
void MGSShow(boolean json)
|
void MGSShow(bool json)
|
||||||
{
|
{
|
||||||
char buffer[33];
|
char buffer[33];
|
||||||
if (json) {
|
if (json) {
|
||||||
|
@ -91,9 +91,9 @@ void MGSShow(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns19(byte function)
|
bool Xsns19(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
static int detected = false;
|
static int detected = false;
|
||||||
|
|
||||||
if (i2c_flg) {
|
if (i2c_flg) {
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
/*********************************************************************************************\
|
/*********************************************************************************************\
|
||||||
* Nova Fitness SDS011 (and possibly SDS021) particle concentration sensor
|
* Nova Fitness SDS011 (and possibly SDS021) particle concentration sensor
|
||||||
* For background information see http://aqicn.org/sensor/sds011/
|
* For background information see http://aqicn.org/sensor/sds011/
|
||||||
* For protocol specification see
|
* For protocol specification see
|
||||||
* https://cdn.sparkfun.com/assets/parts/1/2/2/7/5/Laser_Dust_Sensor_Control_Protocol_V1.3.pdf
|
* https://cdn.sparkfun.com/assets/parts/1/2/2/7/5/Laser_Dust_Sensor_Control_Protocol_V1.3.pdf
|
||||||
*
|
*
|
||||||
* Hardware Serial will be selected if GPIO3 = [SDS0X01]
|
* Hardware Serial will be selected if GPIO3 = [SDS0X01]
|
||||||
|
@ -74,12 +74,12 @@ struct sds011data {
|
||||||
#define NOVA_SDS_SLEEP 1 // Subcmnd "sleep mode"
|
#define NOVA_SDS_SLEEP 1 // Subcmnd "sleep mode"
|
||||||
|
|
||||||
|
|
||||||
bool NovaSdsCommand(uint8_t byte1, uint8_t byte2, uint8_t byte3, uint16_t sensorid, byte *buffer)
|
bool NovaSdsCommand(uint8_t byte1, uint8_t byte2, uint8_t byte3, uint16_t sensorid, uint8_t *buffer)
|
||||||
{
|
{
|
||||||
uint8_t novasds_cmnd[19] = {0xAA, 0xB4, byte1, byte2, byte3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, (uint8_t)(sensorid & 0xFF), (uint8_t)((sensorid>>8) & 0xFF), 0x00, 0xAB};
|
uint8_t novasds_cmnd[19] = {0xAA, 0xB4, byte1, byte2, byte3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, (uint8_t)(sensorid & 0xFF), (uint8_t)((sensorid>>8) & 0xFF), 0x00, 0xAB};
|
||||||
|
|
||||||
// calc crc
|
// calc crc
|
||||||
for (byte i = 2; i < 17; i++) {
|
for (uint8_t i = 2; i < 17; i++) {
|
||||||
novasds_cmnd[17] += novasds_cmnd[i];
|
novasds_cmnd[17] += novasds_cmnd[i];
|
||||||
}
|
}
|
||||||
//~ snprintf_P(log_data, sizeof(log_data), PSTR("SDS: Send %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X"),
|
//~ snprintf_P(log_data, sizeof(log_data), PSTR("SDS: Send %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X"),
|
||||||
|
@ -97,7 +97,7 @@ bool NovaSdsCommand(uint8_t byte1, uint8_t byte2, uint8_t byte3, uint16_t sensor
|
||||||
// timeout
|
// timeout
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
byte recbuf[10];
|
uint8_t recbuf[10];
|
||||||
memset(recbuf, 0, sizeof(recbuf));
|
memset(recbuf, 0, sizeof(recbuf));
|
||||||
// sync to 0xAA header
|
// sync to 0xAA header
|
||||||
while ( (TimePassedSince(cmndtime) < NOVA_SDS_RECDATA_TIMEOUT) && ( NovaSdsSerial->available() > 0) && (0xAA != (recbuf[0] = NovaSdsSerial->read())) );
|
while ( (TimePassedSince(cmndtime) < NOVA_SDS_RECDATA_TIMEOUT) && ( NovaSdsSerial->available() > 0) && (0xAA != (recbuf[0] = NovaSdsSerial->read())) );
|
||||||
|
@ -134,7 +134,7 @@ void NovaSdsSetWorkPeriod(void)
|
||||||
|
|
||||||
bool NovaSdsReadData(void)
|
bool NovaSdsReadData(void)
|
||||||
{
|
{
|
||||||
byte d[10];
|
uint8_t d[10];
|
||||||
if ( ! NovaSdsCommand(NOVA_SDS_QUERY_DATA, 0, 0, NOVA_SDS_DEVICE_ID, d) ) {
|
if ( ! NovaSdsCommand(NOVA_SDS_QUERY_DATA, 0, 0, NOVA_SDS_DEVICE_ID, d) ) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -186,7 +186,7 @@ const char HTTP_SDS0X1_SNS[] PROGMEM = "%s"
|
||||||
"{s}SDS0X1 " D_ENVIRONMENTAL_CONCENTRATION " 10 " D_UNIT_MICROMETER "{m}%s " D_UNIT_MICROGRAM_PER_CUBIC_METER "{e}"; // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
"{s}SDS0X1 " D_ENVIRONMENTAL_CONCENTRATION " 10 " D_UNIT_MICROMETER "{m}%s " D_UNIT_MICROGRAM_PER_CUBIC_METER "{e}"; // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
||||||
#endif // USE_WEBSERVER
|
#endif // USE_WEBSERVER
|
||||||
|
|
||||||
void NovaSdsShow(boolean json)
|
void NovaSdsShow(bool json)
|
||||||
{
|
{
|
||||||
if (novasds_valid) {
|
if (novasds_valid) {
|
||||||
float pm10f = (float)(novasds_data.pm100) / 10.0f;
|
float pm10f = (float)(novasds_data.pm100) / 10.0f;
|
||||||
|
@ -215,9 +215,9 @@ void NovaSdsShow(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns20(byte function)
|
bool Xsns20(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (novasds_type) {
|
if (novasds_type) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -70,7 +70,7 @@ const char HTTP_SNS_SGP30[] PROGMEM = "%s"
|
||||||
"{s}SGP30 " D_ECO2 "{m}%d " D_UNIT_PARTS_PER_MILLION "{e}" // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
"{s}SGP30 " D_ECO2 "{m}%d " D_UNIT_PARTS_PER_MILLION "{e}" // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
||||||
"{s}SGP30 " D_TVOC "{m}%d " D_UNIT_PARTS_PER_BILLION "{e}";
|
"{s}SGP30 " D_TVOC "{m}%d " D_UNIT_PARTS_PER_BILLION "{e}";
|
||||||
|
|
||||||
void Sgp30Show(boolean json)
|
void Sgp30Show(bool json)
|
||||||
{
|
{
|
||||||
if (sgp30_ready) {
|
if (sgp30_ready) {
|
||||||
if (json) {
|
if (json) {
|
||||||
|
@ -90,9 +90,9 @@ void Sgp30Show(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns21(byte function)
|
bool Xsns21(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (i2c_flg) {
|
if (i2c_flg) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -46,7 +46,7 @@ const char HTTP_SNS_DISTANCE[] PROGMEM =
|
||||||
"%s{s}SR04 " D_DISTANCE "{m}%s" D_UNIT_CENTIMETER "{e}"; // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
"%s{s}SR04 " D_DISTANCE "{m}%s" D_UNIT_CENTIMETER "{e}"; // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
||||||
#endif // USE_WEBSERVER
|
#endif // USE_WEBSERVER
|
||||||
|
|
||||||
void Sr04Show(boolean json)
|
void Sr04Show(bool json)
|
||||||
{
|
{
|
||||||
distance = (real64_t)(sonar->ping_median(5))/ US_ROUNDTRIP_CM;
|
distance = (real64_t)(sonar->ping_median(5))/ US_ROUNDTRIP_CM;
|
||||||
|
|
||||||
|
@ -75,9 +75,9 @@ void Sr04Show(boolean json)
|
||||||
|
|
||||||
#define XSNS_22
|
#define XSNS_22
|
||||||
|
|
||||||
boolean Xsns22(byte function)
|
bool Xsns22(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if ((pin[GPIO_SR04_ECHO] < 99) && (pin[GPIO_SR04_TRIG] < 99)) {
|
if ((pin[GPIO_SR04_ECHO] < 99) && (pin[GPIO_SR04_TRIG] < 99)) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -281,7 +281,7 @@ const char HTTP_SNS_SDM120_DATA[] PROGMEM = "%s"
|
||||||
;
|
;
|
||||||
#endif // USE_WEBSERVER
|
#endif // USE_WEBSERVER
|
||||||
|
|
||||||
void SDM120Show(boolean json)
|
void SDM120Show(bool json)
|
||||||
{
|
{
|
||||||
char voltage[33];
|
char voltage[33];
|
||||||
dtostrfd(sdm120_voltage, Settings.flag2.voltage_resolution, voltage);
|
dtostrfd(sdm120_voltage, Settings.flag2.voltage_resolution, voltage);
|
||||||
|
@ -343,9 +343,9 @@ void SDM120Show(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns23(byte function)
|
bool Xsns23(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (sdm120_type) {
|
if (sdm120_type) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -276,7 +276,7 @@ void Si1145DeInit(void)
|
||||||
Si1145WriteByte(SI114X_COMMAND, SI114X_PSALS_AUTO);
|
Si1145WriteByte(SI114X_COMMAND, SI114X_PSALS_AUTO);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean Si1145Begin(void)
|
bool Si1145Begin(void)
|
||||||
{
|
{
|
||||||
if (!Si1145Present()) { return false; }
|
if (!Si1145Present()) { return false; }
|
||||||
|
|
||||||
|
@ -323,14 +323,14 @@ const char HTTP_SNS_SI1145[] PROGMEM = "%s"
|
||||||
"{s}SI1145 " D_UV_INDEX "{m}%d.%d{e}";
|
"{s}SI1145 " D_UV_INDEX "{m}%d.%d{e}";
|
||||||
#endif // USE_WEBSERVER
|
#endif // USE_WEBSERVER
|
||||||
|
|
||||||
void Si1145Show(boolean json)
|
void Si1145Show(bool json)
|
||||||
{
|
{
|
||||||
if (si1145_type && Si1145Present()) {
|
if (si1145_type && Si1145Present()) {
|
||||||
uint16_t visible = Si1145ReadVisible();
|
uint16_t visible = Si1145ReadVisible();
|
||||||
uint16_t infrared = Si1145ReadIR();
|
uint16_t infrared = Si1145ReadIR();
|
||||||
uint16_t uvindex = Si1145ReadUV();
|
uint16_t uvindex = Si1145ReadUV();
|
||||||
if (json) {
|
if (json) {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"SI1145\":{\"" D_JSON_ILLUMINANCE "\":%d,\"" D_JSON_INFRARED "\":%d,\"" D_JSON_UVINDEX "\":%d.%d}"),
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"SI1145\":{\"" D_JSON_ILLUMINANCE "\":%d,\"" D_JSON_INFRARED "\":%d,\"" D_JSON_UV_INDEX "\":%d.%d}"),
|
||||||
mqtt_data, visible, infrared, uvindex /100, uvindex %100);
|
mqtt_data, visible, infrared, uvindex /100, uvindex %100);
|
||||||
#ifdef USE_DOMOTICZ
|
#ifdef USE_DOMOTICZ
|
||||||
if (0 == tele_period) DomoticzSensor(DZ_ILLUMINANCE, visible);
|
if (0 == tele_period) DomoticzSensor(DZ_ILLUMINANCE, visible);
|
||||||
|
@ -349,9 +349,9 @@ void Si1145Show(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns24(byte function)
|
bool Xsns24(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (i2c_flg) {
|
if (i2c_flg) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -267,7 +267,7 @@ const char HTTP_SNS_SDM630_DATA[] PROGMEM = "%s"
|
||||||
"{s}SDM630 " D_ENERGY_TOTAL "{m}%s " D_UNIT_KILOWATTHOUR "{e}";
|
"{s}SDM630 " D_ENERGY_TOTAL "{m}%s " D_UNIT_KILOWATTHOUR "{e}";
|
||||||
#endif // USE_WEBSERVER
|
#endif // USE_WEBSERVER
|
||||||
|
|
||||||
void SDM630Show(boolean json)
|
void SDM630Show(bool json)
|
||||||
{
|
{
|
||||||
char voltage_l1[33];
|
char voltage_l1[33];
|
||||||
dtostrfd(sdm630_voltage[0], Settings.flag2.voltage_resolution, voltage_l1);
|
dtostrfd(sdm630_voltage[0], Settings.flag2.voltage_resolution, voltage_l1);
|
||||||
|
@ -326,9 +326,9 @@ void SDM630Show(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns25(byte function)
|
bool Xsns25(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (sdm630_type) {
|
if (sdm630_type) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -53,7 +53,7 @@ void LM75ADDetect(void)
|
||||||
if (lm75ad_type) { return; }
|
if (lm75ad_type) { return; }
|
||||||
|
|
||||||
uint16_t buffer;
|
uint16_t buffer;
|
||||||
for (byte i = 0; i < sizeof(lm75ad_addresses); i++) {
|
for (uint8_t i = 0; i < sizeof(lm75ad_addresses); i++) {
|
||||||
lm75ad_address = lm75ad_addresses[i];
|
lm75ad_address = lm75ad_addresses[i];
|
||||||
if (I2cValidRead16(&buffer, lm75ad_address, LM75_THYST_REGISTER)) {
|
if (I2cValidRead16(&buffer, lm75ad_address, LM75_THYST_REGISTER)) {
|
||||||
if (buffer == 0x4B00) {
|
if (buffer == 0x4B00) {
|
||||||
|
@ -78,7 +78,7 @@ float LM75ADGetTemp(void) {
|
||||||
return ConvertTemp(sign * t * 0.125);
|
return ConvertTemp(sign * t * 0.125);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LM75ADShow(boolean json)
|
void LM75ADShow(bool json)
|
||||||
{
|
{
|
||||||
if (lm75ad_type) {
|
if (lm75ad_type) {
|
||||||
float t = LM75ADGetTemp();
|
float t = LM75ADGetTemp();
|
||||||
|
@ -102,9 +102,9 @@ void LM75ADShow(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns26(byte function)
|
bool Xsns26(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (i2c_flg) {
|
if (i2c_flg) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -1903,7 +1903,7 @@ bool APDS9960_detect(void)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean success = false;
|
bool success = false;
|
||||||
APDS9960type = I2cRead8(APDS9960_I2C_ADDR, APDS9960_ID);
|
APDS9960type = I2cRead8(APDS9960_I2C_ADDR, APDS9960_ID);
|
||||||
|
|
||||||
if (APDS9960type == APDS9960_CHIPID_1 || APDS9960type == APDS9960_CHIPID_2) {
|
if (APDS9960type == APDS9960_CHIPID_1 || APDS9960type == APDS9960_CHIPID_2) {
|
||||||
|
@ -1935,7 +1935,7 @@ bool APDS9960_detect(void)
|
||||||
* Presentation
|
* Presentation
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
void APDS9960_show(boolean json)
|
void APDS9960_show(bool json)
|
||||||
{
|
{
|
||||||
if (!APDS9960type) {
|
if (!APDS9960type) {
|
||||||
return;
|
return;
|
||||||
|
@ -1993,7 +1993,7 @@ void APDS9960_show(boolean json)
|
||||||
|
|
||||||
bool APDS9960CommandSensor(void)
|
bool APDS9960CommandSensor(void)
|
||||||
{
|
{
|
||||||
boolean serviced = true;
|
bool serviced = true;
|
||||||
|
|
||||||
switch (XdrvMailbox.payload) {
|
switch (XdrvMailbox.payload) {
|
||||||
case 0: // Off
|
case 0: // Off
|
||||||
|
@ -2039,9 +2039,9 @@ bool APDS9960CommandSensor(void)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns27(byte function)
|
bool Xsns27(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (i2c_flg) {
|
if (i2c_flg) {
|
||||||
if (FUNC_INIT == function) {
|
if (FUNC_INIT == function) {
|
||||||
|
|
|
@ -46,7 +46,7 @@ uint8_t tm1638_state = 0;
|
||||||
* and from library https://github.com/MartyMacGyver/TM1638-demos-and-examples
|
* and from library https://github.com/MartyMacGyver/TM1638-demos-and-examples
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
void Tm16XXSend(byte data)
|
void Tm16XXSend(uint8_t data)
|
||||||
{
|
{
|
||||||
for (uint8_t i = 0; i < 8; i++) {
|
for (uint8_t i = 0; i < 8; i++) {
|
||||||
digitalWrite(tm1638_data_pin, !!(data & (1 << i)));
|
digitalWrite(tm1638_data_pin, !!(data & (1 << i)));
|
||||||
|
@ -56,14 +56,14 @@ void Tm16XXSend(byte data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Tm16XXSendCommand(byte cmd)
|
void Tm16XXSendCommand(uint8_t cmd)
|
||||||
{
|
{
|
||||||
digitalWrite(tm1638_strobe_pin, LOW);
|
digitalWrite(tm1638_strobe_pin, LOW);
|
||||||
Tm16XXSend(cmd);
|
Tm16XXSend(cmd);
|
||||||
digitalWrite(tm1638_strobe_pin, HIGH);
|
digitalWrite(tm1638_strobe_pin, HIGH);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TM16XXSendData(byte address, byte data)
|
void TM16XXSendData(uint8_t address, uint8_t data)
|
||||||
{
|
{
|
||||||
Tm16XXSendCommand(0x44);
|
Tm16XXSendCommand(0x44);
|
||||||
digitalWrite(tm1638_strobe_pin, LOW);
|
digitalWrite(tm1638_strobe_pin, LOW);
|
||||||
|
@ -72,9 +72,9 @@ void TM16XXSendData(byte address, byte data)
|
||||||
digitalWrite(tm1638_strobe_pin, HIGH);
|
digitalWrite(tm1638_strobe_pin, HIGH);
|
||||||
}
|
}
|
||||||
|
|
||||||
byte Tm16XXReceive(void)
|
uint8_t Tm16XXReceive(void)
|
||||||
{
|
{
|
||||||
byte temp = 0;
|
uint8_t temp = 0;
|
||||||
|
|
||||||
// Pull-up on
|
// Pull-up on
|
||||||
pinMode(tm1638_data_pin, INPUT);
|
pinMode(tm1638_data_pin, INPUT);
|
||||||
|
@ -103,7 +103,7 @@ void Tm16XXClearDisplay(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Tm1638SetLED(byte color, byte pos)
|
void Tm1638SetLED(uint8_t color, uint8_t pos)
|
||||||
{
|
{
|
||||||
TM16XXSendData((pos << 1) + 1, color);
|
TM16XXSendData((pos << 1) + 1, color);
|
||||||
}
|
}
|
||||||
|
@ -111,7 +111,7 @@ void Tm1638SetLED(byte color, byte pos)
|
||||||
void Tm1638SetLEDs(word leds)
|
void Tm1638SetLEDs(word leds)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < tm1638_displays; i++) {
|
for (int i = 0; i < tm1638_displays; i++) {
|
||||||
byte color = 0;
|
uint8_t color = 0;
|
||||||
|
|
||||||
if ((leds & (1 << i)) != 0) {
|
if ((leds & (1 << i)) != 0) {
|
||||||
color |= TM1638_COLOR_RED;
|
color |= TM1638_COLOR_RED;
|
||||||
|
@ -125,9 +125,9 @@ void Tm1638SetLEDs(word leds)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
byte Tm1638GetButtons(void)
|
uint8_t Tm1638GetButtons(void)
|
||||||
{
|
{
|
||||||
byte keys = 0;
|
uint8_t keys = 0;
|
||||||
|
|
||||||
digitalWrite(tm1638_strobe_pin, LOW);
|
digitalWrite(tm1638_strobe_pin, LOW);
|
||||||
Tm16XXSend(0x42);
|
Tm16XXSend(0x42);
|
||||||
|
@ -174,10 +174,10 @@ void TmInit(void)
|
||||||
void TmLoop(void)
|
void TmLoop(void)
|
||||||
{
|
{
|
||||||
if (tm1638_state) {
|
if (tm1638_state) {
|
||||||
byte buttons = Tm1638GetButtons();
|
uint8_t buttons = Tm1638GetButtons();
|
||||||
for (byte i = 0; i < MAX_SWITCHES; i++) {
|
for (uint8_t i = 0; i < MAX_SWITCHES; i++) {
|
||||||
SwitchSetVirtual(i, (buttons &1) ^1);
|
SwitchSetVirtual(i, (buttons &1) ^1);
|
||||||
byte color = (SwitchGetVirtual(i)) ? TM1638_COLOR_NONE : TM1638_COLOR_RED;
|
uint8_t color = (SwitchGetVirtual(i)) ? TM1638_COLOR_NONE : TM1638_COLOR_RED;
|
||||||
Tm1638SetLED(color, i);
|
Tm1638SetLED(color, i);
|
||||||
buttons >>= 1;
|
buttons >>= 1;
|
||||||
}
|
}
|
||||||
|
@ -186,7 +186,7 @@ void TmLoop(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
void TmShow(boolean json)
|
void TmShow(bool json)
|
||||||
{
|
{
|
||||||
if (tm1638_type) {
|
if (tm1638_type) {
|
||||||
|
|
||||||
|
@ -198,9 +198,9 @@ void TmShow(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns28(byte function)
|
bool Xsns28(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (tm1638_type) {
|
if (tm1638_type) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -325,7 +325,7 @@ void MCP230xx_CheckForInterrupt(void) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MCP230xx_Show(boolean json)
|
void MCP230xx_Show(bool json)
|
||||||
{
|
{
|
||||||
if (mcp230xx_type) {
|
if (mcp230xx_type) {
|
||||||
if (json) {
|
if (json) {
|
||||||
|
@ -426,8 +426,8 @@ void MCP230xx_Reset(uint8_t pinmode) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MCP230xx_Command(void) {
|
bool MCP230xx_Command(void) {
|
||||||
boolean serviced = true;
|
bool serviced = true;
|
||||||
boolean validpin = false;
|
bool validpin = false;
|
||||||
uint8_t paramcount = 0;
|
uint8_t paramcount = 0;
|
||||||
if (XdrvMailbox.data_len > 0) {
|
if (XdrvMailbox.data_len > 0) {
|
||||||
paramcount=1;
|
paramcount=1;
|
||||||
|
@ -781,9 +781,9 @@ void MCP230xx_Interrupt_Retain_Report(void) {
|
||||||
Interface
|
Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns29(byte function)
|
bool Xsns29(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (i2c_flg) {
|
if (i2c_flg) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -318,7 +318,7 @@ void Mpr121Init(struct mpr121 *pS)
|
||||||
* @post None.
|
* @post None.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
void Mpr121Show(struct mpr121 *pS, byte function)
|
void Mpr121Show(struct mpr121 *pS, uint8_t function)
|
||||||
{
|
{
|
||||||
|
|
||||||
// Loop through sensors
|
// Loop through sensors
|
||||||
|
@ -384,7 +384,7 @@ void Mpr121Show(struct mpr121 *pS, byte function)
|
||||||
}
|
}
|
||||||
} // if->running
|
} // if->running
|
||||||
} // for-loop i
|
} // for-loop i
|
||||||
} // void Mpr121Show(byte function)
|
} // void Mpr121Show(uint8_t function)
|
||||||
|
|
||||||
/*********************************************************************************************\
|
/*********************************************************************************************\
|
||||||
* Interface
|
* Interface
|
||||||
|
@ -400,15 +400,15 @@ void Mpr121Show(struct mpr121 *pS, byte function)
|
||||||
* FUNC_WEB_APPEND for displaying data in the Tasmota web-interface
|
* FUNC_WEB_APPEND for displaying data in the Tasmota web-interface
|
||||||
*
|
*
|
||||||
* @param byte function Tasmota function ID.
|
* @param byte function Tasmota function ID.
|
||||||
* @return boolean ???
|
* @return bool ???
|
||||||
* @pre None.
|
* @pre None.
|
||||||
* @post None.
|
* @post None.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
boolean Xsns30(byte function)
|
bool Xsns30(uint8_t function)
|
||||||
{
|
{
|
||||||
// ???
|
// ???
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
// Sensor state/data struct
|
// Sensor state/data struct
|
||||||
static struct mpr121 mpr121;
|
static struct mpr121 mpr121;
|
||||||
|
@ -440,7 +440,7 @@ boolean Xsns30(byte function)
|
||||||
#endif // USE_WEBSERVER
|
#endif // USE_WEBSERVER
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Return boolean result
|
// Return bool result
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -83,7 +83,7 @@ const char HTTP_SNS_CCS811[] PROGMEM = "%s"
|
||||||
"{s}CCS811 " D_ECO2 "{m}%d " D_UNIT_PARTS_PER_MILLION "{e}" // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
"{s}CCS811 " D_ECO2 "{m}%d " D_UNIT_PARTS_PER_MILLION "{e}" // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
||||||
"{s}CCS811 " D_TVOC "{m}%d " D_UNIT_PARTS_PER_BILLION "{e}";
|
"{s}CCS811 " D_TVOC "{m}%d " D_UNIT_PARTS_PER_BILLION "{e}";
|
||||||
|
|
||||||
void CCS811Show(boolean json)
|
void CCS811Show(bool json)
|
||||||
{
|
{
|
||||||
if (CCS811_ready) {
|
if (CCS811_ready) {
|
||||||
if (json) {
|
if (json) {
|
||||||
|
@ -103,9 +103,9 @@ void CCS811Show(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns31(byte function)
|
bool Xsns31(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (i2c_flg) {
|
if (i2c_flg) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -120,7 +120,7 @@ void MPU_6050Detect(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (byte i = 0; i < sizeof(MPU_6050_addresses); i++)
|
for (uint8_t i = 0; i < sizeof(MPU_6050_addresses); i++)
|
||||||
{
|
{
|
||||||
if(!I2cDevice(MPU_6050_addresses[i]))
|
if(!I2cDevice(MPU_6050_addresses[i]))
|
||||||
{
|
{
|
||||||
|
@ -171,7 +171,7 @@ const char HTTP_SNS_GZ_AXIS[] PROGMEM = "%s{s}%s " D_GZ_AXIS "{m}%s{e}";
|
||||||
#define D_JSON_AXIS_GY "GyroYAxis"
|
#define D_JSON_AXIS_GY "GyroYAxis"
|
||||||
#define D_JSON_AXIS_GZ "GyroZAxis"
|
#define D_JSON_AXIS_GZ "GyroZAxis"
|
||||||
|
|
||||||
void MPU_6050Show(boolean json)
|
void MPU_6050Show(bool json)
|
||||||
{
|
{
|
||||||
if (MPU_6050_found) {
|
if (MPU_6050_found) {
|
||||||
MPU_6050PerformReading();
|
MPU_6050PerformReading();
|
||||||
|
@ -228,9 +228,9 @@ void MPU_6050Show(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns32(byte function)
|
bool Xsns32(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (i2c_flg) {
|
if (i2c_flg) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -62,9 +62,9 @@
|
||||||
#define HR1224 6 //Hours register 12 or 24 hour mode (24 hour mode==0)
|
#define HR1224 6 //Hours register 12 or 24 hour mode (24 hour mode==0)
|
||||||
#define CENTURY 7 //Century bit in Month register
|
#define CENTURY 7 //Century bit in Month register
|
||||||
#define DYDT 6 //Day/Date flag bit in alarm Day/Date registers
|
#define DYDT 6 //Day/Date flag bit in alarm Day/Date registers
|
||||||
boolean ds3231ReadStatus = false;
|
bool ds3231ReadStatus = false;
|
||||||
boolean ds3231WriteStatus = false; //flag, we want to wriet/write to DS3231 onlu once
|
bool ds3231WriteStatus = false; //flag, we want to wriet/write to DS3231 onlu once
|
||||||
boolean DS3231chipDetected = false;
|
bool DS3231chipDetected = false;
|
||||||
|
|
||||||
/*----------------------------------------------------------------------*
|
/*----------------------------------------------------------------------*
|
||||||
Detect the DS3231 Chip
|
Detect the DS3231 Chip
|
||||||
|
@ -132,9 +132,9 @@ void SetDS3231Time (uint32_t epoch_time) {
|
||||||
Interface
|
Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns33(byte function)
|
bool Xsns33(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (i2c_flg) {
|
if (i2c_flg) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
@ -144,7 +144,7 @@ boolean Xsns33(byte function)
|
||||||
case FUNC_EVERY_SECOND:
|
case FUNC_EVERY_SECOND:
|
||||||
TIME_T tmpTime;
|
TIME_T tmpTime;
|
||||||
if (!ds3231ReadStatus && DS3231chipDetected && utc_time < 1451602800 ) { // We still did not sync with NTP (time not valid) , so, read time from DS3231
|
if (!ds3231ReadStatus && DS3231chipDetected && utc_time < 1451602800 ) { // We still did not sync with NTP (time not valid) , so, read time from DS3231
|
||||||
ntp_force_sync = 1; //force to sync with ntp
|
ntp_force_sync = true; //force to sync with ntp
|
||||||
utc_time = ReadFromDS3231(); //we read UTC TIME from DS3231
|
utc_time = ReadFromDS3231(); //we read UTC TIME from DS3231
|
||||||
// from this line, we just copy the function from "void RtcSecond()" at the support.ino ,line 2143 and above
|
// from this line, we just copy the function from "void RtcSecond()" at the support.ino ,line 2143 and above
|
||||||
// We need it to set rules etc.
|
// We need it to set rules etc.
|
||||||
|
|
|
@ -67,12 +67,12 @@ long hx_offset = 0;
|
||||||
long hx_scale = 1;
|
long hx_scale = 1;
|
||||||
uint8_t hx_type = 1;
|
uint8_t hx_type = 1;
|
||||||
uint8_t hx_sample_count = 0;
|
uint8_t hx_sample_count = 0;
|
||||||
uint8_t hx_tare_flg = 0;
|
|
||||||
uint8_t hx_calibrate_step = HX_CAL_END;
|
uint8_t hx_calibrate_step = HX_CAL_END;
|
||||||
uint8_t hx_calibrate_timer = 0;
|
uint8_t hx_calibrate_timer = 0;
|
||||||
uint8_t hx_calibrate_msg = 0;
|
uint8_t hx_calibrate_msg = 0;
|
||||||
uint8_t hx_pin_sck;
|
uint8_t hx_pin_sck;
|
||||||
uint8_t hx_pin_dout;
|
uint8_t hx_pin_dout;
|
||||||
|
bool hx_tare_flg = false;
|
||||||
|
|
||||||
/*********************************************************************************************/
|
/*********************************************************************************************/
|
||||||
|
|
||||||
|
@ -118,7 +118,7 @@ long HxRead()
|
||||||
|
|
||||||
void HxReset(void)
|
void HxReset(void)
|
||||||
{
|
{
|
||||||
hx_tare_flg = 1;
|
hx_tare_flg = true;
|
||||||
hx_sum_weight = 0;
|
hx_sum_weight = 0;
|
||||||
hx_sample_count = 0;
|
hx_sample_count = 0;
|
||||||
}
|
}
|
||||||
|
@ -155,7 +155,7 @@ bool HxCommand(void)
|
||||||
bool show_parms = false;
|
bool show_parms = false;
|
||||||
char sub_string[XdrvMailbox.data_len +1];
|
char sub_string[XdrvMailbox.data_len +1];
|
||||||
|
|
||||||
for (byte ca = 0; ca < XdrvMailbox.data_len; ca++) {
|
for (uint8_t ca = 0; ca < XdrvMailbox.data_len; ca++) {
|
||||||
if ((' ' == XdrvMailbox.data[ca]) || ('=' == XdrvMailbox.data[ca])) { XdrvMailbox.data[ca] = ','; }
|
if ((' ' == XdrvMailbox.data[ca]) || ('=' == XdrvMailbox.data[ca])) { XdrvMailbox.data[ca] = ','; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -257,7 +257,7 @@ void HxEvery100mSecond(void)
|
||||||
if (hx_weight < 0) { hx_weight = 0; }
|
if (hx_weight < 0) { hx_weight = 0; }
|
||||||
|
|
||||||
if (hx_tare_flg) {
|
if (hx_tare_flg) {
|
||||||
hx_tare_flg = 0;
|
hx_tare_flg = false;
|
||||||
hx_offset = average; // grams
|
hx_offset = average; // grams
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -301,7 +301,7 @@ void HxEvery100mSecond(void)
|
||||||
|
|
||||||
if (HX_CAL_FAIL == hx_calibrate_step) { // Calibration failed
|
if (HX_CAL_FAIL == hx_calibrate_step) { // Calibration failed
|
||||||
hx_calibrate_step--;
|
hx_calibrate_step--;
|
||||||
hx_tare_flg = 1; // Perform a reset using old scale
|
hx_tare_flg = true; // Perform a reset using old scale
|
||||||
HxCalibrationStateTextJson(0);
|
HxCalibrationStateTextJson(0);
|
||||||
}
|
}
|
||||||
if (HX_CAL_FINISH == hx_calibrate_step) { // Calibration finished
|
if (HX_CAL_FINISH == hx_calibrate_step) { // Calibration finished
|
||||||
|
@ -329,7 +329,7 @@ const char HTTP_HX711_CAL[] PROGMEM = "%s"
|
||||||
"{s}HX711 %s{m}{e}";
|
"{s}HX711 %s{m}{e}";
|
||||||
#endif // USE_WEBSERVER
|
#endif // USE_WEBSERVER
|
||||||
|
|
||||||
void HxShow(boolean json)
|
void HxShow(bool json)
|
||||||
{
|
{
|
||||||
char scount[30] = { 0 };
|
char scount[30] = { 0 };
|
||||||
|
|
||||||
|
@ -469,9 +469,9 @@ void HxLogUpdates(void)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns34(byte function)
|
bool Xsns34(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (hx_type) {
|
if (hx_type) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -78,7 +78,7 @@ float tx20_wind_sum = 0;
|
||||||
int tx20_count = 0;
|
int tx20_count = 0;
|
||||||
uint8_t tx20_wind_direction = 0;
|
uint8_t tx20_wind_direction = 0;
|
||||||
|
|
||||||
boolean tx20_available = false;
|
bool tx20_available = false;
|
||||||
|
|
||||||
void Tx20StartRead(void)
|
void Tx20StartRead(void)
|
||||||
{
|
{
|
||||||
|
@ -170,7 +170,7 @@ void Tx20Init(void) {
|
||||||
attachInterrupt(pin[GPIO_TX20_TXD_BLACK], Tx20StartRead, RISING);
|
attachInterrupt(pin[GPIO_TX20_TXD_BLACK], Tx20StartRead, RISING);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Tx20Show(boolean json)
|
void Tx20Show(bool json)
|
||||||
{
|
{
|
||||||
char wind_speed_string[33];
|
char wind_speed_string[33];
|
||||||
dtostrfd(tx20_wind_speed_kmh, 2, wind_speed_string);
|
dtostrfd(tx20_wind_speed_kmh, 2, wind_speed_string);
|
||||||
|
@ -195,9 +195,9 @@ void Tx20Show(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns35(byte function)
|
bool Xsns35(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (pin[GPIO_TX20_TXD_BLACK] < 99) {
|
if (pin[GPIO_TX20_TXD_BLACK] < 99) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -497,7 +497,7 @@ bool MGC3130_detect(void)
|
||||||
digitalWrite(MGC3130_reset, HIGH);
|
digitalWrite(MGC3130_reset, HIGH);
|
||||||
delay(50);
|
delay(50);
|
||||||
|
|
||||||
boolean success = false;
|
bool success = false;
|
||||||
success = MGC3130_receiveMessage(); // This should read the firmware info
|
success = MGC3130_receiveMessage(); // This should read the firmware info
|
||||||
if (success) {
|
if (success) {
|
||||||
strcpy_P(MGC3130stype, PSTR("MGC3130"));
|
strcpy_P(MGC3130stype, PSTR("MGC3130"));
|
||||||
|
@ -516,7 +516,7 @@ bool MGC3130_detect(void)
|
||||||
* Presentation
|
* Presentation
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
void MGC3130_show(boolean json)
|
void MGC3130_show(bool json)
|
||||||
{
|
{
|
||||||
if (!MGC3130_type) { return; }
|
if (!MGC3130_type) { return; }
|
||||||
|
|
||||||
|
@ -576,7 +576,7 @@ void MGC3130_show(boolean json)
|
||||||
|
|
||||||
bool MGC3130CommandSensor()
|
bool MGC3130CommandSensor()
|
||||||
{
|
{
|
||||||
boolean serviced = true;
|
bool serviced = true;
|
||||||
|
|
||||||
switch (XdrvMailbox.payload) {
|
switch (XdrvMailbox.payload) {
|
||||||
case 0: // cycle through the modes
|
case 0: // cycle through the modes
|
||||||
|
@ -602,9 +602,9 @@ bool MGC3130CommandSensor()
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns36(byte function)
|
bool Xsns36(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (i2c_flg) {
|
if (i2c_flg) {
|
||||||
if ((FUNC_INIT == function) && (pin[GPIO_MGC3130_XFER] < 99) && (pin[GPIO_MGC3130_RESET] < 99)) {
|
if ((FUNC_INIT == function) && (pin[GPIO_MGC3130_XFER] < 99) && (pin[GPIO_MGC3130_RESET] < 99)) {
|
||||||
|
|
|
@ -49,10 +49,10 @@
|
||||||
typedef struct RawSignalStruct // Variabelen geplaatst in struct zodat deze later eenvoudig kunnen worden weggeschreven naar SDCard
|
typedef struct RawSignalStruct // Variabelen geplaatst in struct zodat deze later eenvoudig kunnen worden weggeschreven naar SDCard
|
||||||
{
|
{
|
||||||
int Number; // aantal bits, maal twee omdat iedere bit een mark en een space heeft.
|
int Number; // aantal bits, maal twee omdat iedere bit een mark en een space heeft.
|
||||||
byte Repeats; // Aantal maal dat de pulsreeks verzonden moet worden bij een zendactie.
|
uint8_t Repeats; // Aantal maal dat de pulsreeks verzonden moet worden bij een zendactie.
|
||||||
byte Multiply; // Pulses[] * Multiply is de echte tijd van een puls in microseconden
|
uint8_t Multiply; // Pulses[] * Multiply is de echte tijd van een puls in microseconden
|
||||||
unsigned long Time; // Tijdstempel wanneer signaal is binnengekomen (millis())
|
unsigned long Time; // Tijdstempel wanneer signaal is binnengekomen (millis())
|
||||||
byte Pulses[RFSNS_RAW_BUFFER_SIZE+2]; // Tabel met de gemeten pulsen in microseconden gedeeld door rfsns_raw_signal->Multiply. Dit scheelt helft aan RAM geheugen.
|
uint8_t Pulses[RFSNS_RAW_BUFFER_SIZE+2]; // Tabel met de gemeten pulsen in microseconden gedeeld door rfsns_raw_signal->Multiply. Dit scheelt helft aan RAM geheugen.
|
||||||
// Om legacy redenen zit de eerste puls in element 1. Element 0 wordt dus niet gebruikt.
|
// Om legacy redenen zit de eerste puls in element 1. Element 0 wordt dus niet gebruikt.
|
||||||
} raw_signal_t;
|
} raw_signal_t;
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@ uint8_t rfsns_any_sensor = 0;
|
||||||
* Fetch signals from RF pin
|
* Fetch signals from RF pin
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
bool RfSnsFetchSignal(byte DataPin, bool StateSignal)
|
bool RfSnsFetchSignal(uint8_t DataPin, bool StateSignal)
|
||||||
{
|
{
|
||||||
uint8_t Fbit = digitalPinToBitMask(DataPin);
|
uint8_t Fbit = digitalPinToBitMask(DataPin);
|
||||||
uint8_t Fport = digitalPinToPort(DataPin);
|
uint8_t Fport = digitalPinToPort(DataPin);
|
||||||
|
@ -179,17 +179,17 @@ void RfSnsAnalyzeTheov2(void)
|
||||||
{
|
{
|
||||||
if (rfsns_raw_signal->Number != RFSNS_THEOV2_PULSECOUNT) { return; }
|
if (rfsns_raw_signal->Number != RFSNS_THEOV2_PULSECOUNT) { return; }
|
||||||
|
|
||||||
byte Checksum; // 8 bits Checksum over following bytes
|
uint8_t Checksum; // 8 bits Checksum over following bytes
|
||||||
byte Channel; // 3 bits channel
|
uint8_t Channel; // 3 bits channel
|
||||||
byte Type; // 5 bits type
|
uint8_t Type; // 5 bits type
|
||||||
byte Voltage; // 8 bits Vcc like 45 = 4.5V, bit 8 is batt low
|
uint8_t Voltage; // 8 bits Vcc like 45 = 4.5V, bit 8 is batt low
|
||||||
int Payload1; // 16 bits
|
int Payload1; // 16 bits
|
||||||
int Payload2; // 16 bits
|
int Payload2; // 16 bits
|
||||||
|
|
||||||
byte b, bytes, bits, id;
|
uint8_t b, bytes, bits, id;
|
||||||
|
|
||||||
byte idx = 3;
|
uint8_t idx = 3;
|
||||||
byte chksum = 0;
|
uint8_t chksum = 0;
|
||||||
for (bytes = 0; bytes < 7; bytes++) {
|
for (bytes = 0; bytes < 7; bytes++) {
|
||||||
b = 0;
|
b = 0;
|
||||||
for (bits = 0; bits <= 7; bits++)
|
for (bits = 0; bits <= 7; bits++)
|
||||||
|
@ -438,23 +438,23 @@ void RfSnsAnalyzeAlectov2()
|
||||||
if (!(((rfsns_raw_signal->Number >= RFSNS_ACH2010_MIN_PULSECOUNT) &&
|
if (!(((rfsns_raw_signal->Number >= RFSNS_ACH2010_MIN_PULSECOUNT) &&
|
||||||
(rfsns_raw_signal->Number <= RFSNS_ACH2010_MAX_PULSECOUNT)) || (rfsns_raw_signal->Number == RFSNS_DKW2012_PULSECOUNT))) { return; }
|
(rfsns_raw_signal->Number <= RFSNS_ACH2010_MAX_PULSECOUNT)) || (rfsns_raw_signal->Number == RFSNS_DKW2012_PULSECOUNT))) { return; }
|
||||||
|
|
||||||
byte c = 0;
|
uint8_t c = 0;
|
||||||
byte rfbit;
|
uint8_t rfbit;
|
||||||
byte data[9] = { 0 };
|
uint8_t data[9] = { 0 };
|
||||||
byte msgtype = 0;
|
uint8_t msgtype = 0;
|
||||||
byte rc = 0;
|
uint8_t rc = 0;
|
||||||
int temp;
|
int temp;
|
||||||
byte checksum = 0;
|
uint8_t checksum = 0;
|
||||||
byte checksumcalc = 0;
|
uint8_t checksumcalc = 0;
|
||||||
byte maxidx = 8;
|
uint8_t maxidx = 8;
|
||||||
unsigned long atime;
|
unsigned long atime;
|
||||||
float factor;
|
float factor;
|
||||||
char buf1[16];
|
char buf1[16];
|
||||||
|
|
||||||
if (rfsns_raw_signal->Number > RFSNS_ACH2010_MAX_PULSECOUNT) { maxidx = 9; }
|
if (rfsns_raw_signal->Number > RFSNS_ACH2010_MAX_PULSECOUNT) { maxidx = 9; }
|
||||||
// Get message back to front as the header is almost never received complete for ACH2010
|
// Get message back to front as the header is almost never received complete for ACH2010
|
||||||
byte idx = maxidx;
|
uint8_t idx = maxidx;
|
||||||
for (byte x = rfsns_raw_signal->Number; x > 0; x = x-2) {
|
for (uint8_t x = rfsns_raw_signal->Number; x > 0; x = x-2) {
|
||||||
if (rfsns_raw_signal->Pulses[x-1] * rfsns_raw_signal->Multiply < 0x300) {
|
if (rfsns_raw_signal->Pulses[x-1] * rfsns_raw_signal->Multiply < 0x300) {
|
||||||
rfbit = 0x80;
|
rfbit = 0x80;
|
||||||
} else {
|
} else {
|
||||||
|
@ -659,7 +659,7 @@ void RfSnsShow(bool json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns37(byte function)
|
bool Xsns37(uint8_t function)
|
||||||
{
|
{
|
||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
|
|
|
@ -250,7 +250,7 @@ void AzInit(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AzShow(boolean json)
|
void AzShow(bool json)
|
||||||
{
|
{
|
||||||
char temperature[33];
|
char temperature[33];
|
||||||
dtostrfd(az_temperature, Settings.flag2.temperature_resolution, temperature);
|
dtostrfd(az_temperature, Settings.flag2.temperature_resolution, temperature);
|
||||||
|
@ -275,9 +275,9 @@ void AzShow(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns38(byte function)
|
bool Xsns38(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if(az_type){
|
if(az_type){
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -148,9 +148,9 @@ void MAX31855_Show(bool Json){
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns39(byte function)
|
bool Xsns39(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
if((pin[GPIO_MAX31855CS] < 99) && (pin[GPIO_MAX31855CLK] < 99) && (pin[GPIO_MAX31855DO] < 99)){
|
if((pin[GPIO_MAX31855CS] < 99) && (pin[GPIO_MAX31855CLK] < 99) && (pin[GPIO_MAX31855DO] < 99)){
|
||||||
|
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -265,7 +265,7 @@ void PN532_Detect(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean PN532_readPassiveTargetID(uint8_t cardbaudrate, uint8_t *uid, uint8_t *uidLength)
|
bool PN532_readPassiveTargetID(uint8_t cardbaudrate, uint8_t *uid, uint8_t *uidLength)
|
||||||
{
|
{
|
||||||
pn532_i2c_packetbuffer[0] = PN532_COMMAND_INLISTPASSIVETARGET;
|
pn532_i2c_packetbuffer[0] = PN532_COMMAND_INLISTPASSIVETARGET;
|
||||||
pn532_i2c_packetbuffer[1] = 1;
|
pn532_i2c_packetbuffer[1] = 1;
|
||||||
|
@ -385,8 +385,8 @@ void PN532_ScanForTag(void)
|
||||||
uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 };
|
uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 };
|
||||||
uint8_t uid_len = 0;
|
uint8_t uid_len = 0;
|
||||||
uint8_t card_data[16];
|
uint8_t card_data[16];
|
||||||
boolean erase_success = false;
|
bool erase_success = false;
|
||||||
boolean set_success = false;
|
bool set_success = false;
|
||||||
if (PN532_readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uid_len)) {
|
if (PN532_readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uid_len)) {
|
||||||
if (pn532_i2c_scan_defer_report > 0) {
|
if (pn532_i2c_scan_defer_report > 0) {
|
||||||
pn532_i2c_scan_defer_report--;
|
pn532_i2c_scan_defer_report--;
|
||||||
|
@ -407,6 +407,9 @@ void PN532_ScanForTag(void)
|
||||||
uint8_t keyuniversal[6] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
|
uint8_t keyuniversal[6] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
|
||||||
if (mifareclassic_AuthenticateBlock (uid, uid_len, 1, 1, keyuniversal)) {
|
if (mifareclassic_AuthenticateBlock (uid, uid_len, 1, 1, keyuniversal)) {
|
||||||
if (mifareclassic_ReadDataBlock(1, card_data)) {
|
if (mifareclassic_ReadDataBlock(1, card_data)) {
|
||||||
|
#ifdef USE_PN532_DATA_RAW
|
||||||
|
memcpy(&card_datas,&card_data,sizeof(card_data));
|
||||||
|
#else
|
||||||
for (uint8_t i = 0;i < sizeof(card_data);i++) {
|
for (uint8_t i = 0;i < sizeof(card_data);i++) {
|
||||||
if ((isalpha(card_data[i])) || ((isdigit(card_data[i])))) {
|
if ((isalpha(card_data[i])) || ((isdigit(card_data[i])))) {
|
||||||
card_datas[i] = char(card_data[i]);
|
card_datas[i] = char(card_data[i]);
|
||||||
|
@ -414,6 +417,7 @@ void PN532_ScanForTag(void)
|
||||||
card_datas[i] = '\0';
|
card_datas[i] = '\0';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif // USE_PN532_DATA_RAW
|
||||||
}
|
}
|
||||||
if (pn532_i2c_function == 1) { // erase block 1 of card
|
if (pn532_i2c_function == 1) { // erase block 1 of card
|
||||||
for (uint8_t i = 0;i<16;i++) {
|
for (uint8_t i = 0;i<16;i++) {
|
||||||
|
@ -427,7 +431,15 @@ void PN532_ScanForTag(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (pn532_i2c_function == 2) {
|
if (pn532_i2c_function == 2) {
|
||||||
boolean IsAlphaNumeric = true;
|
#ifdef USE_PN532_DATA_RAW
|
||||||
|
if (mifareclassic_WriteDataBlock(1, card_data)) {
|
||||||
|
set_success = true;
|
||||||
|
snprintf_P(log_data, sizeof(log_data),"I2C: PN532 NFC - Data write successful");
|
||||||
|
AddLog(LOG_LEVEL_INFO);
|
||||||
|
memcpy(&card_datas,&card_data,sizeof(card_data)); // Cast block 1 to a string
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
bool IsAlphaNumeric = true;
|
||||||
for (uint8_t i = 0;i < pn532_i2c_newdata_len;i++) {
|
for (uint8_t i = 0;i < pn532_i2c_newdata_len;i++) {
|
||||||
if ((!isalpha(pn532_i2c_newdata[i])) || (!isdigit(pn532_i2c_newdata[i]))) {
|
if ((!isalpha(pn532_i2c_newdata[i])) || (!isdigit(pn532_i2c_newdata[i]))) {
|
||||||
IsAlphaNumeric = false;
|
IsAlphaNumeric = false;
|
||||||
|
@ -445,6 +457,7 @@ void PN532_ScanForTag(void)
|
||||||
snprintf_P(log_data, sizeof(log_data),"I2C: PN532 NFC - Data must be alphanumeric");
|
snprintf_P(log_data, sizeof(log_data),"I2C: PN532 NFC - Data must be alphanumeric");
|
||||||
AddLog(LOG_LEVEL_INFO);
|
AddLog(LOG_LEVEL_INFO);
|
||||||
}
|
}
|
||||||
|
#endif // USE_PN532_DATA_RAW
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
sprintf(card_datas,"AUTHFAIL");
|
sprintf(card_datas,"AUTHFAIL");
|
||||||
|
@ -498,9 +511,9 @@ void PN532_ScanForTag(void)
|
||||||
|
|
||||||
#ifdef USE_PN532_DATA_FUNCTION
|
#ifdef USE_PN532_DATA_FUNCTION
|
||||||
|
|
||||||
boolean PN532_Command(void)
|
bool PN532_Command(void)
|
||||||
{
|
{
|
||||||
boolean serviced = true;
|
bool serviced = true;
|
||||||
uint8_t paramcount = 0;
|
uint8_t paramcount = 0;
|
||||||
if (XdrvMailbox.data_len > 0) {
|
if (XdrvMailbox.data_len > 0) {
|
||||||
paramcount=1;
|
paramcount=1;
|
||||||
|
@ -550,9 +563,9 @@ boolean PN532_Command(void)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns40(byte function)
|
bool Xsns40(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (i2c_flg) {
|
if (i2c_flg) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -65,7 +65,7 @@ bool Max4409Read_lum(void)
|
||||||
|
|
||||||
void Max4409Detect(void)
|
void Max4409Detect(void)
|
||||||
{
|
{
|
||||||
byte reg[8];
|
uint8_t reg[8];
|
||||||
bool failed = false;
|
bool failed = false;
|
||||||
|
|
||||||
if (max44009_found) {
|
if (max44009_found) {
|
||||||
|
@ -74,7 +74,7 @@ void Max4409Detect(void)
|
||||||
|
|
||||||
uint8_t buffer1;
|
uint8_t buffer1;
|
||||||
uint8_t buffer2;
|
uint8_t buffer2;
|
||||||
for (byte i = 0; 0 != max44009_addresses[i]; i++) {
|
for (uint8_t i = 0; 0 != max44009_addresses[i]; i++) {
|
||||||
|
|
||||||
max44009_address = max44009_addresses[i];
|
max44009_address = max44009_addresses[i];
|
||||||
|
|
||||||
|
@ -110,7 +110,7 @@ void Max4409EverySecond(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Max4409Show(boolean json)
|
void Max4409Show(bool json)
|
||||||
{
|
{
|
||||||
char illum_str[8];
|
char illum_str[8];
|
||||||
|
|
||||||
|
@ -151,9 +151,9 @@ void Max4409Show(boolean json)
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean Xsns41(byte function)
|
bool Xsns41(uint8_t function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (i2c_flg) {
|
if (i2c_flg) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
|
|
@ -18,9 +18,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef XFUNC_PTR_IN_ROM
|
#ifdef XFUNC_PTR_IN_ROM
|
||||||
boolean (* const xsns_func_ptr[])(byte) PROGMEM = { // Sensor Function Pointers for simple implementation of sensors
|
bool (* const xsns_func_ptr[])(uint8_t) PROGMEM = { // Sensor Function Pointers for simple implementation of sensors
|
||||||
#else
|
#else
|
||||||
boolean (* const xsns_func_ptr[])(byte) = { // Sensor Function Pointers for simple implementation of sensors
|
bool (* const xsns_func_ptr[])(uint8_t) = { // Sensor Function Pointers for simple implementation of sensors
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef XSNS_01
|
#ifdef XSNS_01
|
||||||
|
@ -268,7 +268,7 @@ const uint8_t xsns_present = sizeof(xsns_func_ptr) / sizeof(xsns_func_ptr[0]);
|
||||||
* Function call to all xsns
|
* Function call to all xsns
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean XsnsNextCall(byte Function, uint8_t &xsns_index)
|
bool XsnsNextCall(uint8_t Function, uint8_t &xsns_index)
|
||||||
{
|
{
|
||||||
xsns_index++;
|
xsns_index++;
|
||||||
if (xsns_index == xsns_present) { xsns_index = 0; }
|
if (xsns_index == xsns_present) { xsns_index = 0; }
|
||||||
|
@ -282,15 +282,15 @@ boolean XsnsNextCall(byte Function, uint8_t &xsns_index)
|
||||||
return xsns_func_ptr[xsns_index](Function);
|
return xsns_func_ptr[xsns_index](Function);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean XsnsCall(byte Function)
|
bool XsnsCall(uint8_t Function)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
bool result = false;
|
||||||
|
|
||||||
#ifdef PROFILE_XSNS_EVERY_SECOND
|
#ifdef PROFILE_XSNS_EVERY_SECOND
|
||||||
uint32_t profile_start_millis = millis();
|
uint32_t profile_start_millis = millis();
|
||||||
#endif // PROFILE_XSNS_EVERY_SECOND
|
#endif // PROFILE_XSNS_EVERY_SECOND
|
||||||
|
|
||||||
for (byte x = 0; x < xsns_present; x++) {
|
for (uint8_t x = 0; x < xsns_present; x++) {
|
||||||
#ifdef USE_DEBUG_DRIVER
|
#ifdef USE_DEBUG_DRIVER
|
||||||
if (XsnsEnabled(x)) {
|
if (XsnsEnabled(x)) {
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -261,7 +261,7 @@ const uint8_t kXsnsList[] = {
|
||||||
* Xsns sensor control
|
* Xsns sensor control
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean XsnsEnabled(byte sns_index)
|
bool XsnsEnabled(uint8_t sns_index)
|
||||||
{
|
{
|
||||||
if (sns_index < sizeof(kXsnsList)) {
|
if (sns_index < sizeof(kXsnsList)) {
|
||||||
#ifdef XFUNC_PTR_IN_ROM
|
#ifdef XFUNC_PTR_IN_ROM
|
||||||
|
@ -274,10 +274,10 @@ boolean XsnsEnabled(byte sns_index)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean XsnsPresent(byte sns_index)
|
bool XsnsPresent(uint8_t sns_index)
|
||||||
{
|
{
|
||||||
uint8_t index = 0;
|
uint8_t index = 0;
|
||||||
for (byte i = 0; i < sizeof(kXsnsList); i++) {
|
for (uint8_t i = 0; i < sizeof(kXsnsList); i++) {
|
||||||
#ifdef XFUNC_PTR_IN_ROM
|
#ifdef XFUNC_PTR_IN_ROM
|
||||||
index = pgm_read_byte(kXsnsList + i);
|
index = pgm_read_byte(kXsnsList + i);
|
||||||
#else
|
#else
|
||||||
|
@ -293,7 +293,7 @@ String XsnsGetSensors(void)
|
||||||
char state[2] = { 0 };
|
char state[2] = { 0 };
|
||||||
|
|
||||||
String data = F("[");
|
String data = F("[");
|
||||||
for (byte i = 0; i < MAX_XSNS_DRIVERS; i++) {
|
for (uint8_t i = 0; i < MAX_XSNS_DRIVERS; i++) {
|
||||||
if (i && (!(i % 16))) { data += F(","); }
|
if (i && (!(i % 16))) { data += F(","); }
|
||||||
if (!(i % 16)) { data += F("\""); }
|
if (!(i % 16)) { data += F("\""); }
|
||||||
state[0] = '-';
|
state[0] = '-';
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
VER = '2.1.0018'
|
VER = '2.1.0019'
|
||||||
|
|
||||||
"""
|
"""
|
||||||
decode-config.py - Backup/Restore Sonoff-Tasmota configuration data
|
decode-config.py - Backup/Restore Sonoff-Tasmota configuration data
|
||||||
|
@ -829,7 +829,14 @@ Setting_6_4_1_8['flag3'][0].update ({
|
||||||
'split_interlock': ('<L', (0x3A0,1,13), (None, None, ('SetOption', '"SetOption63 {}".format($)')) ),
|
'split_interlock': ('<L', (0x3A0,1,13), (None, None, ('SetOption', '"SetOption63 {}".format($)')) ),
|
||||||
})
|
})
|
||||||
# ======================================================================
|
# ======================================================================
|
||||||
|
Setting_6_4_1_11 = copy.deepcopy(Setting_6_4_1_8)
|
||||||
|
Setting_6_4_1_11['flag3'][0].pop('split_interlock',None)
|
||||||
|
Setting_6_4_1_11.update ({
|
||||||
|
'interlock': ('B', 0x4CA, ([4], None, ('Main', None)), '"0x{:02x}".format($)' ),
|
||||||
|
})
|
||||||
|
# ======================================================================
|
||||||
Settings = [
|
Settings = [
|
||||||
|
(0x604010B, 0xe00, Setting_6_4_1_11),
|
||||||
(0x6040108, 0xe00, Setting_6_4_1_8),
|
(0x6040108, 0xe00, Setting_6_4_1_8),
|
||||||
(0x6040107, 0xe00, Setting_6_4_1_7),
|
(0x6040107, 0xe00, Setting_6_4_1_7),
|
||||||
(0x6040104, 0xe00, Setting_6_4_1_4),
|
(0x6040104, 0xe00, Setting_6_4_1_4),
|
||||||
|
|
Loading…
Reference in New Issue