mirror of https://github.com/arendst/Tasmota.git
Add Template GUI update
Initial support for online template change using command Template or GUI Configure Other (#5177)
This commit is contained in:
parent
9dc445f949
commit
567bc93623
|
@ -1,5 +1,5 @@
|
|||
/* 6.4.1.16 20190211
|
||||
* Initial support for online template change using command Template (#5177)
|
||||
* Initial support for online template change using command Template or GUI Configure Other (#5177)
|
||||
*
|
||||
* 6.4.1.15 20190208
|
||||
* Change image name BE_MINIMAL to FIRMWARE_MINIMAL (#5106)
|
||||
|
|
|
@ -288,6 +288,7 @@
|
|||
#define D_TELEMETRY_PERIOD "Период на телеметрия"
|
||||
|
||||
#define D_OTHER_PARAMETERS "Други параметри"
|
||||
#define D_TEMPLATE "Template"
|
||||
#define D_WEB_ADMIN_PASSWORD "Парола на уеб администратора"
|
||||
#define D_MQTT_ENABLE "Активиране на MQTT"
|
||||
#define D_FRIENDLY_NAME "Приятелско име"
|
||||
|
|
|
@ -288,6 +288,7 @@
|
|||
#define D_TELEMETRY_PERIOD "Interval telemetrie"
|
||||
|
||||
#define D_OTHER_PARAMETERS "Další nastavení"
|
||||
#define D_TEMPLATE "Template"
|
||||
#define D_WEB_ADMIN_PASSWORD "Heslo Web administrátora"
|
||||
#define D_MQTT_ENABLE "MQTT aktivní"
|
||||
#define D_FRIENDLY_NAME "Friendly Name"
|
||||
|
|
|
@ -288,6 +288,7 @@
|
|||
#define D_TELEMETRY_PERIOD "Telemetrieperiode"
|
||||
|
||||
#define D_OTHER_PARAMETERS "Sonstige Einstellungen"
|
||||
#define D_TEMPLATE "Template"
|
||||
#define D_WEB_ADMIN_PASSWORD "Passwort für Web Oberfläche"
|
||||
#define D_MQTT_ENABLE "MQTT aktivieren"
|
||||
#define D_FRIENDLY_NAME "Name [friendly name]"
|
||||
|
|
|
@ -288,6 +288,7 @@
|
|||
#define D_TELEMETRY_PERIOD "Περίοδος τηλεμετρίας"
|
||||
|
||||
#define D_OTHER_PARAMETERS "Άλλες παράμετροι"
|
||||
#define D_TEMPLATE "Template"
|
||||
#define D_WEB_ADMIN_PASSWORD "Κωδικός διαχειριστή"
|
||||
#define D_MQTT_ENABLE "Ενεργοποίηση MQTT"
|
||||
#define D_FRIENDLY_NAME "Φιλική ονομασία"
|
||||
|
|
|
@ -288,6 +288,7 @@
|
|||
#define D_TELEMETRY_PERIOD "Telemetry period"
|
||||
|
||||
#define D_OTHER_PARAMETERS "Other parameters"
|
||||
#define D_TEMPLATE "Template"
|
||||
#define D_WEB_ADMIN_PASSWORD "Web Admin Password"
|
||||
#define D_MQTT_ENABLE "MQTT enable"
|
||||
#define D_FRIENDLY_NAME "Friendly Name"
|
||||
|
|
|
@ -288,6 +288,7 @@
|
|||
#define D_TELEMETRY_PERIOD "Período de Telemetría"
|
||||
|
||||
#define D_OTHER_PARAMETERS "Otros parámetros"
|
||||
#define D_TEMPLATE "Template"
|
||||
#define D_WEB_ADMIN_PASSWORD "Clave Administrador Web"
|
||||
#define D_MQTT_ENABLE "Habilitar MQTT"
|
||||
#define D_FRIENDLY_NAME "Nombre Amigable"
|
||||
|
|
|
@ -288,6 +288,7 @@
|
|||
#define D_TELEMETRY_PERIOD "Période télémétrie"
|
||||
|
||||
#define D_OTHER_PARAMETERS "Autres paramètres"
|
||||
#define D_TEMPLATE "Template"
|
||||
#define D_WEB_ADMIN_PASSWORD "Mot de passe Web Admin"
|
||||
#define D_MQTT_ENABLE "MQTT activé"
|
||||
#define D_FRIENDLY_NAME "Surnom"
|
||||
|
|
|
@ -288,6 +288,7 @@
|
|||
#define D_TELEMETRY_PERIOD "Telemetry period"
|
||||
|
||||
#define D_OTHER_PARAMETERS "פרמטרים שונים"
|
||||
#define D_TEMPLATE "Template"
|
||||
#define D_WEB_ADMIN_PASSWORD "סיסמת מנהל - אתר"
|
||||
#define D_MQTT_ENABLE "MQTT אפשר"
|
||||
#define D_FRIENDLY_NAME "שם ידידותי"
|
||||
|
|
|
@ -288,6 +288,7 @@
|
|||
#define D_TELEMETRY_PERIOD "Telemetria (mp.)"
|
||||
|
||||
#define D_OTHER_PARAMETERS "Egyéb beállítások"
|
||||
#define D_TEMPLATE "Template"
|
||||
#define D_WEB_ADMIN_PASSWORD "Web admin jelszó"
|
||||
#define D_MQTT_ENABLE "MQTT engedélyezése"
|
||||
#define D_FRIENDLY_NAME "Név"
|
||||
|
|
|
@ -288,6 +288,7 @@
|
|||
#define D_TELEMETRY_PERIOD "Periodo Telemetria"
|
||||
|
||||
#define D_OTHER_PARAMETERS "Altri parametri"
|
||||
#define D_TEMPLATE "Template"
|
||||
#define D_WEB_ADMIN_PASSWORD "Password Amministratore Web"
|
||||
#define D_MQTT_ENABLE "Abilita MQTT"
|
||||
#define D_FRIENDLY_NAME "Nome confidenziale"
|
||||
|
|
|
@ -288,6 +288,7 @@
|
|||
#define D_TELEMETRY_PERIOD "Telemetry periode"
|
||||
|
||||
#define D_OTHER_PARAMETERS "Overige parameters"
|
||||
#define D_TEMPLATE "Template"
|
||||
#define D_WEB_ADMIN_PASSWORD "Web Admin Wachtwoord"
|
||||
#define D_MQTT_ENABLE "MQTT ingeschakeld"
|
||||
#define D_FRIENDLY_NAME "Beschrijvende naam"
|
||||
|
|
|
@ -288,6 +288,7 @@
|
|||
#define D_TELEMETRY_PERIOD "Okres telemetrii"
|
||||
|
||||
#define D_OTHER_PARAMETERS "Inne parametry"
|
||||
#define D_TEMPLATE "Template"
|
||||
#define D_WEB_ADMIN_PASSWORD "Hasło administratora Web"
|
||||
#define D_MQTT_ENABLE "MQTT aktywne"
|
||||
#define D_FRIENDLY_NAME "Twoja nazwa"
|
||||
|
|
|
@ -288,6 +288,7 @@
|
|||
#define D_TELEMETRY_PERIOD "Período de telemetria"
|
||||
|
||||
#define D_OTHER_PARAMETERS "Outros parâmetros"
|
||||
#define D_TEMPLATE "Template"
|
||||
#define D_WEB_ADMIN_PASSWORD "Senha de WEB Admin"
|
||||
#define D_MQTT_ENABLE "MQTT habilitado"
|
||||
#define D_FRIENDLY_NAME "Nome amigável"
|
||||
|
|
|
@ -288,6 +288,7 @@
|
|||
#define D_TELEMETRY_PERIOD "Periodo de Telemetria"
|
||||
|
||||
#define D_OTHER_PARAMETERS "Outros parametros"
|
||||
#define D_TEMPLATE "Template"
|
||||
#define D_WEB_ADMIN_PASSWORD "Palavra Chave de WEB Admin"
|
||||
#define D_MQTT_ENABLE "MQTT habilitado"
|
||||
#define D_FRIENDLY_NAME "Nome amigável"
|
||||
|
|
|
@ -288,6 +288,7 @@
|
|||
#define D_TELEMETRY_PERIOD "Период телеметрии"
|
||||
|
||||
#define D_OTHER_PARAMETERS "Параметры Прочие"
|
||||
#define D_TEMPLATE "Template"
|
||||
#define D_WEB_ADMIN_PASSWORD "Пароль Web администратора"
|
||||
#define D_MQTT_ENABLE "MQTT активен"
|
||||
#define D_FRIENDLY_NAME "Дружественное Имя"
|
||||
|
|
|
@ -288,6 +288,7 @@
|
|||
#define D_TELEMETRY_PERIOD "Interval telemetrie"
|
||||
|
||||
#define D_OTHER_PARAMETERS "Ostatné nastavenia"
|
||||
#define D_TEMPLATE "Template"
|
||||
#define D_WEB_ADMIN_PASSWORD "Heslo Web administrátora"
|
||||
#define D_MQTT_ENABLE "MQTT aktívne"
|
||||
#define D_FRIENDLY_NAME "Friendly Name"
|
||||
|
|
|
@ -288,6 +288,7 @@
|
|||
#define D_TELEMETRY_PERIOD "Telemetriperiod"
|
||||
|
||||
#define D_OTHER_PARAMETERS "Andra parametrar"
|
||||
#define D_TEMPLATE "Template"
|
||||
#define D_WEB_ADMIN_PASSWORD "Webbadmin-lösenord"
|
||||
#define D_MQTT_ENABLE "MQTT aktivera"
|
||||
#define D_FRIENDLY_NAME "Läsbart namn"
|
||||
|
|
|
@ -288,6 +288,7 @@
|
|||
#define D_TELEMETRY_PERIOD "Telemetri peryodu"
|
||||
|
||||
#define D_OTHER_PARAMETERS "Diğer parametreler"
|
||||
#define D_TEMPLATE "Template"
|
||||
#define D_WEB_ADMIN_PASSWORD "Web Yönetici Şifresi"
|
||||
#define D_MQTT_ENABLE "MQTT aktif"
|
||||
#define D_FRIENDLY_NAME "Kullanıcı Dostu İsim"
|
||||
|
|
|
@ -288,6 +288,7 @@
|
|||
#define D_TELEMETRY_PERIOD "Період телеметрії"
|
||||
|
||||
#define D_OTHER_PARAMETERS "Параметри Інше"
|
||||
#define D_TEMPLATE "Template"
|
||||
#define D_WEB_ADMIN_PASSWORD "Гасло Web адміністратора"
|
||||
#define D_MQTT_ENABLE "MQTT активний"
|
||||
#define D_FRIENDLY_NAME "Дружнє Ім'я"
|
||||
|
|
|
@ -288,6 +288,7 @@
|
|||
#define D_TELEMETRY_PERIOD "上报周期"
|
||||
|
||||
#define D_OTHER_PARAMETERS "其他设置"
|
||||
#define D_TEMPLATE "Template"
|
||||
#define D_WEB_ADMIN_PASSWORD "WEB 管理密码"
|
||||
#define D_MQTT_ENABLE "启用MQTT"
|
||||
#define D_FRIENDLY_NAME "昵称"
|
||||
|
|
|
@ -288,6 +288,7 @@
|
|||
#define D_TELEMETRY_PERIOD "上報周期"
|
||||
|
||||
#define D_OTHER_PARAMETERS "其他設置"
|
||||
#define D_TEMPLATE "Template"
|
||||
#define D_WEB_ADMIN_PASSWORD "WEB管理密碼"
|
||||
#define D_MQTT_ENABLE "啟用MQTT"
|
||||
#define D_FRIENDLY_NAME "昵稱"
|
||||
|
|
|
@ -952,7 +952,7 @@ void MqttDataHandler(char* topic, uint8_t* data, unsigned int data_len)
|
|||
mqtt_data[0] = '\0';
|
||||
}
|
||||
else if (CMND_TEMPLATE == command_code) {
|
||||
// {"NAME":"Generic","GPIO":[17,254,29,254,7,254,254,254,138,254,139,254,254],"FLAG":1,"TYPE":255}
|
||||
// {"NAME":"Generic","GPIO":[17,254,29,254,7,254,254,254,138,254,139,254,254],"FLAG":1,"BASE":255}
|
||||
bool error = false;
|
||||
if (!strstr(dataBuf, "{")) { // If no JSON it must be parameter
|
||||
bool update = false;
|
||||
|
@ -1021,16 +1021,7 @@ void MqttDataHandler(char* topic, uint8_t* data, unsigned int data_len)
|
|||
if (USER_MODULE == Settings.module) { restart_flag = 2; }
|
||||
}
|
||||
}
|
||||
if (!error) {
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_JSON_NAME "\":\"%s\",\"" D_JSON_GPIO "\":["), Settings.user_template.name);
|
||||
for (uint8_t i = 0; i < sizeof(Settings.user_template.gp); i++) {
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s%s%d"), mqtt_data, (i>0)?",":"", Settings.user_template.gp.io[i]);
|
||||
}
|
||||
// snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s],\"" D_JSON_FLAG "\":%d,\"" D_JSON_BASE "\":\"%d (%s)\"}"),
|
||||
// mqtt_data, Settings.user_template.flag, Settings.user_template_base +1, AnyModuleName(Settings.user_template_base).c_str());
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s],\"" D_JSON_FLAG "\":%d,\"" D_JSON_BASE "\":%d}"),
|
||||
mqtt_data, Settings.user_template.flag, Settings.user_template_base +1);
|
||||
}
|
||||
if (!error) { TemplateJson(); }
|
||||
}
|
||||
else if ((CMND_PWM == command_code) && pwm_present && (index > 0) && (index <= MAX_PWMS)) {
|
||||
if ((payload >= 0) && (payload <= Settings.pwm_range) && (pin[GPIO_PWM1 + index -1] < 99)) {
|
||||
|
|
|
@ -305,27 +305,6 @@ char* UpperCase_P(char* dest, const char* source)
|
|||
return dest;
|
||||
}
|
||||
|
||||
/*
|
||||
char* LTrim(char* p)
|
||||
{
|
||||
while ((*p != '\0') && (isblank(*p))) {
|
||||
p++; // Trim leading spaces
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
char* RTrim(char* p)
|
||||
{
|
||||
char* q = p + strlen(p) -1;
|
||||
while ((q >= p) && (isblank(*q))) {
|
||||
q--; // Trim trailing spaces
|
||||
}
|
||||
q++;
|
||||
*q = '\0';
|
||||
return p;
|
||||
}
|
||||
*/
|
||||
|
||||
char* Trim(char* p)
|
||||
{
|
||||
while ((*p != '\0') && isblank(*p)) { p++; } // Trim leading spaces
|
||||
|
@ -505,162 +484,6 @@ String PressureUnit(void)
|
|||
return (Settings.flag.pressure_conversion) ? String(D_UNIT_MILLIMETER_MERCURY) : String(D_UNIT_PRESSURE);
|
||||
}
|
||||
|
||||
String AnyModuleName(uint8_t index)
|
||||
{
|
||||
if (USER_MODULE == index) {
|
||||
return String(Settings.user_template.name);
|
||||
} else {
|
||||
return FPSTR(kModules[index].name);
|
||||
}
|
||||
}
|
||||
|
||||
String ModuleName()
|
||||
{
|
||||
return AnyModuleName(Settings.module);
|
||||
}
|
||||
|
||||
void ModuleGpios(myio *gp)
|
||||
{
|
||||
uint8_t *dest = (uint8_t *)gp;
|
||||
memset(dest, GPIO_NONE, sizeof(myio));
|
||||
|
||||
uint8_t src[sizeof(mycfgio)];
|
||||
if (USER_MODULE == Settings.module) {
|
||||
// src = Settings.user_template.gp;
|
||||
memcpy(&src, &Settings.user_template.gp, sizeof(mycfgio));
|
||||
} else {
|
||||
memcpy_P(&src, &kModules[Settings.module].gp, sizeof(mycfgio));
|
||||
}
|
||||
// 11 85 00 85 85 00 00 00 15 38 85 00 00 81
|
||||
|
||||
// AddLogBuffer(LOG_LEVEL_DEBUG, (uint8_t *)&src, sizeof(mycfgio));
|
||||
|
||||
uint8_t j = 0;
|
||||
for (uint8_t i = 0; i < sizeof(mycfgio); i++) {
|
||||
if (6 == i) { j = 9; }
|
||||
if (8 == i) { j = 12; }
|
||||
dest[j] = src[i];
|
||||
j++;
|
||||
}
|
||||
// 11 85 00 85 85 00 00 00 00 00 00 00 15 38 85 00 00 81
|
||||
|
||||
// AddLogBuffer(LOG_LEVEL_DEBUG, (uint8_t *)gp, sizeof(myio));
|
||||
}
|
||||
|
||||
gpio_flag ModuleFlag()
|
||||
{
|
||||
gpio_flag flag;
|
||||
|
||||
if (USER_MODULE == Settings.module) {
|
||||
flag = Settings.user_template.flag;
|
||||
} else {
|
||||
memcpy_P(&flag, &kModules[Settings.module].flag, sizeof(gpio_flag));
|
||||
}
|
||||
|
||||
return flag;
|
||||
}
|
||||
|
||||
void ModuleDefault(uint8_t module)
|
||||
{
|
||||
if (USER_MODULE == module) { module = WEMOS; } // Generic
|
||||
Settings.user_template_base = module;
|
||||
memcpy_P(&Settings.user_template, &kModules[module], sizeof(mytmplt));
|
||||
}
|
||||
|
||||
void SetModuleType()
|
||||
{
|
||||
my_module_type = (USER_MODULE == Settings.module) ? Settings.user_template_base : Settings.module;
|
||||
}
|
||||
|
||||
uint8_t ValidPin(uint8_t pin, uint8_t gpio)
|
||||
{
|
||||
uint8_t result = gpio;
|
||||
if ((pin > 5) && (pin < 12)) {
|
||||
result = GPIO_NONE; // Disable all flash pins
|
||||
}
|
||||
if (Settings.flag3.user_esp8285_enable) {
|
||||
if ((pin == 9) || (pin == 10)) {
|
||||
result = gpio; // Allow optional flash pins
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
bool ValidGPIO(uint8_t pin, uint8_t gpio)
|
||||
{
|
||||
bool result = false;
|
||||
|
||||
if (USER_MODULE == Settings.module) {
|
||||
result = (ValidPin(pin, gpio) > GPIO_NONE); // Allow any pin
|
||||
} else {
|
||||
result = (GPIO_USER == ValidPin(pin, gpio)); // Only allow GPIO_USER pins
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
bool GetUsedInModule(uint8_t val, uint8_t *arr)
|
||||
{
|
||||
int offset = 0;
|
||||
|
||||
if (USER_MODULE == Settings.module) { return false; }
|
||||
|
||||
if (!val) { return false; } // None
|
||||
|
||||
if ((val >= GPIO_KEY1) && (val < GPIO_KEY1 + MAX_KEYS)) {
|
||||
offset = (GPIO_KEY1_NP - GPIO_KEY1);
|
||||
}
|
||||
if ((val >= GPIO_KEY1_NP) && (val < GPIO_KEY1_NP + MAX_KEYS)) {
|
||||
offset = -(GPIO_KEY1_NP - GPIO_KEY1);
|
||||
}
|
||||
if ((val >= GPIO_KEY1_INV) && (val < GPIO_KEY1_INV + MAX_KEYS)) {
|
||||
offset = -(GPIO_KEY1_INV - GPIO_KEY1);
|
||||
}
|
||||
if ((val >= GPIO_KEY1_INV_NP) && (val < GPIO_KEY1_INV_NP + MAX_KEYS)) {
|
||||
offset = -(GPIO_KEY1_INV_NP - GPIO_KEY1);
|
||||
}
|
||||
|
||||
if ((val >= GPIO_SWT1) && (val < GPIO_SWT1 + MAX_SWITCHES)) {
|
||||
offset = (GPIO_SWT1_NP - GPIO_SWT1);
|
||||
}
|
||||
if ((val >= GPIO_SWT1_NP) && (val < GPIO_SWT1_NP + MAX_SWITCHES)) {
|
||||
offset = -(GPIO_SWT1_NP - GPIO_SWT1);
|
||||
}
|
||||
|
||||
if ((val >= GPIO_REL1) && (val < GPIO_REL1 + MAX_RELAYS)) {
|
||||
offset = (GPIO_REL1_INV - GPIO_REL1);
|
||||
}
|
||||
if ((val >= GPIO_REL1_INV) && (val < GPIO_REL1_INV + MAX_RELAYS)) {
|
||||
offset = -(GPIO_REL1_INV - GPIO_REL1);
|
||||
}
|
||||
|
||||
if ((val >= GPIO_LED1) && (val < GPIO_LED1 + MAX_LEDS)) {
|
||||
offset = (GPIO_LED1_INV - GPIO_LED1);
|
||||
}
|
||||
if ((val >= GPIO_LED1_INV) && (val < GPIO_LED1_INV + MAX_LEDS)) {
|
||||
offset = -(GPIO_LED1_INV - GPIO_LED1);
|
||||
}
|
||||
|
||||
if ((val >= GPIO_PWM1) && (val < GPIO_PWM1 + MAX_PWMS)) {
|
||||
offset = (GPIO_PWM1_INV - GPIO_PWM1);
|
||||
}
|
||||
if ((val >= GPIO_PWM1_INV) && (val < GPIO_PWM1_INV + MAX_PWMS)) {
|
||||
offset = -(GPIO_PWM1_INV - GPIO_PWM1);
|
||||
}
|
||||
|
||||
if ((val >= GPIO_CNTR1) && (val < GPIO_CNTR1 + MAX_COUNTERS)) {
|
||||
offset = (GPIO_CNTR1_NP - GPIO_CNTR1);
|
||||
}
|
||||
if ((val >= GPIO_CNTR1_NP) && (val < GPIO_CNTR1_NP + MAX_COUNTERS)) {
|
||||
offset = -(GPIO_CNTR1_NP - GPIO_CNTR1);
|
||||
}
|
||||
|
||||
for (uint8_t i = 0; i < MAX_GPIO_PIN; i++) {
|
||||
if (arr[i] == val) { return true; }
|
||||
if (arr[i] == val + offset) { return true; }
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void SetGlobalValues(float temperature, float humidity)
|
||||
{
|
||||
global_update = uptime;
|
||||
|
@ -872,6 +695,178 @@ void ShowSource(int source)
|
|||
}
|
||||
}
|
||||
|
||||
/*********************************************************************************************\
|
||||
* GPIO Module and Template management
|
||||
\*********************************************************************************************/
|
||||
|
||||
String AnyModuleName(uint8_t index)
|
||||
{
|
||||
if (USER_MODULE == index) {
|
||||
return String(Settings.user_template.name);
|
||||
} else {
|
||||
return FPSTR(kModules[index].name);
|
||||
}
|
||||
}
|
||||
|
||||
String ModuleName()
|
||||
{
|
||||
return AnyModuleName(Settings.module);
|
||||
}
|
||||
|
||||
void ModuleGpios(myio *gp)
|
||||
{
|
||||
uint8_t *dest = (uint8_t *)gp;
|
||||
memset(dest, GPIO_NONE, sizeof(myio));
|
||||
|
||||
uint8_t src[sizeof(mycfgio)];
|
||||
if (USER_MODULE == Settings.module) {
|
||||
// src = Settings.user_template.gp;
|
||||
memcpy(&src, &Settings.user_template.gp, sizeof(mycfgio));
|
||||
} else {
|
||||
memcpy_P(&src, &kModules[Settings.module].gp, sizeof(mycfgio));
|
||||
}
|
||||
// 11 85 00 85 85 00 00 00 15 38 85 00 00 81
|
||||
|
||||
// AddLogBuffer(LOG_LEVEL_DEBUG, (uint8_t *)&src, sizeof(mycfgio));
|
||||
|
||||
uint8_t j = 0;
|
||||
for (uint8_t i = 0; i < sizeof(mycfgio); i++) {
|
||||
if (6 == i) { j = 9; }
|
||||
if (8 == i) { j = 12; }
|
||||
dest[j] = src[i];
|
||||
j++;
|
||||
}
|
||||
// 11 85 00 85 85 00 00 00 00 00 00 00 15 38 85 00 00 81
|
||||
|
||||
// AddLogBuffer(LOG_LEVEL_DEBUG, (uint8_t *)gp, sizeof(myio));
|
||||
}
|
||||
|
||||
gpio_flag ModuleFlag()
|
||||
{
|
||||
gpio_flag flag;
|
||||
|
||||
if (USER_MODULE == Settings.module) {
|
||||
flag = Settings.user_template.flag;
|
||||
} else {
|
||||
memcpy_P(&flag, &kModules[Settings.module].flag, sizeof(gpio_flag));
|
||||
}
|
||||
|
||||
return flag;
|
||||
}
|
||||
|
||||
void ModuleDefault(uint8_t module)
|
||||
{
|
||||
if (USER_MODULE == module) { module = WEMOS; } // Generic
|
||||
Settings.user_template_base = module;
|
||||
memcpy_P(&Settings.user_template, &kModules[module], sizeof(mytmplt));
|
||||
}
|
||||
|
||||
void SetModuleType()
|
||||
{
|
||||
my_module_type = (USER_MODULE == Settings.module) ? Settings.user_template_base : Settings.module;
|
||||
}
|
||||
|
||||
uint8_t ValidPin(uint8_t pin, uint8_t gpio)
|
||||
{
|
||||
uint8_t result = gpio;
|
||||
if ((pin > 5) && (pin < 12)) {
|
||||
result = GPIO_NONE; // Disable all flash pins
|
||||
}
|
||||
if (Settings.flag3.user_esp8285_enable) {
|
||||
if ((pin == 9) || (pin == 10)) {
|
||||
result = gpio; // Allow optional flash pins
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
bool ValidGPIO(uint8_t pin, uint8_t gpio)
|
||||
{
|
||||
bool result = false;
|
||||
|
||||
if (USER_MODULE == Settings.module) {
|
||||
result = (ValidPin(pin, gpio) > GPIO_NONE); // Allow any pin
|
||||
} else {
|
||||
result = (GPIO_USER == ValidPin(pin, gpio)); // Only allow GPIO_USER pins
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
bool GetUsedInModule(uint8_t val, uint8_t *arr)
|
||||
{
|
||||
int offset = 0;
|
||||
|
||||
if (USER_MODULE == Settings.module) { return false; }
|
||||
|
||||
if (!val) { return false; } // None
|
||||
|
||||
if ((val >= GPIO_KEY1) && (val < GPIO_KEY1 + MAX_KEYS)) {
|
||||
offset = (GPIO_KEY1_NP - GPIO_KEY1);
|
||||
}
|
||||
if ((val >= GPIO_KEY1_NP) && (val < GPIO_KEY1_NP + MAX_KEYS)) {
|
||||
offset = -(GPIO_KEY1_NP - GPIO_KEY1);
|
||||
}
|
||||
if ((val >= GPIO_KEY1_INV) && (val < GPIO_KEY1_INV + MAX_KEYS)) {
|
||||
offset = -(GPIO_KEY1_INV - GPIO_KEY1);
|
||||
}
|
||||
if ((val >= GPIO_KEY1_INV_NP) && (val < GPIO_KEY1_INV_NP + MAX_KEYS)) {
|
||||
offset = -(GPIO_KEY1_INV_NP - GPIO_KEY1);
|
||||
}
|
||||
|
||||
if ((val >= GPIO_SWT1) && (val < GPIO_SWT1 + MAX_SWITCHES)) {
|
||||
offset = (GPIO_SWT1_NP - GPIO_SWT1);
|
||||
}
|
||||
if ((val >= GPIO_SWT1_NP) && (val < GPIO_SWT1_NP + MAX_SWITCHES)) {
|
||||
offset = -(GPIO_SWT1_NP - GPIO_SWT1);
|
||||
}
|
||||
|
||||
if ((val >= GPIO_REL1) && (val < GPIO_REL1 + MAX_RELAYS)) {
|
||||
offset = (GPIO_REL1_INV - GPIO_REL1);
|
||||
}
|
||||
if ((val >= GPIO_REL1_INV) && (val < GPIO_REL1_INV + MAX_RELAYS)) {
|
||||
offset = -(GPIO_REL1_INV - GPIO_REL1);
|
||||
}
|
||||
|
||||
if ((val >= GPIO_LED1) && (val < GPIO_LED1 + MAX_LEDS)) {
|
||||
offset = (GPIO_LED1_INV - GPIO_LED1);
|
||||
}
|
||||
if ((val >= GPIO_LED1_INV) && (val < GPIO_LED1_INV + MAX_LEDS)) {
|
||||
offset = -(GPIO_LED1_INV - GPIO_LED1);
|
||||
}
|
||||
|
||||
if ((val >= GPIO_PWM1) && (val < GPIO_PWM1 + MAX_PWMS)) {
|
||||
offset = (GPIO_PWM1_INV - GPIO_PWM1);
|
||||
}
|
||||
if ((val >= GPIO_PWM1_INV) && (val < GPIO_PWM1_INV + MAX_PWMS)) {
|
||||
offset = -(GPIO_PWM1_INV - GPIO_PWM1);
|
||||
}
|
||||
|
||||
if ((val >= GPIO_CNTR1) && (val < GPIO_CNTR1 + MAX_COUNTERS)) {
|
||||
offset = (GPIO_CNTR1_NP - GPIO_CNTR1);
|
||||
}
|
||||
if ((val >= GPIO_CNTR1_NP) && (val < GPIO_CNTR1_NP + MAX_COUNTERS)) {
|
||||
offset = -(GPIO_CNTR1_NP - GPIO_CNTR1);
|
||||
}
|
||||
|
||||
for (uint8_t i = 0; i < MAX_GPIO_PIN; i++) {
|
||||
if (arr[i] == val) { return true; }
|
||||
if (arr[i] == val + offset) { return true; }
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void TemplateJson()
|
||||
{
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_JSON_NAME "\":\"%s\",\"" D_JSON_GPIO "\":["), Settings.user_template.name);
|
||||
for (uint8_t i = 0; i < sizeof(Settings.user_template.gp); i++) {
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s%s%d"), mqtt_data, (i>0)?",":"", Settings.user_template.gp.io[i]);
|
||||
}
|
||||
// snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s],\"" D_JSON_FLAG "\":%d,\"" D_JSON_BASE "\":\"%d (%s)\"}"),
|
||||
// mqtt_data, Settings.user_template.flag, Settings.user_template_base +1, AnyModuleName(Settings.user_template_base).c_str());
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s],\"" D_JSON_FLAG "\":%d,\"" D_JSON_BASE "\":%d}"),
|
||||
mqtt_data, Settings.user_template.flag, Settings.user_template_base +1);
|
||||
}
|
||||
|
||||
/*********************************************************************************************\
|
||||
* Sleep aware time scheduler functions borrowed from ESPEasy
|
||||
\*********************************************************************************************/
|
||||
|
|
|
@ -289,7 +289,7 @@ const char HTTP_FORM_LOG3[] PROGMEM =
|
|||
"<br/><b>" D_TELEMETRY_PERIOD "</b> (" STR(TELE_PERIOD) ")<br/><input id='lt' name='lt' placeholder='" STR(TELE_PERIOD) "' value='{l4'><br/>";
|
||||
const char HTTP_FORM_OTHER[] PROGMEM =
|
||||
"<fieldset><legend><b> " D_OTHER_PARAMETERS " </b></legend><form method='get' action='co'>"
|
||||
// "<input id='w' name='w' value='5,1' hidden>"
|
||||
"<br/><b>" D_TEMPLATE "</b><br/><input id='t1' name='t1' placeholder='" D_TEMPLATE "' value='{t1'><br/>"
|
||||
"<br/><b>" D_WEB_ADMIN_PASSWORD "</b><br/><input id='p1' name='p1' type='password' placeholder='" D_WEB_ADMIN_PASSWORD "' value='" D_ASTERIX "'><br/>"
|
||||
"<br/><input style='width:10%;' id='b1' name='b1' type='checkbox'{r1><b>" D_MQTT_ENABLE "</b><br/>";
|
||||
const char HTTP_FORM_OTHER2[] PROGMEM =
|
||||
|
@ -309,7 +309,7 @@ const char HTTP_FORM_UPG[] PROGMEM =
|
|||
"<div id='f1' name='f1' style='display:block;'>"
|
||||
"<fieldset><legend><b> " D_UPGRADE_BY_WEBSERVER " </b></legend>"
|
||||
"<form method='get' action='u1'>"
|
||||
"<br/>" D_OTA_URL "<br/><input id='o' name='o' placeholder='OTA_URL' value='{o1'><br/>"
|
||||
"<br/><b>" D_OTA_URL "</b><br/><input id='o' name='o' placeholder='OTA_URL' value='{o1'><br/>"
|
||||
"<br/><button type='submit'>" D_START_UPGRADE "</button></form>"
|
||||
"</fieldset><br/><br/>"
|
||||
"<fieldset><legend><b> " D_UPGRADE_BY_FILE_UPLOAD " </b></legend>";
|
||||
|
@ -1164,6 +1164,8 @@ void HandleOtherConfiguration(void)
|
|||
page.replace(F("{v}"), FPSTR(S_CONFIGURE_OTHER));
|
||||
page += FPSTR(HTTP_HEAD_STYLE);
|
||||
page += FPSTR(HTTP_FORM_OTHER);
|
||||
TemplateJson();
|
||||
page.replace(F("{t1"), mqtt_data);
|
||||
page.replace(F("{r1"), (Settings.flag.mqtt_enabled) ? F(" checked") : F(""));
|
||||
|
||||
uint8_t maxfn = (devices_present > MAX_FRIENDLYNAMES) ? MAX_FRIENDLYNAMES : (!devices_present) ? 1 : devices_present;
|
||||
|
@ -1194,7 +1196,7 @@ void HandleOtherConfiguration(void)
|
|||
|
||||
void OtherSaveSettings(void)
|
||||
{
|
||||
char tmp[100];
|
||||
char tmp[128];
|
||||
char stemp[TOPSZ];
|
||||
char stemp2[TOPSZ];
|
||||
|
||||
|
@ -1214,6 +1216,12 @@ void OtherSaveSettings(void)
|
|||
snprintf_P(log_data, sizeof(log_data), PSTR("%s%s %s"), log_data, (i) ? "," : "", Settings.friendlyname[i]);
|
||||
}
|
||||
AddLog(LOG_LEVEL_INFO);
|
||||
WebGetArg("t1", tmp, sizeof(tmp));
|
||||
if (strlen(tmp)) { // {"NAME":"12345678901234","GPIO":[255,255,255,255,255,255,255,255,255,255,255,255,255],"FLAG":255,"BASE":255}
|
||||
char svalue[128];
|
||||
snprintf_P(svalue, sizeof(svalue), PSTR(D_CMND_TEMPLATE " %s"), tmp);
|
||||
ExecuteWebCommand(svalue, SRC_WEBGUI);
|
||||
}
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------------------------*/
|
||||
|
|
Loading…
Reference in New Issue