From 917242909bd1762c0b1cc499d5af9116ab7d76ed Mon Sep 17 00:00:00 2001 From: Bernhard Kirchen Date: Thu, 19 Oct 2023 16:14:36 +0200 Subject: [PATCH 01/10] Fix: PowerMeter: update _lastPowerMeterUpdate for SOURCE_SML (#506) closes #498. --- src/PowerMeter.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/PowerMeter.cpp b/src/PowerMeter.cpp index 4598c85ab..a7b1fee8e 100644 --- a/src/PowerMeter.cpp +++ b/src/PowerMeter.cpp @@ -134,14 +134,17 @@ void PowerMeterClass::loop() CONFIG_T const& config = Configuration.get(); _verboseLogging = config.PowerMeter_VerboseLogging; - if (config.PowerMeter_Enabled && config.PowerMeter_Source == SOURCE_SML) { + if (!config.PowerMeter_Enabled) { return; } + + if (config.PowerMeter_Source == SOURCE_SML) { if (!smlReadLoop()) { return; + } else { + _lastPowerMeterUpdate = millis(); } } - if (!config.PowerMeter_Enabled - || (millis() - _lastPowerMeterCheck) < (config.PowerMeter_Interval * 1000)) { + if ((millis() - _lastPowerMeterCheck) < (config.PowerMeter_Interval * 1000)) { return; } From d23b991f5cf6ea8a376c9ba7772ef41ea96f3ed5 Mon Sep 17 00:00:00 2001 From: Bernhard Kirchen Date: Thu, 19 Oct 2023 16:15:29 +0200 Subject: [PATCH 02/10] VE.Direct: Fix design issues and prepare support for multiple instances (#505) * introduce VictronMpptClass this solves a design issue where the loop() method of a static instance of VeDirectMpptController, which is part of library code, is called as part of the main loop() implementation. that is a problem because the call to this loop() must be handled differently from all other calls: the lib does not know whether or not the feature is enabled at all. also, the instance would not be initialized when enabling the feature during normal operation. that would even lead to a nullptr exception since the pointer to the serial implementation is still uninitialized. this new intermediate class is implemented with the support for multiple Victron charge controllers in mind. adding support for more charge controllers should be more viable than ever. fixes #481. related to #397 #129. * VE.Direct: move get.*AsString methods to respective structs those structs, which hold the data to be translated into strings, know best how to translate them. this change also simplifies access to those translation, as no parameter must be handed to the respective methods: they now act upon the data of the instance they are called for. adds constness to those methods. * VE.Direct: simplify and clean up get.*AsString methods use a map, which is much easier to maintain and which reads much easier. move the strings to flash memory to save RAM. * DPL: use VictronMpptClass::getPowerOutputWatts method remove redundant calculation of output power from DPL. consider separation of concern: VictronMpptClass will provide the total solar output power. the DPL shall not concern itself about how that value is calculated and it certainly should be unaware about how many MPPT charge controllers there actually are. * VE.Direct: avoid shadowing struct member "P" P was part of the base struct for both MPPT and SmartShunt controller. however, P was also part of the SmartShunt controller data struct, shadowing the member in the base struct. since P has slightly different meaning in MPPT versus SmartShunt, and since P is calculated for MPPT controllers but read from SmartShunts, P now lives in both derived structs, but not in the base struct. * VE.Direct: isDataValid(): avoid copying data structs pass a const reference to the base class implementation of isDataValid() rather than a copy of the whole struct. * VE.Direct: unify logging of text events * VE.Direct: stop processing text event if handled by base in case the base class processed a text event, do not try to match it against values that are only valid in the derived class -- none will match. * VE.Direct MPPT: manage data in a shared_ptr instead of handing out a reference to a struct which is part of a class instance that may disappear, e.g., on a config change, we now manage the lifetime of said data structure using a shared_ptr and hand out copies of that shared_ptr. this makes sure that users have a valid copy of the data as long as they hold the shared_ptr. * VE.Direct MPPT: implement getDataAgeMillis() this works even if millis() wraps around. * VE.Direct: process frame end event only for valid frames save a parameters, save a level of indention, save a function call for invalid frames. --- include/PinMapping.h | 1 - include/VictronMppt.h | 39 ++ include/WebApi_ws_vedirect_live.h | 3 +- .../VeDirectFrameHandler.cpp | 447 +++++------------- .../VeDirectFrameHandler.h | 38 +- .../VeDirectMpptController.cpp | 216 ++++----- .../VeDirectMpptController.h | 23 +- .../VeDirectShuntController.cpp | 24 +- .../VeDirectShuntController.h | 2 +- src/BatteryStats.cpp | 2 +- src/MqttHandlVedirectHass.cpp | 18 +- src/MqttHandleVedirect.cpp | 93 ++-- src/PinMapping.cpp | 5 - src/PowerLimiter.cpp | 15 +- src/VictronMppt.cpp | 96 ++++ src/WebApi_vedirect.cpp | 4 +- src/WebApi_ws_live.cpp | 12 +- src/WebApi_ws_vedirect_live.cpp | 69 ++- src/main.cpp | 21 +- 19 files changed, 506 insertions(+), 622 deletions(-) create mode 100644 include/VictronMppt.h create mode 100644 src/VictronMppt.cpp diff --git a/include/PinMapping.h b/include/PinMapping.h index 5e4c7fa04..c9541c4ba 100644 --- a/include/PinMapping.h +++ b/include/PinMapping.h @@ -62,7 +62,6 @@ class PinMappingClass { bool isValidNrf24Config(); bool isValidCmt2300Config(); bool isValidEthConfig(); - bool isValidVictronConfig(); bool isValidHuaweiConfig(); private: diff --git a/include/VictronMppt.h b/include/VictronMppt.h new file mode 100644 index 000000000..6718ef330 --- /dev/null +++ b/include/VictronMppt.h @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +#pragma once + +#include +#include + +#include "VeDirectMpptController.h" + +class VictronMpptClass { +public: + VictronMpptClass() = default; + ~VictronMpptClass() = default; + + void init(); + void loop(); + + bool isDataValid() const; + + // returns the data age of all controllers, + // i.e, the youngest data's age is returned. + uint32_t getDataAgeMillis() const; + + VeDirectMpptController::spData_t getData(size_t idx = 0) const; + + // total output of all MPPT charge controllers in Watts + int32_t getPowerOutputWatts() const; + +private: + VictronMpptClass(VictronMpptClass const& other) = delete; + VictronMpptClass(VictronMpptClass&& other) = delete; + VictronMpptClass& operator=(VictronMpptClass const& other) = delete; + VictronMpptClass& operator=(VictronMpptClass&& other) = delete; + + mutable std::mutex _mutex; + using controller_t = std::unique_ptr; + std::vector _controllers; +}; + +extern VictronMpptClass VictronMppt; diff --git a/include/WebApi_ws_vedirect_live.h b/include/WebApi_ws_vedirect_live.h index 13b27d9fa..d084e74ee 100644 --- a/include/WebApi_ws_vedirect_live.h +++ b/include/WebApi_ws_vedirect_live.h @@ -20,8 +20,7 @@ class WebApiWsVedirectLiveClass { AsyncWebSocket _ws; uint32_t _lastWsPublish = 0; - uint32_t _lastVedirectUpdateCheck = 0; uint32_t _lastWsCleanup = 0; - uint32_t _newestVedirectTimestamp = 0; + uint32_t _dataAgeMillis = 0; static constexpr uint16_t _responseSize = 1024 + 128; }; \ No newline at end of file diff --git a/lib/VeDirectFrameHandler/VeDirectFrameHandler.cpp b/lib/VeDirectFrameHandler/VeDirectFrameHandler.cpp index 39ce4fabf..0c0c544e6 100644 --- a/lib/VeDirectFrameHandler/VeDirectFrameHandler.cpp +++ b/lib/VeDirectFrameHandler/VeDirectFrameHandler.cpp @@ -72,19 +72,14 @@ VeDirectFrameHandler::VeDirectFrameHandler() : { } -void VeDirectFrameHandler::setVerboseLogging(bool verboseLogging) -{ - _verboseLogging = verboseLogging; - if (!_verboseLogging) { _debugIn = 0; } -} - void VeDirectFrameHandler::init(int8_t rx, int8_t tx, Print* msgOut, bool verboseLogging, uint16_t hwSerialPort) { _vedirectSerial = std::make_unique(hwSerialPort); _vedirectSerial->begin(19200, SERIAL_8N1, rx, tx); _vedirectSerial->flush(); _msgOut = msgOut; - setVerboseLogging(verboseLogging); + _verboseLogging = verboseLogging; + _debugIn = 0; } void VeDirectFrameHandler::dumpDebugBuffer() { @@ -211,7 +206,7 @@ void VeDirectFrameHandler::rxData(uint8_t inbyte) if (_verboseLogging) { dumpDebugBuffer(); } _checksum = 0; _state = IDLE; - frameEndEvent(valid); + if (valid) { frameValidEvent(); } break; } case RECORD_HEX: @@ -224,22 +219,38 @@ void VeDirectFrameHandler::rxData(uint8_t inbyte) * textRxEvent * This function is called every time a new name/value is successfully parsed. It writes the values to the temporary buffer. */ -void VeDirectFrameHandler::textRxEvent(char * name, char * value, veStruct& frame) { +bool VeDirectFrameHandler::textRxEvent(std::string const& who, char* name, char* value, veStruct& frame) { + if (_verboseLogging) { + _msgOut->printf("[Victron %s] Text Event %s: Value: %s\r\n", + who.c_str(), name, value ); + } + if (strcmp(name, "PID") == 0) { frame.PID = strtol(value, nullptr, 0); + return true; } - else if (strcmp(name, "SER") == 0) { + + if (strcmp(name, "SER") == 0) { strcpy(frame.SER, value); + return true; } - else if (strcmp(name, "FW") == 0) { + + if (strcmp(name, "FW") == 0) { strcpy(frame.FW, value); + return true; } - else if (strcmp(name, "V") == 0) { + + if (strcmp(name, "V") == 0) { frame.V = round(atof(value) / 10.0) / 100.0; + return true; } - else if (strcmp(name, "I") == 0) { + + if (strcmp(name, "I") == 0) { frame.I = round(atof(value) / 10.0) / 100.0; + return true; } + + return false; } @@ -269,7 +280,7 @@ int VeDirectFrameHandler::hexRxEvent(uint8_t inbyte) { return ret; } -bool VeDirectFrameHandler::isDataValid(veStruct frame) { +bool VeDirectFrameHandler::isDataValid(veStruct const& frame) const { if (_lastUpdate == 0) { return false; } @@ -279,330 +290,112 @@ bool VeDirectFrameHandler::isDataValid(veStruct frame) { return true; } -unsigned long VeDirectFrameHandler::getLastUpdate() +uint32_t VeDirectFrameHandler::getLastUpdate() const { return _lastUpdate; } -/* - * getPidAsString - * This function returns the product id (PID) as readable text. - */ -String VeDirectFrameHandler::getPidAsString(uint16_t pid) +template +String const& VeDirectFrameHandler::getAsString(std::map const& values, T val) { - String strPID =""; - - switch(pid) { - case 0x0300: - strPID = "BlueSolar MPPT 70|15"; - break; - case 0xA040: - strPID = "BlueSolar MPPT 75|50"; - break; - case 0xA041: - strPID = "BlueSolar MPPT 150|35"; - break; - case 0xA042: - strPID = "BlueSolar MPPT 75|15"; - break; - case 0xA043: - strPID = "BlueSolar MPPT 100|15"; - break; - case 0xA044: - strPID = "BlueSolar MPPT 100|30"; - break; - case 0xA045: - strPID = "BlueSolar MPPT 100|50"; - break; - case 0xA046: - strPID = "BlueSolar MPPT 100|70"; - break; - case 0xA047: - strPID = "BlueSolar MPPT 150|100"; - break; - case 0xA049: - strPID = "BlueSolar MPPT 100|50 rev2"; - break; - case 0xA04A: - strPID = "BlueSolar MPPT 100|30 rev2"; - break; - case 0xA04B: - strPID = "BlueSolar MPPT 150|35 rev2"; - break; - case 0XA04C: - strPID = "BlueSolar MPPT 75|10"; - break; - case 0XA04D: - strPID = "BlueSolar MPPT 150|45"; - break; - case 0XA04E: - strPID = "BlueSolar MPPT 150|60"; - break; - case 0XA04F: - strPID = "BlueSolar MPPT 150|85"; - break; - case 0XA050: - strPID = "SmartSolar MPPT 250|100"; - break; - case 0XA051: - strPID = "SmartSolar MPPT 150|100"; - break; - case 0XA052: - strPID = "SmartSolar MPPT 150|85"; - break; - case 0XA053: - strPID = "SmartSolar MPPT 75|15"; - break; - case 0XA054: - strPID = "SmartSolar MPPT 75|10"; - break; - case 0XA055: - strPID = "SmartSolar MPPT 100|15"; - break; - case 0XA056: - strPID = "SmartSolar MPPT 100|30"; - break; - case 0XA057: - strPID = "SmartSolar MPPT 100|50"; - break; - case 0XA058: - strPID = "SmartSolar MPPT 150|35"; - break; - case 0XA059: - strPID = "SmartSolar MPPT 150|10 rev2"; - break; - case 0XA05A: - strPID = "SmartSolar MPPT 150|85 rev2"; - break; - case 0XA05B: - strPID = "SmartSolar MPPT 250|70"; - break; - case 0XA05C: - strPID = "SmartSolar MPPT 250|85"; - break; - case 0XA05D: - strPID = "SmartSolar MPPT 250|60"; - break; - case 0XA05E: - strPID = "SmartSolar MPPT 250|45"; - break; - case 0XA05F: - strPID = "SmartSolar MPPT 100|20"; - break; - case 0XA060: - strPID = "SmartSolar MPPT 100|20 48V"; - break; - case 0XA061: - strPID = "SmartSolar MPPT 150|45"; - break; - case 0XA062: - strPID = "SmartSolar MPPT 150|60"; - break; - case 0XA063: - strPID = "SmartSolar MPPT 150|70"; - break; - case 0XA064: - strPID = "SmartSolar MPPT 250|85 rev2"; - break; - case 0XA065: - strPID = "SmartSolar MPPT 250|100 rev2"; - break; - case 0XA066: - strPID = "BlueSolar MPPT 100|20"; - break; - case 0XA067: - strPID = "BlueSolar MPPT 100|20 48V"; - break; - case 0XA068: - strPID = "SmartSolar MPPT 250|60 rev2"; - break; - case 0XA069: - strPID = "SmartSolar MPPT 250|70 rev2"; - break; - case 0XA06A: - strPID = "SmartSolar MPPT 150|45 rev2"; - break; - case 0XA06B: - strPID = "SmartSolar MPPT 150|60 rev2"; - break; - case 0XA06C: - strPID = "SmartSolar MPPT 150|70 rev2"; - break; - case 0XA06D: - strPID = "SmartSolar MPPT 150|85 rev3"; - break; - case 0XA06E: - strPID = "SmartSolar MPPT 150|100 rev3"; - break; - case 0XA06F: - strPID = "BlueSolar MPPT 150|45 rev2"; - break; - case 0XA070: - strPID = "BlueSolar MPPT 150|60 rev2"; - break; - case 0XA071: - strPID = "BlueSolar MPPT 150|70 rev2"; - break; - case 0XA102: - strPID = "SmartSolar MPPT VE.Can 150|70"; - break; - case 0XA103: - strPID = "SmartSolar MPPT VE.Can 150|45"; - break; - case 0XA104: - strPID = "SmartSolar MPPT VE.Can 150|60"; - break; - case 0XA105: - strPID = "SmartSolar MPPT VE.Can 150|85"; - break; - case 0XA106: - strPID = "SmartSolar MPPT VE.Can 150|100"; - break; - case 0XA107: - strPID = "SmartSolar MPPT VE.Can 250|45"; - break; - case 0XA108: - strPID = "SmartSolar MPPT VE.Can 250|60"; - break; - case 0XA109: - strPID = "SmartSolar MPPT VE.Can 250|80"; - break; - case 0XA10A: - strPID = "SmartSolar MPPT VE.Can 250|85"; - break; - case 0XA10B: - strPID = "SmartSolar MPPT VE.Can 250|100"; - break; - case 0XA10C: - strPID = "SmartSolar MPPT VE.Can 150|70 rev2"; - break; - case 0XA10D: - strPID = "SmartSolar MPPT VE.Can 150|85 rev2"; - break; - case 0XA10E: - strPID = "SmartSolar MPPT VE.Can 150|100 rev2"; - break; - case 0XA10F: - strPID = "BlueSolar MPPT VE.Can 150|100"; - break; - case 0XA110: - strPID = "SmartSolar MPPT RS 450|100"; - break; - case 0XA112: - strPID = "BlueSolar MPPT VE.Can 250|70"; - break; - case 0XA113: - strPID = "BlueSolar MPPT VE.Can 250|100"; - break; - case 0XA114: - strPID = "SmartSolar MPPT VE.Can 250|70 rev2"; - break; - case 0XA115: - strPID = "SmartSolar MPPT VE.Can 250|100 rev2"; - break; - case 0XA116: - strPID = "SmartSolar MPPT VE.Can 250|85 rev2"; - break; - case 0xA381: - strPID = "BMV-712 Smart"; - break; - case 0xA382: - strPID = "BMV-710H Smart"; - break; - case 0xA383: - strPID = "BMV-712 Smart Rev2"; - break; - case 0xA389: - strPID = "SmartShunt 500A/50mV"; - break; - case 0xA38A: - strPID = "SmartShunt 1000A/50mV"; - break; - case 0xA38B: - strPID = "SmartShunt 2000A/50mV"; - break; - case 0xA3F0: - strPID = "SmartShunt 2000A/50mV" ; - break; - default: - strPID = pid; + auto pos = values.find(val); + if (pos == values.end()) { + static String dummy; + dummy = val; + return dummy; } - return strPID; + return pos->second; } - +template String const& VeDirectFrameHandler::getAsString(std::map const& values, uint8_t val); +template String const& VeDirectFrameHandler::getAsString(std::map const& values, uint16_t val); +template String const& VeDirectFrameHandler::getAsString(std::map const& values, uint32_t val); /* - * getErrAsString - * This function returns error state (ERR) as readable text. + * getPidAsString + * This function returns the product id (PID) as readable text. */ -String VeDirectFrameHandler::getErrAsString(uint8_t err) +String VeDirectFrameHandler::veStruct::getPidAsString() const { - String strERR =""; + static const std::map values = { + { 0x0300, F("BlueSolar MPPT 70|15") }, + { 0xA040, F("BlueSolar MPPT 75|50") }, + { 0xA041, F("BlueSolar MPPT 150|35") }, + { 0xA042, F("BlueSolar MPPT 75|15") }, + { 0xA043, F("BlueSolar MPPT 100|15") }, + { 0xA044, F("BlueSolar MPPT 100|30") }, + { 0xA045, F("BlueSolar MPPT 100|50") }, + { 0xA046, F("BlueSolar MPPT 100|70") }, + { 0xA047, F("BlueSolar MPPT 150|100") }, + { 0xA049, F("BlueSolar MPPT 100|50 rev2") }, + { 0xA04A, F("BlueSolar MPPT 100|30 rev2") }, + { 0xA04B, F("BlueSolar MPPT 150|35 rev2") }, + { 0xA04C, F("BlueSolar MPPT 75|10") }, + { 0xA04D, F("BlueSolar MPPT 150|45") }, + { 0xA04E, F("BlueSolar MPPT 150|60") }, + { 0xA04F, F("BlueSolar MPPT 150|85") }, + { 0xA050, F("SmartSolar MPPT 250|100") }, + { 0xA051, F("SmartSolar MPPT 150|100") }, + { 0xA052, F("SmartSolar MPPT 150|85") }, + { 0xA053, F("SmartSolar MPPT 75|15") }, + { 0xA054, F("SmartSolar MPPT 75|10") }, + { 0xA055, F("SmartSolar MPPT 100|15") }, + { 0xA056, F("SmartSolar MPPT 100|30") }, + { 0xA057, F("SmartSolar MPPT 100|50") }, + { 0xA058, F("SmartSolar MPPT 150|35") }, + { 0xA059, F("SmartSolar MPPT 150|10 rev2") }, + { 0xA05A, F("SmartSolar MPPT 150|85 rev2") }, + { 0xA05B, F("SmartSolar MPPT 250|70") }, + { 0xA05C, F("SmartSolar MPPT 250|85") }, + { 0xA05D, F("SmartSolar MPPT 250|60") }, + { 0xA05E, F("SmartSolar MPPT 250|45") }, + { 0xA05F, F("SmartSolar MPPT 100|20") }, + { 0xA060, F("SmartSolar MPPT 100|20 48V") }, + { 0xA061, F("SmartSolar MPPT 150|45") }, + { 0xA062, F("SmartSolar MPPT 150|60") }, + { 0xA063, F("SmartSolar MPPT 150|70") }, + { 0xA064, F("SmartSolar MPPT 250|85 rev2") }, + { 0xA065, F("SmartSolar MPPT 250|100 rev2") }, + { 0xA066, F("BlueSolar MPPT 100|20") }, + { 0xA067, F("BlueSolar MPPT 100|20 48V") }, + { 0xA068, F("SmartSolar MPPT 250|60 rev2") }, + { 0xA069, F("SmartSolar MPPT 250|70 rev2") }, + { 0xA06A, F("SmartSolar MPPT 150|45 rev2") }, + { 0xA06B, F("SmartSolar MPPT 150|60 rev2") }, + { 0xA06C, F("SmartSolar MPPT 150|70 rev2") }, + { 0xA06D, F("SmartSolar MPPT 150|85 rev3") }, + { 0xA06E, F("SmartSolar MPPT 150|100 rev3") }, + { 0xA06F, F("BlueSolar MPPT 150|45 rev2") }, + { 0xA070, F("BlueSolar MPPT 150|60 rev2") }, + { 0xA071, F("BlueSolar MPPT 150|70 rev2") }, + { 0xA102, F("SmartSolar MPPT VE.Can 150|70") }, + { 0xA103, F("SmartSolar MPPT VE.Can 150|45") }, + { 0xA104, F("SmartSolar MPPT VE.Can 150|60") }, + { 0xA105, F("SmartSolar MPPT VE.Can 150|85") }, + { 0xA106, F("SmartSolar MPPT VE.Can 150|100") }, + { 0xA107, F("SmartSolar MPPT VE.Can 250|45") }, + { 0xA108, F("SmartSolar MPPT VE.Can 250|60") }, + { 0xA109, F("SmartSolar MPPT VE.Can 250|80") }, + { 0xA10A, F("SmartSolar MPPT VE.Can 250|85") }, + { 0xA10B, F("SmartSolar MPPT VE.Can 250|100") }, + { 0xA10C, F("SmartSolar MPPT VE.Can 150|70 rev2") }, + { 0xA10D, F("SmartSolar MPPT VE.Can 150|85 rev2") }, + { 0xA10E, F("SmartSolar MPPT VE.Can 150|100 rev2") }, + { 0xA10F, F("BlueSolar MPPT VE.Can 150|100") }, + { 0xA110, F("SmartSolar MPPT RS 450|100") }, + { 0xA112, F("BlueSolar MPPT VE.Can 250|70") }, + { 0xA113, F("BlueSolar MPPT VE.Can 250|100") }, + { 0xA114, F("SmartSolar MPPT VE.Can 250|70 rev2") }, + { 0xA115, F("SmartSolar MPPT VE.Can 250|100 rev2") }, + { 0xA116, F("SmartSolar MPPT VE.Can 250|85 rev2") }, + { 0xA381, F("BMV-712 Smart") }, + { 0xA382, F("BMV-710H Smart") }, + { 0xA383, F("BMV-712 Smart Rev2") }, + { 0xA389, F("SmartShunt 500A/50mV") }, + { 0xA38A, F("SmartShunt 1000A/50mV") }, + { 0xA38B, F("SmartShunt 2000A/50mV") }, + { 0xA3F0, F("SmartShunt 2000A/50mV" ) } + }; - switch(err) { - case 0: - strERR = "No error"; - break; - case 2: - strERR = "Battery voltage too high"; - break; - case 17: - strERR = "Charger temperature too high"; - break; - case 18: - strERR = "Charger over current"; - break; - case 19: - strERR = "Charger current reversed"; - break; - case 20: - strERR = "Bulk time limit exceeded"; - break; - case 21: - strERR = "Current sensor issue(sensor bias/sensor broken)"; - break; - case 26: - strERR = "Terminals overheated"; - break; - case 28: - strERR = "Converter issue (dual converter models only)"; - break; - case 33: - strERR = "Input voltage too high (solar panel)"; - break; - case 34: - strERR = "Input current too high (solar panel)"; - break; - case 38: - strERR = "Input shutdown (due to excessive battery voltage)"; - break; - case 39: - strERR = "Input shutdown (due to current flow during off mode)"; - break; - case 40: - strERR = "Input"; - break; - case 65: - strERR = "Lost communication with one of devices"; - break; - case 67: - strERR = "Synchronisedcharging device configuration issue"; - break; - case 68: - strERR = "BMS connection lost"; - break; - case 116: - strERR = "Factory calibration data lost"; - break; - case 117: - strERR = "Invalid/incompatible firmware"; - break; - case 118: - strERR = "User settings invalid"; - break; - default: - strERR = err; - } - return strERR; + return getAsString(values, PID); } diff --git a/lib/VeDirectFrameHandler/VeDirectFrameHandler.h b/lib/VeDirectFrameHandler/VeDirectFrameHandler.h index 2cb554875..bc6678b53 100644 --- a/lib/VeDirectFrameHandler/VeDirectFrameHandler.h +++ b/lib/VeDirectFrameHandler/VeDirectFrameHandler.h @@ -13,45 +13,47 @@ #include #include +#include #include #define VE_MAX_VALUE_LEN 33 // VE.Direct Protocol: max value size is 33 including /0 #define VE_MAX_HEX_LEN 100 // Maximum size of hex frame - max payload 34 byte (=68 char) + safe buffer -typedef struct { - uint16_t PID = 0; // product id - char SER[VE_MAX_VALUE_LEN]; // serial number - char FW[VE_MAX_VALUE_LEN]; // firmware release number - int32_t P = 0; // battery output power in W (calculated) - double V = 0; // battery voltage in V - double I = 0; // battery current in A - double E = 0; // efficiency in percent (calculated, moving average) -} veStruct; - class VeDirectFrameHandler { public: VeDirectFrameHandler(); - void setVerboseLogging(bool verboseLogging); virtual void init(int8_t rx, int8_t tx, Print* msgOut, bool verboseLogging, uint16_t hwSerialPort); void loop(); // main loop to read ve.direct data - unsigned long getLastUpdate(); // timestamp of last successful frame read - bool isDataValid(veStruct frame); // return true if data valid and not outdated - String getPidAsString(uint16_t pid); // product id as string - String getErrAsString(uint8_t err); // errer state as string + uint32_t getLastUpdate() const; // timestamp of last successful frame read protected: - void textRxEvent(char *, char *, veStruct& ); - bool _verboseLogging; Print* _msgOut; uint32_t _lastUpdate; + typedef struct { + uint16_t PID = 0; // product id + char SER[VE_MAX_VALUE_LEN]; // serial number + char FW[VE_MAX_VALUE_LEN]; // firmware release number + double V = 0; // battery voltage in V + double I = 0; // battery current in A + double E = 0; // efficiency in percent (calculated, moving average) + + String getPidAsString() const; // product id as string + } veStruct; + + bool textRxEvent(std::string const& who, char* name, char* value, veStruct& frame); + bool isDataValid(veStruct const& frame) const; // return true if data valid and not outdated + + template + static String const& getAsString(std::map const& values, T val); + private: void setLastUpdate(); // set timestampt after successful frame read void dumpDebugBuffer(); void rxData(uint8_t inbyte); // byte of serial data virtual void textRxEvent(char *, char *) = 0; - virtual void frameEndEvent(bool) = 0; // copy temp struct to public struct + virtual void frameValidEvent() = 0; int hexRxEvent(uint8_t); std::unique_ptr _vedirectSerial; diff --git a/lib/VeDirectFrameHandler/VeDirectMpptController.cpp b/lib/VeDirectFrameHandler/VeDirectMpptController.cpp index 0f8246d7e..5635cd45f 100644 --- a/lib/VeDirectFrameHandler/VeDirectMpptController.cpp +++ b/lib/VeDirectFrameHandler/VeDirectMpptController.cpp @@ -1,25 +1,24 @@ #include +#include #include "VeDirectMpptController.h" -VeDirectMpptController VeDirectMppt; - -VeDirectMpptController::VeDirectMpptController() -{ -} - void VeDirectMpptController::init(int8_t rx, int8_t tx, Print* msgOut, bool verboseLogging) { VeDirectFrameHandler::init(rx, tx, msgOut, verboseLogging, 1); + _spData = std::make_shared(); if (_verboseLogging) { _msgOut->println("Finished init MPPTController"); } } -bool VeDirectMpptController::isDataValid() { - return VeDirectFrameHandler::isDataValid(veFrame); +bool VeDirectMpptController::isDataValid() const { + return VeDirectFrameHandler::isDataValid(*_spData); } -void VeDirectMpptController::textRxEvent(char * name, char * value) { - if (_verboseLogging) { _msgOut->printf("[Victron MPPT] Received Text Event %s: Value: %s\r\n", name, value ); } - VeDirectFrameHandler::textRxEvent(name, value, _tmpFrame); +void VeDirectMpptController::textRxEvent(char* name, char* value) +{ + if (VeDirectFrameHandler::textRxEvent("MPPT", name, value, _tmpFrame)) { + return; + } + if (strcmp(name, "LOAD") == 0) { if (strcmp(value, "ON") == 0) _tmpFrame.LOAD = true; @@ -65,139 +64,114 @@ void VeDirectMpptController::textRxEvent(char * name, char * value) { } /* - * frameEndEvent - * This function is called at the end of the received frame. If the checksum is valid, the temp buffer is read line by line. - * If the name exists in the public buffer, the new value is copied to the public buffer. If not, a new name/value entry - * is created in the public buffer. + * frameValidEvent + * This function is called at the end of the received frame. */ -void VeDirectMpptController::frameEndEvent(bool valid) { - if (valid) { - _tmpFrame.P = _tmpFrame.V * _tmpFrame.I; - - _tmpFrame.IPV = 0; - if (_tmpFrame.VPV > 0) { - _tmpFrame.IPV = _tmpFrame.PPV / _tmpFrame.VPV; - } +void VeDirectMpptController::frameValidEvent() { + _tmpFrame.P = _tmpFrame.V * _tmpFrame.I; - _tmpFrame.E = 0; - if ( _tmpFrame.PPV > 0) { - _efficiency.addNumber(static_cast(_tmpFrame.P * 100) / _tmpFrame.PPV); - _tmpFrame.E = _efficiency.getAverage(); - } + _tmpFrame.IPV = 0; + if (_tmpFrame.VPV > 0) { + _tmpFrame.IPV = _tmpFrame.PPV / _tmpFrame.VPV; + } - veFrame = _tmpFrame; - _tmpFrame = {}; - _lastUpdate = millis(); + _tmpFrame.E = 0; + if ( _tmpFrame.PPV > 0) { + _efficiency.addNumber(static_cast(_tmpFrame.P * 100) / _tmpFrame.PPV); + _tmpFrame.E = _efficiency.getAverage(); } + + _spData = std::make_shared(_tmpFrame); + _tmpFrame = {}; + _lastUpdate = millis(); } /* * getCsAsString * This function returns the state of operations (CS) as readable text. */ -String VeDirectMpptController::getCsAsString(uint8_t cs) +String VeDirectMpptController::veMpptStruct::getCsAsString() const { - String strCS =""; - - switch(cs) { - case 0: - strCS = "OFF"; - break; - case 2: - strCS = "Fault"; - break; - case 3: - strCS = "Bulk"; - break; - case 4: - strCS = "Absorbtion"; - break; - case 5: - strCS = "Float"; - break; - case 7: - strCS = "Equalize (manual)"; - break; - case 245: - strCS = "Starting-up"; - break; - case 247: - strCS = "Auto equalize / Recondition"; - break; - case 252: - strCS = "External Control"; - break; - default: - strCS = cs; - } - return strCS; + static const std::map values = { + { 0, F("OFF") }, + { 2, F("Fault") }, + { 3, F("Bulk") }, + { 4, F("Absorbtion") }, + { 5, F("Float") }, + { 7, F("Equalize (manual)") }, + { 245, F("Starting-up") }, + { 247, F("Auto equalize / Recondition") }, + { 252, F("External Control") } + }; + + return getAsString(values, CS); } /* * getMpptAsString * This function returns the state of MPPT (MPPT) as readable text. */ -String VeDirectMpptController::getMpptAsString(uint8_t mppt) +String VeDirectMpptController::veMpptStruct::getMpptAsString() const { - String strMPPT =""; - - switch(mppt) { - case 0: - strMPPT = "OFF"; - break; - case 1: - strMPPT = "Voltage or current limited"; - break; - case 2: - strMPPT = "MPP Tracker active"; - break; - default: - strMPPT = mppt; - } - return strMPPT; + static const std::map values = { + { 0, F("OFF") }, + { 1, F("Voltage or current limited") }, + { 2, F("MPP Tracker active") } + }; + + return getAsString(values, MPPT); +} + +/* + * getErrAsString + * This function returns error state (ERR) as readable text. + */ +String VeDirectMpptController::veMpptStruct::getErrAsString() const +{ + static const std::map values = { + { 0, F("No error") }, + { 2, F("Battery voltage too high") }, + { 17, F("Charger temperature too high") }, + { 18, F("Charger over current") }, + { 19, F("Charger current reversed") }, + { 20, F("Bulk time limit exceeded") }, + { 21, F("Current sensor issue(sensor bias/sensor broken)") }, + { 26, F("Terminals overheated") }, + { 28, F("Converter issue (dual converter models only)") }, + { 33, F("Input voltage too high (solar panel)") }, + { 34, F("Input current too high (solar panel)") }, + { 38, F("Input shutdown (due to excessive battery voltage)") }, + { 39, F("Input shutdown (due to current flow during off mode)") }, + { 40, F("Input") }, + { 65, F("Lost communication with one of devices") }, + { 67, F("Synchronisedcharging device configuration issue") }, + { 68, F("BMS connection lost") }, + { 116, F("Factory calibration data lost") }, + { 117, F("Invalid/incompatible firmware") }, + { 118, F("User settings invalid") } + }; + + return getAsString(values, ERR); } /* * getOrAsString * This function returns the off reason (OR) as readable text. */ -String VeDirectMpptController::getOrAsString(uint32_t offReason) +String VeDirectMpptController::veMpptStruct::getOrAsString() const { - String strOR =""; - - switch(offReason) { - case 0x00000000: - strOR = "Not off"; - break; - case 0x00000001: - strOR = "No input power"; - break; - case 0x00000002: - strOR = "Switched off (power switch)"; - break; - case 0x00000004: - strOR = "Switched off (device moderegister)"; - break; - case 0x00000008: - strOR = "Remote input"; - break; - case 0x00000010: - strOR = "Protection active"; - break; - case 0x00000020: - strOR = "Paygo"; - break; - case 0x00000040: - strOR = "BMS"; - break; - case 0x00000080: - strOR = "Engine shutdown detection"; - break; - case 0x00000100: - strOR = "Analysing input voltage"; - break; - default: - strOR = offReason; - } - return strOR; + static const std::map values = { + { 0x00000000, F("Not off") }, + { 0x00000001, F("No input power") }, + { 0x00000002, F("Switched off (power switch)") }, + { 0x00000004, F("Switched off (device moderegister)") }, + { 0x00000008, F("Remote input") }, + { 0x00000010, F("Protection active") }, + { 0x00000020, F("Paygo") }, + { 0x00000040, F("BMS") }, + { 0x00000080, F("Engine shutdown detection") }, + { 0x00000100, F("Analysing input voltage") } + }; + + return getAsString(values, OR); } diff --git a/lib/VeDirectFrameHandler/VeDirectMpptController.h b/lib/VeDirectFrameHandler/VeDirectMpptController.h index 789454298..04e0d8ca4 100644 --- a/lib/VeDirectFrameHandler/VeDirectMpptController.h +++ b/lib/VeDirectFrameHandler/VeDirectMpptController.h @@ -37,17 +37,15 @@ class MovingAverage { class VeDirectMpptController : public VeDirectFrameHandler { public: - VeDirectMpptController(); + VeDirectMpptController() = default; void init(int8_t rx, int8_t tx, Print* msgOut, bool verboseLogging); - String getMpptAsString(uint8_t mppt); // state of mppt as string - String getCsAsString(uint8_t cs); // current state as string - String getOrAsString(uint32_t offReason); // off reason as string - bool isDataValid(); // return true if data valid and not outdated + bool isDataValid() const; // return true if data valid and not outdated struct veMpptStruct : veStruct { uint8_t MPPT; // state of MPP tracker int32_t PPV; // panel power in W + int32_t P; // battery output power in W (calculated) double VPV; // panel voltage in V double IPV; // panel current in A (calculated) bool LOAD; // virtual load output state (on if battery voltage reaches upper limit, off if battery reaches lower limit) @@ -60,15 +58,20 @@ class VeDirectMpptController : public VeDirectFrameHandler { int32_t H21; // maximum power today W double H22; // yield yesterday kWh int32_t H23; // maximum power yesterday W + + String getMpptAsString() const; // state of mppt as string + String getCsAsString() const; // current state as string + String getErrAsString() const; // error state as string + String getOrAsString() const; // off reason as string }; - veMpptStruct veFrame{}; + using spData_t = std::shared_ptr; + spData_t getData() const { return _spData; } private: - void textRxEvent(char * name, char * value) final; - void frameEndEvent(bool) final; // copy temp struct to public struct + void textRxEvent(char* name, char* value) final; + void frameValidEvent() final; + spData_t _spData = nullptr; veMpptStruct _tmpFrame{}; // private struct for received name and value pairs MovingAverage _efficiency; }; - -extern VeDirectMpptController VeDirectMppt; \ No newline at end of file diff --git a/lib/VeDirectFrameHandler/VeDirectShuntController.cpp b/lib/VeDirectFrameHandler/VeDirectShuntController.cpp index 249472c54..7a1fa59a5 100644 --- a/lib/VeDirectFrameHandler/VeDirectShuntController.cpp +++ b/lib/VeDirectFrameHandler/VeDirectShuntController.cpp @@ -17,10 +17,10 @@ void VeDirectShuntController::init(int8_t rx, int8_t tx, Print* msgOut, bool ver void VeDirectShuntController::textRxEvent(char* name, char* value) { - VeDirectFrameHandler::textRxEvent(name, value, _tmpFrame); - if (_verboseLogging) { - _msgOut->printf("[Victron SmartShunt] Received Text Event %s: Value: %s\r\n", name, value ); + if (VeDirectFrameHandler::textRxEvent("SmartShunt", name, value, _tmpFrame)) { + return; } + if (strcmp(name, "T") == 0) { _tmpFrame.T = atoi(value); } @@ -96,18 +96,16 @@ void VeDirectShuntController::textRxEvent(char* name, char* value) } /* - * frameEndEvent - * This function is called at the end of the received frame. If the checksum is valid, the temp buffer is read line by line. - * If the name exists in the public buffer, the new value is copied to the public buffer. If not, a new name/value entry - * is created in the public buffer. + * frameValidEvent + * This function is called at the end of the received frame. */ -void VeDirectShuntController::frameEndEvent(bool valid) { +void VeDirectShuntController::frameValidEvent() { // other than in the MPPT controller, the SmartShunt seems to split all data // into two seperate messagesas. Thus we update veFrame only every second message // after a value for PID has been received - if (valid && _tmpFrame.PID != 0) { - veFrame = _tmpFrame; - _tmpFrame = {}; - _lastUpdate = millis(); - } + if (_tmpFrame.PID == 0) { return; } + + veFrame = _tmpFrame; + _tmpFrame = {}; + _lastUpdate = millis(); } diff --git a/lib/VeDirectFrameHandler/VeDirectShuntController.h b/lib/VeDirectFrameHandler/VeDirectShuntController.h index 28ffd0718..115af35b6 100644 --- a/lib/VeDirectFrameHandler/VeDirectShuntController.h +++ b/lib/VeDirectFrameHandler/VeDirectShuntController.h @@ -41,7 +41,7 @@ class VeDirectShuntController : public VeDirectFrameHandler { private: void textRxEvent(char * name, char * value) final; - void frameEndEvent(bool) final; // copy temp struct to public struct + void frameValidEvent() final; veShuntStruct _tmpFrame{}; // private struct for received name and value pairs }; diff --git a/src/BatteryStats.cpp b/src/BatteryStats.cpp index 67b77ba99..b1f616b1b 100644 --- a/src/BatteryStats.cpp +++ b/src/BatteryStats.cpp @@ -208,7 +208,7 @@ void VictronSmartShuntStats::updateFrom(VeDirectShuntController::veShuntStruct c _SoC = shuntData.SOC / 10; _voltage = shuntData.V; _current = shuntData.I; - _modelName = VeDirectShunt.getPidAsString(shuntData.PID); + _modelName = shuntData.getPidAsString(); _chargeCycles = shuntData.H4; _timeToGo = shuntData.TTG / 60; _chargedEnergy = shuntData.H18 / 100; diff --git a/src/MqttHandlVedirectHass.cpp b/src/MqttHandlVedirectHass.cpp index 85e392b86..e5a9be5c2 100644 --- a/src/MqttHandlVedirectHass.cpp +++ b/src/MqttHandlVedirectHass.cpp @@ -7,6 +7,7 @@ #include "MqttSettings.h" #include "NetworkSettings.h" #include "MessageOutput.h" +#include "VictronMppt.h" MqttHandleVedirectHassClass MqttHandleVedirectHass; @@ -50,7 +51,7 @@ void MqttHandleVedirectHassClass::publishConfig() return; } // ensure data is revieved from victron - if (!VeDirectMppt.isDataValid()) { + if (!VictronMppt.isDataValid()) { return; } @@ -82,7 +83,7 @@ void MqttHandleVedirectHassClass::publishConfig() void MqttHandleVedirectHassClass::publishSensor(const char* caption, const char* icon, const char* subTopic, const char* deviceClass, const char* stateClass, const char* unitOfMeasurement ) { - String serial = VeDirectMppt.veFrame.SER; + String serial = VictronMppt.getData()->SER; String sensorId = caption; sensorId.replace(" ", "_"); @@ -94,9 +95,9 @@ void MqttHandleVedirectHassClass::publishSensor(const char* caption, const char* String configTopic = "sensor/dtu_victron_" + serial + "/" + sensorId + "/config"; - + String statTopic = MqttSettings.getPrefix() + "victron/"; - statTopic.concat(VeDirectMppt.veFrame.SER); + statTopic.concat(serial); statTopic.concat("/"); statTopic.concat(subTopic); @@ -133,7 +134,7 @@ void MqttHandleVedirectHassClass::publishSensor(const char* caption, const char* } void MqttHandleVedirectHassClass::publishBinarySensor(const char* caption, const char* icon, const char* subTopic, const char* payload_on, const char* payload_off) { - String serial = VeDirectMppt.veFrame.SER; + String serial = VictronMppt.getData()->SER; String sensorId = caption; sensorId.replace(" ", "_"); @@ -147,7 +148,7 @@ void MqttHandleVedirectHassClass::publishBinarySensor(const char* caption, const + "/config"; String statTopic = MqttSettings.getPrefix() + "victron/"; - statTopic.concat(VeDirectMppt.veFrame.SER); + statTopic.concat(serial); statTopic.concat("/"); statTopic.concat(subTopic); @@ -172,12 +173,13 @@ void MqttHandleVedirectHassClass::publishBinarySensor(const char* caption, const void MqttHandleVedirectHassClass::createDeviceInfo(JsonObject& object) { - String serial = VeDirectMppt.veFrame.SER; + auto spMpptData = VictronMppt.getData(); + String serial = spMpptData->SER; object[F("name")] = "Victron(" + serial + ")"; object[F("ids")] = serial; object[F("cu")] = String(F("http://")) + NetworkSettings.localIP().toString(); object[F("mf")] = F("OpenDTU"); - object[F("mdl")] = VeDirectMppt.getPidAsString(VeDirectMppt.veFrame.PID); + object[F("mdl")] = spMpptData->getPidAsString(); object[F("sw")] = AUTO_GIT_HASH; } diff --git a/src/MqttHandleVedirect.cpp b/src/MqttHandleVedirect.cpp index 6013fb243..7466fc1a6 100644 --- a/src/MqttHandleVedirect.cpp +++ b/src/MqttHandleVedirect.cpp @@ -2,7 +2,7 @@ /* * Copyright (C) 2022 Helge Erbe and others */ -#include "VeDirectMpptController.h" +#include "VictronMppt.h" #include "MqttHandleVedirect.h" #include "MqttSettings.h" #include "MessageOutput.h" @@ -29,7 +29,7 @@ void MqttHandleVedirectClass::loop() return; } - if (!VeDirectMppt.isDataValid()) { + if (!VictronMppt.isDataValid()) { return; } @@ -50,81 +50,82 @@ void MqttHandleVedirectClass::loop() } #endif + auto spMpptData = VictronMppt.getData(); String value; String topic = "victron/"; - topic.concat(VeDirectMppt.veFrame.SER); + topic.concat(spMpptData->SER); topic.concat("/"); - if (_PublishFull || VeDirectMppt.veFrame.PID != _kvFrame.PID) - MqttSettings.publish(topic + "PID", VeDirectMppt.getPidAsString(VeDirectMppt.veFrame.PID)); - if (_PublishFull || strcmp(VeDirectMppt.veFrame.SER, _kvFrame.SER) != 0) - MqttSettings.publish(topic + "SER", VeDirectMppt.veFrame.SER ); - if (_PublishFull || strcmp(VeDirectMppt.veFrame.FW, _kvFrame.FW) != 0) - MqttSettings.publish(topic + "FW", VeDirectMppt.veFrame.FW); - if (_PublishFull || VeDirectMppt.veFrame.LOAD != _kvFrame.LOAD) - MqttSettings.publish(topic + "LOAD", VeDirectMppt.veFrame.LOAD == true ? "ON": "OFF"); - if (_PublishFull || VeDirectMppt.veFrame.CS != _kvFrame.CS) - MqttSettings.publish(topic + "CS", VeDirectMppt.getCsAsString(VeDirectMppt.veFrame.CS)); - if (_PublishFull || VeDirectMppt.veFrame.ERR != _kvFrame.ERR) - MqttSettings.publish(topic + "ERR", VeDirectMppt.getErrAsString(VeDirectMppt.veFrame.ERR)); - if (_PublishFull || VeDirectMppt.veFrame.OR != _kvFrame.OR) - MqttSettings.publish(topic + "OR", VeDirectMppt.getOrAsString(VeDirectMppt.veFrame.OR)); - if (_PublishFull || VeDirectMppt.veFrame.MPPT != _kvFrame.MPPT) - MqttSettings.publish(topic + "MPPT", VeDirectMppt.getMpptAsString(VeDirectMppt.veFrame.MPPT)); - if (_PublishFull || VeDirectMppt.veFrame.HSDS != _kvFrame.HSDS) { - value = VeDirectMppt.veFrame.HSDS; + if (_PublishFull || spMpptData->PID != _kvFrame.PID) + MqttSettings.publish(topic + "PID", spMpptData->getPidAsString()); + if (_PublishFull || strcmp(spMpptData->SER, _kvFrame.SER) != 0) + MqttSettings.publish(topic + "SER", spMpptData->SER ); + if (_PublishFull || strcmp(spMpptData->FW, _kvFrame.FW) != 0) + MqttSettings.publish(topic + "FW", spMpptData->FW); + if (_PublishFull || spMpptData->LOAD != _kvFrame.LOAD) + MqttSettings.publish(topic + "LOAD", spMpptData->LOAD == true ? "ON": "OFF"); + if (_PublishFull || spMpptData->CS != _kvFrame.CS) + MqttSettings.publish(topic + "CS", spMpptData->getCsAsString()); + if (_PublishFull || spMpptData->ERR != _kvFrame.ERR) + MqttSettings.publish(topic + "ERR", spMpptData->getErrAsString()); + if (_PublishFull || spMpptData->OR != _kvFrame.OR) + MqttSettings.publish(topic + "OR", spMpptData->getOrAsString()); + if (_PublishFull || spMpptData->MPPT != _kvFrame.MPPT) + MqttSettings.publish(topic + "MPPT", spMpptData->getMpptAsString()); + if (_PublishFull || spMpptData->HSDS != _kvFrame.HSDS) { + value = spMpptData->HSDS; MqttSettings.publish(topic + "HSDS", value); } - if (_PublishFull || VeDirectMppt.veFrame.V != _kvFrame.V) { - value = VeDirectMppt.veFrame.V; + if (_PublishFull || spMpptData->V != _kvFrame.V) { + value = spMpptData->V; MqttSettings.publish(topic + "V", value); } - if (_PublishFull || VeDirectMppt.veFrame.I != _kvFrame.I) { - value = VeDirectMppt.veFrame.I; + if (_PublishFull || spMpptData->I != _kvFrame.I) { + value = spMpptData->I; MqttSettings.publish(topic + "I", value); } - if (_PublishFull || VeDirectMppt.veFrame.P != _kvFrame.P) { - value = VeDirectMppt.veFrame.P; + if (_PublishFull || spMpptData->P != _kvFrame.P) { + value = spMpptData->P; MqttSettings.publish(topic + "P", value); } - if (_PublishFull || VeDirectMppt.veFrame.VPV != _kvFrame.VPV) { - value = VeDirectMppt.veFrame.VPV; + if (_PublishFull || spMpptData->VPV != _kvFrame.VPV) { + value = spMpptData->VPV; MqttSettings.publish(topic + "VPV", value); } - if (_PublishFull || VeDirectMppt.veFrame.IPV != _kvFrame.IPV) { - value = VeDirectMppt.veFrame.IPV; + if (_PublishFull || spMpptData->IPV != _kvFrame.IPV) { + value = spMpptData->IPV; MqttSettings.publish(topic + "IPV", value); } - if (_PublishFull || VeDirectMppt.veFrame.PPV != _kvFrame.PPV) { - value = VeDirectMppt.veFrame.PPV; + if (_PublishFull || spMpptData->PPV != _kvFrame.PPV) { + value = spMpptData->PPV; MqttSettings.publish(topic + "PPV", value); } - if (_PublishFull || VeDirectMppt.veFrame.E != _kvFrame.E) { - value = VeDirectMppt.veFrame.E; + if (_PublishFull || spMpptData->E != _kvFrame.E) { + value = spMpptData->E; MqttSettings.publish(topic + "E", value); } - if (_PublishFull || VeDirectMppt.veFrame.H19 != _kvFrame.H19) { - value = VeDirectMppt.veFrame.H19; + if (_PublishFull || spMpptData->H19 != _kvFrame.H19) { + value = spMpptData->H19; MqttSettings.publish(topic + "H19", value); } - if (_PublishFull || VeDirectMppt.veFrame.H20 != _kvFrame.H20) { - value = VeDirectMppt.veFrame.H20; + if (_PublishFull || spMpptData->H20 != _kvFrame.H20) { + value = spMpptData->H20; MqttSettings.publish(topic + "H20", value); } - if (_PublishFull || VeDirectMppt.veFrame.H21 != _kvFrame.H21) { - value = VeDirectMppt.veFrame.H21; + if (_PublishFull || spMpptData->H21 != _kvFrame.H21) { + value = spMpptData->H21; MqttSettings.publish(topic + "H21", value); } - if (_PublishFull || VeDirectMppt.veFrame.H22 != _kvFrame.H22) { - value = VeDirectMppt.veFrame.H22; + if (_PublishFull || spMpptData->H22 != _kvFrame.H22) { + value = spMpptData->H22; MqttSettings.publish(topic + "H22", value); } - if (_PublishFull || VeDirectMppt.veFrame.H23 != _kvFrame.H23) { - value = VeDirectMppt.veFrame.H23; + if (_PublishFull || spMpptData->H23 != _kvFrame.H23) { + value = spMpptData->H23; MqttSettings.publish(topic + "H23", value); } if (!_PublishFull) { - _kvFrame= VeDirectMppt.veFrame; + _kvFrame = *spMpptData; } // now calculate next points of time to publish diff --git a/src/PinMapping.cpp b/src/PinMapping.cpp index b680edb3e..2cc48906d 100644 --- a/src/PinMapping.cpp +++ b/src/PinMapping.cpp @@ -305,11 +305,6 @@ bool PinMappingClass::isValidEthConfig() return _pinMapping.eth_enabled; } -bool PinMappingClass::isValidVictronConfig() -{ - return _pinMapping.victron_rx >= 0; -} - bool PinMappingClass::isValidHuaweiConfig() { return _pinMapping.huawei_miso >= 0 diff --git a/src/PowerLimiter.cpp b/src/PowerLimiter.cpp index c5c3dc868..feb41dd80 100644 --- a/src/PowerLimiter.cpp +++ b/src/PowerLimiter.cpp @@ -10,7 +10,7 @@ #include "MqttSettings.h" #include "NetworkSettings.h" #include "Huawei_can.h" -#include +#include #include "MessageOutput.h" #include #include @@ -364,14 +364,12 @@ int32_t PowerLimiterClass::inverterPowerDcToAc(std::shared_ptr */ void PowerLimiterClass::unconditionalSolarPassthrough(std::shared_ptr inverter) { - CONFIG_T& config = Configuration.get(); - - if (!config.Vedirect_Enabled || !VeDirectMppt.isDataValid()) { + if (!VictronMppt.isDataValid()) { shutdown(Status::NoVeDirect); return; } - int32_t solarPower = VeDirectMppt.veFrame.V * VeDirectMppt.veFrame.I; + int32_t solarPower = VictronMppt.getPowerOutputWatts(); setNewPowerLimit(inverter, inverterPowerDcToAc(inverter, solarPower)); announceStatus(Status::UnconditionalSolarPassthrough); } @@ -406,12 +404,11 @@ bool PowerLimiterClass::canUseDirectSolarPower() if (!config.PowerLimiter_SolarPassThroughEnabled || isBelowStopThreshold() - || !config.Vedirect_Enabled - || !VeDirectMppt.isDataValid()) { + || !VictronMppt.isDataValid()) { return false; } - return VeDirectMppt.veFrame.PPV >= 20; // enough power? + return VictronMppt.getPowerOutputWatts() >= 20; // enough power? } @@ -576,7 +573,7 @@ int32_t PowerLimiterClass::getSolarChargePower() return 0; } - return VeDirectMppt.veFrame.V * VeDirectMppt.veFrame.I; + return VictronMppt.getPowerOutputWatts(); } float PowerLimiterClass::getLoadCorrectedVoltage() diff --git a/src/VictronMppt.cpp b/src/VictronMppt.cpp new file mode 100644 index 000000000..b857e0ec0 --- /dev/null +++ b/src/VictronMppt.cpp @@ -0,0 +1,96 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +#include "VictronMppt.h" +#include "Configuration.h" +#include "PinMapping.h" +#include "MessageOutput.h" + +VictronMpptClass VictronMppt; + +void VictronMpptClass::init() +{ + std::lock_guard lock(_mutex); + + _controllers.clear(); + + CONFIG_T& config = Configuration.get(); + if (!config.Vedirect_Enabled) { return; } + + const PinMapping_t& pin = PinMapping.get(); + int8_t rx = pin.victron_rx; + int8_t tx = pin.victron_tx; + + MessageOutput.printf("[VictronMppt] rx = %d, tx = %d\r\n", rx, tx); + + if (rx < 0) { + MessageOutput.println(F("[VictronMppt] invalid pin config")); + return; + } + + auto upController = std::make_unique(); + upController->init(rx, tx, &MessageOutput, config.Vedirect_VerboseLogging); + _controllers.push_back(std::move(upController)); +} + +void VictronMpptClass::loop() +{ + std::lock_guard lock(_mutex); + + for (auto const& upController : _controllers) { + upController->loop(); + } +} + +bool VictronMpptClass::isDataValid() const +{ + std::lock_guard lock(_mutex); + + for (auto const& upController : _controllers) { + if (!upController->isDataValid()) { return false; } + } + + return !_controllers.empty(); +} + +uint32_t VictronMpptClass::getDataAgeMillis() const +{ + std::lock_guard lock(_mutex); + + if (_controllers.empty()) { return 0; } + + auto now = millis(); + + auto iter = _controllers.cbegin(); + uint32_t age = now - (*iter)->getLastUpdate(); + ++iter; + + while (iter != _controllers.end()) { + age = std::min(age, now - (*iter)->getLastUpdate()); + ++iter; + } + + return age; +} + +VeDirectMpptController::spData_t VictronMpptClass::getData(size_t idx) const +{ + std::lock_guard lock(_mutex); + + if (_controllers.empty() || idx >= _controllers.size()) { + MessageOutput.printf("ERROR: MPPT controller index %d is out of bounds (%d controllers)\r\n", + idx, _controllers.size()); + return VeDirectMpptController::spData_t{}; + } + + return _controllers[idx]->getData(); +} + +int32_t VictronMpptClass::getPowerOutputWatts() const +{ + int32_t sum = 0; + + for (const auto& upController : _controllers) { + sum += upController->getData()->P; + } + + return sum; +} diff --git a/src/WebApi_vedirect.cpp b/src/WebApi_vedirect.cpp index d92fda0a0..1b8842655 100644 --- a/src/WebApi_vedirect.cpp +++ b/src/WebApi_vedirect.cpp @@ -3,7 +3,7 @@ * Copyright (C) 2022 Thomas Basler and others */ #include "WebApi_vedirect.h" -#include "VeDirectMpptController.h" +#include "VictronMppt.h" #include "ArduinoJson.h" #include "AsyncJson.h" #include "Configuration.h" @@ -117,7 +117,7 @@ void WebApiVedirectClass::onVedirectAdminPost(AsyncWebServerRequest* request) config.Vedirect_UpdatesOnly = root[F("vedirect_updatesonly")].as(); Configuration.write(); - VeDirectMppt.setVerboseLogging(config.Vedirect_VerboseLogging); + VictronMppt.init(); retMsg[F("type")] = F("success"); retMsg[F("message")] = F("Settings saved!"); diff --git a/src/WebApi_ws_live.cpp b/src/WebApi_ws_live.cpp index 463f629c6..fdca8baae 100644 --- a/src/WebApi_ws_live.cpp +++ b/src/WebApi_ws_live.cpp @@ -10,7 +10,7 @@ #include "Battery.h" #include "Huawei_can.h" #include "PowerMeter.h" -#include "VeDirectMpptController.h" +#include "VictronMppt.h" #include "defaults.h" #include @@ -191,10 +191,12 @@ void WebApiWsLiveClass::generateJsonResponse(JsonVariant& root) JsonObject vedirectObj = root.createNestedObject("vedirect"); vedirectObj[F("enabled")] = Configuration.get().Vedirect_Enabled; JsonObject totalVeObj = vedirectObj.createNestedObject("total"); - addTotalField(totalVeObj, "Power", VeDirectMppt.veFrame.PPV, "W", 1); - addTotalField(totalVeObj, "YieldDay", VeDirectMppt.veFrame.H20 * 1000, "Wh", 0); - addTotalField(totalVeObj, "YieldTotal", VeDirectMppt.veFrame.H19, "kWh", 2); - + + auto spMpptData = VictronMppt.getData(); + addTotalField(totalVeObj, "Power", spMpptData->PPV, "W", 1); + addTotalField(totalVeObj, "YieldDay", spMpptData->H20 * 1000, "Wh", 0); + addTotalField(totalVeObj, "YieldTotal", spMpptData->H19, "kWh", 2); + JsonObject huaweiObj = root.createNestedObject("huawei"); huaweiObj[F("enabled")] = Configuration.get().Huawei_Enabled; const RectifierParameters_t * rp = HuaweiCan.get(); diff --git a/src/WebApi_ws_vedirect_live.cpp b/src/WebApi_ws_vedirect_live.cpp index 5f26cf348..53c81d122 100644 --- a/src/WebApi_ws_vedirect_live.cpp +++ b/src/WebApi_ws_vedirect_live.cpp @@ -9,6 +9,7 @@ #include "WebApi.h" #include "defaults.h" #include "PowerLimiter.h" +#include "VictronMppt.h" WebApiWsVedirectLiveClass::WebApiWsVedirectLiveClass() : _ws("/vedirectlivedata") @@ -44,18 +45,14 @@ void WebApiWsVedirectLiveClass::loop() return; } - if (millis() - _lastVedirectUpdateCheck < 1000) { - return; - } - _lastVedirectUpdateCheck = millis(); - - uint32_t maxTimeStamp = 0; - if (VeDirectMppt.getLastUpdate() > maxTimeStamp) { - maxTimeStamp = VeDirectMppt.getLastUpdate(); - } + // we assume this loop to be running at least twice for every + // update from a VE.Direct MPPT data producer, so _dataAgeMillis + // acutally grows in between updates. + auto lastDataAgeMillis = _dataAgeMillis; + _dataAgeMillis = VictronMppt.getDataAgeMillis(); // Update on ve.direct change or at least after 10 seconds - if (millis() - _lastWsPublish > (10 * 1000) || (maxTimeStamp != _newestVedirectTimestamp)) { + if (millis() - _lastWsPublish > (10 * 1000) || lastDataAgeMillis > _dataAgeMillis) { try { String buffer; @@ -87,57 +84,59 @@ void WebApiWsVedirectLiveClass::loop() void WebApiWsVedirectLiveClass::generateJsonResponse(JsonVariant& root) { + auto spMpptData = VictronMppt.getData(); + // device info - root["device"]["data_age"] = (millis() - VeDirectMppt.getLastUpdate() ) / 1000; - root["device"]["age_critical"] = !VeDirectMppt.isDataValid(); - root["device"]["PID"] = VeDirectMppt.getPidAsString(VeDirectMppt.veFrame.PID); - root["device"]["SER"] = VeDirectMppt.veFrame.SER; - root["device"]["FW"] = VeDirectMppt.veFrame.FW; - root["device"]["LOAD"] = VeDirectMppt.veFrame.LOAD == true ? "ON" : "OFF"; - root["device"]["CS"] = VeDirectMppt.getCsAsString(VeDirectMppt.veFrame.CS); - root["device"]["ERR"] = VeDirectMppt.getErrAsString(VeDirectMppt.veFrame.ERR); - root["device"]["OR"] = VeDirectMppt.getOrAsString(VeDirectMppt.veFrame.OR); - root["device"]["MPPT"] = VeDirectMppt.getMpptAsString(VeDirectMppt.veFrame.MPPT); - root["device"]["HSDS"]["v"] = VeDirectMppt.veFrame.HSDS; + root["device"]["data_age"] = VictronMppt.getDataAgeMillis() / 1000; + root["device"]["age_critical"] = !VictronMppt.isDataValid(); + root["device"]["PID"] = spMpptData->getPidAsString(); + root["device"]["SER"] = spMpptData->SER; + root["device"]["FW"] = spMpptData->FW; + root["device"]["LOAD"] = spMpptData->LOAD == true ? "ON" : "OFF"; + root["device"]["CS"] = spMpptData->getCsAsString(); + root["device"]["ERR"] = spMpptData->getErrAsString(); + root["device"]["OR"] = spMpptData->getOrAsString(); + root["device"]["MPPT"] = spMpptData->getMpptAsString(); + root["device"]["HSDS"]["v"] = spMpptData->HSDS; root["device"]["HSDS"]["u"] = "d"; // battery info - root["output"]["P"]["v"] = VeDirectMppt.veFrame.P; + root["output"]["P"]["v"] = spMpptData->P; root["output"]["P"]["u"] = "W"; root["output"]["P"]["d"] = 0; - root["output"]["V"]["v"] = VeDirectMppt.veFrame.V; + root["output"]["V"]["v"] = spMpptData->V; root["output"]["V"]["u"] = "V"; root["output"]["V"]["d"] = 2; - root["output"]["I"]["v"] = VeDirectMppt.veFrame.I; + root["output"]["I"]["v"] = spMpptData->I; root["output"]["I"]["u"] = "A"; root["output"]["I"]["d"] = 2; - root["output"]["E"]["v"] = VeDirectMppt.veFrame.E; + root["output"]["E"]["v"] = spMpptData->E; root["output"]["E"]["u"] = "%"; root["output"]["E"]["d"] = 1; // panel info - root["input"]["PPV"]["v"] = VeDirectMppt.veFrame.PPV; + root["input"]["PPV"]["v"] = spMpptData->PPV; root["input"]["PPV"]["u"] = "W"; root["input"]["PPV"]["d"] = 0; - root["input"]["VPV"]["v"] = VeDirectMppt.veFrame.VPV; + root["input"]["VPV"]["v"] = spMpptData->VPV; root["input"]["VPV"]["u"] = "V"; root["input"]["VPV"]["d"] = 2; - root["input"]["IPV"]["v"] = VeDirectMppt.veFrame.IPV; + root["input"]["IPV"]["v"] = spMpptData->IPV; root["input"]["IPV"]["u"] = "A"; root["input"]["IPV"]["d"] = 2; - root["input"]["YieldToday"]["v"] = VeDirectMppt.veFrame.H20; + root["input"]["YieldToday"]["v"] = spMpptData->H20; root["input"]["YieldToday"]["u"] = "kWh"; root["input"]["YieldToday"]["d"] = 3; - root["input"]["YieldYesterday"]["v"] = VeDirectMppt.veFrame.H22; + root["input"]["YieldYesterday"]["v"] = spMpptData->H22; root["input"]["YieldYesterday"]["u"] = "kWh"; root["input"]["YieldYesterday"]["d"] = 3; - root["input"]["YieldTotal"]["v"] = VeDirectMppt.veFrame.H19; + root["input"]["YieldTotal"]["v"] = spMpptData->H19; root["input"]["YieldTotal"]["u"] = "kWh"; root["input"]["YieldTotal"]["d"] = 3; - root["input"]["MaximumPowerToday"]["v"] = VeDirectMppt.veFrame.H21; + root["input"]["MaximumPowerToday"]["v"] = spMpptData->H21; root["input"]["MaximumPowerToday"]["u"] = "W"; root["input"]["MaximumPowerToday"]["d"] = 0; - root["input"]["MaximumPowerYesterday"]["v"] = VeDirectMppt.veFrame.H23; + root["input"]["MaximumPowerYesterday"]["v"] = spMpptData->H23; root["input"]["MaximumPowerYesterday"]["u"] = "W"; root["input"]["MaximumPowerYesterday"]["d"] = 0; @@ -146,10 +145,6 @@ void WebApiWsVedirectLiveClass::generateJsonResponse(JsonVariant& root) if (Configuration.get().PowerLimiter_Enabled) root["dpl"]["PLSTATE"] = PowerLimiter.getPowerLimiterState(); root["dpl"]["PLLIMIT"] = PowerLimiter.getLastRequestedPowerLimit(); - - if (VeDirectMppt.getLastUpdate() > _newestVedirectTimestamp) { - _newestVedirectTimestamp = VeDirectMppt.getLastUpdate(); - } } void WebApiWsVedirectLiveClass::onWebsocketEvent(AsyncWebSocket* server, AsyncWebSocketClient* client, AwsEventType type, void* arg, uint8_t* data, size_t len) diff --git a/src/main.cpp b/src/main.cpp index 3851b1274..b39845ca0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,7 +8,7 @@ #include "InverterSettings.h" #include "Led_Single.h" #include "MessageOutput.h" -#include "VeDirectMpptController.h" +#include "VictronMppt.h" #include "Battery.h" #include "Huawei_can.h" #include "MqttHandleDtu.h" @@ -161,16 +161,8 @@ void setup() Datastore.init(); - // Initialize ve.direct communication - MessageOutput.println(F("Initialize ve.direct interface... ")); - if (PinMapping.isValidVictronConfig()) { - MessageOutput.printf("ve.direct rx = %d, tx = %d\r\n", pin.victron_rx, pin.victron_tx); - VeDirectMppt.init(pin.victron_rx, pin.victron_tx, - &MessageOutput, config.Vedirect_VerboseLogging); - MessageOutput.println(F("done")); - } else { - MessageOutput.println(F("Invalid pin config")); - } + VictronMppt.init(); + // Power meter PowerMeter.init(); @@ -202,11 +194,8 @@ void loop() yield(); Datastore.loop(); yield(); - // Vedirect_Enabled is unknown to lib. Therefor check has to be done here - if (Configuration.get().Vedirect_Enabled) { - VeDirectMppt.loop(); - yield(); - } + VictronMppt.loop(); + yield(); MqttSettings.loop(); yield(); MqttHandleDtu.loop(); From 4d4aadf8de9705c2661d12b1e51bff7b8ec7e023 Mon Sep 17 00:00:00 2001 From: Bernhard Kirchen Date: Thu, 19 Oct 2023 16:16:01 +0200 Subject: [PATCH 03/10] Feature: AC charger: configurable CAN controller frequency (#500) --- include/Configuration.h | 1 + include/Huawei_can.h | 3 ++- include/defaults.h | 1 + src/Configuration.cpp | 2 ++ src/Huawei_can.cpp | 13 ++++++++++--- src/WebApi_Huawei.cpp | 11 +++++++++++ webapp/src/locales/de.json | 1 + webapp/src/locales/en.json | 1 + webapp/src/locales/fr.json | 1 + webapp/src/types/AcChargerConfig.ts | 1 + webapp/src/views/AcChargerAdminView.vue | 18 ++++++++++++++++++ 11 files changed, 49 insertions(+), 4 deletions(-) diff --git a/include/Configuration.h b/include/Configuration.h index 8cb44caf8..55d31acd7 100644 --- a/include/Configuration.h +++ b/include/Configuration.h @@ -177,6 +177,7 @@ struct CONFIG_T { uint8_t Battery_JkBmsPollingInterval; bool Huawei_Enabled; + uint32_t Huawei_CAN_Controller_Frequency; bool Huawei_Auto_Power_Enabled; float Huawei_Auto_Power_Voltage_Limit; float Huawei_Auto_Power_Enable_Voltage_Limit; diff --git a/include/Huawei_can.h b/include/Huawei_can.h index 3b0634110..eb69c6c53 100644 --- a/include/Huawei_can.h +++ b/include/Huawei_can.h @@ -90,7 +90,8 @@ typedef struct RectifierParameters { class HuaweiCanCommClass { public: - bool init(uint8_t huawei_miso, uint8_t huawei_mosi, uint8_t huawei_clk, uint8_t huawei_irq, uint8_t huawei_cs); + bool init(uint8_t huawei_miso, uint8_t huawei_mosi, uint8_t huawei_clk, + uint8_t huawei_irq, uint8_t huawei_cs, uint32_t frequency); void loop(); bool gotNewRxDataFrame(bool clear); uint8_t getErrorCode(bool clear); diff --git a/include/defaults.h b/include/defaults.h index c02067411..47bea0255 100644 --- a/include/defaults.h +++ b/include/defaults.h @@ -137,6 +137,7 @@ #define BATTERY_JKBMS_POLLING_INTERVAL 5 #define HUAWEI_ENABLED false +#define HUAWEI_CAN_CONTROLLER_FREQUENCY 8000000UL #define HUAWEI_AUTO_POWER_VOLTAGE_LIMIT 42.0 #define HUAWEI_AUTO_POWER_ENABLE_VOLTAGE_LIMIT 42.0 #define HUAWEI_AUTO_POWER_LOWER_POWER_LIMIT 150 diff --git a/src/Configuration.cpp b/src/Configuration.cpp index 74a126152..b223738c6 100644 --- a/src/Configuration.cpp +++ b/src/Configuration.cpp @@ -190,6 +190,7 @@ bool ConfigurationClass::write() JsonObject huawei = doc.createNestedObject("huawei"); huawei["enabled"] = config.Huawei_Enabled; + huawei["can_controller_frequency"] = config.Huawei_CAN_Controller_Frequency; huawei["auto_power_enabled"] = config.Huawei_Auto_Power_Enabled; huawei["voltage_limit"] = config.Huawei_Auto_Power_Voltage_Limit; huawei["enable_voltage_limit"] = config.Huawei_Auto_Power_Enable_Voltage_Limit; @@ -413,6 +414,7 @@ bool ConfigurationClass::read() JsonObject huawei = doc["huawei"]; config.Huawei_Enabled = huawei["enabled"] | HUAWEI_ENABLED; + config.Huawei_CAN_Controller_Frequency = huawei["can_controller_frequency"] | HUAWEI_CAN_CONTROLLER_FREQUENCY; config.Huawei_Auto_Power_Enabled = huawei["auto_power_enabled"] | false; config.Huawei_Auto_Power_Voltage_Limit = huawei["voltage_limit"] | HUAWEI_AUTO_POWER_VOLTAGE_LIMIT; config.Huawei_Auto_Power_Enable_Voltage_Limit = huawei["enable_voltage_limit"] | HUAWEI_AUTO_POWER_ENABLE_VOLTAGE_LIMIT; diff --git a/src/Huawei_can.cpp b/src/Huawei_can.cpp index 5a6341d19..ffc8929ef 100644 --- a/src/Huawei_can.cpp +++ b/src/Huawei_can.cpp @@ -30,7 +30,8 @@ void HuaweiCanCommunicationTask(void* parameter) { } } -bool HuaweiCanCommClass::init(uint8_t huawei_miso, uint8_t huawei_mosi, uint8_t huawei_clk, uint8_t huawei_irq, uint8_t huawei_cs) { +bool HuaweiCanCommClass::init(uint8_t huawei_miso, uint8_t huawei_mosi, uint8_t huawei_clk, + uint8_t huawei_irq, uint8_t huawei_cs, uint32_t frequency) { SPI = new SPIClass(HSPI); SPI->begin(huawei_clk, huawei_miso, huawei_mosi, huawei_cs); pinMode(huawei_cs, OUTPUT); @@ -39,8 +40,14 @@ bool HuaweiCanCommClass::init(uint8_t huawei_miso, uint8_t huawei_mosi, uint8_t pinMode(huawei_irq, INPUT_PULLUP); _huaweiIrq = huawei_irq; + auto mcp_frequency = MCP_8MHZ; + if (16000000UL == frequency) { mcp_frequency = MCP_16MHZ; } + else if (8000000UL != frequency) { + MessageOutput.printf("Huawei CAN: unknown frequency %d Hz, using 8 MHz\r\n", mcp_frequency); + } + _CAN = new MCP_CAN(SPI, huawei_cs); - if (!_CAN->begin(MCP_STDEXT, CAN_125KBPS, MCP_8MHZ) == CAN_OK) { + if (!_CAN->begin(MCP_STDEXT, CAN_125KBPS, mcp_frequency) == CAN_OK) { return false; } @@ -198,7 +205,7 @@ void HuaweiCanClass::init(uint8_t huawei_miso, uint8_t huawei_mosi, uint8_t huaw return; } - if (!HuaweiCanComm.init(huawei_miso, huawei_mosi, huawei_clk, huawei_irq, huawei_cs)) { + if (!HuaweiCanComm.init(huawei_miso, huawei_mosi, huawei_clk, huawei_irq, huawei_cs, config.Huawei_CAN_Controller_Frequency)) { MessageOutput.println("[HuaweiCanClass::init] Error Initializing Huawei CAN communication..."); return; }; diff --git a/src/WebApi_Huawei.cpp b/src/WebApi_Huawei.cpp index f8f75e234..2a7689aee 100644 --- a/src/WebApi_Huawei.cpp +++ b/src/WebApi_Huawei.cpp @@ -190,6 +190,7 @@ void WebApiHuaweiClass::onAdminGet(AsyncWebServerRequest* request) const CONFIG_T& config = Configuration.get(); root[F("enabled")] = config.Huawei_Enabled; + root[F("can_controller_frequency")] = config.Huawei_CAN_Controller_Frequency; root[F("auto_power_enabled")] = config.Huawei_Auto_Power_Enabled; root[F("voltage_limit")] = static_cast(config.Huawei_Auto_Power_Voltage_Limit * 100) / 100.0; root[F("enable_voltage_limit")] = static_cast(config.Huawei_Auto_Power_Enable_Voltage_Limit * 100) / 100.0; @@ -240,6 +241,7 @@ void WebApiHuaweiClass::onAdminPost(AsyncWebServerRequest* request) } if (!(root.containsKey("enabled")) || + !(root.containsKey("can_controller_frequency")) || !(root.containsKey("auto_power_enabled")) || !(root.containsKey("voltage_limit")) || !(root.containsKey("lower_power_limit")) || @@ -253,6 +255,7 @@ void WebApiHuaweiClass::onAdminPost(AsyncWebServerRequest* request) CONFIG_T& config = Configuration.get(); config.Huawei_Enabled = root[F("enabled")].as(); + config.Huawei_CAN_Controller_Frequency = root[F("can_controller_frequency")].as(); config.Huawei_Auto_Power_Enabled = root[F("auto_power_enabled")].as(); config.Huawei_Auto_Power_Voltage_Limit = root[F("voltage_limit")].as(); config.Huawei_Auto_Power_Enable_Voltage_Limit = root[F("enable_voltage_limit")].as(); @@ -267,6 +270,14 @@ void WebApiHuaweiClass::onAdminPost(AsyncWebServerRequest* request) response->setLength(); request->send(response); + // TODO(schlimmchen): HuaweiCan has no real concept of the fact that the + // config might change. at least not regarding CAN parameters. until that + // changes, the ESP must restart for configuration changes to take effect. + yield(); + delay(1000); + yield(); + ESP.restart(); + const PinMapping_t& pin = PinMapping.get(); // Properly turn this on if (config.Huawei_Enabled) { diff --git a/webapp/src/locales/de.json b/webapp/src/locales/de.json index 3ee579527..4ef2655dc 100644 --- a/webapp/src/locales/de.json +++ b/webapp/src/locales/de.json @@ -777,6 +777,7 @@ "ChargerSettings": "AC Ladegerät Einstellungen", "Configuration": "AC Ladegerät Konfiguration", "EnableHuawei": "Huawei R4850G2 an CAN Bus Interface aktiv", + "CanControllerFrequency": "Frequenz des Quarzes am CAN Controller", "EnableAutoPower": "Automatische Leistungssteuerung", "Limits": "Limits", "VoltageLimit": "Ladespannungslimit", diff --git a/webapp/src/locales/en.json b/webapp/src/locales/en.json index 71a7d63b5..2da7e8d6f 100644 --- a/webapp/src/locales/en.json +++ b/webapp/src/locales/en.json @@ -787,6 +787,7 @@ "ChargerSettings": "AC Charger Settings", "Configuration": "AC Charger Configuration", "EnableHuawei": "Enable Huawei R4850G2 on CAN Bus Interface", + "CanControllerFrequency": "CAN controller quarz frequency", "EnableAutoPower": "Automatic power control", "Limits": "Limits", "VoltageLimit": "Charge Voltage limit", diff --git a/webapp/src/locales/fr.json b/webapp/src/locales/fr.json index 496022529..e33128690 100644 --- a/webapp/src/locales/fr.json +++ b/webapp/src/locales/fr.json @@ -743,6 +743,7 @@ "ChargerSettings": "AC Charger Settings", "Configuration": "AC Charger Configuration", "EnableHuawei": "Enable Huawei R4850G2 on CAN Bus Interface", + "CanControllerFrequency": "CAN controller quarz frequency", "EnableAutoPower": "Automatic power control", "Limits": "Limits", "VoltageLimit": "Charge Voltage limit", diff --git a/webapp/src/types/AcChargerConfig.ts b/webapp/src/types/AcChargerConfig.ts index e50dc7aae..2e1b9ca89 100644 --- a/webapp/src/types/AcChargerConfig.ts +++ b/webapp/src/types/AcChargerConfig.ts @@ -1,5 +1,6 @@ export interface AcChargerConfig { enabled: boolean; + can_controller_frequency: number; auto_power_enabled: boolean; voltage_limit: number; enable_voltage_limit: number; diff --git a/webapp/src/views/AcChargerAdminView.vue b/webapp/src/views/AcChargerAdminView.vue index d6473769c..09527d58d 100644 --- a/webapp/src/views/AcChargerAdminView.vue +++ b/webapp/src/views/AcChargerAdminView.vue @@ -9,6 +9,20 @@ + +
+ +
+ +
+
+ Date: Thu, 19 Oct 2023 16:24:19 +0200 Subject: [PATCH 04/10] add webapp --- webapp_dist/js/app.js.gz | Bin 193585 -> 193800 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/webapp_dist/js/app.js.gz b/webapp_dist/js/app.js.gz index d82f774f5105d8b4b4c25860d611ca770c627a46..6bea1f2f7712b5fc8e7e86faad423a10729fe8ff 100644 GIT binary patch delta 112007 zcmV(yKx^Q}xUg!My*dFL0YR7AIsqMjx%a7fhX+y?ZmStI zMXR!SsP)J~r=5Y4uj8KHx#&iZC^-3n-5x!rN}^DmJffYzJ!<%?&vY9^??NHj$V*U( zOtXrTBcB2XnTpiZcXJ^?Y&0$}qaV~(9}nDiSbp%!+eF`1UKNS`^`~g%s;OJ|XhDkX z!-;X!uY5?NyUEc=%YO4o|InNo8AEN!Jeeu1PBFdATUr-q#4Zfoyz)d-8ZhJ}Ag6Nv z6Awc@OV%D<$t1bcn!C3@HurY18*xcMu;*6GI&|5jm%cjzB7ZDOpBMohIUaRMd!MuC zt;OS0ms^ISN3abuZX$Q}-%uNl=9Z$T`^@K(5MpJzj^p$d#(mfB_YoY$5?xn(^9{af zYMvCmuw*dJ0W0o6w{8*VlJO9Q=bl$uZu~^)IJ4b)ecjKx(46Dh_o8#qdTT|inV!99 zdb&+!^Gj(omw!pcl|4e5O2P|gii3R?RUv2WW<(bF++-7Pgb=WK3yyEjv&R)$c#3Dn{^eJF3^nfoA1$4$@o z5}1c+Gk;!CBRjQs6{dW7Se)A3&}JxGq!L4A@jFupSC*~P#TbWPnLbs{oY_%e?IIgo zHElX~DbA%=EKTaATbMM>!_-+Vy^y_|;o!K-XcV%vaI5@uVxAUx!HD&WmGI^1;Tx>S zMxjro>D2z}W87S#9^OmhafkcAA~3t9N?4C=rhi#=`a;Vn;A~f}3;DLerJ}L3moJP} z;*_ub)-M!xWcax~vk=?PD&R~!pLU4nJ?;jgcZ-j+T6lzu`+ooENxuogsJI}pbm3c3 zg;$^SkM8$DM{kM?_;tVkwPy?Ixb$p+2~S!#Nls+BaJTH+Is*oG*$z6wy(U zIG0;K0SkZnEU@>oHd`xfZtcKMnrZC3RVS;`3+9G*7XRE=@<{2KN>WOC+y|s1l4rY; zE!T(o*%3OpAnG57Y)HHkT9aG5Fawg$aS{hyu0E`ftJIYh*7!+vb*Y8Y9QYvu`%$P2 zYLA!8RG;aQc|uzZ+TWQDZ6xJKVJY>*nNvEJl#YML!V;K{MxDtNa~F?WAMjlG<~$xR zKCr2{OvLpFu7_mrqstz@>__tXY^!iP&1o;4 zL~ENj=i~80{Q1BJW6#m1s;K=PI~`-93T0@34&%sKO#r6tPRFKFK%NBl(?H@=*%T6u{~BIr3NX5PN2NgNvO&} zQ*5C0URvlQthh6Zzi2leM{DI|l_DT)pZ7qJy$9Nv7@7V9q-L%7CB2X0{HhhTVH_6G zM0IFdWraIkZiPFmvck!!o4@z5L!z`>CU)Z*mV{IXfJ~3hXsq!^ojK{#UODPfr<*qr?F^aI+i^=B?3qIr(i|R(ns;ZiHql#%~E7p~hi#I+hHogqg8nHK_Q>e&z z&FZU8NzbgtVRB`F;(T;B6tDOe9!7r{3TcrwG7XUa*$<;g(WRx+y@Ysyv^xIh&g%-V zvYvnHE;Kb9=4rsv7G+%+m?eg9A;w50Ufw_s%eMdu#Sp(KGRU5mt1FLkW7rs`S^NcW zk3g7pbDJ%^8@^$dv-YRbh2z<(24jz)y7HV{VFJ3d7POv{rr4?sNl(MEPpE%UT7(j^ zyrnExVIz*1e1*#!Em8O6X6lALM`7aeoRj0&57>>o#EKYwo^%qz^~kFn>~vtF%(3mk zsJo4V#U=9M+rqp|zBzK{!m?-8Zk62%EjssmRz|L8Wz@c+BAf_C*rWT-#-K^qift{p z$GtIZ!#S$xE)s?;>A+!V4`qLkQd>NQS?03M9h%E1XNhC3KVettb{C*o^|N%s@odh8 zrl;?G8CyOd@8Oa>9NtX=_Eugzq@vH2)_0DY*aJiBqZ^-;(ny!bT4|)~&sr&j>zng0 zc=Pqx@D0(oAM)Gipr~&?Rm$T%pAxA0)Fy9#h1D0*Wm8>##~zJw$G(3Dn(58?Q>^&~ z5kb7a!C{Pk8Mnx=6kr-Yv|l#qmjLv+X+D)UPg#<^l21iCKK{B)JI-r(>6DR`7_YD= zvJBJZvKnX%sHfY+r`-={GK{1nszt$LVX$hDBI?2M;`X+AU>{B$#+f!KgQK^WQ* zsaC|AjfSbB*TnIBWPz%^nYn5T#bDJ6npc&?pcOToqmJzSbct;Jv`V%rOC&1M<(XB}DYjAfcc=U9Qv?i&V~8fr=8cL4VVS=%HJ~L|)0DVxB(W^VAOG zCUV;W&LHmdxnh+Jby5ge{Rq^oZ-iz_9erk`3zQ_+DM5b_xEPnh1?U8}E@pt}#M*fb za`P-->#T|FN+3OZza9t?d-H>a=UX@&(Gu4m&b$o{6nN%$(={n^P370ucvTtzQ%tFk zm?q*Bv8B1K)EcV8fb-RY(~s)@k$giK|8F{>0eWbT2=$=kVY3+A?k#8-YzuW1ZI`bN z>7`~btk!?)SL9++!FH_&?u(P=^Sryvx zRDXY4vcE&^i)myTia5<&5Yi8>Q{Hp3j$49_6nj+u#Xfrm{(CjDCHjK7vU zXRP3baZUdU9nD9+FgOGf`D=^JLp+WY<`jQNDCWkc3rubi9Cx}rK>$1|@oB6*vW%r< z4b0uHt1c(n;{t)Vb2Vp_A|4{Qij!HSy}maI)oL2`Uw86h4S~-yW0=G+W4-omEvbXN zIYoyE{}(~@NinU)EUzq->XxCdCHFGPTctq`mtF}aTY{38m%%)Z$IL$Kgy7WXI7$;!r`9q3!D4B!0#%Ur#7#(86d~)vK2! zt>6(QKT$-$B%ANY?Csb9P~h{7W=KY9ON}rD^Saa-C*|Bwf`Hr`bM?Jx+9%jOZI)0b z4fCe7Rop|6SI2g0Am*~TY+a{(GHQQx;VDQ81`H)k;aFG^xW`Sr>GDV93WjP)uFt+& zxPr=3$*GDa+j>%oW!P=wD-Yo*col;3TS`b*s(4s$ovJI)%=*4zK-Kt||_yT1u`ecs9XplnR|@eI9*3>7Pr%#EXZ>Q2F;QRP*ZZh zWb!S!AGx+`-UnaELDYW(HBGsIFXw~NWGNraC*{6?n$io3f3PgTqJ@{2_QX(BlU7mb z$fzl&4Dx~(s2%&~abXkxV{C*ia&U>qe85c@16BN|V)18YtfNcaI&iC~v~NbRtR4|jn^|9 zR?pjObPZ5?b9oZFqUjmk+ypJA`dKY!2vhCJB$vW`n|%I2l5cra3~W1Ix9_{jty@03 zrbII?nLU40{fhLKt?&ic5XFQ|JUObBoZykmg`YqPNZ;}ae^o!^Ocfq54sv+gK zrO+wI_U5|(DbIOK-Y2>DXu^dw(r`iloJg0c(FEgS#HBjH75DoS?Mg*A#uMpEMVFI_ za;2i{AzbrxUgE}JQUK?q`==9AAGe>KO|+ZPJD*6! z|BHGejNa@$h>%jlM&Fu}Bs*FZ-6fQ$uBcrvjm>bW zE$xAhqlBdbUraQ-&_@{hhcu6B?#$s-Fu)@4TB9F?VQ6^A-1sK+=}lIlMq?Q@)QsLV zm4;<*9OsHGrC71p-xoNgiZHRBNb0Z%aVUQxCr1+}698Yzbl({SZN91Oo9hR}1^;)p zH;_Ht3olbp2fwgtpN(sCZDh1#_vPuPXlH1eD2udMSYI>viut)@QnM8?%NB!@gEax? z&Ky@c{v0nYyO^+@RED+i?OB|pwu0^`#hju(!xne7%EGe7?3RCm z)fdXrvOfkcU-u!6$c=(*&(?Ml5}1lrL3qVzA6PC+?Dy6097E~~>MmMU__}7751&1D;o| z*#x>7EMJ9Uy?U0Re|_^+yRg2UFtxqhibKzN=-tjPM)xo9S zBGe8jQ|gAqR!tl5eDbx9NY{UjZ_E7wZruqhhDdQX+y3r)h%PJT=J2=}$juSeGy$Vu zR7O;xzTB<_l&K6nmbQ1=v3$5}LMq!7`7B`i@j)?Mq$Geq*=Q+`2cBpFHhs*pFyYx1 zCMvsvu6O{^%o2%4cOOc`bgChr)lu2{ASL{S<3a zwQh=7H)RTXfYm(GrXae0p)5>v`AgBlME7qR7ACs!$}l0(jhEW!qZ|FiXCtEG_Z{<& z346?$4LUQjH%sh09%N(jcEP~&ZgN#57DuoBdrUW1wY=P4Zh3iAVR_M$?wea*RzXg< zx00pBwviXiEw&}ZIr)F)!w-@Gw{OWc`=6xw*@DFD)par6Y^7B=a=8?NDwH&T3qDVl z+E-prDn!vomFk=cZct`(T4h$em@JzEE18bEqghsN67>`4VbQcBnEbURz|Rx*aPs%* zEoJk3sakP!;vYHJ-{@;?Tz>nN6y&PSRfmq5%karloXc?h(^h}5$nyBJo%~9}Xl?ht z=!ioAucSE(##l=1Ux3)$8Rnaq*j6=;Joy^qNL6RT#n-1zlB%OnhIN0tmA+b1X>g)hZ2N>5$@eX+OI>J=(hkBfAh#G?_P(=r8P6q&<7+4< zk`Vjfak2lM68rxGQ8xHKXr2W0d6FS8$|uIy(@_Tncp+Te{*zjM^3U^)_V+h$$8FYu zw?uwe#xuXNAdhpBL^1?$Wa#DJJZZBo{gdIpy>!I?^do=#+mFxiPc+7Vhg4$NpntdM z-);JLhyLBAfA{d;nEn}`LJOu@52KQ@9)(E-ol$NygJS?Oi2>ARBYKm!VM708)Q&0r zGX}0pKPH`o{?5Am4;94-;N%p4&FCL2x?qndbZGe&wz(7XM?B3ihzma2i}OfR2IG*B ze;{3<8d!f&*lrlXoQG9WH$IQznx+R=@V9heTiES}`euy)kMT;27J zgZ0gg_ImU3{ zIU1$sxQ{gdnlO?76ceq3a+GxlRHzvQY?zNx17p(;?p^SN^+j(8d@zy^T+Os6 z5|)dH%-7l$20!{9U_4~Bpm#v?eFAflx1e3NC~fSQg1T}a$hzmb_zSS-n5*JIIgxv1awjfzt;jh zP+xe`#m@z5fhUo?Z?IJV7VaqO?fWEWiHA%uuS&i(SBo@fd|4;B#(8=OO+L%n&yat4 z5)?W!kc?~jGAf4Q5eEGW%$fHf8i*@144f-n2?MgpSii*YakYdW~^$Aa$KsHXI!?MV%NlU z0gVPjgDv2^d90{-D1$Q>Iv2aqvUszjyb=)}TtCcDpmm^hfEdEHkCS!*j4cU&oq*__ z!S)>&wD(*!K9tccf(~j@EL==LwR9$s~rSmMNY7eHcTV$w3UC}i-lPm z8lsAvydW5mE@s5K9Ol-{jm#_Q)%b@gxXDhC1Sz_SQkm)-%40uGTKpiB{if{R(XbUr z$H;uh^NSn4k_p}tneyN#={o^ShpqX&cgL@q0Y+8??D*Ad0$K~$o2NfMIc{ovG>MEB zu=}r$k6*ozP-+2t{^+qRn2CRrCwgJQ;-Mo?b!4Q@5}Y(~av5bPW1&?g9V^kRA0d8O zoehLxLg5}vQ47GP%Z92J^7gcq)TTk#_CW4dPzwC*A_!ZRkf(So8q%al^&JX)YqW2) zpwbjk2!l1$Ui9T%PnnGl!T|~|MbetZPf_SL&BU*#yky`oasU(aN8_qYH0U^>A1l{F;b$UQ+*M+mYsx)1chc!tG zlC~VMG9f!OMp6prGL~dmc}jCth#)bou7D8aIS1nT7W(=CA{WWKwEyQ5oR3hXkjC!$l!E=`ww!K0f}WQ+Rsj?sj6<{Jj42*2RXjSwa>YY(fCYyoG2+5BB^M$N#P_fv zmuyx6Br!G1owS($P0kg^vDAg^iH10G%yDN`!Tkkva8KHj6gm(mozVuj$b^o2m~)IJ z%r@7T!Bznt64PjH2LEAIYiY7}#;yHpqK0Xg@m2vDf6pcvUr~gsaajau(5l@pgO`*Y zgt-%C56kfM%3Nc4WMk3A;YMzsi8=Hyrae23CvMbo#rY?i$>2uR@4}XpICCLJ{4V~5 zx!xwTVo2r{2;lS|I0ia#Wm2?EDvq+M1_&yQFz02U16Bpk^}ui@#e87DO|F2=X@DZ8 zS3})Qe@ieCeFu)$o~Q}VR1WB4Z&Z>w2#!|R#}E`+?KWP2-LmuE)iNklHGD`Zk}9*< zd8c^sB=)*P`K|CRy_-(MCm)<-!*E|;aRa)xd4 zjcYDh>6ICV%VwQ}qq+nm)!7l03ypOIO|vNHf2p+GDPX#CXRQ+>C6R z;?CnVQ`)!UQBdQeSeY+9v}4xAgC}Xvn#e%9*k00JdJ4Yd%Da(Zb`>T&~sQSkvc~;PDAfsJVon)fd(4Z zf4twu-U;K9ae6X!cPEyFo(WU5ZvKQlUzqkmIhPDsJ96beB}RG|2p4q3>?w?nZLD*I z{Uh()P1g?IEYTD|So(QVb4}jrq$M(sSgv3wHgsI=GU9xEQ8uGRf9JubtO0}8k0s(n3k zlTkB2ift19y91YA#qw&5iWD{I` z*q9jgqoYwC>4|SbzY^D7j(N?sH%V>Pgbm# z6r5G+O=p;|-AB-q8 zFkfkGCCf{gz)OX0iT-qcyH=~{O=|@pE_|I{(PXwTY@H?HP^TV)80878H&vA*ooCeP zMx&r0dl*Mw0`=Q1F)gc$Mb&QSC4x-xwStl+t#%7Jo7{w?8WlijgGU8xK)qQjm%Ca4 z8GqGuR|DH(NlQdWrJJ6wCHO4l4g|6)4uMl)*tO3DoHrN#ZdAG7SPRiO(54iERz3;2 z#66HW1*4*aMq{6vhkr;1v|G1Omd&Fz%%G{1vzFTI3ONj5y@06IoWnLP7uXmf8F?$= zGw2dx?{pS!qavdrgx-Al1W=$%N~=4}A0q%$I((<~Svr z;)>y{kQWQ@`?SdDefrfBe+}K$`-zEE|;2H0U>{u z-1f1Bj&|%AX=;^eUW{`wZ4!|$q4r`!n#x14uXakG4*zQ*;1|EnYSW=Kt&E1W)Syvf zJha!OnM!TnI@K560RGc?pevart4`-d8Rv9D$aKYB- zE_$V}-CdKnMxYLEpac7ao_t^zuq?z1=a~`HG=D*8o6Vp;`MiezZEWrSN5H0Icr<(~ zqhw{W4&f63<2+19{pQJLgKh4zMti}|b=Ar-Mff?JUy#qf&{(E8HK2dto(F2w)Y}HzrV;z_ z51ia$)Z+f)0~+eIO|i%$HyswKlV_`8QT#RSMN?2>C?`9NXw5U+r6>D(WH3e1-BxLP z90q;3YQa|KdasMz7x891)nkyHD#*W*y@l)y+*ZKzyXUnyEI6;DN4!g@ie5QX#+jZH zxDHNvsGr@CsKkE@GUle2m(k^ALJ5bK?+x?o@8QZ5OU7)T4w;8_cK4$UK z(bX5A6 zyjBV$T|R`5-$RQE;ghka@{*&Mv3v6R-6UX- z9ruIMdT-9}`;=R8`$U+a@N0DI1Khkhe}lyO3u=OOb91;TYhB4x*~XH`yrmz6V*0pT zF;!}*GDs3%DM_*VozX?E-<#bNc3O3HZWc0kGc8gHiNJKM#$3EuV}` zEn$C!cRr9)`eu6%#%wpiqutvXTe4zC?{>hA?@?!q!pxCfx3E0 z6Jbvt4q+RCodfm@*dt(bDCFqWq%UTrELEP3rK~xQi8OKJiOA23`P0b*`=sRa2}*ww z_!CCs#qg-!%ylv(lHgP%_Q_N1Mls1~(t0+-r7P_Q8G%&ciBuv$Z04dH(gIosGCuap z1W9OlXX@T5qneO5-VH5g&5N6Stzhl9CZN)SrmCt`s&eb#FDSB;cM`UNJIDKSB*vTuX(|mEs;sb>y z;Yv_75fVj&2|}GEd57m$XO#16mBqUfdCk%uO7S)Qx|2jB6gXEZwE`YgB#_@L+nJl~ zoM7d&E5!X}q=Of=tI3E*_>duzj5LT9?Xoo^>rd&p5=d{Q1{gRZLxwmxnZ|#~NlhI+ zVo7+I-nx|_&Bv)Yp(!~G+3bC9DPjDb9!c@}*JLiPDPTU5*dLQ05GYd0eI z!@|ts*^HdYZ@45BiE(qtd5N=}^gA*q^1ESp6g3Tkyc?1!u1INa4I?SYm+_yg(AtTIulIi^|gs9zGKYir(k8yKm*GUOHHMs+SF_Vy$r&7_qjc zroEqr%Rp8wCpX7EPSM^CEB2=GJzN5j8V#d!x)dWKuM~d}`Sa4z@zdpcM8P+s!BS}8WB@COjX(lsAb_B@_8X8FOIE}&pfO_`uzAAgECHdoJ5U*s&GuD)5J6}>J*&p zJO=5Z#vQa_yY5UQBNVl1T+edpG34WH`C%6}o==DLf^MMWybsz7`7j!~vo}2mx z`cNYzT3Yg1bm*-e@%7_84w|iV%m&c?i!YgVukEh%0Ebp<586AU1kDpl87b zy87vaB0)F0Y1Sv0u5?70L7kjXoKAJgvv@j#o$Nv;f|B^9XMwU^I*SLDMb(W5WA8#^AICJNaFHqc<=vX68j-Tnrl^NTX=_vve>IStD$d z(NfKgqnh3HF}&PQYWglHuz3oiHJ?N3QjmOr&OsYM)3t7%;C~yyCq~epjY$TZcyxW5;p&UCXyAq&3mR6mfNwRNuq(cKpf!!rVx=xeOAQ31_xhBp?_?yYbE4Q5>rBY`izhPBo_8!$fQ&_EF97tMQ9e&hb^wE0f_ zelUORuG{IKMr*`qx~Ch{2;P6eXj3Tk913B#tnU@NB%iLSA6#24n8_^q z=zeh{G4{(d91pxiM3?Oa`-GfR;VA<5Ja%t7%Fz-nUunGFxa0M%V!ZxZal9UyO{Rei!Y^onF3id-=}jT^2(vg36v4_82zlXYFr+2^0Sqf?sdk@+V+*4{lX+ej<4EXK< zltj#%BWygUqqN%@9S`H_k^b5AmE^}`NBmE-ye?6Xx5P9W4Q}1Se-9<|Uwbw%4@vPr z@BRB|`XWUu;jLRDEP9fqd5V?bneVIf1YKpKEWg<7bw(p}36Q#9c%*;8IGfSptdp(% zJYavoo(S75%!(<6zW?N0|7Kt7wneAfKK=6mwCJA)tp*g|6s21QLtCW0g|059*J_^W^KXPX>Z05LbQ0U0#_s~7hXU1x!wj+z=o?);RY(e2cxaC%xo z;n<*Xeu{RAQ=qUfJy#>zV+s7b&9WA#pfW#pgzmN}2Cmegc_Qb*gST(Z-F_#ti1jGJ^qn=M*`gq{>zYQ`2r)^a3N@ph(KmR?@QN0`RL2!X@&C|N6W?$ms> zulwo_zfVGp&>VlYM9$$DI5*Ip^6*hQ4E`&_fTSK4x&c(Vyp#wTH?+|krU|!sqo32} zN6LS}rw%kJWX3a06@g}OlrEvh9?<1TzHx-5n;K=^g5Xd&bTsybm1d)s;z;rs;l3I~ zte>+3TBZ*u_4gZiVXCt7h+)3bP!3>~VYU&m3CT<;ZB>7bzYveOWQ|8Z%5S9~<(+sm zB^UJ*cqeIx0@GQgAt8Tc@(?pZ&~y#c*_f=8JVFowA9aF9M6%HB$7*P$wQ_Y+X5`2h zY)nHKAuE-m0PkZpn~$D9dhzJx@%xvr9zMFfym6x>?u8?o_tCAz9B+C5NdIg)o<_#I zn3IK+w;O*&cUE00WD_-rrJ3A2dEV&_-wr#l;w(^5Jeu*~-Qm~Xq$!ckq_uI|z~D5K zkMVC{p(7rLF6kPTltQIQkJHhlW?u4Xx?n>N5Vc?fu>^Ur8&6FSn-x74422(J-MV$d zhU#^wEY!^;-QY_KHh1fNzCO-cm_v`g8H|Jl8D@WtsyPE4_Tnuf!yVPm#4<6W58Ygy zwcz2a7Xp+4?aiqBd;NjVLXkf3Y;!WB6RWUEFjyDV(;&-7Ry*AB?#CHBr)GD>v9cV) z)0zyR)yJ>sM?#^og9M>|#9!o3_IV%^Pc|QDH=35do1_RvGm3jTHL@n_$ylK#eq_hK zP_~y9ZUGU0x41Unx=|0sj8Cj%<}c>vu?sr|iXrPM`6_o>igEQ?wYfw}SYS;_i;`W| zIvi|`3pDn~WvmynFBEfn=owggTsX_`TwacFkB3bQdi%B|jS;5bqvY4rNDu-x$zAo; zfCMG#+XiA9#YZ=iTemXc{OLvmct36cwRpXi95tGM8x4k_I&lkbq~U+0AWxjo-ahVp zuGJa;87H-v!Mh;{@ry$eWI=xZiN@viXojKb=P*#w=corOr1eGrroi`OwSl+Z!z1)o z(~Gz@VUZy%v}XMBW%Su_oW=)l`Gezvh=4Azve1+ldiV5UtHXct+0#0ugPMne^|i)y zDc|aU(bb#d=dBC+CDH-6`V6^vI%y5z2Yk?3fUPcz_--%v$5x5~`w>Dyv}TKN{Z-sfGvXQ5CYkTc@7#TI+o8`kan;JF6`Eb^yI`Z@G^tP(@_9^@`oZco=B63rBjeq5N z+>4TF)L%p8EL(f=^mvu(x}eeB#*@(7&!0Yc^z!W^s_eEB;yZ>ApP&$*pb(#(7S$ww zW2d@(^5-Td=WP9RbMyP~pPQGP-`@tlaT_mh1FO5;Z2q&qe)Bd6_w$8Vd6GMH$Yns_ zP&Q3CcMT)i)UGrr3G0+r9N7p|#_mY|q>{6V{6*f-{EQfu2lrX#PtJ!C!vEnOL0&mL zs3EWr<@I;PPvlgXGm9oKN4A$&q`d@xB5;KNLVx)w|4A)Mvsk*%bD(MTDAySI;zE3b ze)CG{XAd{?5#>{jkyhd};!3_dFuK>e` zkead(r9M{_z#p^jIL_r82nMU&m>BKp@Mo5Y9~?ART|#XIN-6Hs4NC=Bdpa~sJTBlTEX?5Mw?JG2TKRkQlC7N^4C((NTeX@PU&l8?r&WHL1~S;USu4P7f0h@Yi5)YNxQ( z4lTCKtwNTUA5L-W23L@*p#d4*y;Y7gD~DLvMuhL#Ldt_@EnGPu%b%SL&}9Yx0Phb$ zq8`_}(4py3MlwH%#}}r5SXsLev!ivPrb#U8J%>d&gc%|YKRF9fC;QTx9^u5#*f4D3 ziW`Q9Uwp$YKg+)8$uWcr@x>T^s&#$Nx+mvt63q$%=zx7;Q)Au?^ud>2WaAoQdGbMv z2|dUs>Lx5^GBHMqE{Pfj^dwfTX&WCqRf4S&Yq2yk9|MdsW*rZI7$tlm)&Uq9XuY!O z9YqoNStOnD{WH_bYgpkD91Pas5hnsMrQ4e8Q^9aPRCK!002w`{@T20hIzAi7mZkoM zlA8-f^_fj^sqoj>s5M32#b$gu_FJ=)DQD7SG+7xjF`L|up*$oz^v!Wtf!;a`LmY`2 zqCsy?LHvkn4Ktg6>Ph0wKHLxW4AB!gL)smVU=11>%8`u>=o3@mkZO2R@9+?W%-l`P z+IP%JhqAs7i;sAwNp#QDLE|(OWqip_abj7zxzbPz1y7_!Mhe~({~4h=h_<9Ng1Svf ze@ZunNe@2BQZ#hSX2fVjB@7=UkoIkkNTq#*4CBw9j>l1dKSppAU!hS8%RF>k`)e|r z7O15chA}Z=^X{yRz&gzi<1!M`n#Z_mdnXJ~uNb8?MeCPsrUd=8SBNVBMh5?1e7|R! z(Jx3z2VOZ}n#Vc}^Xy_CfdtS>7d^5~!`4-%AAyj;J=;MEV3zZ@_l0UkO z8fDH14e6hMjs>QtY;?+cr)=h&4D`!R2F8X`F-4_fib_TQ)OYrx4{XF%#(mT%LQNPC z>)eh;#yaypSsHP(=T>Eom#>g~#rM@Ss)XLZybN%kjW(+<&S`v&5!N!g)REHWT_cs1$<7oz52s0lx2;$2;XP^jDeKcjEP;(&z z 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 MFiJ}ZK=}6m0Q>M-x&QzG From c5427dedce6e4d667aafce55e09ef744afae8463 Mon Sep 17 00:00:00 2001 From: Al3x Zamponi <562324+alexz707@users.noreply.github.com> Date: Mon, 23 Oct 2023 13:18:24 +0200 Subject: [PATCH 05/10] Add calculated values to hass auto discovery (#509) Add battery P and E as well as panel I to auto discovery values of HA --- src/MqttHandlVedirectHass.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/MqttHandlVedirectHass.cpp b/src/MqttHandlVedirectHass.cpp index e5a9be5c2..8db755d2a 100644 --- a/src/MqttHandlVedirectHass.cpp +++ b/src/MqttHandlVedirectHass.cpp @@ -68,9 +68,12 @@ void MqttHandleVedirectHassClass::publishConfig() // battery info publishSensor("Battery voltage", NULL, "V", "voltage", "measurement", "V"); publishSensor("Battery current", NULL, "I", "current", "measurement", "A"); - + publishSensor("Battery power (calculated)", NULL, "P", "power", "measurement", "W"); + publishSensor("Battery efficiency (calculated)", NULL, "E", "efficiency", "measurement", "%"); + // panel info publishSensor("Panel voltage", NULL, "VPV", "voltage", "measurement", "V"); + publishSensor("Panel current (calculated)", NULL, "IPV", "current", "measurement", "A"); publishSensor("Panel power", NULL, "PPV", "power", "measurement", "W"); publishSensor("Panel yield total", NULL, "H19", "energy", "total_increasing", "kWh"); publishSensor("Panel yield today", NULL, "H20", "energy", "total", "kWh"); @@ -188,4 +191,4 @@ void MqttHandleVedirectHassClass::publish(const String& subtopic, const String& String topic = Configuration.get().Mqtt_Hass_Topic; topic += subtopic; MqttSettings.publishGeneric(topic.c_str(), payload.c_str(), Configuration.get().Mqtt_Hass_Retain); -} \ No newline at end of file +} From 8ba9048f99aaf76be9bbcd26b15d8b184511dfc7 Mon Sep 17 00:00:00 2001 From: Philipp Sandhaus Date: Mon, 23 Oct 2023 13:22:10 +0200 Subject: [PATCH 06/10] Show battery temperature when sensor is present (#511) --- include/BatteryStats.h | 1 + lib/VeDirectFrameHandler/VeDirectShuntController.cpp | 1 + lib/VeDirectFrameHandler/VeDirectShuntController.h | 1 + src/BatteryStats.cpp | 5 +++++ 4 files changed, 8 insertions(+) diff --git a/include/BatteryStats.h b/include/BatteryStats.h index 14672aeaa..bef2e7d67 100644 --- a/include/BatteryStats.h +++ b/include/BatteryStats.h @@ -111,6 +111,7 @@ class VictronSmartShuntStats : public BatteryStats { float _voltage; float _current; float _temperature; + bool _tempPresent; uint8_t _chargeCycles; uint32_t _timeToGo; float _chargedEnergy; diff --git a/lib/VeDirectFrameHandler/VeDirectShuntController.cpp b/lib/VeDirectFrameHandler/VeDirectShuntController.cpp index 7a1fa59a5..27357a1d1 100644 --- a/lib/VeDirectFrameHandler/VeDirectShuntController.cpp +++ b/lib/VeDirectFrameHandler/VeDirectShuntController.cpp @@ -23,6 +23,7 @@ void VeDirectShuntController::textRxEvent(char* name, char* value) if (strcmp(name, "T") == 0) { _tmpFrame.T = atoi(value); + _tmpFrame.tempPresent = true; } else if (strcmp(name, "P") == 0) { _tmpFrame.P = atoi(value); diff --git a/lib/VeDirectFrameHandler/VeDirectShuntController.h b/lib/VeDirectFrameHandler/VeDirectShuntController.h index 115af35b6..9e1a5f131 100644 --- a/lib/VeDirectFrameHandler/VeDirectShuntController.h +++ b/lib/VeDirectFrameHandler/VeDirectShuntController.h @@ -11,6 +11,7 @@ class VeDirectShuntController : public VeDirectFrameHandler { struct veShuntStruct : veStruct { int32_t T; // Battery temperature + bool tempPresent = false; // Battery temperature sensor is attached to the shunt int32_t P; // Instantaneous power int32_t CE; // Consumed Amp Hours int32_t SOC; // State-of-charge diff --git a/src/BatteryStats.cpp b/src/BatteryStats.cpp index b1f616b1b..912deeab3 100644 --- a/src/BatteryStats.cpp +++ b/src/BatteryStats.cpp @@ -214,6 +214,8 @@ void VictronSmartShuntStats::updateFrom(VeDirectShuntController::veShuntStruct c _chargedEnergy = shuntData.H18 / 100; _dischargedEnergy = shuntData.H17 / 100; _manufacturer = "Victron " + _modelName; + _temperature = shuntData.T; + _tempPresent = shuntData.tempPresent; // shuntData.AR is a bitfield, so we need to check each bit individually _alarmLowVoltage = shuntData.AR & 1; @@ -235,6 +237,9 @@ void VictronSmartShuntStats::getLiveViewData(JsonVariant& root) const { addLiveViewValue(root, "chargeCycles", _chargeCycles, "", 0); addLiveViewValue(root, "chargedEnergy", _chargedEnergy, "KWh", 1); addLiveViewValue(root, "dischargedEnergy", _dischargedEnergy, "KWh", 1); + if (_tempPresent) { + addLiveViewValue(root, "temperature", _temperature, "°C", 0); + } addLiveViewAlarm(root, "lowVoltage", _alarmLowVoltage); addLiveViewAlarm(root, "highVoltage", _alarmHighVoltage); From 0fa2745ace9de2fe66d1eb7c12bcba7d4f96688b Mon Sep 17 00:00:00 2001 From: Bernhard Kirchen Date: Mon, 23 Oct 2023 13:23:06 +0200 Subject: [PATCH 07/10] Fix: VE.Direct refactor issues from #505 (#516) * VE.Direct: return non-nullptr as a fallback the changed return statement was supposed to return a shared_ptr to a new and valid MPPT data struct as a fallback. however, it did return a new shared_ptr that was initialized to nullptr. * VE.Direct: make liveview total use total MPPT values this change makes the call to VictronMppt.getData() obsolete, which in turn will therefore not cause an error message on the console if VE.Direct (MPPT) is not enabled. this change also takes care that once multiple VE.Direct MPPT charge controllers are supported, the sums of the respective total values are used in the web app totals. --- include/VictronMppt.h | 9 +++++++++ src/VictronMppt.cpp | 35 ++++++++++++++++++++++++++++++++++- src/WebApi_ws_live.cpp | 7 +++---- 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/include/VictronMppt.h b/include/VictronMppt.h index 6718ef330..d64fbb4cf 100644 --- a/include/VictronMppt.h +++ b/include/VictronMppt.h @@ -25,6 +25,15 @@ class VictronMpptClass { // total output of all MPPT charge controllers in Watts int32_t getPowerOutputWatts() const; + // total panel input power of all MPPT charge controllers in Watts + int32_t getPanelPowerWatts() const; + + // sum of total yield of all MPPT charge controllers in kWh + double getYieldTotal() const; + + // sum of today's yield of all MPPT charge controllers in kWh + double getYieldDay() const; + private: VictronMpptClass(VictronMpptClass const& other) = delete; VictronMpptClass(VictronMpptClass&& other) = delete; diff --git a/src/VictronMppt.cpp b/src/VictronMppt.cpp index b857e0ec0..609f8bf05 100644 --- a/src/VictronMppt.cpp +++ b/src/VictronMppt.cpp @@ -78,7 +78,7 @@ VeDirectMpptController::spData_t VictronMpptClass::getData(size_t idx) const if (_controllers.empty() || idx >= _controllers.size()) { MessageOutput.printf("ERROR: MPPT controller index %d is out of bounds (%d controllers)\r\n", idx, _controllers.size()); - return VeDirectMpptController::spData_t{}; + return std::make_shared(); } return _controllers[idx]->getData(); @@ -94,3 +94,36 @@ int32_t VictronMpptClass::getPowerOutputWatts() const return sum; } + +int32_t VictronMpptClass::getPanelPowerWatts() const +{ + int32_t sum = 0; + + for (const auto& upController : _controllers) { + sum += upController->getData()->PPV; + } + + return sum; +} + +double VictronMpptClass::getYieldTotal() const +{ + double sum = 0; + + for (const auto& upController : _controllers) { + sum += upController->getData()->H19; + } + + return sum; +} + +double VictronMpptClass::getYieldDay() const +{ + double sum = 0; + + for (const auto& upController : _controllers) { + sum += upController->getData()->H20; + } + + return sum; +} diff --git a/src/WebApi_ws_live.cpp b/src/WebApi_ws_live.cpp index fdca8baae..f74d5a549 100644 --- a/src/WebApi_ws_live.cpp +++ b/src/WebApi_ws_live.cpp @@ -192,10 +192,9 @@ void WebApiWsLiveClass::generateJsonResponse(JsonVariant& root) vedirectObj[F("enabled")] = Configuration.get().Vedirect_Enabled; JsonObject totalVeObj = vedirectObj.createNestedObject("total"); - auto spMpptData = VictronMppt.getData(); - addTotalField(totalVeObj, "Power", spMpptData->PPV, "W", 1); - addTotalField(totalVeObj, "YieldDay", spMpptData->H20 * 1000, "Wh", 0); - addTotalField(totalVeObj, "YieldTotal", spMpptData->H19, "kWh", 2); + addTotalField(totalVeObj, "Power", VictronMppt.getPanelPowerWatts(), "W", 1); + addTotalField(totalVeObj, "YieldDay", VictronMppt.getYieldDay() * 1000, "Wh", 0); + addTotalField(totalVeObj, "YieldTotal", VictronMppt.getYieldTotal(), "kWh", 2); JsonObject huaweiObj = root.createNestedObject("huawei"); huaweiObj[F("enabled")] = Configuration.get().Huawei_Enabled; From 254b95cb0f948843c035658b10e0bdc48bea07d5 Mon Sep 17 00:00:00 2001 From: Bernhard Kirchen Date: Mon, 23 Oct 2023 13:24:05 +0200 Subject: [PATCH 08/10] Fix: replace links to upstream project where applicable (#514) --- webapp/src/locales/de.json | 8 ++++---- webapp/src/locales/en.json | 8 ++++---- webapp/src/locales/fr.json | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/webapp/src/locales/de.json b/webapp/src/locales/de.json index 4ef2655dc..5c6a2fb68 100644 --- a/webapp/src/locales/de.json +++ b/webapp/src/locales/de.json @@ -388,7 +388,7 @@ "Cancel": "Abbrechen", "RebootOpenDTU": "OpenDTU neustarten", "RebootQuestion": "Möchten Sie das Gerät wirklich neu starten?", - "RebootHint": "Hinweis: Ein manueller Neustart muss normalerweise nicht durchgeführt werden. OpenDTU führt jeden erforderlichen Neustart (z. B. nach einem Firmware-Update) automatisch durch. Einstellungen werden auch ohne Neustart übernommen. Wenn Sie aufgrund eines Fehlers einen Neustart durchführen müssen, denken Sie bitte daran, diesen unter https://github.com/tbnobody/OpenDTU/issues zu melden." + "RebootHint": "Hinweis: Ein manueller Neustart muss normalerweise nicht durchgeführt werden. OpenDTU führt jeden erforderlichen Neustart (z. B. nach einem Firmware-Update) automatisch durch. Einstellungen werden auch ohne Neustart übernommen. Wenn Sie aufgrund eines Fehlers einen Neustart durchführen müssen, denken Sie bitte daran, diesen unter Github zu melden." }, "dtuadmin": { "DtuSettings": "DTU-Einstellungen", @@ -701,11 +701,11 @@ "ProjectOriginBody3": "Die Software wurde nach bestem Wissen und Gewissen entwickelt. Dennoch kann keine Haftung für eine Fehlfunktion oder einen Garantieverlust des Wechselrichters übernommen werden.", "ProjectOriginBody4": "OpenDTU ist frei verfügbar. Wenn Sie Geld für die Software bezahlt haben, wurden Sie wahrscheinlich abgezockt.", "NewsUpdates": "Neuigkeiten und Updates", - "NewsUpdatesBody": "Neue Updates sind auf Github zu finden: https://github.com/tbnobody/OpenDTU", + "NewsUpdatesBody": "Neue Updates sind auf Github zu finden.", "ErrorReporting": "Fehlerberichte", - "ErrorReportingBody": "Bitte melden Sie Probleme über die Ticketverwaltung von Github.", + "ErrorReportingBody": "Bitte melden Sie Probleme über die Ticketverwaltung von Github.", "Discussion": "Diskussion", - "DiscussionBody": "Diskutieren Sie mit uns auf Discord oder Github" + "DiscussionBody": "Diskutieren Sie mit uns auf Discord oder Github." }, "hints": { "RadioProblem": "Es konnte keine Verbindung zu einem der konfigurierten Funkmodule hergestellt werden. Bitte überprüfen Sie die Verdrahtung.", diff --git a/webapp/src/locales/en.json b/webapp/src/locales/en.json index 2da7e8d6f..0d35def5e 100644 --- a/webapp/src/locales/en.json +++ b/webapp/src/locales/en.json @@ -390,7 +390,7 @@ "Cancel": "Cancel", "RebootOpenDTU": "Reboot OpenDTU", "RebootQuestion": "Do you really want to reboot the device?", - "RebootHint": "Note: A manual reboot does not normally have to be performed. OpenDTU performs any required reboot (e.g. after a firmware update) automatically. Settings are also adopted without rebooting. If you need to reboot due to an error, please consider reporting it at https://github.com/tbnobody/OpenDTU/issues." + "RebootHint": "Note: A manual reboot does not normally have to be performed. OpenDTU performs any required reboot (e.g. after a firmware update) automatically. Settings are also adopted without rebooting. If you need to reboot due to an error, please consider reporting it at Github." }, "dtuadmin": { "DtuSettings": "DTU Settings", @@ -710,11 +710,11 @@ "ProjectOriginBody3": "The software was developed to the best of our knowledge and belief. Nevertheless, no liability can be accepted for a malfunction or guarantee loss of the inverter.", "ProjectOriginBody4": "OpenDTU is freely available. If you paid money for the software, you probably got ripped off.", "NewsUpdates": "News & Updates", - "NewsUpdatesBody": "New updates can be found on Github: https://github.com/tbnobody/OpenDTU", + "NewsUpdatesBody": "New updates can be found on Github.", "ErrorReporting": "Error Reporting", - "ErrorReportingBody": "Please report issues using the feature provided by Github", + "ErrorReportingBody": "Please report issues using the feature provided by Github.", "Discussion": "Discussion", - "DiscussionBody": "Discuss with us on Discord or Github" + "DiscussionBody": "Discuss with us on Discord or Github." }, "hints": { "RadioProblem": "Could not connect to a configured radio module. Please check the wiring.", diff --git a/webapp/src/locales/fr.json b/webapp/src/locales/fr.json index e33128690..6eff2da7e 100644 --- a/webapp/src/locales/fr.json +++ b/webapp/src/locales/fr.json @@ -388,7 +388,7 @@ "Cancel": "Annuler", "RebootOpenDTU": "Redémarrer OpenDTU", "RebootQuestion": "Voulez-vous vraiment redémarrer l'appareil ?", - "RebootHint": "Astuce : Normalement, il n'est pas nécessaire de procéder à un redémarrage manuel. OpenDTU effectue automatiquement tout redémarrage nécessaire (par exemple, après une mise à jour du firmware). Les paramètres sont également adoptés sans redémarrage. Si vous devez redémarrer en raison d'une erreur, veuillez envisager de la signaler à l'adresse suivante https://github.com/tbnobody/OpenDTU/issues." + "RebootHint": "Astuce : Normalement, il n'est pas nécessaire de procéder à un redémarrage manuel. OpenDTU effectue automatiquement tout redémarrage nécessaire (par exemple, après une mise à jour du firmware). Les paramètres sont également adoptés sans redémarrage. Si vous devez redémarrer en raison d'une erreur, veuillez envisager de la signaler à l'adresse suivante Github." }, "dtuadmin": { "DtuSettings": "Paramètres du DTU", @@ -667,11 +667,11 @@ "ProjectOriginBody3": "Le logiciel a été développé au mieux de nos connaissances et de nos convictions. Néanmoins, aucune responsabilité ne peut être acceptée en cas de dysfonctionnement ou de perte de garantie de l'onduleur.", "ProjectOriginBody4": "OpenDTU est disponible gratuitement. Si vous avez payé pour le logiciel, vous avez probablement été arnaqué.", "NewsUpdates": "Actualités et mises à jour", - "NewsUpdatesBody": "Les nouvelles mises à jour peuvent être trouvées sur https://github.com/tbnobody/OpenDTU", + "NewsUpdatesBody": "Les nouvelles mises à jour peuvent être trouvées sur Github.", "ErrorReporting": "Rapport d'erreurs", - "ErrorReportingBody": "Veuillez signaler les problèmes en utilisant la fonction fournie par Github.", + "ErrorReportingBody": "Veuillez signaler les problèmes en utilisant la fonction fournie par Github.", "Discussion": "Discussion", - "DiscussionBody": "Discutez avec nous sur Discord ou sur Github" + "DiscussionBody": "Discutez avec nous sur Discord ou sur Github." }, "hints": { "RadioProblem": "Impossible de se connecter à un module radio configuré.. Veuillez vérifier le câblage.", From 9ca3655de63c8840c406680dd557e3473a1f4224 Mon Sep 17 00:00:00 2001 From: helgeerbe Date: Mon, 23 Oct 2023 13:32:12 +0200 Subject: [PATCH 09/10] add webapp --- webapp_dist/js/app.js.gz | Bin 193800 -> 193856 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/webapp_dist/js/app.js.gz b/webapp_dist/js/app.js.gz index 6bea1f2f7712b5fc8e7e86faad423a10729fe8ff..0bf9bf664f3d5caeb5dffb6ae07622721e73e627 100644 GIT binary patch delta 31879 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

gV$ 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 Date: Tue, 24 Oct 2023 15:25:31 +0200 Subject: [PATCH 10/10] fix: liveData is not updated - due to roll back of upstream commit, duplicated code allocated json buffer twice - enlarge json buffer to 4200 --- src/WebApi_ws_live.cpp | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/WebApi_ws_live.cpp b/src/WebApi_ws_live.cpp index f74d5a549..ffbf6b20a 100644 --- a/src/WebApi_ws_live.cpp +++ b/src/WebApi_ws_live.cpp @@ -67,20 +67,14 @@ void WebApiWsLiveClass::loop() try { std::lock_guard lock(_mutex); - DynamicJsonDocument root(4096 * INV_MAX_COUNT); + DynamicJsonDocument root(4200 * INV_MAX_COUNT); // TODO(helge) check if this calculation is correct JsonVariant var = root; generateJsonResponse(var); - + String buffer; - // free JsonDocument as soon as possible - { - DynamicJsonDocument root(4096 * INV_MAX_COUNT); // TODO(helge) check if this calculation is correct - JsonVariant var = root; - generateJsonResponse(var); + if (buffer) { serializeJson(root, buffer); - } - if (buffer) { if (Configuration.get().Security_AllowReadonly) { _ws.setAuthentication("", ""); } else { @@ -252,7 +246,7 @@ void WebApiWsLiveClass::onLivedataStatus(AsyncWebServerRequest* request) try { std::lock_guard lock(_mutex); - AsyncJsonResponse* response = new AsyncJsonResponse(false, 4096 * INV_MAX_COUNT); + AsyncJsonResponse* response = new AsyncJsonResponse(false, 4200 * INV_MAX_COUNT); JsonVariant root = response->getRoot(); generateJsonResponse(root);