From d39e1998af1b6fe7f63cca799ff28fcb7efa6e52 Mon Sep 17 00:00:00 2001 From: Takiss Date: Thu, 23 Jan 2025 22:31:53 +0200 Subject: [PATCH] Revert "Merge branch 'tbnobody:master' into master" This reverts commit 44d539d7137d0f2a445c6329fa517e92cede1a41, reversing changes made to 96e193d7c479a27a7cb7212a7bfa263d8937182a. --- include/MqttSettings.h | 2 +- include/PinMapping.h | 4 - include/WebApi_ws_console.h | 2 +- include/WebApi_ws_live.h | 2 +- lang/es.lang.json | 12 +- lang/it.lang.json | 12 +- lib/CpuTemperature/src/CpuTemperature.cpp | 6 - lib/Hoymiles/src/Hoymiles.cpp | 4 +- lib/Hoymiles/src/HoymilesRadio.cpp | 15 - lib/Hoymiles/src/HoymilesRadio.h | 49 +- .../commands/ActivePowerControlCommand.cpp | 17 +- .../src/commands/ActivePowerControlCommand.h | 4 +- lib/Hoymiles/src/commands/CommandAbstract.cpp | 6 - lib/Hoymiles/src/commands/CommandAbstract.h | 16 - .../src/commands/PowerControlCommand.h | 1 - lib/Hoymiles/src/inverters/HERF_1CH.cpp | 4 +- lib/Hoymiles/src/inverters/HERF_2CH.cpp | 6 +- lib/Hoymiles/src/inverters/HERF_4CH.cpp | 4 +- lib/Hoymiles/src/inverters/HMS_1CH.cpp | 4 +- lib/Hoymiles/src/inverters/HMS_1CHv2.cpp | 8 +- lib/Hoymiles/src/inverters/HMS_2CH.cpp | 4 +- lib/Hoymiles/src/inverters/HMS_4CH.cpp | 11 +- lib/Hoymiles/src/inverters/HMS_4CH.h | 3 +- lib/Hoymiles/src/inverters/HMT_4CH.cpp | 4 +- lib/Hoymiles/src/inverters/HMT_6CH.cpp | 4 +- lib/Hoymiles/src/inverters/HMT_Abstract.cpp | 4 +- lib/Hoymiles/src/inverters/HM_1CH.cpp | 4 +- lib/Hoymiles/src/inverters/HM_2CH.cpp | 4 +- lib/Hoymiles/src/inverters/HM_4CH.cpp | 4 +- lib/Hoymiles/src/inverters/HM_Abstract.cpp | 9 +- lib/Hoymiles/src/inverters/HM_Abstract.h | 3 +- lib/Hoymiles/src/inverters/InverterAbstract.h | 3 - lib/Hoymiles/src/inverters/README.md | 6 +- lib/Hoymiles/src/parser/DevInfoParser.cpp | 1 - lib/Hoymiles/src/queue/CommandQueue.cpp | 51 - lib/Hoymiles/src/queue/CommandQueue.h | 17 - lib/ThreadSafeQueue/src/ThreadSafeQueue.h | 13 +- pio-scripts/auto_firmware_version.py | 2 +- pio-scripts/create_factory_bin.py | 3 +- platformio.ini | 13 +- src/Configuration.cpp | 2 - src/MqttHandleDtu.cpp | 2 +- src/MqttHandleHass.cpp | 1 - src/MqttSettings.cpp | 2 +- src/NetworkSettings.cpp | 3 +- src/PinMapping.cpp | 2 - src/WebApi_device.cpp | 5 +- src/WebApi_devinfo.cpp | 1 - src/WebApi_firmware.cpp | 3 +- src/WebApi_ws_live.cpp | 6 - src/main.cpp | 4 +- webapp/package.json | 32 +- webapp/src/components/BasePage.vue | 10 +- webapp/src/components/DevInfo.vue | 8 - webapp/src/components/HintView.vue | 30 +- webapp/src/components/InverterTotalInfo.vue | 6 +- webapp/src/locales/de.json | 12 +- webapp/src/locales/en.json | 12 +- webapp/src/locales/fr.json | 12 +- webapp/src/types/DevInfoStatus.ts | 1 - webapp/src/types/LiveDataStatus.ts | 1 - webapp/src/views/HomeView.vue | 30 +- webapp/src/views/InverterAdminView.vue | 6 +- webapp/yarn.lock | 1709 ++++++++--------- webapp_dist/js/app.js.gz | Bin 193823 -> 192821 bytes 65 files changed, 964 insertions(+), 1277 deletions(-) delete mode 100644 lib/Hoymiles/src/queue/CommandQueue.cpp delete mode 100644 lib/Hoymiles/src/queue/CommandQueue.h diff --git a/include/MqttSettings.h b/include/MqttSettings.h index f3185535..41b0e6ec 100644 --- a/include/MqttSettings.h +++ b/include/MqttSettings.h @@ -20,7 +20,7 @@ public: void unsubscribe(const String& topic); String getPrefix() const; - String getClientId() const; + String getClientId(); private: void NetworkEvent(network_event event); diff --git a/include/PinMapping.h b/include/PinMapping.h index 9539b824..21723067 100644 --- a/include/PinMapping.h +++ b/include/PinMapping.h @@ -59,8 +59,6 @@ public: bool init(const String& deviceMapping); PinMapping_t& get(); - bool isMappingSelected() const { return _mappingSelected; } - bool isValidNrf24Config() const; bool isValidCmt2300Config() const; bool isValidW5500Config() const; @@ -70,8 +68,6 @@ public: private: PinMapping_t _pinMapping; - - bool _mappingSelected = false; }; extern PinMappingClass PinMapping; diff --git a/include/WebApi_ws_console.h b/include/WebApi_ws_console.h index 3c42159b..b3194319 100644 --- a/include/WebApi_ws_console.h +++ b/include/WebApi_ws_console.h @@ -12,7 +12,7 @@ public: private: AsyncWebSocket _ws; - AsyncAuthenticationMiddleware _simpleDigestAuth; + AuthenticationMiddleware _simpleDigestAuth; Task _wsCleanupTask; void wsCleanupTaskCb(); diff --git a/include/WebApi_ws_live.h b/include/WebApi_ws_live.h index 301c1433..e16372e9 100644 --- a/include/WebApi_ws_live.h +++ b/include/WebApi_ws_live.h @@ -25,7 +25,7 @@ private: void onWebsocketEvent(AsyncWebSocket* server, AsyncWebSocketClient* client, AwsEventType type, void* arg, uint8_t* data, size_t len); AsyncWebSocket _ws; - AsyncAuthenticationMiddleware _simpleDigestAuth; + AuthenticationMiddleware _simpleDigestAuth; uint32_t _lastPublishStats[INV_MAX_COUNT] = { 0 }; diff --git a/lang/es.lang.json b/lang/es.lang.json index d56748c2..629b9799 100644 --- a/lang/es.lang.json +++ b/lang/es.lang.json @@ -45,9 +45,7 @@ "Refreshing": "Refrescando", "Pull": "Tira hacia abajo para refrescar", "Release": "Soltar para refrescar", - "Close": "Cerrar", - "Yes": "Yes", - "No": "No" + "Close": "Cerrar" }, "wait": { "NotReady": "OpenDTU is not yet ready", @@ -195,10 +193,7 @@ "FirmwareVersion": "Versión del firmware", "FirmwareBuildDate": "Fecha de construcción del firmware", "HardwarePartNumber": "Número de parte de hardware", - "HardwareVersion": "Versión de hardware", - "SupportsPowerDistributionLogic": "'Power Distribution Logic' supported", - "Yes": "@:base.Yes", - "No": "@:base.No" + "HardwareVersion": "Versión de hardware" }, "gridprofile": { "NoInfo": "@:devinfo.NoInfo", @@ -642,8 +637,7 @@ "TimeSync": "El reloj aún no ha sido sincronizado. Sin un reloj correctamente ajustado, no se realizan solicitudes al inversor. Esto es normal poco después del inicio. Sin embargo, después de un tiempo de ejecución más largo (>1 minuto), indica que el servidor NTP no es accesible.", "TimeSyncLink": "Por favor, verifica la configuración de tu hora.", "DefaultPassword": "Estás utilizando la contraseña predeterminada para la interfaz web y el punto de acceso de emergencia. Esto potencialmente es inseguro.", - "DefaultPasswordLink": "Por favor, cambia la contraseña.", - "PinMappingIssue": "You are using a generic firmware image, but have not yet uploaded a file with device profiles (pin_mapping.json) or have not selected a profile defined there. Please refer to the documentation for details." + "DefaultPasswordLink": "Por favor, cambia la contraseña." }, "deviceadmin": { "DeviceManager": "Administrador de Dispositivos", diff --git a/lang/it.lang.json b/lang/it.lang.json index 8eefc649..eaafda63 100644 --- a/lang/it.lang.json +++ b/lang/it.lang.json @@ -45,9 +45,7 @@ "Refreshing": "Aggiorna", "Pull": "Trascina in basso per aggiornare", "Release": "Rilascia per aggiornare", - "Close": "Chiudi", - "Yes": "Yes", - "No": "No" + "Close": "Chiudi" }, "wait": { "NotReady": "OpenDTU is not yet ready", @@ -195,10 +193,7 @@ "FirmwareVersion": "Versione Firmware", "FirmwareBuildDate": "Data Firmware", "HardwarePartNumber": "Hardware Part Number", - "HardwareVersion": "Hardware Version", - "SupportsPowerDistributionLogic": "'Power Distribution Logic' supported", - "Yes": "@:base.Yes", - "No": "@:base.No" + "HardwareVersion": "Hardware Version" }, "gridprofile": { "NoInfo": "@:devinfo.NoInfo", @@ -642,8 +637,7 @@ "TimeSync": "La Data/Ora non sono state sincronizzate, ed in tal caso non è possibile eseguire richieste all'inverter. Questa condizione è normale appena avviato, tuttavia dopo un po' (>1 minuto), questa situazione potrebbe indicare un problema di accesso al server NTP.", "TimeSyncLink": "Controlla le impostazioni Data/Ora.", "DefaultPassword": "Stai usando la password di default per accedere all'interfaccia web e per la modalità Access Point di emergenza. Questo può portare ad un rischio di sicurezza.", - "DefaultPasswordLink": "Per favore cambia la password.", - "PinMappingIssue": "You are using a generic firmware image, but have not yet uploaded a file with device profiles (pin_mapping.json) or have not selected a profile defined there. Please refer to the documentation for details." + "DefaultPasswordLink": "Per favore cambia la password." }, "deviceadmin": { "DeviceManager": "Device-Manager", diff --git a/lib/CpuTemperature/src/CpuTemperature.cpp b/lib/CpuTemperature/src/CpuTemperature.cpp index 0ce68d5e..60e3fc7b 100644 --- a/lib/CpuTemperature/src/CpuTemperature.cpp +++ b/lib/CpuTemperature/src/CpuTemperature.cpp @@ -19,12 +19,6 @@ CpuTemperatureClass CpuTemperature; float CpuTemperatureClass::read() { -#ifdef CONFIG_IDF_TARGET_ESP32S2 - // Disabling temperature reading for ESP32-S2 models as it might lead to WDT resets. - // See: https://github.com/espressif/esp-idf/issues/8088 - return NAN; -#endif - std::lock_guard lock(_mutex); float temperature = NAN; diff --git a/lib/Hoymiles/src/Hoymiles.cpp b/lib/Hoymiles/src/Hoymiles.cpp index 806a4733..7f1a3c1f 100644 --- a/lib/Hoymiles/src/Hoymiles.cpp +++ b/lib/Hoymiles/src/Hoymiles.cpp @@ -57,7 +57,7 @@ void HoymilesClass::loop() } } - if (iv != nullptr && iv->getRadio()->isInitialized()) { + if (iv != nullptr && iv->getRadio()->isInitialized() && iv->getRadio()->isQueueEmpty()) { if (iv->getZeroValuesIfUnreachable() && !iv->isReachable()) { iv->Statistics()->zeroRuntimeData(); @@ -119,7 +119,6 @@ void HoymilesClass::loop() iv->sendGridOnProFileParaRequest(); } - _messageOutput->printf("Queue size - NRF: %" PRId32 " CMT: %" PRId32 "\r\n", _radioNrf->getQueueSize(), _radioCmt->getQueueSize()); _lastPoll = millis(); } @@ -230,7 +229,6 @@ void HoymilesClass::removeInverterBySerial(const uint64_t serial) for (uint8_t i = 0; i < _inverters.size(); i++) { if (_inverters[i]->serial() == serial) { std::lock_guard lock(_mutex); - _inverters[i]->getRadio()->removeCommands(_inverters[i].get()); _inverters.erase(_inverters.begin() + i); return; } diff --git a/lib/Hoymiles/src/HoymilesRadio.cpp b/lib/Hoymiles/src/HoymilesRadio.cpp index 896137e5..55281ab0 100644 --- a/lib/Hoymiles/src/HoymilesRadio.cpp +++ b/lib/Hoymiles/src/HoymilesRadio.cpp @@ -156,16 +156,6 @@ bool HoymilesRadio::isInitialized() const return _isInitialized; } -void HoymilesRadio::removeCommands(InverterAbstract* inv) -{ - _commandQueue.removeAllEntriesForInverter(inv); -} - -uint8_t HoymilesRadio::countSimilarCommands(std::shared_ptr cmd) -{ - return _commandQueue.countSimilarCommands(cmd); -} - bool HoymilesRadio::isIdle() const { return !_busyFlag; @@ -175,8 +165,3 @@ bool HoymilesRadio::isQueueEmpty() const { return _commandQueue.size() == 0; } - -uint32_t HoymilesRadio::getQueueSize() const -{ - return _commandQueue.size(); -} diff --git a/lib/Hoymiles/src/HoymilesRadio.h b/lib/Hoymiles/src/HoymilesRadio.h index 95dfe8b0..296b479b 100644 --- a/lib/Hoymiles/src/HoymilesRadio.h +++ b/lib/Hoymiles/src/HoymilesRadio.h @@ -1,17 +1,11 @@ // SPDX-License-Identifier: GPL-2.0-or-later #pragma once -#include "Arduino.h" #include "commands/CommandAbstract.h" -#include "queue/CommandQueue.h" #include "types.h" +#include #include - -#ifdef HOY_DEBUG_QUEUE -#define DEBUG_PRINT(fmt, args...) Serial.printf(fmt, ##args) -#else -#define DEBUG_PRINT(fmt, args...) /* Don't do anything in release builds */ -#endif +#include class HoymilesRadio { public: @@ -20,48 +14,11 @@ public: bool isIdle() const; bool isQueueEmpty() const; - uint32_t getQueueSize() const; bool isInitialized() const; - void removeCommands(InverterAbstract* inv); - uint8_t countSimilarCommands(std::shared_ptr cmd); - void enqueCommand(std::shared_ptr cmd) { - DEBUG_PRINT("Queue size before: %ld\r\n", _commandQueue.size()); - DEBUG_PRINT("Handling command %s with type %d\r\n", cmd.get()->getCommandName().c_str(), static_cast(cmd.get()->getQueueInsertType())); - switch (cmd.get()->getQueueInsertType()) { - case QueueInsertType::RemoveOldest: - _commandQueue.removeDuplicatedEntries(cmd); - break; - case QueueInsertType::ReplaceExistent: - // Checks if the queue already contains a command like the new one - // 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\r\n"); - _commandQueue.replaceEntries(cmd); - return; - } - break; - case QueueInsertType::RemoveNewest: - // 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\r\n"); - return; - } - break; - case QueueInsertType::AllowMultiple: - // Dont do anything, just fall through and insert the command. - break; - } - - // Push the command into the queue if we reach this position of the code - DEBUG_PRINT(" ... new entry will be appended\r\n"); _commandQueue.push(cmd); - - DEBUG_PRINT("Queue size after: %ld\r\n", _commandQueue.size()); } template @@ -81,7 +38,7 @@ protected: void handleReceivedPackage(); serial_u _dtuSerial; - CommandQueue _commandQueue; + ThreadSafeQueue> _commandQueue; bool _isInitialized = false; bool _busyFlag = false; diff --git a/lib/Hoymiles/src/commands/ActivePowerControlCommand.cpp b/lib/Hoymiles/src/commands/ActivePowerControlCommand.cpp index 4ceb69ab..4ce3c6e5 100644 --- a/lib/Hoymiles/src/commands/ActivePowerControlCommand.cpp +++ b/lib/Hoymiles/src/commands/ActivePowerControlCommand.cpp @@ -44,15 +44,7 @@ ActivePowerControlCommand::ActivePowerControlCommand(InverterAbstract* inv, cons String ActivePowerControlCommand::getCommandName() const { - char buffer[30]; - snprintf(buffer, sizeof(buffer), "ActivePowerControl (%02X)", getType()); - return buffer; -} - -bool ActivePowerControlCommand::areSameParameter(CommandAbstract* other) -{ - return CommandAbstract::areSameParameter(other) - && this->getType() == static_cast(other)->getType(); + return "ActivePowerControl"; } void ActivePowerControlCommand::setActivePowerLimit(const float limit, const PowerLimitControlType type) @@ -87,10 +79,7 @@ bool ActivePowerControlCommand::handleResponse(const fragment_t fragment[], cons } } _inv->SystemConfigPara()->setLastUpdateCommand(millis()); - std::shared_ptr cmd(std::shared_ptr(), this); - if (_inv->getRadio()->countSimilarCommands(cmd) == 1) { - _inv->SystemConfigPara()->setLastLimitCommandSuccess(CMD_OK); - } + _inv->SystemConfigPara()->setLastLimitCommandSuccess(CMD_OK); return true; } @@ -100,7 +89,7 @@ float ActivePowerControlCommand::getLimit() const return l / 10; } -PowerLimitControlType ActivePowerControlCommand::getType() const +PowerLimitControlType ActivePowerControlCommand::getType() { return (PowerLimitControlType)((static_cast(_payload[14]) << 8) | _payload[15]); } diff --git a/lib/Hoymiles/src/commands/ActivePowerControlCommand.h b/lib/Hoymiles/src/commands/ActivePowerControlCommand.h index 8425d248..375b278b 100644 --- a/lib/Hoymiles/src/commands/ActivePowerControlCommand.h +++ b/lib/Hoymiles/src/commands/ActivePowerControlCommand.h @@ -15,13 +15,11 @@ public: explicit ActivePowerControlCommand(InverterAbstract* inv, const uint64_t router_address = 0); virtual String getCommandName() const; - virtual QueueInsertType getQueueInsertType() const { return QueueInsertType::RemoveOldest; } - virtual bool areSameParameter(CommandAbstract* other); virtual bool handleResponse(const fragment_t fragment[], const uint8_t max_fragment_id); virtual void gotTimeout(); void setActivePowerLimit(const float limit, const PowerLimitControlType type = RelativNonPersistent); float getLimit() const; - PowerLimitControlType getType() const; + PowerLimitControlType getType(); }; diff --git a/lib/Hoymiles/src/commands/CommandAbstract.cpp b/lib/Hoymiles/src/commands/CommandAbstract.cpp index 6196a96f..16a7857e 100644 --- a/lib/Hoymiles/src/commands/CommandAbstract.cpp +++ b/lib/Hoymiles/src/commands/CommandAbstract.cpp @@ -138,9 +138,3 @@ uint8_t CommandAbstract::getMaxRetransmitCount() const { return MAX_RETRANSMIT_COUNT; } - -bool CommandAbstract::areSameParameter(CommandAbstract* other) -{ - return this->getCommandName() == other->getCommandName() - && this->_targetAddress == other->getTargetAddress(); -} diff --git a/lib/Hoymiles/src/commands/CommandAbstract.h b/lib/Hoymiles/src/commands/CommandAbstract.h index 64c0bcd4..c93cb341 100644 --- a/lib/Hoymiles/src/commands/CommandAbstract.h +++ b/lib/Hoymiles/src/commands/CommandAbstract.h @@ -11,18 +11,6 @@ class InverterAbstract; -enum class QueueInsertType { - AllowMultiple, - // Remove from beginning of the queue - RemoveOldest, - - // Don't insert command if it already exist - RemoveNewest, - - // Replace the existing entry in the queue by the one to be added - ReplaceExistent, -}; - class CommandAbstract { public: explicit CommandAbstract(InverterAbstract* inv, const uint64_t router_address = 0); @@ -58,10 +46,6 @@ public: // Sets the amount how often a missing fragment is re-requested if it was not available virtual uint8_t getMaxRetransmitCount() const; - // Returns whether multiple instances of this command are allowed in the command queue. - virtual QueueInsertType getQueueInsertType() const { return QueueInsertType::RemoveNewest; } - virtual bool areSameParameter(CommandAbstract* other); - protected: uint8_t _payload[RF_LEN]; uint8_t _payload_size; diff --git a/lib/Hoymiles/src/commands/PowerControlCommand.h b/lib/Hoymiles/src/commands/PowerControlCommand.h index a86b5678..d40c356d 100644 --- a/lib/Hoymiles/src/commands/PowerControlCommand.h +++ b/lib/Hoymiles/src/commands/PowerControlCommand.h @@ -8,7 +8,6 @@ public: explicit PowerControlCommand(InverterAbstract* inv, const uint64_t router_address = 0); virtual String getCommandName() const; - virtual QueueInsertType getQueueInsertType() const { return QueueInsertType::AllowMultiple; } virtual bool handleResponse(const fragment_t fragment[], const uint8_t max_fragment_id); virtual void gotTimeout(); diff --git a/lib/Hoymiles/src/inverters/HERF_1CH.cpp b/lib/Hoymiles/src/inverters/HERF_1CH.cpp index defd08b5..49531d99 100644 --- a/lib/Hoymiles/src/inverters/HERF_1CH.cpp +++ b/lib/Hoymiles/src/inverters/HERF_1CH.cpp @@ -30,9 +30,7 @@ static const byteAssign_t byteAssignment[] = { }; HERF_1CH::HERF_1CH(HoymilesRadio* radio, const uint64_t serial) - : HM_Abstract(radio, serial) -{ -} + : HM_Abstract(radio, serial) {}; bool HERF_1CH::isValidSerial(const uint64_t serial) { diff --git a/lib/Hoymiles/src/inverters/HERF_2CH.cpp b/lib/Hoymiles/src/inverters/HERF_2CH.cpp index 72acc8b4..f0216a64 100644 --- a/lib/Hoymiles/src/inverters/HERF_2CH.cpp +++ b/lib/Hoymiles/src/inverters/HERF_2CH.cpp @@ -37,9 +37,7 @@ static const byteAssign_t byteAssignment[] = { }; HERF_2CH::HERF_2CH(HoymilesRadio* radio, const uint64_t serial) - : HM_Abstract(radio, serial) -{ -} + : HM_Abstract(radio, serial) {}; bool HERF_2CH::isValidSerial(const uint64_t serial) { @@ -50,7 +48,7 @@ bool HERF_2CH::isValidSerial(const uint64_t serial) String HERF_2CH::typeName() const { - return "HERF-600/800-2T"; + return "HERF-800-2T"; } const byteAssign_t* HERF_2CH::getByteAssignment() const diff --git a/lib/Hoymiles/src/inverters/HERF_4CH.cpp b/lib/Hoymiles/src/inverters/HERF_4CH.cpp index a3484734..dcd01b6d 100644 --- a/lib/Hoymiles/src/inverters/HERF_4CH.cpp +++ b/lib/Hoymiles/src/inverters/HERF_4CH.cpp @@ -5,9 +5,7 @@ #include "HERF_4CH.h" HERF_4CH::HERF_4CH(HoymilesRadio* radio, const uint64_t serial) - : HM_4CH(radio, serial) -{ -} + : HM_4CH(radio, serial) {}; bool HERF_4CH::isValidSerial(const uint64_t serial) { diff --git a/lib/Hoymiles/src/inverters/HMS_1CH.cpp b/lib/Hoymiles/src/inverters/HMS_1CH.cpp index 3536763f..2c7e3857 100644 --- a/lib/Hoymiles/src/inverters/HMS_1CH.cpp +++ b/lib/Hoymiles/src/inverters/HMS_1CH.cpp @@ -29,9 +29,7 @@ static const byteAssign_t byteAssignment[] = { }; HMS_1CH::HMS_1CH(HoymilesRadio* radio, const uint64_t serial) - : HMS_Abstract(radio, serial) -{ -} + : HMS_Abstract(radio, serial) {}; bool HMS_1CH::isValidSerial(const uint64_t serial) { diff --git a/lib/Hoymiles/src/inverters/HMS_1CHv2.cpp b/lib/Hoymiles/src/inverters/HMS_1CHv2.cpp index 965e2c35..d79d2c1d 100644 --- a/lib/Hoymiles/src/inverters/HMS_1CHv2.cpp +++ b/lib/Hoymiles/src/inverters/HMS_1CHv2.cpp @@ -29,20 +29,18 @@ static const byteAssign_t byteAssignment[] = { }; HMS_1CHv2::HMS_1CHv2(HoymilesRadio* radio, const uint64_t serial) - : HMS_Abstract(radio, serial) -{ -} + : HMS_Abstract(radio, serial) {}; bool HMS_1CHv2::isValidSerial(const uint64_t serial) { // serial >= 0x112500000000 && serial <= 0x1125ffffffff uint16_t preSerial = (serial >> 32) & 0xffff; - return preSerial == 0x1125 || preSerial == 0x1400; + return preSerial == 0x1125; } String HMS_1CHv2::typeName() const { - return "HMS-450/500-1T v2"; + return "HMS-500-1T v2"; } const byteAssign_t* HMS_1CHv2::getByteAssignment() const diff --git a/lib/Hoymiles/src/inverters/HMS_2CH.cpp b/lib/Hoymiles/src/inverters/HMS_2CH.cpp index 65631e81..4cbc686c 100644 --- a/lib/Hoymiles/src/inverters/HMS_2CH.cpp +++ b/lib/Hoymiles/src/inverters/HMS_2CH.cpp @@ -36,9 +36,7 @@ static const byteAssign_t byteAssignment[] = { }; HMS_2CH::HMS_2CH(HoymilesRadio* radio, const uint64_t serial) - : HMS_Abstract(radio, serial) -{ -} + : HMS_Abstract(radio, serial) {}; bool HMS_2CH::isValidSerial(const uint64_t serial) { diff --git a/lib/Hoymiles/src/inverters/HMS_4CH.cpp b/lib/Hoymiles/src/inverters/HMS_4CH.cpp index a8338015..b3cf1f38 100644 --- a/lib/Hoymiles/src/inverters/HMS_4CH.cpp +++ b/lib/Hoymiles/src/inverters/HMS_4CH.cpp @@ -50,9 +50,7 @@ static const byteAssign_t byteAssignment[] = { }; HMS_4CH::HMS_4CH(HoymilesRadio* radio, const uint64_t serial) - : HMS_Abstract(radio, serial) -{ -} + : HMS_Abstract(radio, serial) {}; bool HMS_4CH::isValidSerial(const uint64_t serial) { @@ -75,10 +73,3 @@ uint8_t HMS_4CH::getByteAssignmentSize() const { return sizeof(byteAssignment) / sizeof(byteAssignment[0]); } - -bool HMS_4CH::supportsPowerDistributionLogic() -{ - // This feature was added in inverter firmware version 01.01.12 and - // will limit the AC output instead of limiting the DC inputs. - return DevInfo()->getFwBuildVersion() >= 10112U; -} diff --git a/lib/Hoymiles/src/inverters/HMS_4CH.h b/lib/Hoymiles/src/inverters/HMS_4CH.h index 545f91a7..9d49de07 100644 --- a/lib/Hoymiles/src/inverters/HMS_4CH.h +++ b/lib/Hoymiles/src/inverters/HMS_4CH.h @@ -10,5 +10,4 @@ public: String typeName() const; const byteAssign_t* getByteAssignment() const; uint8_t getByteAssignmentSize() const; - bool supportsPowerDistributionLogic() final; -}; +}; \ No newline at end of file diff --git a/lib/Hoymiles/src/inverters/HMT_4CH.cpp b/lib/Hoymiles/src/inverters/HMT_4CH.cpp index c81a97f8..c84eff47 100644 --- a/lib/Hoymiles/src/inverters/HMT_4CH.cpp +++ b/lib/Hoymiles/src/inverters/HMT_4CH.cpp @@ -59,9 +59,7 @@ static const byteAssign_t byteAssignment[] = { }; HMT_4CH::HMT_4CH(HoymilesRadio* radio, const uint64_t serial) - : HMT_Abstract(radio, serial) -{ -} + : HMT_Abstract(radio, serial) {}; bool HMT_4CH::isValidSerial(const uint64_t serial) { diff --git a/lib/Hoymiles/src/inverters/HMT_6CH.cpp b/lib/Hoymiles/src/inverters/HMT_6CH.cpp index 5029f758..2c3dd5f3 100644 --- a/lib/Hoymiles/src/inverters/HMT_6CH.cpp +++ b/lib/Hoymiles/src/inverters/HMT_6CH.cpp @@ -73,9 +73,7 @@ static const byteAssign_t byteAssignment[] = { }; HMT_6CH::HMT_6CH(HoymilesRadio* radio, const uint64_t serial) - : HMT_Abstract(radio, serial) -{ -} + : HMT_Abstract(radio, serial) {}; bool HMT_6CH::isValidSerial(const uint64_t serial) { diff --git a/lib/Hoymiles/src/inverters/HMT_Abstract.cpp b/lib/Hoymiles/src/inverters/HMT_Abstract.cpp index 095b3d2e..50c895cc 100644 --- a/lib/Hoymiles/src/inverters/HMT_Abstract.cpp +++ b/lib/Hoymiles/src/inverters/HMT_Abstract.cpp @@ -12,7 +12,7 @@ HMT_Abstract::HMT_Abstract(HoymilesRadio* radio, const uint64_t serial) : HM_Abstract(radio, serial) { EventLog()->setMessageType(AlarmMessageType_t::HMT); -} +}; bool HMT_Abstract::sendChangeChannelRequest() { @@ -26,4 +26,4 @@ bool HMT_Abstract::sendChangeChannelRequest() _radio->enqueCommand(cmdChannel); return true; -} +}; diff --git a/lib/Hoymiles/src/inverters/HM_1CH.cpp b/lib/Hoymiles/src/inverters/HM_1CH.cpp index 114a5960..eef82c5c 100644 --- a/lib/Hoymiles/src/inverters/HM_1CH.cpp +++ b/lib/Hoymiles/src/inverters/HM_1CH.cpp @@ -29,9 +29,7 @@ static const byteAssign_t byteAssignment[] = { }; HM_1CH::HM_1CH(HoymilesRadio* radio, const uint64_t serial) - : HM_Abstract(radio, serial) -{ -} + : HM_Abstract(radio, serial) {}; bool HM_1CH::isValidSerial(const uint64_t serial) { diff --git a/lib/Hoymiles/src/inverters/HM_2CH.cpp b/lib/Hoymiles/src/inverters/HM_2CH.cpp index 65b947b5..91228ff3 100644 --- a/lib/Hoymiles/src/inverters/HM_2CH.cpp +++ b/lib/Hoymiles/src/inverters/HM_2CH.cpp @@ -37,9 +37,7 @@ static const byteAssign_t byteAssignment[] = { }; HM_2CH::HM_2CH(HoymilesRadio* radio, const uint64_t serial) - : HM_Abstract(radio, serial) -{ -} + : HM_Abstract(radio, serial) {}; bool HM_2CH::isValidSerial(const uint64_t serial) { diff --git a/lib/Hoymiles/src/inverters/HM_4CH.cpp b/lib/Hoymiles/src/inverters/HM_4CH.cpp index e2683061..45ebab40 100644 --- a/lib/Hoymiles/src/inverters/HM_4CH.cpp +++ b/lib/Hoymiles/src/inverters/HM_4CH.cpp @@ -50,9 +50,7 @@ static const byteAssign_t byteAssignment[] = { }; HM_4CH::HM_4CH(HoymilesRadio* radio, const uint64_t serial) - : HM_Abstract(radio, serial) -{ -} + : HM_Abstract(radio, serial) {}; bool HM_4CH::isValidSerial(const uint64_t serial) { diff --git a/lib/Hoymiles/src/inverters/HM_Abstract.cpp b/lib/Hoymiles/src/inverters/HM_Abstract.cpp index d58324da..324f6a27 100644 --- a/lib/Hoymiles/src/inverters/HM_Abstract.cpp +++ b/lib/Hoymiles/src/inverters/HM_Abstract.cpp @@ -14,9 +14,7 @@ #include "commands/SystemConfigParaCommand.h" HM_Abstract::HM_Abstract(HoymilesRadio* radio, const uint64_t serial) - : InverterAbstract(radio, serial) -{ -} + : InverterAbstract(radio, serial) {}; bool HM_Abstract::sendStatsRequest() { @@ -219,8 +217,3 @@ bool HM_Abstract::sendGridOnProFileParaRequest() return true; } - -bool HM_Abstract::supportsPowerDistributionLogic() -{ - return false; -} diff --git a/lib/Hoymiles/src/inverters/HM_Abstract.h b/lib/Hoymiles/src/inverters/HM_Abstract.h index 9f5c4b31..491149dc 100644 --- a/lib/Hoymiles/src/inverters/HM_Abstract.h +++ b/lib/Hoymiles/src/inverters/HM_Abstract.h @@ -16,7 +16,6 @@ public: bool sendRestartControlRequest(); bool resendPowerControlRequest(); bool sendGridOnProFileParaRequest(); - bool supportsPowerDistributionLogic() override; private: uint8_t _lastAlarmLogCnt = 0; @@ -24,4 +23,4 @@ private: PowerLimitControlType _activePowerControlType = PowerLimitControlType::AbsolutNonPersistent; uint8_t _powerState = 1; -}; +}; \ No newline at end of file diff --git a/lib/Hoymiles/src/inverters/InverterAbstract.h b/lib/Hoymiles/src/inverters/InverterAbstract.h index 10da4d69..29fba12f 100644 --- a/lib/Hoymiles/src/inverters/InverterAbstract.h +++ b/lib/Hoymiles/src/inverters/InverterAbstract.h @@ -103,9 +103,6 @@ public: virtual bool sendChangeChannelRequest(); virtual bool sendGridOnProFileParaRequest() = 0; - // This feature will limit the AC output instead of limiting the DC inputs. - virtual bool supportsPowerDistributionLogic() = 0; - HoymilesRadio* getRadio(); AlarmLogParser* EventLog(); diff --git a/lib/Hoymiles/src/inverters/README.md b/lib/Hoymiles/src/inverters/README.md index 93878b13..b5544532 100644 --- a/lib/Hoymiles/src/inverters/README.md +++ b/lib/Hoymiles/src/inverters/README.md @@ -1,16 +1,16 @@ # Class overview | Class | Models | Serial range | -| ------------- | --------------------------- | ---------------- | +| --------------| --------------------------- | ------------- -- | | HM_1CH | HM-300/350/400-1T | 1121 | | HM_2CH | HM-600/700/800-2T | 1141 | | HM_4CH | HM-1000/1200/1500-4T | 1161 | | HMS_1CH | HMS-300/350/400/450/500-1T | 1124 | -| HMS_1CHv2 | HMS-450/500-1T v2 | 1125, 1400 | +| HMS_1CHv2 | HMS-500-1T v2 | 1125 | | HMS_2CH | HMS-600/700/800/900/1000-2T | 1143, 1144, 1410 | | HMS_4CH | HMS-1600/1800/2000-4T | 1164 | | HMT_4CH | HMT-1600/1800/2000-4T | 1361 | | HMT_6CH | HMT-1800/2250-6T | 1382 | | HERF_1CH | HERF 300 | 2841 | -| HERF_2CH | HERF 600/800 | 2821 | +| HERF_2CH | HERF 800 | 2821 | | HERF_4CH | HERF 1800 | 2801 | diff --git a/lib/Hoymiles/src/parser/DevInfoParser.cpp b/lib/Hoymiles/src/parser/DevInfoParser.cpp index b0bd11dd..fb0fe3e8 100644 --- a/lib/Hoymiles/src/parser/DevInfoParser.cpp +++ b/lib/Hoymiles/src/parser/DevInfoParser.cpp @@ -81,7 +81,6 @@ const devInfo_t devInfo[] = { { { 0x10, 0x33, 0x11, ALL }, 1800, "HMT-1800-6T" }, // 01 { { 0x10, 0x33, 0x31, ALL }, 2250, "HMT-2250-6T" }, // 01 - { { 0xF1, 0x01, 0x10, ALL }, 600, "HERF-600" }, // 00 { { 0xF1, 0x01, 0x14, ALL }, 800, "HERF-800" }, // 00 { { 0xF1, 0x01, 0x24, ALL }, 1600, "HERF-1600" }, // 00 { { 0xF1, 0x01, 0x22, ALL }, 1800, "HERF-1800" }, // 00 diff --git a/lib/Hoymiles/src/queue/CommandQueue.cpp b/lib/Hoymiles/src/queue/CommandQueue.cpp deleted file mode 100644 index e4b6069a..00000000 --- a/lib/Hoymiles/src/queue/CommandQueue.cpp +++ /dev/null @@ -1,51 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -/* - * Copyright (C) 2024 Thomas Basler and others - */ -#include "CommandQueue.h" -#include "../inverters/InverterAbstract.h" -#include - -void CommandQueue::removeAllEntriesForInverter(InverterAbstract* inv) -{ - std::lock_guard lock(_mutex); - - auto it = std::remove_if(_queue.begin(), _queue.end(), - [&inv](std::shared_ptr v) -> bool { return v.get()->getTargetAddress() == inv->serial(); }); - _queue.erase(it, _queue.end()); -} - -void CommandQueue::removeDuplicatedEntries(std::shared_ptr cmd) -{ - std::lock_guard lock(_mutex); - - auto it = std::remove_if(_queue.begin() + 1, _queue.end(), - [&cmd](std::shared_ptr v) -> bool { - return cmd->areSameParameter(v.get()) - && cmd.get()->getQueueInsertType() == QueueInsertType::RemoveOldest; - }); - _queue.erase(it, _queue.end()); -} - -void CommandQueue::replaceEntries(std::shared_ptr cmd) -{ - std::lock_guard lock(_mutex); - - std::replace_if(_queue.begin() + 1, _queue.end(), - [&cmd](std::shared_ptr v)-> bool { - return cmd.get()->getQueueInsertType() == QueueInsertType::ReplaceExistent - && cmd->areSameParameter(v.get()); - }, - cmd - ); -} - -uint8_t CommandQueue::countSimilarCommands(std::shared_ptr cmd) -{ - std::lock_guard lock(_mutex); - - return std::count_if(_queue.begin(), _queue.end(), - [&cmd](std::shared_ptr v) -> bool { - return cmd->areSameParameter(v.get()); - }); -} diff --git a/lib/Hoymiles/src/queue/CommandQueue.h b/lib/Hoymiles/src/queue/CommandQueue.h deleted file mode 100644 index f27aeaa3..00000000 --- a/lib/Hoymiles/src/queue/CommandQueue.h +++ /dev/null @@ -1,17 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -#pragma once - -#include "../commands/CommandAbstract.h" -#include -#include - -class InverterAbstract; - -class CommandQueue : public ThreadSafeQueue> { -public: - void removeAllEntriesForInverter(InverterAbstract* inv); - void removeDuplicatedEntries(std::shared_ptr cmd); - void replaceEntries(std::shared_ptr cmd); - - uint8_t countSimilarCommands(std::shared_ptr cmd); -}; diff --git a/lib/ThreadSafeQueue/src/ThreadSafeQueue.h b/lib/ThreadSafeQueue/src/ThreadSafeQueue.h index 2569e630..9a195c60 100644 --- a/lib/ThreadSafeQueue/src/ThreadSafeQueue.h +++ b/lib/ThreadSafeQueue/src/ThreadSafeQueue.h @@ -3,7 +3,7 @@ #include #include -#include +#include template class ThreadSafeQueue { @@ -33,14 +33,14 @@ public: return {}; } T tmp = _queue.front(); - _queue.pop_front(); + _queue.pop(); return tmp; } void push(const T& item) { std::lock_guard lock(_mutex); - _queue.push_back(item); + _queue.push(item); } T front() @@ -49,10 +49,6 @@ public: return _queue.front(); } -protected: - std::deque _queue; - mutable std::mutex _mutex; - private: // Moved out of public interface to prevent races between this // and pop(). @@ -60,4 +56,7 @@ private: { return _queue.empty(); } + + std::queue _queue; + mutable std::mutex _mutex; }; diff --git a/pio-scripts/auto_firmware_version.py b/pio-scripts/auto_firmware_version.py index 2d2f3be7..c1fa9771 100644 --- a/pio-scripts/auto_firmware_version.py +++ b/pio-scripts/auto_firmware_version.py @@ -49,7 +49,7 @@ def get_firmware_specifier_build_flag(): build_version = get_build_version() build_flag = "-D AUTO_GIT_HASH=\\\"" + build_version + "\\\"" build_branch = get_build_branch() - build_flag += " -D AUTO_GIT_BRANCH=\\\"" + build_branch + "\\\"" + build_flag += " -D AUTO_GIT_BRANCH=\\\"" + branch_name + "\\\"" return (build_flag) diff --git a/pio-scripts/create_factory_bin.py b/pio-scripts/create_factory_bin.py index e9647d98..ec8274e2 100644 --- a/pio-scripts/create_factory_bin.py +++ b/pio-scripts/create_factory_bin.py @@ -130,5 +130,4 @@ def esp32_create_combined_bin(source, target, env): esptool.main(cmd) -from SCons.Script import AlwaysBuild -AlwaysBuild(env.AddPostAction("buildprog", esp32_create_combined_bin)) +env.AddPostAction("buildprog", esp32_create_combined_bin) diff --git a/platformio.ini b/platformio.ini index dc020120..c1afca11 100644 --- a/platformio.ini +++ b/platformio.ini @@ -30,7 +30,6 @@ build_flags = -DCONFIG_ASYNC_TCP_EVENT_QUEUE_SIZE=128 -DCONFIG_ASYNC_TCP_QUEUE_SIZE=128 -DEMC_TASK_STACK_SIZE=6400 -; -DHOY_DEBUG_QUEUE -Wall -Wextra -Wunused -Wmisleading-indentation -Wduplicated-cond -Wlogical-op -Wnull-dereference ; Have to remove -Werror because of ; https://github.com/espressif/arduino-esp32/issues/9044 and @@ -42,10 +41,10 @@ build_unflags = -std=gnu++11 lib_deps = - mathieucarbou/ESPAsyncWebServer @ 3.6.0 - bblanchon/ArduinoJson @ 7.3.0 + mathieucarbou/ESPAsyncWebServer @ 3.3.22 + bblanchon/ArduinoJson @ 7.2.0 https://github.com/bertmelis/espMqttClient.git#v1.7.0 - nrf24/RF24 @ 1.4.11 + nrf24/RF24 @ 1.4.10 olikraus/U8g2 @ 2.36.2 buelowp/sunset @ 1.1.7 arkhipenko/TaskScheduler @ 3.8.5 @@ -79,7 +78,6 @@ upload_protocol = esptool [env:generic_esp32] board = esp32dev build_flags = ${env.build_flags} - -DPIN_MAPPING_REQUIRED=1 [env:generic_esp32_16mb_psram] @@ -88,7 +86,6 @@ board_build.flash_mode = qio board_build.partitions = partitions_custom_16mb.csv board_upload.flash_size = 16MB build_flags = ${env.build_flags} - -DPIN_MAPPING_REQUIRED=1 -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue @@ -97,7 +94,6 @@ build_flags = ${env.build_flags} board = esp32-c3-devkitc-02 custom_patches = ${env.custom_patches} build_flags = ${env.build_flags} - -DPIN_MAPPING_REQUIRED=1 [env:generic_esp32c3_usb] @@ -106,13 +102,11 @@ custom_patches = ${env.custom_patches} build_flags = ${env.build_flags} -DARDUINO_USB_MODE=1 -DARDUINO_USB_CDC_ON_BOOT=1 - -DPIN_MAPPING_REQUIRED=1 [env:generic_esp32s3] board = esp32-s3-devkitc-1 build_flags = ${env.build_flags} - -DPIN_MAPPING_REQUIRED=1 [env:generic_esp32s3_usb] @@ -121,7 +115,6 @@ upload_protocol = esp-builtin build_flags = ${env.build_flags} -DARDUINO_USB_MODE=1 -DARDUINO_USB_CDC_ON_BOOT=1 - -DPIN_MAPPING_REQUIRED=1 [env:generic] diff --git a/src/Configuration.cpp b/src/Configuration.cpp index 62480c9d..dd8ff158 100644 --- a/src/Configuration.cpp +++ b/src/Configuration.cpp @@ -353,8 +353,6 @@ void ConfigurationClass::migrate() return; } - Utils::skipBom(f); - JsonDocument doc; // Deserialize the JSON document diff --git a/src/MqttHandleDtu.cpp b/src/MqttHandleDtu.cpp index 63aec7e1..df025f12 100644 --- a/src/MqttHandleDtu.cpp +++ b/src/MqttHandleDtu.cpp @@ -32,7 +32,7 @@ void MqttHandleDtuClass::loop() return; } - MqttSettings.publish("dtu/uptime", String(esp_timer_get_time() / 1000000)); + MqttSettings.publish("dtu/uptime", String(millis() / 1000)); MqttSettings.publish("dtu/ip", NetworkSettings.localIP().toString()); MqttSettings.publish("dtu/hostname", NetworkSettings.getHostname()); MqttSettings.publish("dtu/heap/size", String(ESP.getHeapSize())); diff --git a/src/MqttHandleHass.cpp b/src/MqttHandleHass.cpp index c39485dd..6491c9ba 100644 --- a/src/MqttHandleHass.cpp +++ b/src/MqttHandleHass.cpp @@ -70,7 +70,6 @@ void MqttHandleHassClass::publishConfig() publishDtuSensor("Yield Total", "ac/yieldtotal", "kWh", "", DEVICE_CLS_ENERGY, STATE_CLS_TOTAL_INCREASING, CATEGORY_NONE); publishDtuSensor("Yield Day", "ac/yieldday", "Wh", "", DEVICE_CLS_ENERGY, STATE_CLS_TOTAL_INCREASING, CATEGORY_NONE); publishDtuSensor("AC Power", "ac/power", "W", "", DEVICE_CLS_PWR, STATE_CLS_MEASUREMENT, CATEGORY_NONE); - publishDtuSensor("DC Power", "dc/power", "W", "", DEVICE_CLS_PWR, STATE_CLS_MEASUREMENT, CATEGORY_NONE); publishDtuBinarySensor("Status", config.Mqtt.Lwt.Topic, config.Mqtt.Lwt.Value_Online, config.Mqtt.Lwt.Value_Offline, DEVICE_CLS_CONNECTIVITY, STATE_CLS_NONE, CATEGORY_DIAGNOSTIC); diff --git a/src/MqttSettings.cpp b/src/MqttSettings.cpp index 39e76e22..c547e0db 100644 --- a/src/MqttSettings.cpp +++ b/src/MqttSettings.cpp @@ -179,7 +179,7 @@ String MqttSettingsClass::getPrefix() const return Configuration.get().Mqtt.Topic; } -String MqttSettingsClass::getClientId() const +String MqttSettingsClass::getClientId() { String clientId = Configuration.get().Mqtt.ClientId; if (clientId == "") { diff --git a/src/NetworkSettings.cpp b/src/NetworkSettings.cpp index f545ac37..cb3af62e 100644 --- a/src/NetworkSettings.cpp +++ b/src/NetworkSettings.cpp @@ -287,7 +287,8 @@ void NetworkSettingsClass::applyConfig() MessageOutput.print("new credentials... "); WiFi.begin( Configuration.get().WiFi.Ssid, - Configuration.get().WiFi.Password); + Configuration.get().WiFi.Password, + WIFI_ALL_CHANNEL_SCAN); } else { MessageOutput.print("existing credentials... "); WiFi.begin(); diff --git a/src/PinMapping.cpp b/src/PinMapping.cpp index b0ba6647..1a721e04 100644 --- a/src/PinMapping.cpp +++ b/src/PinMapping.cpp @@ -212,8 +212,6 @@ bool PinMappingClass::init(const String& deviceMapping) for (uint8_t i = 0; i < doc.size(); i++) { String devName = doc[i]["name"] | ""; if (devName == deviceMapping) { - _mappingSelected = true; - strlcpy(_pinMapping.name, devName.c_str(), sizeof(_pinMapping.name)); _pinMapping.nrf24_clk = doc[i]["nrf24"]["clk"] | HOYMILES_PIN_SCLK; _pinMapping.nrf24_cs = doc[i]["nrf24"]["cs"] | HOYMILES_PIN_CS; diff --git a/src/WebApi_device.cpp b/src/WebApi_device.cpp index a8deb4ed..be665d8b 100644 --- a/src/WebApi_device.cpp +++ b/src/WebApi_device.cpp @@ -129,14 +129,10 @@ void WebApiDeviceClass::onDeviceAdminPost(AsyncWebServerRequest* request) return; } - bool performRestart = false; - { auto guard = Configuration.getWriteGuard(); auto& config = guard.getConfig(); - performRestart = root["curPin"]["name"].as() != config.Dev_PinMapping; - strlcpy(config.Dev_PinMapping, root["curPin"]["name"].as().c_str(), sizeof(config.Dev_PinMapping)); config.Display.Rotation = root["display"]["rotation"].as(); config.Display.PowerSafe = root["display"]["power_safe"].as(); @@ -153,6 +149,7 @@ void WebApiDeviceClass::onDeviceAdminPost(AsyncWebServerRequest* request) } auto const& config = Configuration.get(); + bool performRestart = root["curPin"]["name"].as() != config.Dev_PinMapping; Display.setDiagramMode(static_cast(config.Display.Diagram.Mode)); Display.setOrientation(config.Display.Rotation); diff --git a/src/WebApi_devinfo.cpp b/src/WebApi_devinfo.cpp index 45078ffe..449cd177 100644 --- a/src/WebApi_devinfo.cpp +++ b/src/WebApi_devinfo.cpp @@ -35,7 +35,6 @@ void WebApiDevInfoClass::onDevInfoStatus(AsyncWebServerRequest* request) root["hw_model_name"] = inv->DevInfo()->getHwModelName(); root["max_power"] = inv->DevInfo()->getMaxPower(); root["fw_build_datetime"] = inv->DevInfo()->getFwBuildDateTimeStr(); - root["pdl_supported"] = inv->supportsPowerDistributionLogic(); } WebApi.sendJsonResponse(request, response, __FUNCTION__, __LINE__); diff --git a/src/WebApi_firmware.cpp b/src/WebApi_firmware.cpp index 2796991d..b179eb10 100644 --- a/src/WebApi_firmware.cpp +++ b/src/WebApi_firmware.cpp @@ -5,10 +5,11 @@ #include "WebApi_firmware.h" #include "Configuration.h" #include "RestartHelper.h" +#include "Update.h" +#include "Utils.h" #include "WebApi.h" #include "helper.h" #include -#include void WebApiFirmwareClass::init(AsyncWebServer& server, Scheduler& scheduler) { diff --git a/src/WebApi_ws_live.cpp b/src/WebApi_ws_live.cpp index c24a77f0..a50a792a 100644 --- a/src/WebApi_ws_live.cpp +++ b/src/WebApi_ws_live.cpp @@ -10,10 +10,6 @@ #include "defaults.h" #include -#ifndef PIN_MAPPING_REQUIRED - #define PIN_MAPPING_REQUIRED 0 -#endif - WebApiWsLiveClass::WebApiWsLiveClass() : _ws("/livedata") , _wsCleanupTask(1 * TASK_SECOND, TASK_FOREVER, std::bind(&WebApiWsLiveClass::wsCleanupTaskCb, this)) @@ -129,8 +125,6 @@ void WebApiWsLiveClass::generateCommonJsonResponse(JsonVariant& root) hintObj["time_sync"] = !getLocalTime(&timeinfo, 5); hintObj["radio_problem"] = (Hoymiles.getRadioNrf()->isInitialized() && (!Hoymiles.getRadioNrf()->isConnected() || !Hoymiles.getRadioNrf()->isPVariant())) || (Hoymiles.getRadioCmt()->isInitialized() && (!Hoymiles.getRadioCmt()->isConnected())); hintObj["default_password"] = strcmp(Configuration.get().Security.Password, ACCESS_POINT_PASSWORD) == 0; - - hintObj["pin_mapping_issue"] = PIN_MAPPING_REQUIRED && !PinMapping.isMappingSelected(); } void WebApiWsLiveClass::generateInverterCommonJsonResponse(JsonObject& root, std::shared_ptr inv) diff --git a/src/main.cpp b/src/main.cpp index b2a4a391..0851b19b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -88,7 +88,7 @@ void setup() // Load PinMapping MessageOutput.print("Reading PinMapping... "); - if (PinMapping.init(Configuration.get().Dev_PinMapping)) { + if (PinMapping.init(String(Configuration.get().Dev_PinMapping))) { MessageOutput.print("found valid mapping "); } else { MessageOutput.print("using default config "); @@ -96,7 +96,7 @@ void setup() const auto& pin = PinMapping.get(); MessageOutput.println("done"); - // Initialize Network + // Initialize WiFi MessageOutput.print("Initialize Network... "); NetworkSettings.init(scheduler); MessageOutput.println("done"); diff --git a/webapp/package.json b/webapp/package.json index d057a7f1..a646f6c0 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -17,35 +17,35 @@ "bootstrap": "^5.3.3", "bootstrap-icons-vue": "^1.11.3", "mitt": "^3.0.1", - "sortablejs": "^1.15.6", + "sortablejs": "^1.15.3", "spark-md5": "^3.0.2", - "vue": "^3.5.13", - "vue-i18n": "11.0.1", - "vue-router": "^4.5.0" + "vue": "^3.5.12", + "vue-i18n": "10.0.4", + "vue-router": "^4.4.5" }, "devDependencies": { - "@intlify/unplugin-vue-i18n": "^6.0.3", + "@intlify/unplugin-vue-i18n": "^5.2.0", "@tsconfig/node22": "^22.0.0", "@types/bootstrap": "^5.2.10", - "@types/node": "^22.10.6", + "@types/node": "^22.9.0", "@types/pulltorefreshjs": "^0.1.7", "@types/sortablejs": "^1.15.8", "@types/spark-md5": "^3.0.5", - "@vitejs/plugin-vue": "^5.2.1", - "@vue/eslint-config-typescript": "^14.3.0", - "@vue/tsconfig": "^0.7.0", - "eslint": "^9.18.0", - "eslint-plugin-vue": "^9.32.0", + "@vitejs/plugin-vue": "^5.1.4", + "@vue/eslint-config-typescript": "^14.1.3", + "@vue/tsconfig": "^0.5.1", + "eslint": "^9.14.0", + "eslint-plugin-vue": "^9.30.0", "npm-run-all": "^4.1.5", - "prettier": "^3.4.2", + "prettier": "^3.3.3", "pulltorefreshjs": "^0.1.22", "sass": "=1.77.6", - "terser": "^5.37.0", - "typescript": "~5.6.3", - "vite": "^6.0.7", + "terser": "^5.36.0", + "typescript": "^5.6.3", + "vite": "^5.4.10", "vite-plugin-compression": "^0.5.1", "vite-plugin-css-injected-by-js": "^3.5.2", - "vue-tsc": "^2.2.0" + "vue-tsc": "^2.1.10" }, "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" } diff --git a/webapp/src/components/BasePage.vue b/webapp/src/components/BasePage.vue index d94e3219..4ac0f80e 100644 --- a/webapp/src/components/BasePage.vue +++ b/webapp/src/components/BasePage.vue @@ -1,9 +1,9 @@ @@ -59,7 +53,6 @@