From ece131995a4b26265dc0f1a72d7699c1112674c1 Mon Sep 17 00:00:00 2001 From: MalteSchm Date: Wed, 29 Mar 2023 19:04:41 +0200 Subject: [PATCH 1/7] linting errors --- include/Huawei_can.h | 6 +++--- src/Huawei_can.cpp | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/include/Huawei_can.h b/include/Huawei_can.h index 296bc488..5867998d 100644 --- a/include/Huawei_can.h +++ b/include/Huawei_can.h @@ -75,14 +75,14 @@ public: void setPower(bool power); RectifierParameters_t * get(); - unsigned long getLastUpdate(); + uint32_t getLastUpdate(); private: void sendRequest(); void onReceive(uint8_t* frame, uint8_t len); - unsigned long previousMillis; - unsigned long lastUpdate; + uint32_t previousMillis; + uint32_t lastUpdate; RectifierParameters_t _rp; SPIClass *spi; diff --git a/src/Huawei_can.cpp b/src/Huawei_can.cpp index 9d6fce3a..1f4c495f 100644 --- a/src/Huawei_can.cpp +++ b/src/Huawei_can.cpp @@ -43,7 +43,7 @@ RectifierParameters_t * HuaweiCanClass::get() return &_rp; } -unsigned long HuaweiCanClass::getLastUpdate() +uint32_t HuaweiCanClass::getLastUpdate() { return lastUpdate; } @@ -142,7 +142,7 @@ void HuaweiCanClass::onReceive(uint8_t* frame, uint8_t len) void HuaweiCanClass::loop() { - long unsigned int rxId; + INT32U rxId; unsigned char len = 0; unsigned char rxBuf[8]; From 5f42f66c028a789bd4cc2003f638df69504e414e Mon Sep 17 00:00:00 2001 From: MalteSchm Date: Wed, 29 Mar 2023 19:05:31 +0200 Subject: [PATCH 2/7] fix indent error --- platformio.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platformio.ini b/platformio.ini index f3697d37..9a8019e1 100644 --- a/platformio.ini +++ b/platformio.ini @@ -58,7 +58,7 @@ build_flags = ${env.build_flags} -DHOYMILES_PIN_CE=4 -DHOYMILES_PIN_CS=5 -DVICTRON_PIN_TX=21 - -DVICTRON_PIN_RX=22 + -DVICTRON_PIN_RX=22 -DPYLONTECH_PIN_RX=27 -DPYLONTECH_PIN_TX=14 -DHUAWEI_PIN_MISO=12 From a968f09d7391115407a463282b2ecf6a085623a8 Mon Sep 17 00:00:00 2001 From: MalteSchm Date: Wed, 29 Mar 2023 19:06:41 +0200 Subject: [PATCH 3/7] Pin config --- src/WebApi_device.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/WebApi_device.cpp b/src/WebApi_device.cpp index 1a4674d7..c27116a4 100644 --- a/src/WebApi_device.cpp +++ b/src/WebApi_device.cpp @@ -77,6 +77,14 @@ void WebApiDeviceClass::onDeviceAdminGet(AsyncWebServerRequest* request) batteryPinObj[F("rx")] = pin.battery_rx; batteryPinObj[F("tx")] = pin.battery_tx; + JsonObject huaweiPinObj = curPin.createNestedObject("huawei"); + huaweiPinObj[F("miso")] = pin.huawei_miso; + huaweiPinObj[F("mosi")] = pin.huawei_mosi; + huaweiPinObj[F("clk")] = pin.huawei_clk; + huaweiPinObj[F("irq")] = pin.huawei_irq; + huaweiPinObj[F("cs")] = pin.huawei_cs; + huaweiPinObj[F("power")] = pin.huawei_power; + response->setLength(); request->send(response); } From a091e80ed014dcef2e881c32cd8dd4881d952a26 Mon Sep 17 00:00:00 2001 From: MalteSchm Date: Wed, 29 Mar 2023 19:07:16 +0200 Subject: [PATCH 4/7] deal with un-initialized values --- src/PowerMeter.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/PowerMeter.cpp b/src/PowerMeter.cpp index 19eac501..2a6db4e5 100644 --- a/src/PowerMeter.cpp +++ b/src/PowerMeter.cpp @@ -27,9 +27,14 @@ void PowerMeterClass::init() CONFIG_T& config = Configuration.get(); - MqttSettings.subscribe(config.PowerMeter_MqttTopicPowerMeter1, 0, std::bind(&PowerMeterClass::onMqttMessage, this, _1, _2, _3, _4, _5, _6)); - MqttSettings.subscribe(config.PowerMeter_MqttTopicPowerMeter2, 0, std::bind(&PowerMeterClass::onMqttMessage, this, _1, _2, _3, _4, _5, _6)); - MqttSettings.subscribe(config.PowerMeter_MqttTopicPowerMeter3, 0, std::bind(&PowerMeterClass::onMqttMessage, this, _1, _2, _3, _4, _5, _6)); + if (config.PowerMeter_Enabled && + (strlen(config.PowerMeter_MqttTopicPowerMeter1) > 0) && + (strlen(config.PowerMeter_MqttTopicPowerMeter2) > 0) && + (strlen(config.PowerMeter_MqttTopicPowerMeter3) > 0) ) { + MqttSettings.subscribe(config.PowerMeter_MqttTopicPowerMeter1, 0, std::bind(&PowerMeterClass::onMqttMessage, this, _1, _2, _3, _4, _5, _6)); + MqttSettings.subscribe(config.PowerMeter_MqttTopicPowerMeter2, 0, std::bind(&PowerMeterClass::onMqttMessage, this, _1, _2, _3, _4, _5, _6)); + MqttSettings.subscribe(config.PowerMeter_MqttTopicPowerMeter3, 0, std::bind(&PowerMeterClass::onMqttMessage, this, _1, _2, _3, _4, _5, _6)); + } mqttInitDone = true; From f4455ccb93e4d260ed8afe82cebdb17e99fad873 Mon Sep 17 00:00:00 2001 From: MalteSchm Date: Sat, 1 Apr 2023 13:50:04 +0200 Subject: [PATCH 5/7] reverting --- src/PowerMeter.cpp | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/PowerMeter.cpp b/src/PowerMeter.cpp index 2a6db4e5..19eac501 100644 --- a/src/PowerMeter.cpp +++ b/src/PowerMeter.cpp @@ -27,14 +27,9 @@ void PowerMeterClass::init() CONFIG_T& config = Configuration.get(); - if (config.PowerMeter_Enabled && - (strlen(config.PowerMeter_MqttTopicPowerMeter1) > 0) && - (strlen(config.PowerMeter_MqttTopicPowerMeter2) > 0) && - (strlen(config.PowerMeter_MqttTopicPowerMeter3) > 0) ) { - MqttSettings.subscribe(config.PowerMeter_MqttTopicPowerMeter1, 0, std::bind(&PowerMeterClass::onMqttMessage, this, _1, _2, _3, _4, _5, _6)); - MqttSettings.subscribe(config.PowerMeter_MqttTopicPowerMeter2, 0, std::bind(&PowerMeterClass::onMqttMessage, this, _1, _2, _3, _4, _5, _6)); - MqttSettings.subscribe(config.PowerMeter_MqttTopicPowerMeter3, 0, std::bind(&PowerMeterClass::onMqttMessage, this, _1, _2, _3, _4, _5, _6)); - } + MqttSettings.subscribe(config.PowerMeter_MqttTopicPowerMeter1, 0, std::bind(&PowerMeterClass::onMqttMessage, this, _1, _2, _3, _4, _5, _6)); + MqttSettings.subscribe(config.PowerMeter_MqttTopicPowerMeter2, 0, std::bind(&PowerMeterClass::onMqttMessage, this, _1, _2, _3, _4, _5, _6)); + MqttSettings.subscribe(config.PowerMeter_MqttTopicPowerMeter3, 0, std::bind(&PowerMeterClass::onMqttMessage, this, _1, _2, _3, _4, _5, _6)); mqttInitDone = true; From 1f6301c2c07ce6c934e4c037e26131e2a5ab398f Mon Sep 17 00:00:00 2001 From: MalteSchm Date: Sat, 1 Apr 2023 14:00:43 +0200 Subject: [PATCH 6/7] Check for empty MQTT topic Please enter the commit message for your changes. Lines starting --- src/PowerMeter.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/PowerMeter.cpp b/src/PowerMeter.cpp index 19eac501..a27297e8 100644 --- a/src/PowerMeter.cpp +++ b/src/PowerMeter.cpp @@ -27,10 +27,20 @@ void PowerMeterClass::init() CONFIG_T& config = Configuration.get(); - MqttSettings.subscribe(config.PowerMeter_MqttTopicPowerMeter1, 0, std::bind(&PowerMeterClass::onMqttMessage, this, _1, _2, _3, _4, _5, _6)); - MqttSettings.subscribe(config.PowerMeter_MqttTopicPowerMeter2, 0, std::bind(&PowerMeterClass::onMqttMessage, this, _1, _2, _3, _4, _5, _6)); - MqttSettings.subscribe(config.PowerMeter_MqttTopicPowerMeter3, 0, std::bind(&PowerMeterClass::onMqttMessage, this, _1, _2, _3, _4, _5, _6)); - + if (config.PowerMeter_Enabled && config.PowerMeter_Source == 0) { + if (strlen(config.PowerMeter_MqttTopicPowerMeter1) > 0) { + MqttSettings.subscribe(config.PowerMeter_MqttTopicPowerMeter1, 0, std::bind(&PowerMeterClass::onMqttMessage, this, _1, _2, _3, _4, _5, _6)); + } + + if (strlen(config.PowerMeter_MqttTopicPowerMeter2) > 0) { + MqttSettings.subscribe(config.PowerMeter_MqttTopicPowerMeter2, 0, std::bind(&PowerMeterClass::onMqttMessage, this, _1, _2, _3, _4, _5, _6)); + } + + if (strlen(config.PowerMeter_MqttTopicPowerMeter3) > 0) { + MqttSettings.subscribe(config.PowerMeter_MqttTopicPowerMeter3, 0, std::bind(&PowerMeterClass::onMqttMessage, this, _1, _2, _3, _4, _5, _6)); + } + } + mqttInitDone = true; sdm.begin(); From d1e43c11b9cb4b6b815258f57ece70862ce4f7aa Mon Sep 17 00:00:00 2001 From: MalteSchm Date: Sat, 1 Apr 2023 14:43:24 +0200 Subject: [PATCH 7/7] Run Huawei code only when enabled --- src/Huawei_can.cpp | 15 ++++++++++++++- src/WebApi_Huawei.cpp | 16 +++++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/Huawei_can.cpp b/src/Huawei_can.cpp index 1f4c495f..30b19064 100644 --- a/src/Huawei_can.cpp +++ b/src/Huawei_can.cpp @@ -4,6 +4,7 @@ */ #include "Huawei_can.h" #include "MessageOutput.h" +#include "Configuration.h" #include #include @@ -14,6 +15,12 @@ HuaweiCanClass HuaweiCan; void HuaweiCanClass::init(uint8_t huawei_miso, uint8_t huawei_mosi, uint8_t huawei_clk, uint8_t huawei_irq, uint8_t huawei_cs, uint8_t huawei_power) { + const CONFIG_T& config = Configuration.get(); + + if (!config.Huawei_Enabled) { + return; + } + spi = new SPIClass(VSPI); spi->begin(huawei_clk, huawei_miso, huawei_mosi, huawei_cs); pinMode(huawei_cs, OUTPUT); @@ -145,7 +152,13 @@ void HuaweiCanClass::loop() INT32U rxId; unsigned char len = 0; unsigned char rxBuf[8]; - + + const CONFIG_T& config = Configuration.get(); + + if (!config.Huawei_Enabled) { + return; + } + if(!digitalRead(_huawei_irq)) // If CAN_INT pin is low, read receive buffer { CAN->readMsgBuf(&rxId, &len, rxBuf); // Read data: len = data length, buf = data byte(s) diff --git a/src/WebApi_Huawei.cpp b/src/WebApi_Huawei.cpp index 1b2cd5b4..981324cc 100644 --- a/src/WebApi_Huawei.cpp +++ b/src/WebApi_Huawei.cpp @@ -5,6 +5,8 @@ #include "WebApi_Huawei.h" #include "Huawei_can.h" #include "Configuration.h" +#include "MessageOutput.h" +#include "PinMapping.h" #include "WebApi.h" #include "WebApi_errors.h" #include @@ -198,7 +200,7 @@ void WebApiHuaweiClass::onAdminPost(AsyncWebServerRequest* request) if (!WebApi.checkCredentials(request)) { return; } - + AsyncJsonResponse* response = new AsyncJsonResponse(); JsonObject retMsg = response->getRoot(); retMsg[F("type")] = F("warning"); @@ -251,5 +253,17 @@ void WebApiHuaweiClass::onAdminPost(AsyncWebServerRequest* request) response->setLength(); request->send(response); + const PinMapping_t& pin = PinMapping.get(); + if (config.Huawei_Enabled) { + MessageOutput.println(F("Initialize Huawei AC charger interface... ")); + if (PinMapping.isValidHuaweiConfig()) { + MessageOutput.printf("Huawei AC-charger miso = %d, mosi = %d, clk = %d, irq = %d, cs = %d, power_pin = %d\r\n", pin.huawei_miso, pin.huawei_mosi, pin.huawei_clk, pin.huawei_irq, pin.huawei_cs, pin.huawei_power); + HuaweiCan.init(pin.huawei_miso, pin.huawei_mosi, pin.huawei_clk, pin.huawei_irq, pin.huawei_cs, pin.huawei_power); + MessageOutput.println(F("done")); + } else { + MessageOutput.println(F("Invalid pin config")); + } + } + HuaweiCan.setPower(config.Huawei_Enabled); }