From 746aa087ac8e9661e8e6bda73940ad6adade616f Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Wed, 22 Jun 2022 21:12:45 +0200 Subject: [PATCH] Set MaxChannel Power on startup and in webapi --- lib/Hoymiles/src/inverters/InverterAbstract.cpp | 10 ++++++++-- lib/Hoymiles/src/inverters/InverterAbstract.h | 2 ++ src/WebApi_inverter.cpp | 10 +++++++++- src/main.cpp | 6 +++++- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/lib/Hoymiles/src/inverters/InverterAbstract.cpp b/lib/Hoymiles/src/inverters/InverterAbstract.cpp index 44d0a1b..cdf94be 100644 --- a/lib/Hoymiles/src/inverters/InverterAbstract.cpp +++ b/lib/Hoymiles/src/inverters/InverterAbstract.cpp @@ -136,8 +136,14 @@ uint8_t InverterAbstract::getChannelCount() uint16_t InverterAbstract::getChannelMaxPower(uint8_t channel) { - // todo; - return 0; + return _chanMaxPower[channel]; +} + +void InverterAbstract::setChannelMaxPower(uint8_t channel, uint16_t power) +{ + if (channel < CH4) { + _chanMaxPower[channel] = power; + } } uint8_t InverterAbstract::getAssignIdxByChannelField(uint8_t channel, uint8_t fieldId) diff --git a/lib/Hoymiles/src/inverters/InverterAbstract.h b/lib/Hoymiles/src/inverters/InverterAbstract.h index d7feac4..e6289b5 100644 --- a/lib/Hoymiles/src/inverters/InverterAbstract.h +++ b/lib/Hoymiles/src/inverters/InverterAbstract.h @@ -99,6 +99,7 @@ public: virtual const uint8_t getAssignmentCount() = 0; uint8_t getChannelCount(); uint16_t getChannelMaxPower(uint8_t channel); + void setChannelMaxPower(uint8_t channel, uint16_t power); void clearRxFragmentBuffer(); void addRxFragment(uint8_t fragment[], uint8_t len); @@ -122,4 +123,5 @@ private: uint8_t _payloadStats[MAX_RF_FRAGMENT_COUNT * MAX_RF_PAYLOAD_SIZE]; uint32_t _lastStatsUpdate = 0; + uint16_t _chanMaxPower[CH4]; }; \ No newline at end of file diff --git a/src/WebApi_inverter.cpp b/src/WebApi_inverter.cpp index aac8f02..8d2019e 100644 --- a/src/WebApi_inverter.cpp +++ b/src/WebApi_inverter.cpp @@ -130,7 +130,11 @@ void WebApiInverterClass::onInverterAdd(AsyncWebServerRequest* request) response->setLength(); request->send(response); - Hoymiles.addInverter(inverter->Name, inverter->Serial); + auto inv = Hoymiles.addInverter(inverter->Name, inverter->Serial); + + for (uint8_t c = 0; c < INV_MAX_CHAN_COUNT; c++) { + inv->setChannelMaxPower(c, inverter->MaxChannelPower[c]); + } } void WebApiInverterClass::onInverterEdit(AsyncWebServerRequest* request) @@ -210,6 +214,10 @@ void WebApiInverterClass::onInverterEdit(AsyncWebServerRequest* request) std::shared_ptr inv = Hoymiles.getInverterByPos(root[F("id")].as()); inv->setName(inverter.Name); inv->setSerial(inverter.Serial); + + for (uint8_t c = 0; c < INV_MAX_CHAN_COUNT; c++) { + inv->setChannelMaxPower(c, inverter.MaxChannelPower[c]); + } } void WebApiInverterClass::onInverterDelete(AsyncWebServerRequest* request) diff --git a/src/main.cpp b/src/main.cpp index 8cba74e..f7f8647 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -80,9 +80,13 @@ void setup() for (uint8_t i = 0; i < INV_MAX_COUNT; i++) { if (config.Inverter[i].Serial > 0) { - Hoymiles.addInverter( + auto inv = Hoymiles.addInverter( config.Inverter[i].Name, config.Inverter[i].Serial); + + for (uint8_t c = 0; c < INV_MAX_CHAN_COUNT; c++) { + inv->setChannelMaxPower(c, config.Inverter[i].MaxChannelPower[c]); + } } } Serial.println(F("done"));