diff --git a/docs/source/Plugin/P137.rst b/docs/source/Plugin/P137.rst index 6ed189a235..87f9ae9db8 100644 --- a/docs/source/Plugin/P137.rst +++ b/docs/source/Plugin/P137.rst @@ -65,7 +65,9 @@ Hardware outputs AXP192 * *LilyGO T-Beam* Settings for the LilyGO T-Beam series of GPS/LoRa devices with optional OLed display. -* *User defined* To be able to configure all available output pins the User defined option is available, f.e. when using a custom designed, or not yet supported, hardware setup. +* *M5Stack StickC Plus* Settings for the M5Stack StickC Plus hardware. (Not applicable for the M5Stack StickC Plus 2, as that unit doesn't have an AXP192 power management controller). + +* *User defined* To be able to configure are available output pins the User defined option is available, f.e. when using a custom designed, or not yet supported, hardware setup. When available, new predefined devices will be added. The User defined option will stay the last option. diff --git a/docs/source/Plugin/P137_PredefinedDeviceOptions.png b/docs/source/Plugin/P137_PredefinedDeviceOptions.png index 4502c4b397..baac03ca69 100644 Binary files a/docs/source/Plugin/P137_PredefinedDeviceOptions.png and b/docs/source/Plugin/P137_PredefinedDeviceOptions.png differ diff --git a/lib/AXP2101/src/AXP2101_settings.cpp b/lib/AXP2101/src/AXP2101_settings.cpp index c44ae79cd9..a43f18db27 100644 --- a/lib/AXP2101/src/AXP2101_settings.cpp +++ b/lib/AXP2101/src/AXP2101_settings.cpp @@ -525,7 +525,7 @@ AXP2101_settings AXP2101_deviceSettingsArray[] = /* M5Stack Core2 v1.1 */ { 3300, 0, 3300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, AXP_pin_s::Protected, AXP_pin_s::Disabled, AXP_pin_s::Protected, AXP_pin_s::Disabled, AXP_pin_s::Disabled, AXP_pin_s::Disabled, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Disabled, AXP_pin_s::Disabled, AXP2101_chargeled_d::Off }, /* M5Stack CoreS3 */ { 3300, 0, 3300, 0, 0, 1800, 3300, 3300, 3300, 0, 0, 0, 0, 0, AXP_pin_s::Protected, AXP_pin_s::Disabled, AXP_pin_s::Protected, AXP_pin_s::Disabled, AXP_pin_s::Disabled, AXP_pin_s::Protected, AXP_pin_s::Protected, AXP_pin_s::Default, AXP_pin_s::Protected, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Disabled, AXP_pin_s::Disabled, AXP2101_chargeled_d::Off }, /* LilyGo TBeam v1.2 */ { 3300, 0, 2500, 0, 0, 0, 3300, 3300, 0, 0, 0, 0, 0, 0, AXP_pin_s::Protected, AXP_pin_s::Disabled, AXP_pin_s::Protected, AXP_pin_s::Disabled, AXP_pin_s::Disabled, AXP_pin_s::Disabled, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Disabled, AXP_pin_s::Disabled, AXP_pin_s::Disabled, AXP_pin_s::Disabled, AXP_pin_s::Disabled, AXP_pin_s::Default, AXP2101_chargeled_d::Off }, -/* LilyGo TBeamS3 */ { 3300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, AXP_pin_s::Protected, AXP_pin_s::Disabled, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Disabled, AXP_pin_s::Disabled, AXP_pin_s::Disabled, AXP2101_chargeled_d::Off }, +/* LilyGo TBeamS3 */ { 3300, 500, 500, 1800, 3300, 1800, 3300, 3300, 3300, 1800, 3300, 3300, 2300, 2300, AXP_pin_s::Protected, AXP_pin_s::Disabled, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Disabled, AXP_pin_s::Disabled, AXP_pin_s::Disabled, AXP_pin_s::Disabled, AXP2101_chargeled_d::Off }, /* LilyGo TPCie v1.2 */ { 3300, 900, 900, 1100, 1200, 1800, 2800, 3300, 2900, 1800, 2800, 500, 1900, 1300, AXP_pin_s::Protected, AXP_pin_s::Disabled, AXP_pin_s::Protected, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Disabled, AXP_pin_s::Disabled, AXP_pin_s::Disabled, AXP2101_chargeled_d::Off }, /* Userdefined */ { 3300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP_pin_s::Default, AXP2101_chargeled_d::Off }, }; diff --git a/src/_P037_MQTTImport.ino b/src/_P037_MQTTImport.ino index b939bb37e0..328acc6e79 100644 --- a/src/_P037_MQTTImport.ino +++ b/src/_P037_MQTTImport.ino @@ -772,9 +772,10 @@ bool MQTTSubscribe_037(struct EventStruct *event) for (uint8_t x = 0; x < VARS_PER_TASK; x++) { String subscribeTo = P037_data->getFullMQTTTopic(x); - if (!subscribeTo.isEmpty()) { - parseSystemVariables(subscribeTo, false); + parseSystemVariables(subscribeTo, false); + subscribeTo.trim(); + if (!subscribeTo.isEmpty()) { if (MQTTclient.subscribe(subscribeTo.c_str())) { if (loglevelActiveFor(LOG_LEVEL_INFO)) { addLog(LOG_LEVEL_INFO, strformat(F("IMPT : [%s#%s] subscribed to %s"), diff --git a/src/_P137_AXP192.ino b/src/_P137_AXP192.ino index 7e3d9c6e33..353fccdccc 100644 --- a/src/_P137_AXP192.ino +++ b/src/_P137_AXP192.ino @@ -8,6 +8,8 @@ // ####################################################################################################### /** Changelog: + * 2025-01-21 tonhuisman: Bugfix: commands axp,ldo2,x to axp,dcdc3,x weren't working as intended + * 2025-01-18 tonhuisman: Add predefined config settings for M5Stack StickC Plus units * 2025-01-18 tonhuisman: Implement support for MQTT AutoDiscovery * 2025-01-12 tonhuisman: Add support for MQTT AutoDiscovery (not supported yet for AXP192) * 2022-12-27 tonhuisman: Add predefined config settings for LilyGO T-Beam LoRa units @@ -190,6 +192,7 @@ boolean Plugin_137(uint8_t function, struct EventStruct *event, String& string) toString(P137_PredefinedDevices_e::M5Stack_StickC), toString(P137_PredefinedDevices_e::M5Stack_Core2), toString(P137_PredefinedDevices_e::LilyGO_TBeam), + toString(P137_PredefinedDevices_e::M5Stack_StickCPlus), toString(P137_PredefinedDevices_e::UserDefined) // keep last and at 99 !! }; const int predefinedValues[] = { @@ -197,6 +200,7 @@ boolean Plugin_137(uint8_t function, struct EventStruct *event, String& string) static_cast(P137_PredefinedDevices_e::M5Stack_StickC), static_cast(P137_PredefinedDevices_e::M5Stack_Core2), static_cast(P137_PredefinedDevices_e::LilyGO_TBeam), + static_cast(P137_PredefinedDevices_e::M5Stack_StickCPlus), static_cast(P137_PredefinedDevices_e::UserDefined) }; // keep last and at 99 !! constexpr size_t optionCount = NR_ELEMENTS(predefinedValues); FormSelectorOptions selector(optionCount, predefinedNames, predefinedValues); diff --git a/src/src/CustomBuild/define_plugin_sets.h b/src/src/CustomBuild/define_plugin_sets.h index d85f2e9c9b..5da0d4f267 100644 --- a/src/src/CustomBuild/define_plugin_sets.h +++ b/src/src/CustomBuild/define_plugin_sets.h @@ -1989,6 +1989,12 @@ To create/register a plugin, you have to : #ifndef USES_P135 #define USES_P135 // SCD4x #endif + #if !defined(USES_P137) && defined(ESP32) + #define USES_P137 // AXP192 + #endif + #if !defined(USES_P139) && defined(ESP32) + #define USES_P139 // AXP2101 + #endif #ifndef USES_P144 #define USES_P144 // Dust - PM1006(K) (Vindriktning) #endif diff --git a/src/src/ESPEasyCore/Controller.cpp b/src/src/ESPEasyCore/Controller.cpp index a7924d9969..d6ba2746dc 100644 --- a/src/src/ESPEasyCore/Controller.cpp +++ b/src/src/ESPEasyCore/Controller.cpp @@ -588,10 +588,14 @@ bool MQTTConnect(controllerIndex_t controller_idx) void MQTTparseSystemVariablesAndSubscribe(String subscribeTo) { if (subscribeTo.isEmpty()) { return; } parseSystemVariables(subscribeTo, false); - MQTTclient.subscribe(subscribeTo.c_str()); + subscribeTo.trim(); - if (loglevelActiveFor(LOG_LEVEL_INFO)) { - addLogMove(LOG_LEVEL_INFO, concat(F("Subscribed to: "), subscribeTo)); + if (!subscribeTo.isEmpty()) { + MQTTclient.subscribe(subscribeTo.c_str()); + + if (loglevelActiveFor(LOG_LEVEL_INFO)) { + addLogMove(LOG_LEVEL_INFO, concat(F("Subscribed to: "), subscribeTo)); + } } } diff --git a/src/src/PluginStructs/P137_data_struct.cpp b/src/src/PluginStructs/P137_data_struct.cpp index 753c0b9fe7..d34c703d5e 100644 --- a/src/src/PluginStructs/P137_data_struct.cpp +++ b/src/src/PluginStructs/P137_data_struct.cpp @@ -70,7 +70,15 @@ void P137_CheckPredefinedParameters(struct EventStruct *event) { P137_REG_DCDC2_LDO2 = (P137_valueToSetting(-1, P137_CONST_MAX_DCDC2) << 16) | P137_valueToSetting(3300, P137_CONST_MAX_LDO); P137_REG_DCDC3_LDO3 = (P137_valueToSetting(3300, P137_CONST_MAX_DCDC) << 16) | P137_valueToSetting(3300, P137_CONST_MAX_LDO); P137_REG_LDOIO = P137_valueToSetting(3300, P137_CONST_MAX_LDOIO); - P137_CONFIG_DISABLEBITS = 0b1111111000; // NC pins disabled + P137_CONFIG_DISABLEBITS = 0b1111111000; // NC pins disabled + break; + } + case P137_PredefinedDevices_e::M5Stack_StickCPlus: // M5Stack StickC Plus + { + P137_REG_DCDC2_LDO2 = (P137_valueToSetting(-1, P137_CONST_MAX_DCDC2) << 16) | P137_valueToSetting(2800, P137_CONST_MAX_LDO); + P137_REG_DCDC3_LDO3 = (P137_valueToSetting(-1, P137_CONST_MAX_DCDC) << 16) | P137_valueToSetting(3000, P137_CONST_MAX_LDO); + P137_REG_LDOIO = P137_valueToSetting(2800, P137_CONST_MAX_LDOIO); + P137_CONFIG_DISABLEBITS = 0b1111110000; // NC pins disabled break; } case P137_PredefinedDevices_e::UserDefined: // User defined @@ -111,7 +119,7 @@ const __FlashStringHelper* toString(const P137_valueOptions_e value, case P137_valueOptions_e::DCDC2: return displayString ? F("DCDC2 Voltage") : F("dcdc2voltage"); case P137_valueOptions_e::DCDC3: return displayString ? F("DCDC3 Voltage") : F("dcdc3voltage"); } - return F("*Undefined*"); + return F("Undefined"); } // **************************************************************************/ @@ -125,7 +133,7 @@ const __FlashStringHelper* toString(const P137_GPIOBootState_e value) { case P137_GPIOBootState_e::Input: return F("Input"); case P137_GPIOBootState_e::PWM: return F("PWM"); } - return F("*Undefined*"); + return F("Undefined"); } // **************************************************************************/ @@ -135,11 +143,12 @@ const __FlashStringHelper* toString(const P137_PredefinedDevices_e device) { switch (device) { case P137_PredefinedDevices_e::Unselected: return F("Select an option to set default values"); case P137_PredefinedDevices_e::M5Stack_StickC: return F("M5Stack StickC"); - case P137_PredefinedDevices_e::M5Stack_Core2: return F("M5Stack Core2 v1.0 (Default)"); - case P137_PredefinedDevices_e::LilyGO_TBeam: return F("LilyGO T-Beam v1.1"); + case P137_PredefinedDevices_e::M5Stack_Core2: return F("M5Stack Core2 (Default)"); + case P137_PredefinedDevices_e::LilyGO_TBeam: return F("LilyGO T-Beam"); + case P137_PredefinedDevices_e::M5Stack_StickCPlus: return F("M5Stack StickC Plus"); case P137_PredefinedDevices_e::UserDefined: return F("User defined"); } - return F("*Undefined*"); + return F("Undefined"); } # if FEATURE_MQTT_DISCOVER @@ -290,7 +299,10 @@ bool P137_data_struct::plugin_write(struct EventStruct *event, if (isInitialized() && equals(cmd, F("axp"))) { // Command trigger cmd = parseString(string, 2); // sub command - const int subcommand_i = GetCommandCode(cmd.c_str(), P137_subcommands); + const int subcommand_i = GetCommandCode(cmd.c_str(), P137_subcommands); + + if (subcommand_i < 0) { return success; } // fail fast + const P137_subcommands_e subcmd = static_cast(subcommand_i); const String var3 = parseString(string, 3); @@ -299,7 +311,8 @@ bool P137_data_struct::plugin_write(struct EventStruct *event, const bool state3 = !empty3 && (event->Par2 == 0 || event->Par2 == 1); success = true; - if ((event->Par2 >= 0) && (event->Par2 <= P137_CONST_100_PERCENT) && !empty3 && empty4) { + if ((event->Par2 >= 0) && (event->Par2 <= P137_CONST_100_PERCENT) && !empty3 && empty4 && + (subcmd >= P137_subcommands_e::ldo2perc) && (subcmd <= P137_subcommands_e::dcdc3perc)) { // percentage 0..100, 0 turns off switch (subcmd) { @@ -353,7 +366,9 @@ bool P137_data_struct::plugin_write(struct EventStruct *event, success = false; break; } - } else if ((event->Par2 >= 0) && (event->Par3 <= P137_CONST_MAX_LDO) && (event->Par2 < event->Par3) && !empty3 && !empty4) { + } else + if ((event->Par2 >= 0) && (event->Par3 <= P137_CONST_MAX_LDO) && (event->Par2 < event->Par3) && !empty3 && !empty4 && + (subcmd >= P137_subcommands_e::ldo2map) && (subcmd <= P137_subcommands_e::dcdc3map)) { // map range , switch (subcmd) { diff --git a/src/src/PluginStructs/P137_data_struct.h b/src/src/PluginStructs/P137_data_struct.h index 3e3f9c7035..84c174fc12 100644 --- a/src/src/PluginStructs/P137_data_struct.h +++ b/src/src/PluginStructs/P137_data_struct.h @@ -78,11 +78,12 @@ enum class P137_GPIOBootState_e: uint8_t { // Will be applied by subtracting 1 ! }; enum class P137_PredefinedDevices_e : uint8_t { - Unselected = 0u, - M5Stack_StickC = 1u, - M5Stack_Core2 = 2u, - LilyGO_TBeam = 3u, - UserDefined = 99u // Keep as last + Unselected = 0u, + M5Stack_StickC = 1u, + M5Stack_Core2 = 2u, + LilyGO_TBeam = 3u, + M5Stack_StickCPlus = 4u, + UserDefined = 99u // Keep as last }; int16_t P137_settingToValue(uint16_t data,