From 3eaff7e45c6826114d4dc3de946245dd5d4c8014 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Fri, 18 Apr 2025 20:03:32 +0200 Subject: [PATCH] Use ESP Logging Macros for hoymiles library --- lib/Hoymiles/src/Hoymiles.cpp | 28 ++++++--------- lib/Hoymiles/src/Hoymiles.h | 7 +--- lib/Hoymiles/src/HoymilesRadio.cpp | 26 ++++++++------ lib/Hoymiles/src/HoymilesRadio.h | 19 +++++++---- lib/Hoymiles/src/HoymilesRadio_CMT.cpp | 34 +++++++++++-------- lib/Hoymiles/src/HoymilesRadio_NRF.cpp | 22 +++++++----- .../src/commands/RealTimeRunDataCommand.cpp | 9 +++-- .../src/commands/SystemConfigParaCommand.cpp | 9 +++-- .../src/inverters/InverterAbstract.cpp | 21 +++++++----- lib/Hoymiles/src/parser/AlarmLogParser.cpp | 9 +++-- lib/Hoymiles/src/parser/DevInfoParser.cpp | 12 ++++--- lib/Hoymiles/src/parser/GridProfileParser.cpp | 9 +++-- lib/Hoymiles/src/parser/StatisticsParser.cpp | 11 +++--- .../src/parser/SystemConfigParaParser.cpp | 9 +++-- src/InverterSettings.cpp | 2 -- 15 files changed, 128 insertions(+), 99 deletions(-) diff --git a/lib/Hoymiles/src/Hoymiles.cpp b/lib/Hoymiles/src/Hoymiles.cpp index 20486fc5..507043c1 100644 --- a/lib/Hoymiles/src/Hoymiles.cpp +++ b/lib/Hoymiles/src/Hoymiles.cpp @@ -17,6 +17,10 @@ #include "inverters/HM_2CH.h" #include "inverters/HM_4CH.h" #include +#include + +#undef TAG +static const char* TAG = "hoymiles"; HoymilesClass Hoymiles; @@ -63,7 +67,7 @@ void HoymilesClass::loop() } if (iv->getEnablePolling() || iv->getEnableCommands()) { - _messageOutput->printf("Fetch inverter: %s\n", iv->serialString().c_str()); + ESP_LOGI(TAG, "Fetch inverter: %s", iv->serialString().c_str()); if (!iv->isReachable()) { iv->sendChangeChannelRequest(); @@ -80,7 +84,7 @@ void HoymilesClass::loop() // Fetch limit if (((millis() - iv->SystemConfigPara()->getLastUpdateRequest() > HOY_SYSTEM_CONFIG_PARA_POLL_INTERVAL) && (millis() - iv->SystemConfigPara()->getLastUpdateCommand() > HOY_SYSTEM_CONFIG_PARA_POLL_MIN_DURATION))) { - _messageOutput->printf("Request SystemConfigPara\n"); + ESP_LOGI(TAG, "Request SystemConfigPara"); iv->sendSystemConfigParaRequest(); } @@ -96,13 +100,13 @@ void HoymilesClass::loop() && iv->DevInfo()->getLastUpdateSimple() > 0; if (invalidDevInfo) { - _messageOutput->printf("DevInfo: No Valid Data\n"); + ESP_LOGW(TAG, "DevInfo: No Valid Data"); } if ((iv->DevInfo()->getLastUpdateAll() == 0) || (iv->DevInfo()->getLastUpdateSimple() == 0) || invalidDevInfo) { - _messageOutput->printf("Request device info\n"); + ESP_LOGI(TAG, "Request device info"); iv->sendDevInfoRequest(); } } @@ -110,17 +114,17 @@ void HoymilesClass::loop() // Set limit if required if (iv->SystemConfigPara()->getLastLimitCommandSuccess() == CMD_NOK) { - _messageOutput->printf("Resend ActivePowerControl\n"); + ESP_LOGI(TAG, "Resend ActivePowerControl"); iv->resendActivePowerControlRequest(); } // Set power status if required if (iv->PowerCommand()->getLastPowerCommandSuccess() == CMD_NOK) { - _messageOutput->printf("Resend PowerCommand\n"); + ESP_LOGI(TAG, "Resend PowerCommand"); iv->resendPowerControlRequest(); } - _messageOutput->printf("Queue size - NRF: %" PRIu32 " CMT: %" PRIu32 "\n", _radioNrf->getQueueSize(), _radioCmt->getQueueSize()); + ESP_LOGI(TAG, "Queue size - NRF: %" PRIu32 " CMT: %" PRIu32 "", _radioNrf->getQueueSize(), _radioCmt->getQueueSize()); _lastPoll = millis(); } @@ -266,13 +270,3 @@ void HoymilesClass::setPollInterval(const uint32_t interval) { _pollInterval = interval; } - -void HoymilesClass::setMessageOutput(Print* output) -{ - _messageOutput = output; -} - -Print* HoymilesClass::getMessageOutput() -{ - return _messageOutput; -} diff --git a/lib/Hoymiles/src/Hoymiles.h b/lib/Hoymiles/src/Hoymiles.h index 42724e06..ee8fe05b 100644 --- a/lib/Hoymiles/src/Hoymiles.h +++ b/lib/Hoymiles/src/Hoymiles.h @@ -20,9 +20,6 @@ public: void initCMT(const int8_t pin_sdio, const int8_t pin_clk, const int8_t pin_cs, const int8_t pin_fcs, const int8_t pin_gpio2, const int8_t pin_gpio3); void loop(); - void setMessageOutput(Print* output); - Print* getMessageOutput(); - std::shared_ptr addInverter(const char* name, const uint64_t serial); std::shared_ptr getInverterByPos(const uint8_t pos); std::shared_ptr getInverterBySerial(const uint64_t serial); @@ -47,8 +44,6 @@ private: uint32_t _pollInterval = 0; uint32_t _lastPoll = 0; - - Print* _messageOutput = &Serial; }; -extern HoymilesClass Hoymiles; \ No newline at end of file +extern HoymilesClass Hoymiles; diff --git a/lib/Hoymiles/src/HoymilesRadio.cpp b/lib/Hoymiles/src/HoymilesRadio.cpp index e35b6e99..bee5a2f3 100644 --- a/lib/Hoymiles/src/HoymilesRadio.cpp +++ b/lib/Hoymiles/src/HoymilesRadio.cpp @@ -1,10 +1,14 @@ // SPDX-License-Identifier: GPL-2.0-or-later /* - * Copyright (C) 2023 Thomas Basler and others + * Copyright (C) 2023-2025 Thomas Basler and others */ #include "HoymilesRadio.h" -#include "Hoymiles.h" #include "crc.h" +#include "Hoymiles.h" +#include + +#undef TAG +static const char* TAG = "hoymiles"; serial_u HoymilesRadio::DtuSerial() const { @@ -54,18 +58,18 @@ void HoymilesRadio::sendLastPacketAgain() void HoymilesRadio::handleReceivedPackage() { if (_busyFlag && _rxTimeout.occured()) { - Hoymiles.getMessageOutput()->printf("RX Period End\n"); + ESP_LOGI(TAG, "RX Period End"); std::shared_ptr inv = Hoymiles.getInverterBySerial(_commandQueue.front().get()->getTargetAddress()); if (nullptr != inv) { CommandAbstract* cmd = _commandQueue.front().get(); uint8_t verifyResult = inv->verifyAllFragments(*cmd); if (verifyResult == FRAGMENT_ALL_MISSING_RESEND) { - Hoymiles.getMessageOutput()->printf("Nothing received, resend whole request\n"); + ESP_LOGW(TAG, "Nothing received, resend whole request"); sendLastPacketAgain(); } else if (verifyResult == FRAGMENT_ALL_MISSING_TIMEOUT) { - Hoymiles.getMessageOutput()->printf("Nothing received, resend count exeeded\n"); + ESP_LOGW(TAG, "Nothing received, resend count exeeded"); // Statistics: Count RX Fail No Answer if (inv->RadioStats.TxRequestData > 0) { inv->RadioStats.RxFailNoAnswer++; @@ -75,7 +79,7 @@ void HoymilesRadio::handleReceivedPackage() _busyFlag = false; } else if (verifyResult == FRAGMENT_RETRANSMIT_TIMEOUT) { - Hoymiles.getMessageOutput()->printf("Retransmit timeout\n"); + ESP_LOGW(TAG, "Retransmit timeout"); // Statistics: Count RX Fail Partial Answer if (inv->RadioStats.TxRequestData > 0) { inv->RadioStats.RxFailPartialAnswer++; @@ -85,7 +89,7 @@ void HoymilesRadio::handleReceivedPackage() _busyFlag = false; } else if (verifyResult == FRAGMENT_HANDLE_ERROR) { - Hoymiles.getMessageOutput()->printf("Packet handling error\n"); + ESP_LOGW(TAG, "Packet handling error"); // Statistics: Count RX Fail Corrupt Data if (inv->RadioStats.TxRequestData > 0) { inv->RadioStats.RxFailCorruptData++; @@ -96,7 +100,7 @@ void HoymilesRadio::handleReceivedPackage() } else if (verifyResult > 0) { // Perform Retransmit - Hoymiles.getMessageOutput()->printf("Request retransmit: %" PRIu8 "\n", verifyResult); + ESP_LOGI(TAG, "Request retransmit: %" PRIu8 "", verifyResult); // Statistics: Count TX Re-Request Fragment inv->RadioStats.TxReRequestFragment++; @@ -104,7 +108,7 @@ void HoymilesRadio::handleReceivedPackage() } else { // Successful received all packages - Hoymiles.getMessageOutput()->printf("Success\n"); + ESP_LOGI(TAG, "Success"); // Statistics: Count RX Success if (inv->RadioStats.TxRequestData > 0) { inv->RadioStats.RxSuccess++; @@ -115,7 +119,7 @@ void HoymilesRadio::handleReceivedPackage() } } else { // If inverter was not found, assume the command is invalid - Hoymiles.getMessageOutput()->printf("RX: Invalid inverter found\n"); + ESP_LOGW(TAG, "RX: Invalid inverter found"); // Statistics: Count RX Fail Unknown Data _commandQueue.pop(); _busyFlag = false; @@ -133,7 +137,7 @@ void HoymilesRadio::handleReceivedPackage() sendEsbPacket(*cmd); } else { - Hoymiles.getMessageOutput()->printf("TX: Invalid inverter found\n"); + ESP_LOGE(TAG, "TX: Invalid inverter found"); _commandQueue.pop(); } } diff --git a/lib/Hoymiles/src/HoymilesRadio.h b/lib/Hoymiles/src/HoymilesRadio.h index 2a0efee4..731b5c3f 100644 --- a/lib/Hoymiles/src/HoymilesRadio.h +++ b/lib/Hoymiles/src/HoymilesRadio.h @@ -8,7 +8,12 @@ #include #ifdef HOY_DEBUG_QUEUE -#define DEBUG_PRINT(fmt, args...) Serial.printf(fmt, ##args) +#include + +#undef TAG +static const char* TAG = "hoymiles"; + +#define DEBUG_PRINT(fmt, args...) ESP_LOGD(TAG, fmt, ##args) #else #define DEBUG_PRINT(fmt, args...) /* Don't do anything in release builds */ #endif @@ -28,8 +33,8 @@ public: void enqueCommand(std::shared_ptr cmd) { - DEBUG_PRINT("Queue size before: %ld\n", _commandQueue.size()); - DEBUG_PRINT("Handling command %s with type %d\n", cmd.get()->getCommandName().c_str(), static_cast(cmd.get()->getQueueInsertType())); + DEBUG_PRINT("Queue size before: %ld", _commandQueue.size()); + DEBUG_PRINT("Handling command %s with type %d", cmd.get()->getCommandName().c_str(), static_cast(cmd.get()->getQueueInsertType())); switch (cmd.get()->getQueueInsertType()) { case QueueInsertType::RemoveOldest: _commandQueue.removeDuplicatedEntries(cmd); @@ -39,7 +44,7 @@ public: // and replaces the existing one with the new one. // (The new one will not be pushed at the end of the queue) if (_commandQueue.countSimilarCommands(cmd) > 0) { - DEBUG_PRINT(" ... existing entry will be replaced\n"); + DEBUG_PRINT(" ... existing entry will be replaced"); _commandQueue.replaceEntries(cmd); return; } @@ -48,7 +53,7 @@ public: // Checks if the queue already contains a command like the new one // and drops the new one. The new one will not be inserted. if (_commandQueue.countSimilarCommands(cmd) > 0) { - DEBUG_PRINT(" ... new entry will be dropped\n"); + DEBUG_PRINT(" ... new entry will be dropped"); return; } break; @@ -58,10 +63,10 @@ public: } // Push the command into the queue if we reach this position of the code - DEBUG_PRINT(" ... new entry will be appended\n"); + DEBUG_PRINT(" ... new entry will be appended"); _commandQueue.push(cmd); - DEBUG_PRINT("Queue size after: %ld\n", _commandQueue.size()); + DEBUG_PRINT("Queue size after: %ld", _commandQueue.size()); } template diff --git a/lib/Hoymiles/src/HoymilesRadio_CMT.cpp b/lib/Hoymiles/src/HoymilesRadio_CMT.cpp index 8152459b..7e183771 100644 --- a/lib/Hoymiles/src/HoymilesRadio_CMT.cpp +++ b/lib/Hoymiles/src/HoymilesRadio_CMT.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later /* - * Copyright (C) 2023-2024 Thomas Basler and others + * Copyright (C) 2023-2025 Thomas Basler and others */ #include "HoymilesRadio_CMT.h" #include "Hoymiles.h" @@ -8,6 +8,10 @@ #include "crc.h" #include #include +#include + +#undef TAG +static const char* TAG = "hoymiles"; constexpr CountryFrequencyDefinition_t make_value(FrequencyBand_t Band, uint32_t Freq_Legal_Min, uint32_t Freq_Legal_Max, uint32_t Freq_Default, uint32_t Freq_StartUp) { @@ -35,16 +39,16 @@ uint32_t HoymilesRadio_CMT::getFrequencyFromChannel(const uint8_t channel) const uint8_t HoymilesRadio_CMT::getChannelFromFrequency(const uint32_t frequency) const { if ((frequency % getChannelWidth()) != 0) { - Hoymiles.getMessageOutput()->printf("%.3f MHz is not divisible by %" PRIu32 " kHz!\n", frequency / 1000000.0, getChannelWidth()); + ESP_LOGE(TAG, "%.3f MHz is not divisible by %" PRIu32 " kHz!", frequency / 1000000.0, getChannelWidth()); return 0xFF; // ERROR } if (frequency < getMinFrequency() || frequency > getMaxFrequency()) { - Hoymiles.getMessageOutput()->printf("%.2f MHz is out of Hoymiles/CMT range! (%.2f MHz - %.2f MHz)\n", + ESP_LOGE(TAG, "%.2f MHz is out of Hoymiles/CMT range! (%.2f MHz - %.2f MHz)", frequency / 1000000.0, getMinFrequency() / 1000000.0, getMaxFrequency() / 1000000.0); return 0xFF; // ERROR } if (frequency < countryDefinition.at(_countryMode).Freq_Legal_Min || frequency > countryDefinition.at(_countryMode).Freq_Legal_Max) { - Hoymiles.getMessageOutput()->printf("!!! caution: %.2f MHz is out of region legal range! (%" PRIu32 " - %" PRIu32 " MHz)\n", + ESP_LOGE(TAG, "!!! caution: %.2f MHz is out of region legal range! (%" PRIu32 " - %" PRIu32 " MHz)", frequency / 1000000.0, static_cast(countryDefinition.at(_countryMode).Freq_Legal_Min / 1e6), static_cast(countryDefinition.at(_countryMode).Freq_Legal_Max / 1e6)); @@ -96,10 +100,10 @@ void HoymilesRadio_CMT::init(const int8_t pin_sdio, const int8_t pin_clk, const cmtSwitchDtuFreq(_inverterTargetFrequency); // start dtu at work freqency, for fast Rx if inverter is already on and frequency switched if (!_radio->isChipConnected()) { - Hoymiles.getMessageOutput()->printf("CMT2300A: Connection error!!\n"); + ESP_LOGE(TAG, "CMT2300A: Connection error!!"); return; } - Hoymiles.getMessageOutput()->printf("CMT2300A: Connection successful\n"); + ESP_LOGI(TAG, "CMT2300A: Connection successful"); if (pin_gpio2 >= 0) { attachInterrupt(digitalPinToInterrupt(pin_gpio2), std::bind(&HoymilesRadio_CMT::handleInt1, this), RISING); @@ -127,10 +131,10 @@ void HoymilesRadio_CMT::loop() } if (_packetReceived) { - Hoymiles.getMessageOutput()->printf("Interrupt received\n"); + ESP_LOGV(TAG, "Interrupt received"); while (_radio->available()) { if (_rxBuffer.size() > FRAGMENT_BUFFER_SIZE) { - Hoymiles.getMessageOutput()->printf("CMT2300A: Buffer full\n"); + ESP_LOGE(TAG, "CMT2300A: Buffer full"); _radio->flush_rx(); continue; } @@ -164,17 +168,17 @@ void HoymilesRadio_CMT::loop() if (nullptr != inv) { // Save packet in inverter rx buffer - Hoymiles.getMessageOutput()->printf("RX %.2f MHz --> %s | %" PRId8 " dBm\n", + ESP_LOGD(TAG, "RX %.2f MHz --> %s | %" PRId8 " dBm", getFrequencyFromChannel(f.channel) / 1000000.0, Utils::dumpArray(f.fragment, f.len).c_str(), f.rssi); inv->addRxFragment(f.fragment, f.len, f.rssi); } else { - Hoymiles.getMessageOutput()->printf("Inverter Not found!\n"); + ESP_LOGE(TAG, "Inverter Not found!"); } } } else { - Hoymiles.getMessageOutput()->printf("Frame kaputt\n"); // ;-) + ESP_LOGW(TAG, "Frame kaputt"); // ;-) } // Remove paket from buffer even it was corrupted @@ -192,9 +196,9 @@ void HoymilesRadio_CMT::setPALevel(const int8_t paLevel) } if (_radio->setPALevel(paLevel)) { - Hoymiles.getMessageOutput()->printf("CMT TX power set to %" PRId8 " dBm\n", paLevel); + ESP_LOGI(TAG, "CMT TX power set to %" PRId8 " dBm", paLevel); } else { - Hoymiles.getMessageOutput()->printf("CMT TX power %" PRId8 " dBm is not defined! (min: -10 dBm, max: 20 dBm)\n", paLevel); + ESP_LOGE(TAG, "CMT TX power %" PRId8 " dBm is not defined! (min: -10 dBm, max: 20 dBm)", paLevel); } } @@ -272,11 +276,11 @@ void HoymilesRadio_CMT::sendEsbPacket(CommandAbstract& cmd) cmtSwitchDtuFreq(getInvBootFrequency()); } - Hoymiles.getMessageOutput()->printf("TX %s %.2f MHz --> %s\n", + ESP_LOGD(TAG, "TX %s %.2f MHz --> %s", cmd.getCommandName().c_str(), getFrequencyFromChannel(_radio->getChannel()) / 1000000.0, cmd.dumpDataPayload().c_str()); if (!_radio->write(cmd.getDataPayload(), cmd.getDataSize())) { - Hoymiles.getMessageOutput()->printf("TX SPI Timeout\n"); + ESP_LOGE(TAG, "TX SPI Timeout"); } cmtSwitchDtuFreq(_inverterTargetFrequency); _radio->startListening(); diff --git a/lib/Hoymiles/src/HoymilesRadio_NRF.cpp b/lib/Hoymiles/src/HoymilesRadio_NRF.cpp index 710f16c7..4e434ef6 100644 --- a/lib/Hoymiles/src/HoymilesRadio_NRF.cpp +++ b/lib/Hoymiles/src/HoymilesRadio_NRF.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later /* - * Copyright (C) 2022 Thomas Basler and others + * Copyright (C) 2022-2025 Thomas Basler and others */ #include "HoymilesRadio_NRF.h" #include "Hoymiles.h" @@ -8,6 +8,10 @@ #include "commands/RequestFrameCommand.h" #include #include +#include + +#undef TAG +static const char* TAG = "hoymiles"; void HoymilesRadio_NRF::init(SPIClass* initialisedSpiBus, const uint8_t pinCE, const uint8_t pinIRQ) { @@ -25,10 +29,10 @@ void HoymilesRadio_NRF::init(SPIClass* initialisedSpiBus, const uint8_t pinCE, c _radio->setRetries(0, 0); _radio->maskIRQ(true, true, false); // enable only receiving interrupts if (!_radio->isChipConnected()) { - Hoymiles.getMessageOutput()->printf("NRF: Connection error!!\n"); + ESP_LOGE(TAG, "NRF: Connection error!!"); return; } - Hoymiles.getMessageOutput()->printf("NRF: Connection successful\n"); + ESP_LOGI(TAG, "NRF: Connection successful"); attachInterrupt(digitalPinToInterrupt(pinIRQ), std::bind(&HoymilesRadio_NRF::handleIntr, this), FALLING); @@ -49,10 +53,10 @@ void HoymilesRadio_NRF::loop() } if (_packetReceived) { - Hoymiles.getMessageOutput()->printf("Interrupt received\n"); + ESP_LOGV(TAG, "Interrupt received"); while (_radio->available()) { if (_rxBuffer.size() > FRAGMENT_BUFFER_SIZE) { - Hoymiles.getMessageOutput()->printf("NRF: Buffer full\n"); + ESP_LOGE(TAG, "NRF: Buffer full"); _radio->flush_rx(); continue; } @@ -76,16 +80,16 @@ void HoymilesRadio_NRF::loop() if (nullptr != inv) { // Save packet in inverter rx buffer - Hoymiles.getMessageOutput()->printf("RX Channel: %" PRIu8 " --> %s | %" PRId8 " dBm\n", + ESP_LOGD(TAG, "RX Channel: %" PRIu8 " --> %s | %" PRId8 " dBm", f.channel, Utils::dumpArray(f.fragment, f.len).c_str(), f.rssi); inv->addRxFragment(f.fragment, f.len, f.rssi); } else { - Hoymiles.getMessageOutput()->printf("Inverter Not found!\n"); + ESP_LOGE(TAG, "Inverter Not found!"); } } else { - Hoymiles.getMessageOutput()->printf("Frame kaputt\n"); + ESP_LOGW(TAG, "Frame kaputt"); } // Remove paket from buffer even it was corrupted @@ -182,7 +186,7 @@ void HoymilesRadio_NRF::sendEsbPacket(CommandAbstract& cmd) openWritingPipe(s); _radio->setRetries(3, 15); - Hoymiles.getMessageOutput()->printf("TX %s Channel: %" PRIu8 " --> %s\n", + ESP_LOGD(TAG, "TX %s Channel: %" PRIu8 " --> %s", cmd.getCommandName().c_str(), _radio->getChannel(), cmd.dumpDataPayload().c_str()); _radio->write(cmd.getDataPayload(), cmd.getDataSize()); diff --git a/lib/Hoymiles/src/commands/RealTimeRunDataCommand.cpp b/lib/Hoymiles/src/commands/RealTimeRunDataCommand.cpp index 90ef868d..544d7859 100644 --- a/lib/Hoymiles/src/commands/RealTimeRunDataCommand.cpp +++ b/lib/Hoymiles/src/commands/RealTimeRunDataCommand.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later /* - * Copyright (C) 2022-2024 Thomas Basler and others + * Copyright (C) 2022-2025 Thomas Basler and others */ /* @@ -19,8 +19,11 @@ Command structure: ID Target Addr Source Addr Idx DT ? Time Gap Password CRC16 CRC8 */ #include "RealTimeRunDataCommand.h" -#include "Hoymiles.h" #include "inverters/InverterAbstract.h" +#include + +#undef TAG +static const char* TAG = "hoymiles"; RealTimeRunDataCommand::RealTimeRunDataCommand(InverterAbstract* inv, const uint64_t router_address, const time_t time) : MultiDataCommand(inv, router_address) @@ -48,7 +51,7 @@ bool RealTimeRunDataCommand::handleResponse(const fragment_t fragment[], const u const uint8_t fragmentsSize = getTotalFragmentSize(fragment, max_fragment_id); const uint8_t expectedSize = _inv->Statistics()->getExpectedByteCount(); if (fragmentsSize < expectedSize) { - Hoymiles.getMessageOutput()->printf("ERROR in %s: Received fragment size: %" PRIu8 ", min expected size: %" PRIu8 "\n", + ESP_LOGE(TAG, "ERROR in %s: Received fragment size: %" PRIu8 ", min expected size: %" PRIu8 "", getCommandName().c_str(), fragmentsSize, expectedSize); return false; diff --git a/lib/Hoymiles/src/commands/SystemConfigParaCommand.cpp b/lib/Hoymiles/src/commands/SystemConfigParaCommand.cpp index a00b0196..2af5d15d 100644 --- a/lib/Hoymiles/src/commands/SystemConfigParaCommand.cpp +++ b/lib/Hoymiles/src/commands/SystemConfigParaCommand.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later /* - * Copyright (C) 2022-2024 Thomas Basler and others + * Copyright (C) 2022-2025 Thomas Basler and others */ /* @@ -19,8 +19,11 @@ Command structure: ID Target Addr Source Addr Idx DT ? Time Gap Password CRC16 CRC8 */ #include "SystemConfigParaCommand.h" -#include "Hoymiles.h" #include "inverters/InverterAbstract.h" +#include + +#undef TAG +static const char* TAG = "hoymiles"; SystemConfigParaCommand::SystemConfigParaCommand(InverterAbstract* inv, const uint64_t router_address, const time_t time) : MultiDataCommand(inv, router_address) @@ -48,7 +51,7 @@ bool SystemConfigParaCommand::handleResponse(const fragment_t fragment[], const const uint8_t fragmentsSize = getTotalFragmentSize(fragment, max_fragment_id); const uint8_t expectedSize = _inv->SystemConfigPara()->getExpectedByteCount(); if (fragmentsSize < expectedSize) { - Hoymiles.getMessageOutput()->printf("ERROR in %s: Received fragment size: %" PRIu8 ", min expected size: %" PRIu8 "\n", + ESP_LOGE(TAG, "ERROR in %s: Received fragment size: %" PRIu8 ", min expected size: %" PRIu8 "", getCommandName().c_str(), fragmentsSize, expectedSize); return false; diff --git a/lib/Hoymiles/src/inverters/InverterAbstract.cpp b/lib/Hoymiles/src/inverters/InverterAbstract.cpp index 809a2fa9..d2072ea1 100644 --- a/lib/Hoymiles/src/inverters/InverterAbstract.cpp +++ b/lib/Hoymiles/src/inverters/InverterAbstract.cpp @@ -1,11 +1,14 @@ // SPDX-License-Identifier: GPL-2.0-or-later /* - * Copyright (C) 2022 Thomas Basler and others + * Copyright (C) 2022-2025 Thomas Basler and others */ #include "InverterAbstract.h" -#include "../Hoymiles.h" #include "crc.h" #include +#include + +#undef TAG +static const char* TAG = "hoymiles"; InverterAbstract::InverterAbstract(HoymilesRadio* radio, const uint64_t serial) { @@ -195,12 +198,12 @@ void InverterAbstract::addRxFragment(const uint8_t fragment[], const uint8_t len _lastRssi = rssi; if (len < 11) { - Hoymiles.getMessageOutput()->printf("FATAL: (%s, %d) fragment too short\n", __FILE__, __LINE__); + ESP_LOGE(TAG, "(%s, %d) fragment too short", __FILE__, __LINE__); return; } if (len - 11 > MAX_RF_PAYLOAD_SIZE) { - Hoymiles.getMessageOutput()->printf("FATAL: (%s, %d) fragment too large\n", __FILE__, __LINE__); + ESP_LOGE(TAG, "FATAL: (%s, %d) fragment too large", __FILE__, __LINE__); return; } @@ -210,12 +213,12 @@ void InverterAbstract::addRxFragment(const uint8_t fragment[], const uint8_t len const uint8_t fragmentId = fragmentCount & 0b01111111; // fragmentId is 1 based if (fragmentId == 0) { - Hoymiles.getMessageOutput()->printf("ERROR: fragment id zero received and ignored\n"); + ESP_LOGE(TAG, "Fragment id zero received and ignored"); return; } if (fragmentId >= MAX_RF_FRAGMENT_COUNT) { - Hoymiles.getMessageOutput()->printf("ERROR: fragment id %" PRIu8 " is too large for buffer and ignored\n", fragmentId); + ESP_LOGE(TAG, "Fragment id %" PRIu8 " is too large for buffer and ignored", fragmentId); return; } @@ -239,7 +242,7 @@ uint8_t InverterAbstract::verifyAllFragments(CommandAbstract& cmd) { // All missing if (_rxFragmentLastPacketId == 0) { - Hoymiles.getMessageOutput()->printf("All missing\n"); + ESP_LOGW(TAG, "All missing"); if (cmd.getSendCount() <= cmd.getMaxResendCount()) { return FRAGMENT_ALL_MISSING_RESEND; } else { @@ -250,7 +253,7 @@ uint8_t InverterAbstract::verifyAllFragments(CommandAbstract& cmd) // Last fragment is missing (the one with 0x80) if (_rxFragmentMaxPacketId == 0) { - Hoymiles.getMessageOutput()->printf("Last missing\n"); + ESP_LOGW(TAG, "Last missing"); if (_rxFragmentRetransmitCnt++ < cmd.getMaxRetransmitCount()) { return _rxFragmentLastPacketId + 1; } else { @@ -262,7 +265,7 @@ uint8_t InverterAbstract::verifyAllFragments(CommandAbstract& cmd) // Middle fragment is missing for (uint8_t i = 0; i < _rxFragmentMaxPacketId - 1; i++) { if (!_rxFragmentBuffer[i].wasReceived) { - Hoymiles.getMessageOutput()->printf("Middle missing\n"); + ESP_LOGW(TAG, "Middle missing"); if (_rxFragmentRetransmitCnt++ < cmd.getMaxRetransmitCount()) { return i + 1; } else { diff --git a/lib/Hoymiles/src/parser/AlarmLogParser.cpp b/lib/Hoymiles/src/parser/AlarmLogParser.cpp index 3a14638c..7449075f 100644 --- a/lib/Hoymiles/src/parser/AlarmLogParser.cpp +++ b/lib/Hoymiles/src/parser/AlarmLogParser.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later /* - * Copyright (C) 2022-2024 Thomas Basler and others + * Copyright (C) 2022-2025 Thomas Basler and others */ /* @@ -23,8 +23,11 @@ Data structure: ID Source Addr Target Addr Idx ? wcode ? Start End ? ? ? ? wcode CRC8 */ #include "AlarmLogParser.h" -#include "../Hoymiles.h" #include +#include + +#undef TAG +static const char* TAG = "hoymiles"; const std::array AlarmLogParser::_alarmMessages = { { { AlarmMessageType_t::ALL, 1, "Inverter start", "Wechselrichter gestartet", "L'onduleur a démarré" }, @@ -205,7 +208,7 @@ void AlarmLogParser::clearBuffer() void AlarmLogParser::appendFragment(const uint8_t offset, const uint8_t* payload, const uint8_t len) { if (offset + len > ALARM_LOG_PAYLOAD_SIZE) { - Hoymiles.getMessageOutput()->printf("FATAL: (%s, %d) stats packet too large for buffer (%d > %d)\n", __FILE__, __LINE__, offset + len, ALARM_LOG_PAYLOAD_SIZE); + ESP_LOGE(TAG, "(%s, %d) stats packet too large for buffer (%d > %d)", __FILE__, __LINE__, offset + len, ALARM_LOG_PAYLOAD_SIZE); return; } memcpy(&_payloadAlarmLog[offset], payload, len); diff --git a/lib/Hoymiles/src/parser/DevInfoParser.cpp b/lib/Hoymiles/src/parser/DevInfoParser.cpp index a54a0818..18c147bf 100644 --- a/lib/Hoymiles/src/parser/DevInfoParser.cpp +++ b/lib/Hoymiles/src/parser/DevInfoParser.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later /* - * Copyright (C) 2022 - 2024 Thomas Basler and others + * Copyright (C) 2022 - 2025 Thomas Basler and others */ /* @@ -28,8 +28,12 @@ Data structure (DevInfoSimpleCommand): ID Source Addr Target Addr Idx FW Version HW Part No. HW Version ? ? ? CRC16 CRC8 */ #include "DevInfoParser.h" -#include "../Hoymiles.h" #include +#include +#include + +#undef TAG +static const char* TAG = "hoymiles"; #define ALL 0xff @@ -103,7 +107,7 @@ void DevInfoParser::clearBufferAll() void DevInfoParser::appendFragmentAll(const uint8_t offset, const uint8_t* payload, const uint8_t len) { if (offset + len > DEV_INFO_SIZE) { - Hoymiles.getMessageOutput()->printf("FATAL: (%s, %d) dev info all packet too large for buffer\n", __FILE__, __LINE__); + ESP_LOGE(TAG, "(%s, %d) dev info all packet too large for buffer", __FILE__, __LINE__); return; } memcpy(&_payloadDevInfoAll[offset], payload, len); @@ -119,7 +123,7 @@ void DevInfoParser::clearBufferSimple() void DevInfoParser::appendFragmentSimple(const uint8_t offset, const uint8_t* payload, const uint8_t len) { if (offset + len > DEV_INFO_SIZE) { - Hoymiles.getMessageOutput()->printf("FATAL: (%s, %d) dev info Simple packet too large for buffer\n", __FILE__, __LINE__); + ESP_LOGE(TAG, "(%s, %d) dev info Simple packet too large for buffer", __FILE__, __LINE__); return; } memcpy(&_payloadDevInfoSimple[offset], payload, len); diff --git a/lib/Hoymiles/src/parser/GridProfileParser.cpp b/lib/Hoymiles/src/parser/GridProfileParser.cpp index 609345f7..1b2d10a0 100644 --- a/lib/Hoymiles/src/parser/GridProfileParser.cpp +++ b/lib/Hoymiles/src/parser/GridProfileParser.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later /* - * Copyright (C) 2023 - 2024 Thomas Basler and others + * Copyright (C) 2023 - 2025 Thomas Basler and others */ /* @@ -20,11 +20,14 @@ ID Source Addr Target Addr Idx Profile ID Profile Version Section ID The number of values depends on the respective section and its version. After the last value of a section follows the next section id. */ #include "GridProfileParser.h" -#include "../Hoymiles.h" #include +#include #include #include +#undef TAG +static const char* TAG = "hoymiles"; + const std::array GridProfileParser::_profileTypes = { { { 0x02, 0x00, "US - NA_IEEE1547_240V" }, { 0x03, 0x00, "DE - DE_VDE4105_2018" }, @@ -377,7 +380,7 @@ void GridProfileParser::clearBuffer() void GridProfileParser::appendFragment(const uint8_t offset, const uint8_t* payload, const uint8_t len) { if (offset + len > GRID_PROFILE_SIZE) { - Hoymiles.getMessageOutput()->printf("FATAL: (%s, %d) grid profile packet too large for buffer\n", __FILE__, __LINE__); + ESP_LOGE(TAG, "(%s, %d) grid profile packet too large for buffer", __FILE__, __LINE__); return; } memcpy(&_payloadGridProfile[offset], payload, len); diff --git a/lib/Hoymiles/src/parser/StatisticsParser.cpp b/lib/Hoymiles/src/parser/StatisticsParser.cpp index 59d39253..528997f8 100644 --- a/lib/Hoymiles/src/parser/StatisticsParser.cpp +++ b/lib/Hoymiles/src/parser/StatisticsParser.cpp @@ -1,9 +1,12 @@ // SPDX-License-Identifier: GPL-2.0-or-later /* - * Copyright (C) 2022 - 2023 Thomas Basler and others + * Copyright (C) 2022 - 2025 Thomas Basler and others */ #include "StatisticsParser.h" -#include "../Hoymiles.h" +#include + +#undef TAG +static const char* TAG = "hoymiles"; static float calcTotalYieldTotal(StatisticsParser* iv, uint8_t arg0); static float calcTotalYieldDay(StatisticsParser* iv, uint8_t arg0); @@ -89,7 +92,7 @@ void StatisticsParser::clearBuffer() void StatisticsParser::appendFragment(const uint8_t offset, const uint8_t* payload, const uint8_t len) { if (offset + len > STATISTIC_PACKET_SIZE) { - Hoymiles.getMessageOutput()->printf("FATAL: (%s, %d) stats packet too large for buffer\n", __FILE__, __LINE__); + ESP_LOGE(TAG, "(%s, %d) stats packet too large for buffer", __FILE__, __LINE__); return; } memcpy(&_payloadStatistic[offset], payload, len); @@ -109,7 +112,7 @@ void StatisticsParser::endAppendFragment() // check if current yield day is smaller then last cached yield day if (getChannelFieldValue(TYPE_DC, c, FLD_YD) < _lastYieldDay[static_cast(c)]) { // currently all values are zero --> Add last known values to offset - Hoymiles.getMessageOutput()->printf("Yield Day reset detected!\n"); + ESP_LOGI(TAG, "Yield Day reset detected!"); setChannelFieldOffset(TYPE_DC, c, FLD_YD, _lastYieldDay[static_cast(c)]); diff --git a/lib/Hoymiles/src/parser/SystemConfigParaParser.cpp b/lib/Hoymiles/src/parser/SystemConfigParaParser.cpp index 62c74c14..ebdea1f2 100644 --- a/lib/Hoymiles/src/parser/SystemConfigParaParser.cpp +++ b/lib/Hoymiles/src/parser/SystemConfigParaParser.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later /* - * Copyright (C) 2022 - 2024 Thomas Basler and others + * Copyright (C) 2022 - 2025 Thomas Basler and others */ /* @@ -17,8 +17,11 @@ Data structure: ID Source Addr Target Addr Idx ? Limit percent ? ? ? ? ? CRC16 CRC8 */ #include "SystemConfigParaParser.h" -#include "../Hoymiles.h" #include +#include + +#undef TAG +static const char* TAG = "hoymiles"; SystemConfigParaParser::SystemConfigParaParser() : Parser() @@ -35,7 +38,7 @@ void SystemConfigParaParser::clearBuffer() void SystemConfigParaParser::appendFragment(const uint8_t offset, const uint8_t* payload, const uint8_t len) { if (offset + len > (SYSTEM_CONFIG_PARA_SIZE)) { - Hoymiles.getMessageOutput()->printf("FATAL: (%s, %d) stats packet too large for buffer\n", __FILE__, __LINE__); + ESP_LOGE(TAG, "(%s, %d) stats packet too large for buffer", __FILE__, __LINE__); return; } memcpy(&_payload[offset], payload, len); diff --git a/src/InverterSettings.cpp b/src/InverterSettings.cpp index ecddccbd..d1164275 100644 --- a/src/InverterSettings.cpp +++ b/src/InverterSettings.cpp @@ -4,7 +4,6 @@ */ #include "InverterSettings.h" #include "Configuration.h" -#include "MessageOutput.h" #include "PinMapping.h" #include "SunPosition.h" #include @@ -28,7 +27,6 @@ void InverterSettingsClass::init(Scheduler& scheduler) // Initialize inverter communication ESP_LOGI(TAG, "Initialize Hoymiles interface..."); - Hoymiles.setMessageOutput(&MessageOutput); Hoymiles.init(); if (!PinMapping.isValidNrf24Config() && !PinMapping.isValidCmt2300Config()) {