mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-09 01:09:51 +03:00
Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev
This commit is contained in:
@@ -53,7 +53,9 @@ class SecuritySettings {
|
||||
// users
|
||||
settings.users.clear();
|
||||
if (root["users"].is<JsonArray>()) {
|
||||
for (JsonVariant user : root["users"].as<JsonArray>()) {
|
||||
JsonArray users = root["users"].as<JsonArray>();
|
||||
for (size_t i = 0; i < users.size(); i++) {
|
||||
JsonObject user = users[i].as<JsonObject>();
|
||||
settings.users.emplace_back(user["username"], user["password"], user["admin"]);
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
#include "roomcontrol.h"
|
||||
#include "command.h"
|
||||
|
||||
#include "../version.h"
|
||||
#include "../emsesp_version.h"
|
||||
|
||||
// Load external modules
|
||||
class Module {}; // forward declaration
|
||||
|
||||
@@ -551,7 +551,11 @@ void System::led_init(bool refresh) {
|
||||
if (refresh) {
|
||||
// disabled old led port before setting new one
|
||||
if ((led_gpio_ != 0) && is_valid_gpio(led_gpio_)) {
|
||||
#if ESP_ARDUINO_VERSION_MAJOR < 3
|
||||
led_type_ ? neopixelWrite(led_gpio_, 0, 0, 0) : digitalWrite(led_gpio_, !LED_ON);
|
||||
#else
|
||||
led_type_ ? rgbLedWrite(led_gpio_, 0, 0, 0) : digitalWrite(led_gpio_, !LED_ON);
|
||||
#endif
|
||||
pinMode(led_gpio_, INPUT);
|
||||
}
|
||||
reload_settings();
|
||||
@@ -560,7 +564,11 @@ void System::led_init(bool refresh) {
|
||||
if ((led_gpio_ != 0) && is_valid_gpio(led_gpio_)) { // 0 means disabled
|
||||
if (led_type_) {
|
||||
// rgb LED WS2812B, use Neopixel
|
||||
#if ESP_ARDUINO_VERSION_MAJOR < 3
|
||||
neopixelWrite(led_gpio_, 0, 0, 0);
|
||||
#else
|
||||
rgbLedWrite(led_gpio_, 0, 0, 0);
|
||||
#endif
|
||||
} else {
|
||||
pinMode(led_gpio_, OUTPUT);
|
||||
digitalWrite(led_gpio_, !LED_ON); // start with LED off
|
||||
@@ -817,12 +825,20 @@ void System::system_check() {
|
||||
if (healthcheck_ == 0) {
|
||||
// everything is healthy, show LED permanently on or off depending on setting
|
||||
if (led_gpio_) {
|
||||
#if ESP_ARDUINO_VERSION_MAJOR < 3
|
||||
led_type_ ? neopixelWrite(led_gpio_, 0, hide_led_ ? 0 : 128, 0) : digitalWrite(led_gpio_, hide_led_ ? !LED_ON : LED_ON);
|
||||
#else
|
||||
led_type_ ? rgbLedWrite(led_gpio_, 0, hide_led_ ? 0 : 128, 0) : digitalWrite(led_gpio_, hide_led_ ? !LED_ON : LED_ON);
|
||||
#endif
|
||||
}
|
||||
} else {
|
||||
// turn off LED so we're ready to the flashes
|
||||
if (led_gpio_) {
|
||||
#if ESP_ARDUINO_VERSION_MAJOR < 3
|
||||
led_type_ ? neopixelWrite(led_gpio_, 0, 0, 0) : digitalWrite(led_gpio_, !LED_ON);
|
||||
#else
|
||||
led_type_ ? rgbLedWrite(led_gpio_, 0, 0, 0) : digitalWrite(led_gpio_, !LED_ON);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -882,7 +898,11 @@ void System::led_monitor() {
|
||||
// reset the whole sequence
|
||||
led_long_timer_ = uuid::get_uptime();
|
||||
led_flash_step_ = 0;
|
||||
#if ESP_ARDUINO_VERSION_MAJOR < 3
|
||||
led_type_ ? neopixelWrite(led_gpio_, 0, 0, 0) : digitalWrite(led_gpio_, !LED_ON); // LED off
|
||||
#else
|
||||
led_type_ ? rgbLedWrite(led_gpio_, 0, 0, 0) : digitalWrite(led_gpio_, !LED_ON); // LED off
|
||||
#endif
|
||||
} else if (led_flash_step_ % 2) {
|
||||
// handle the step events (on odd numbers 3,5,7,etc). see if we need to turn on a LED
|
||||
// 1 flash is the EMS bus is not connected
|
||||
@@ -892,17 +912,33 @@ void System::led_monitor() {
|
||||
if (led_type_) {
|
||||
if (led_flash_step_ == 3) {
|
||||
if ((healthcheck_ & HEALTHCHECK_NO_NETWORK) == HEALTHCHECK_NO_NETWORK) {
|
||||
#if ESP_ARDUINO_VERSION_MAJOR < 3
|
||||
neopixelWrite(led_gpio_, 128, 0, 0); // red
|
||||
#else
|
||||
rgbLedWrite(led_gpio_, 128, 0, 0); // red
|
||||
#endif
|
||||
} else if ((healthcheck_ & HEALTHCHECK_NO_BUS) == HEALTHCHECK_NO_BUS) {
|
||||
#if ESP_ARDUINO_VERSION_MAJOR < 3
|
||||
neopixelWrite(led_gpio_, 0, 0, 128); // blue
|
||||
#else
|
||||
rgbLedWrite(led_gpio_, 0, 0, 128); // blue
|
||||
#endif
|
||||
}
|
||||
}
|
||||
if (led_flash_step_ == 5 && (healthcheck_ & HEALTHCHECK_NO_NETWORK) == HEALTHCHECK_NO_NETWORK) {
|
||||
#if ESP_ARDUINO_VERSION_MAJOR < 3
|
||||
neopixelWrite(led_gpio_, 128, 0, 0); // red
|
||||
#else
|
||||
rgbLedWrite(led_gpio_, 128, 0, 0); // red
|
||||
#endif
|
||||
}
|
||||
if ((led_flash_step_ == 7) && ((healthcheck_ & HEALTHCHECK_NO_NETWORK) == HEALTHCHECK_NO_NETWORK)
|
||||
&& ((healthcheck_ & HEALTHCHECK_NO_BUS) == HEALTHCHECK_NO_BUS)) {
|
||||
#if ESP_ARDUINO_VERSION_MAJOR < 3
|
||||
neopixelWrite(led_gpio_, 0, 0, 128); // blue
|
||||
#else
|
||||
rgbLedWrite(led_gpio_, 0, 0, 128); // blue
|
||||
#endif
|
||||
}
|
||||
} else {
|
||||
if ((led_flash_step_ == 3)
|
||||
@@ -926,7 +962,11 @@ void System::led_monitor() {
|
||||
} else {
|
||||
// turn the led off after the flash, on even number count
|
||||
if (led_on_) {
|
||||
#if ESP_ARDUINO_VERSION_MAJOR < 3
|
||||
led_type_ ? neopixelWrite(led_gpio_, 0, 0, 0) : digitalWrite(led_gpio_, !LED_ON);
|
||||
#else
|
||||
led_type_ ? rgbLedWrite(led_gpio_, 0, 0, 0) : digitalWrite(led_gpio_, !LED_ON);
|
||||
#endif
|
||||
led_on_ = false;
|
||||
}
|
||||
}
|
||||
|
||||
1
src/emsesp_version.h
Normal file
1
src/emsesp_version.h
Normal file
@@ -0,0 +1 @@
|
||||
#define EMSESP_APP_VERSION "3.7.3-dev.4"
|
||||
@@ -1112,19 +1112,30 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const
|
||||
// EMSESP::webStatusService.action(&request, doc.as<JsonVariant>());
|
||||
|
||||
// test version checks
|
||||
// test with "current_version_s = "3.7.1-dev.8" in WebStatusService::checkUpgrade()
|
||||
// request.url("/rest/action");
|
||||
// deserializeJson(doc, "{\"action\":\"checkUpgrade\", \"param\":\"3.7.1-dev.9,3.7.0\"}"); // is upgradable
|
||||
// EMSESP::webStatusService.action(&request, doc.as<JsonVariant>());
|
||||
// deserializeJson(doc, "{\"action\":\"checkUpgrade\", \"param\":\"3.7.1-dev.7,3.7.0\"}"); // is not upgradable
|
||||
// EMSESP::webStatusService.action(&request, doc.as<JsonVariant>());
|
||||
// use same data as in rest_server.ts
|
||||
// log shows first if you can upgrade to dev, and then if you can upgrade to stable
|
||||
request.url("/rest/action");
|
||||
std::string LATEST_STABLE_VERSION = "3.7.2";
|
||||
std::string LATEST_DEV_VERSION = "3.7.3-dev.3";
|
||||
std::string param = LATEST_DEV_VERSION + "," + LATEST_STABLE_VERSION;
|
||||
std::string action = "{\"action\":\"checkUpgrade\", \"param\":\"" + param + "\"}";
|
||||
deserializeJson(doc, action);
|
||||
|
||||
// test with "current_version_s = "3.6.5" in WebStatusService::checkUpgrade()
|
||||
// request.url("/rest/action");
|
||||
// deserializeJson(doc, "{\"action\":\"checkUpgrade\", \"param\":\"3.7.1-dev.9,3.6.5\"}"); // is noy upgradable
|
||||
// EMSESP::webStatusService.action(&request, doc.as<JsonVariant>());
|
||||
// deserializeJson(doc, "{\"action\":\"checkUpgrade\", \"param\":\"3.7.1-dev.7,3.7.0\"}"); // is upgradable
|
||||
// EMSESP::webStatusService.action(&request, doc.as<JsonVariant>());
|
||||
// case 0: on latest stable, can upgrade to dev only. So true, false
|
||||
EMSESP::webStatusService.set_current_version(LATEST_STABLE_VERSION);
|
||||
EMSESP::webStatusService.action(&request, doc.as<JsonVariant>());
|
||||
|
||||
// case 1: on latest dev, no updates to either dev or stable. So false, false
|
||||
EMSESP::webStatusService.set_current_version(LATEST_DEV_VERSION);
|
||||
EMSESP::webStatusService.action(&request, doc.as<JsonVariant>());
|
||||
|
||||
// case 2: upgrade an older stable to latest stable or the latest dev. So true, true
|
||||
EMSESP::webStatusService.set_current_version("3.6.5");
|
||||
EMSESP::webStatusService.action(&request, doc.as<JsonVariant>());
|
||||
|
||||
// case 3: upgrade an older dev to latest dev, no stable upgrades available. So true, false
|
||||
EMSESP::webStatusService.set_current_version("3.7.3-dev.2");
|
||||
EMSESP::webStatusService.action(&request, doc.as<JsonVariant>());
|
||||
|
||||
// char data6[] = "{\"device\":\"system\", \"cmd\":\"read\",\"value\":\"8 2 27 1\"}";
|
||||
// deserializeJson(doc, data6);
|
||||
|
||||
@@ -41,7 +41,7 @@ namespace emsesp {
|
||||
// #define EMSESP_DEBUG_DEFAULT "310"
|
||||
// #define EMSESP_DEBUG_DEFAULT "render"
|
||||
// #define EMSESP_DEBUG_DEFAULT "api"
|
||||
// #define EMSESP_DEBUG_DEFAULT "api3"
|
||||
#define EMSESP_DEBUG_DEFAULT "api3"
|
||||
// #define EMSESP_DEBUG_DEFAULT "api4"
|
||||
// #define EMSESP_DEBUG_DEFAULT "crash"
|
||||
// #define EMSESP_DEBUG_DEFAULT "dv"
|
||||
|
||||
@@ -73,14 +73,17 @@ void EMSuart::uart_event_task(void * pvParameters) {
|
||||
*/
|
||||
void EMSuart::start(const uint8_t tx_mode, const uint8_t rx_gpio, const uint8_t tx_gpio) {
|
||||
if (tx_mode_ == 0xFF) {
|
||||
uart_config_t uart_config = {
|
||||
.baud_rate = EMSUART_BAUD,
|
||||
.data_bits = UART_DATA_8_BITS,
|
||||
.parity = UART_PARITY_DISABLE,
|
||||
.stop_bits = UART_STOP_BITS_1,
|
||||
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
|
||||
.rx_flow_ctrl_thresh = 0, // not used - https://docs.espressif.com/projects/esp-idf/en/v3.3.6/api-reference/peripherals/uart.html
|
||||
.source_clk = UART_SCLK_APB,
|
||||
uart_config_t uart_config = {.baud_rate = EMSUART_BAUD,
|
||||
.data_bits = UART_DATA_8_BITS,
|
||||
.parity = UART_PARITY_DISABLE,
|
||||
.stop_bits = UART_STOP_BITS_1,
|
||||
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
|
||||
.rx_flow_ctrl_thresh = 0,
|
||||
.source_clk = UART_SCLK_APB
|
||||
#if ESP_ARDUINO_VERSION_MAJOR >= 3
|
||||
,
|
||||
.flags = {0, 0}
|
||||
#endif
|
||||
};
|
||||
#if defined(EMSUART_RX_INVERT)
|
||||
inverse_mask |= UART_SIGNAL_RXD_INV;
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
#define EMSESP_APP_VERSION "3.7.3-dev.3"
|
||||
@@ -219,37 +219,38 @@ void WebStatusService::action(AsyncWebServerRequest * request, JsonVariant json)
|
||||
// action = checkUpgrade
|
||||
// versions holds the latest development version and stable version in one string, comma separated
|
||||
bool WebStatusService::checkUpgrade(JsonObject root, std::string & versions) {
|
||||
std::string current_version_s;
|
||||
#ifndef EMSESP_STANDALONE
|
||||
current_version_s = EMSESP_APP_VERSION;
|
||||
#else
|
||||
// for testing only - see api3 test in test.cpp
|
||||
// current_version_s = "3.6.5";
|
||||
current_version_s = "3.7.2-dev.1";
|
||||
#endif
|
||||
|
||||
if (!versions.empty()) {
|
||||
version::Semver200_version current_version(current_version_s);
|
||||
bool using_dev_version = !current_version.prerelease().find("dev"); // look for dev in the name to determine if we're using dev version
|
||||
version::Semver200_version latest_version(using_dev_version ? versions.substr(0, versions.find(',')) : versions.substr(versions.find(',') + 1));
|
||||
bool upgradeable = (latest_version > current_version);
|
||||
version::Semver200_version latest_dev_version(versions.substr(0, versions.find(',')));
|
||||
version::Semver200_version latest_stable_version(versions.substr(versions.find(',') + 1));
|
||||
|
||||
bool dev_upgradeable = latest_dev_version > current_version;
|
||||
bool stable_upgradeable = latest_stable_version > current_version;
|
||||
|
||||
#if defined(EMSESP_DEBUG)
|
||||
// look for dev in the name to determine if we're using a dev release
|
||||
bool using_dev_version = !current_version.prerelease().find("dev");
|
||||
emsesp::EMSESP::logger()
|
||||
.debug("Checking Version upgrade. Using %s release branch. current version=%d.%d.%d-%s, latest version=%d.%d.%d-%s (%s upgradeable)",
|
||||
(using_dev_version ? "dev" : "stable"),
|
||||
.debug("Checking version upgrade. This version=%d.%d.%d-%s (%s),latest dev=%d.%d.%d-%s (%s upgradeable),latest stable=%d.%d.%d-%s (%s upgradeable)",
|
||||
current_version.major(),
|
||||
current_version.minor(),
|
||||
current_version.patch(),
|
||||
current_version.prerelease().c_str(),
|
||||
latest_version.major(),
|
||||
latest_version.minor(),
|
||||
latest_version.patch(),
|
||||
latest_version.prerelease().c_str(),
|
||||
upgradeable ? "IS" : "NOT");
|
||||
using_dev_version ? "Dev" : "Stable",
|
||||
latest_dev_version.major(),
|
||||
latest_dev_version.minor(),
|
||||
latest_dev_version.patch(),
|
||||
latest_dev_version.prerelease().c_str(),
|
||||
dev_upgradeable ? "is" : "is not",
|
||||
latest_stable_version.major(),
|
||||
latest_stable_version.minor(),
|
||||
latest_stable_version.patch(),
|
||||
latest_stable_version.prerelease().c_str(),
|
||||
stable_upgradeable ? "is" : "is not");
|
||||
#endif
|
||||
|
||||
root["upgradeable"] = upgradeable;
|
||||
root["dev_upgradeable"] = dev_upgradeable;
|
||||
root["stable_upgradeable"] = stable_upgradeable;
|
||||
}
|
||||
|
||||
root["emsesp_version"] = current_version_s; // always send back current version
|
||||
|
||||
@@ -5,12 +5,19 @@
|
||||
#define EMSESP_ACTION_SERVICE_PATH "/rest/action"
|
||||
|
||||
#include <semver200.h> // for version checking
|
||||
#include "../emsesp_version.h"
|
||||
|
||||
namespace emsesp {
|
||||
|
||||
class WebStatusService {
|
||||
public:
|
||||
WebStatusService(AsyncWebServer * server, SecurityManager * securityManager);
|
||||
void set_current_version(const std::string & version) {
|
||||
current_version_s = version;
|
||||
}
|
||||
std::string get_current_version() {
|
||||
return current_version_s;
|
||||
}
|
||||
|
||||
// make action function public so we can test in the debug and standalone mode
|
||||
#ifndef EMSESP_STANDALONE
|
||||
@@ -29,6 +36,8 @@ class WebStatusService {
|
||||
bool uploadURL(const char * url);
|
||||
bool setSystemStatus(const char * status);
|
||||
void allvalues(JsonObject output);
|
||||
|
||||
std::string current_version_s = EMSESP_APP_VERSION;
|
||||
};
|
||||
|
||||
} // namespace emsesp
|
||||
|
||||
Reference in New Issue
Block a user