From 7f267ff2fb7c06815a6c28ac00745d4cbd9ed9eb Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Thu, 1 Jun 2023 23:30:13 +0200 Subject: [PATCH 01/39] Fix: Lint Error: Almost always, snprintf is better than strcpy --- src/WebApi_ntp.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/WebApi_ntp.cpp b/src/WebApi_ntp.cpp index 26524c2af..67b30851d 100644 --- a/src/WebApi_ntp.cpp +++ b/src/WebApi_ntp.cpp @@ -55,14 +55,14 @@ void WebApiNtpClass::onNtpStatus(AsyncWebServerRequest* request) if (SunPosition.sunriseTime(&timeinfo)) { strftime(timeStringBuff, sizeof(timeStringBuff), "%A, %B %d %Y %H:%M:%S", &timeinfo); } else { - strcpy(timeStringBuff, "--"); + snprintf(timeStringBuff, sizeof(timeStringBuff), "--"); } root["sun_risetime"] = timeStringBuff; if (SunPosition.sunsetTime(&timeinfo)) { strftime(timeStringBuff, sizeof(timeStringBuff), "%A, %B %d %Y %H:%M:%S", &timeinfo); } else { - strcpy(timeStringBuff, "--"); + snprintf(timeStringBuff, sizeof(timeStringBuff), "--"); } root["sun_settime"] = timeStringBuff; From c5a31de5a82f05ed997038324941e975659eaa4e Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Sat, 3 Jun 2023 11:54:23 +0200 Subject: [PATCH 02/39] First try to output some dBm info for the NRF module --- lib/Hoymiles/src/HoymilesRadio_NRF.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/Hoymiles/src/HoymilesRadio_NRF.cpp b/lib/Hoymiles/src/HoymilesRadio_NRF.cpp index 88b7dbb63..66b9691e9 100644 --- a/lib/Hoymiles/src/HoymilesRadio_NRF.cpp +++ b/lib/Hoymiles/src/HoymilesRadio_NRF.cpp @@ -55,6 +55,7 @@ void HoymilesRadio_NRF::loop() memset(f.fragment, 0xcc, MAX_RF_PAYLOAD_SIZE); f.len = _radio->getDynamicPayloadSize(); f.channel = _radio->getChannel(); + f.rssi = _radio->testRPD() ? -30 : -80; if (f.len > MAX_RF_PAYLOAD_SIZE) f.len = MAX_RF_PAYLOAD_SIZE; _radio->read(f.fragment, f.len); @@ -76,7 +77,9 @@ void HoymilesRadio_NRF::loop() if (nullptr != inv) { // Save packet in inverter rx buffer Hoymiles.getMessageOutput()->printf("RX Channel: %d --> ", f.channel); - dumpBuf(f.fragment, f.len); + dumpBuf(f.fragment, f.len, false); + Hoymiles.getMessageOutput()->printf("| %d dBm\r\n", f.rssi); + inv->addRxFragment(f.fragment, f.len); } else { Hoymiles.getMessageOutput()->println("Inverter Not found!"); From 82b0272ceb08546fc5a97f22bdd597848420eda6 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Sat, 3 Jun 2023 12:07:46 +0200 Subject: [PATCH 03/39] Removed duplicate code by moving it into the radio base class --- lib/Hoymiles/src/HoymilesRadio.cpp | 63 ++++++++++++++++++++++++++ lib/Hoymiles/src/HoymilesRadio.h | 4 ++ lib/Hoymiles/src/HoymilesRadio_CMT.cpp | 60 +----------------------- lib/Hoymiles/src/HoymilesRadio_CMT.h | 2 - lib/Hoymiles/src/HoymilesRadio_NRF.cpp | 60 +----------------------- lib/Hoymiles/src/HoymilesRadio_NRF.h | 2 - 6 files changed, 69 insertions(+), 122 deletions(-) diff --git a/lib/Hoymiles/src/HoymilesRadio.cpp b/lib/Hoymiles/src/HoymilesRadio.cpp index 8faf1727e..fc1ca409e 100644 --- a/lib/Hoymiles/src/HoymilesRadio.cpp +++ b/lib/Hoymiles/src/HoymilesRadio.cpp @@ -51,6 +51,69 @@ void HoymilesRadio::sendLastPacketAgain() sendEsbPacket(cmd); } +void HoymilesRadio::handleReceivedPackage() +{ + if (_busyFlag && _rxTimeout.occured()) { + Hoymiles.getMessageOutput()->println("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()->println("Nothing received, resend whole request"); + sendLastPacketAgain(); + + } else if (verifyResult == FRAGMENT_ALL_MISSING_TIMEOUT) { + Hoymiles.getMessageOutput()->println("Nothing received, resend count exeeded"); + _commandQueue.pop(); + _busyFlag = false; + + } else if (verifyResult == FRAGMENT_RETRANSMIT_TIMEOUT) { + Hoymiles.getMessageOutput()->println("Retransmit timeout"); + _commandQueue.pop(); + _busyFlag = false; + + } else if (verifyResult == FRAGMENT_HANDLE_ERROR) { + Hoymiles.getMessageOutput()->println("Packet handling error"); + _commandQueue.pop(); + _busyFlag = false; + + } else if (verifyResult > 0) { + // Perform Retransmit + Hoymiles.getMessageOutput()->print("Request retransmit: "); + Hoymiles.getMessageOutput()->println(verifyResult); + sendRetransmitPacket(verifyResult); + + } else { + // Successful received all packages + Hoymiles.getMessageOutput()->println("Success"); + _commandQueue.pop(); + _busyFlag = false; + } + } else { + // If inverter was not found, assume the command is invalid + Hoymiles.getMessageOutput()->println("RX: Invalid inverter found"); + _commandQueue.pop(); + _busyFlag = false; + } + } else if (!_busyFlag) { + // Currently in idle mode --> send packet if one is in the queue + if (!_commandQueue.empty()) { + CommandAbstract* cmd = _commandQueue.front().get(); + + auto inv = Hoymiles.getInverterBySerial(cmd->getTargetAddress()); + if (nullptr != inv) { + inv->clearRxFragmentBuffer(); + sendEsbPacket(cmd); + } else { + Hoymiles.getMessageOutput()->println("TX: Invalid inverter found"); + _commandQueue.pop(); + } + } + } +} + void HoymilesRadio::dumpBuf(const uint8_t buf[], uint8_t len, bool appendNewline) { for (uint8_t i = 0; i < len; i++) { diff --git a/lib/Hoymiles/src/HoymilesRadio.h b/lib/Hoymiles/src/HoymilesRadio.h index 2ee2ad25f..214772938 100644 --- a/lib/Hoymiles/src/HoymilesRadio.h +++ b/lib/Hoymiles/src/HoymilesRadio.h @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later #pragma once +#include "TimeoutHelper.h" #include "commands/CommandAbstract.h" #include "types.h" #include @@ -30,9 +31,12 @@ class HoymilesRadio { virtual void sendEsbPacket(CommandAbstract* cmd) = 0; void sendRetransmitPacket(uint8_t fragment_id); void sendLastPacketAgain(); + void handleReceivedPackage(); serial_u _dtuSerial; std::queue> _commandQueue; bool _isInitialized = false; bool _busyFlag = false; + + TimeoutHelper _rxTimeout; }; \ No newline at end of file diff --git a/lib/Hoymiles/src/HoymilesRadio_CMT.cpp b/lib/Hoymiles/src/HoymilesRadio_CMT.cpp index 4c3285f59..b2044649b 100644 --- a/lib/Hoymiles/src/HoymilesRadio_CMT.cpp +++ b/lib/Hoymiles/src/HoymilesRadio_CMT.cpp @@ -151,65 +151,7 @@ void HoymilesRadio_CMT::loop() } } - if (_busyFlag && _rxTimeout.occured()) { - Hoymiles.getMessageOutput()->println("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()->println("Nothing received, resend whole request"); - sendLastPacketAgain(); - - } else if (verifyResult == FRAGMENT_ALL_MISSING_TIMEOUT) { - Hoymiles.getMessageOutput()->println("Nothing received, resend count exeeded"); - _commandQueue.pop(); - _busyFlag = false; - - } else if (verifyResult == FRAGMENT_RETRANSMIT_TIMEOUT) { - Hoymiles.getMessageOutput()->println("Retransmit timeout"); - _commandQueue.pop(); - _busyFlag = false; - - } else if (verifyResult == FRAGMENT_HANDLE_ERROR) { - Hoymiles.getMessageOutput()->println("Packet handling error"); - _commandQueue.pop(); - _busyFlag = false; - - } else if (verifyResult > 0) { - // Perform Retransmit - Hoymiles.getMessageOutput()->print("Request retransmit: "); - Hoymiles.getMessageOutput()->println(verifyResult); - sendRetransmitPacket(verifyResult); - - } else { - // Successful received all packages - Hoymiles.getMessageOutput()->println("Success"); - _commandQueue.pop(); - _busyFlag = false; - } - } else { - // If inverter was not found, assume the command is invalid - Hoymiles.getMessageOutput()->println("RX: Invalid inverter found"); - _commandQueue.pop(); - _busyFlag = false; - } - } else if (!_busyFlag) { - // Currently in idle mode --> send packet if one is in the queue - if (!_commandQueue.empty()) { - CommandAbstract* cmd = _commandQueue.front().get(); - - auto inv = Hoymiles.getInverterBySerial(cmd->getTargetAddress()); - if (nullptr != inv) { - inv->clearRxFragmentBuffer(); - sendEsbPacket(cmd); - } else { - Hoymiles.getMessageOutput()->println("TX: Invalid inverter found"); - _commandQueue.pop(); - } - } - } + handleReceivedPackage(); } void HoymilesRadio_CMT::setPALevel(int8_t paLevel) diff --git a/lib/Hoymiles/src/HoymilesRadio_CMT.h b/lib/Hoymiles/src/HoymilesRadio_CMT.h index b1cfa7c4c..66314b3d4 100644 --- a/lib/Hoymiles/src/HoymilesRadio_CMT.h +++ b/lib/Hoymiles/src/HoymilesRadio_CMT.h @@ -2,7 +2,6 @@ #pragma once #include "HoymilesRadio.h" -#include "TimeoutHelper.h" #include "commands/CommandAbstract.h" #include "types.h" #include @@ -48,7 +47,6 @@ class HoymilesRadio_CMT : public HoymilesRadio { bool _gpio3_configured = false; std::queue _rxBuffer; - TimeoutHelper _rxTimeout; TimeoutHelper _txTimeout; uint32_t _inverterTargetFrequency = HOYMILES_CMT_WORK_FREQ; diff --git a/lib/Hoymiles/src/HoymilesRadio_NRF.cpp b/lib/Hoymiles/src/HoymilesRadio_NRF.cpp index 66b9691e9..ecb9501e1 100644 --- a/lib/Hoymiles/src/HoymilesRadio_NRF.cpp +++ b/lib/Hoymiles/src/HoymilesRadio_NRF.cpp @@ -94,65 +94,7 @@ void HoymilesRadio_NRF::loop() } } - if (_busyFlag && _rxTimeout.occured()) { - Hoymiles.getMessageOutput()->println("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()->println("Nothing received, resend whole request"); - sendLastPacketAgain(); - - } else if (verifyResult == FRAGMENT_ALL_MISSING_TIMEOUT) { - Hoymiles.getMessageOutput()->println("Nothing received, resend count exeeded"); - _commandQueue.pop(); - _busyFlag = false; - - } else if (verifyResult == FRAGMENT_RETRANSMIT_TIMEOUT) { - Hoymiles.getMessageOutput()->println("Retransmit timeout"); - _commandQueue.pop(); - _busyFlag = false; - - } else if (verifyResult == FRAGMENT_HANDLE_ERROR) { - Hoymiles.getMessageOutput()->println("Packet handling error"); - _commandQueue.pop(); - _busyFlag = false; - - } else if (verifyResult > 0) { - // Perform Retransmit - Hoymiles.getMessageOutput()->print("Request retransmit: "); - Hoymiles.getMessageOutput()->println(verifyResult); - sendRetransmitPacket(verifyResult); - - } else { - // Successful received all packages - Hoymiles.getMessageOutput()->println("Success"); - _commandQueue.pop(); - _busyFlag = false; - } - } else { - // If inverter was not found, assume the command is invalid - Hoymiles.getMessageOutput()->println("RX: Invalid inverter found"); - _commandQueue.pop(); - _busyFlag = false; - } - } else if (!_busyFlag) { - // Currently in idle mode --> send packet if one is in the queue - if (!_commandQueue.empty()) { - CommandAbstract* cmd = _commandQueue.front().get(); - - auto inv = Hoymiles.getInverterBySerial(cmd->getTargetAddress()); - if (nullptr != inv) { - inv->clearRxFragmentBuffer(); - sendEsbPacket(cmd); - } else { - Hoymiles.getMessageOutput()->println("TX: Invalid inverter found"); - _commandQueue.pop(); - } - } - } + handleReceivedPackage(); } void HoymilesRadio_NRF::setPALevel(rf24_pa_dbm_e paLevel) diff --git a/lib/Hoymiles/src/HoymilesRadio_NRF.h b/lib/Hoymiles/src/HoymilesRadio_NRF.h index 88c0d2f90..8530a0e34 100644 --- a/lib/Hoymiles/src/HoymilesRadio_NRF.h +++ b/lib/Hoymiles/src/HoymilesRadio_NRF.h @@ -2,7 +2,6 @@ #pragma once #include "HoymilesRadio.h" -#include "TimeoutHelper.h" #include "commands/CommandAbstract.h" #include #include @@ -44,5 +43,4 @@ class HoymilesRadio_NRF : public HoymilesRadio { volatile bool _packetReceived = false; std::queue _rxBuffer; - TimeoutHelper _rxTimeout; }; \ No newline at end of file From 3b6c529efbdc6ebe9a04d528b0fe5fcbced06dfd Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Wed, 7 Jun 2023 17:58:31 +0200 Subject: [PATCH 04/39] Fix: Do not publish leading blanks in MQTT payload Fixes #1011 --- src/MqttHandleInverter.cpp | 1 - src/MqttSettings.cpp | 6 +++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/MqttHandleInverter.cpp b/src/MqttHandleInverter.cpp index ed620dc83..a42803cdd 100644 --- a/src/MqttHandleInverter.cpp +++ b/src/MqttHandleInverter.cpp @@ -129,7 +129,6 @@ void MqttHandleInverterClass::publishField(std::shared_ptr inv String value = String( inv->Statistics()->getChannelFieldValue(type, channel, fieldId), static_cast(inv->Statistics()->getChannelFieldDigits(type, channel, fieldId))); - value.trim(); MqttSettings.publish(topic, value); } diff --git a/src/MqttSettings.cpp b/src/MqttSettings.cpp index da0363df7..d5b29faf5 100644 --- a/src/MqttSettings.cpp +++ b/src/MqttSettings.cpp @@ -159,7 +159,11 @@ void MqttSettingsClass::publish(const String& subtopic, const String& payload) { String topic = getPrefix(); topic += subtopic; - mqttClient->publish(topic.c_str(), 0, Configuration.get().Mqtt_Retain, payload.c_str()); + + String value = payload; + value.trim(); + + mqttClient->publish(topic.c_str(), 0, Configuration.get().Mqtt_Retain, value.c_str()); } void MqttSettingsClass::publishGeneric(const String& topic, const String& payload, bool retain, uint8_t qos) From 593a33020f4b51bbb63c35ab16312c43c2452930 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Wed, 7 Jun 2023 18:05:51 +0200 Subject: [PATCH 05/39] Fix: String numbers for HMT inverters are mirrored Fixes: #1005 --- lib/Hoymiles/src/inverters/HMT_6CH.cpp | 68 +++++++++++++------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/lib/Hoymiles/src/inverters/HMT_6CH.cpp b/lib/Hoymiles/src/inverters/HMT_6CH.cpp index eea3353da..e54382eae 100644 --- a/lib/Hoymiles/src/inverters/HMT_6CH.cpp +++ b/lib/Hoymiles/src/inverters/HMT_6CH.cpp @@ -5,47 +5,47 @@ #include "HMT_6CH.h" static const byteAssign_t byteAssignment[] = { - { TYPE_DC, CH0, FLD_UDC, UNIT_V, 2, 2, 10, false, 1 }, - { TYPE_DC, CH0, FLD_IDC, UNIT_A, 4, 2, 100, false, 2 }, - { TYPE_DC, CH0, FLD_PDC, UNIT_W, 8, 2, 10, false, 1 }, - { TYPE_DC, CH0, FLD_YT, UNIT_KWH, 12, 4, 1000, false, 3 }, - { TYPE_DC, CH0, FLD_YD, UNIT_WH, 20, 2, 1, false, 0 }, - { TYPE_DC, CH0, FLD_IRR, UNIT_PCT, CALC_IRR_CH, CH0, CMD_CALC, false, 3 }, + { TYPE_DC, CH0, FLD_UDC, UNIT_V, 46, 2, 10, false, 1 }, + { TYPE_DC, CH0, FLD_IDC, UNIT_A, 50, 2, 100, false, 2 }, + { TYPE_DC, CH0, FLD_PDC, UNIT_W, 54, 2, 10, false, 1 }, + { TYPE_DC, CH0, FLD_YT, UNIT_KWH, 60, 4, 1000, false, 3 }, + { TYPE_DC, CH0, FLD_YD, UNIT_WH, 66, 2, 1, false, 0 }, + { TYPE_DC, CH0, FLD_IRR, UNIT_PCT, CALC_IRR_CH, CH5, CMD_CALC, false, 3 }, - { TYPE_DC, CH1, FLD_UDC, UNIT_V, 2, 2, 10, false, 1 }, - { TYPE_DC, CH1, FLD_IDC, UNIT_A, 6, 2, 100, false, 2 }, - { TYPE_DC, CH1, FLD_PDC, UNIT_W, 10, 2, 10, false, 1 }, - { TYPE_DC, CH1, FLD_YT, UNIT_KWH, 16, 4, 1000, false, 3 }, - { TYPE_DC, CH1, FLD_YD, UNIT_WH, 22, 2, 1, false, 0 }, - { TYPE_DC, CH1, FLD_IRR, UNIT_PCT, CALC_IRR_CH, CH1, CMD_CALC, false, 3 }, + { TYPE_DC, CH1, FLD_UDC, UNIT_V, 46, 2, 10, false, 1 }, + { TYPE_DC, CH1, FLD_IDC, UNIT_A, 48, 2, 100, false, 2 }, + { TYPE_DC, CH1, FLD_PDC, UNIT_W, 52, 2, 10, false, 1 }, + { TYPE_DC, CH1, FLD_YT, UNIT_KWH, 56, 4, 1000, false, 3 }, + { TYPE_DC, CH1, FLD_YD, UNIT_WH, 64, 2, 1, false, 0 }, + { TYPE_DC, CH1, FLD_IRR, UNIT_PCT, CALC_IRR_CH, CH4, CMD_CALC, false, 3 }, { TYPE_DC, CH2, FLD_UDC, UNIT_V, 24, 2, 10, false, 1 }, - { TYPE_DC, CH2, FLD_IDC, UNIT_A, 26, 2, 100, false, 2 }, - { TYPE_DC, CH2, FLD_PDC, UNIT_W, 30, 2, 10, false, 1 }, - { TYPE_DC, CH2, FLD_YT, UNIT_KWH, 34, 4, 1000, false, 3 }, - { TYPE_DC, CH2, FLD_YD, UNIT_WH, 42, 2, 1, false, 0 }, - { TYPE_DC, CH2, FLD_IRR, UNIT_PCT, CALC_IRR_CH, CH2, CMD_CALC, false, 3 }, + { TYPE_DC, CH2, FLD_IDC, UNIT_A, 28, 2, 100, false, 2 }, + { TYPE_DC, CH2, FLD_PDC, UNIT_W, 32, 2, 10, false, 1 }, + { TYPE_DC, CH2, FLD_YT, UNIT_KWH, 38, 4, 1000, false, 3 }, + { TYPE_DC, CH2, FLD_YD, UNIT_WH, 44, 2, 1, false, 0 }, + { TYPE_DC, CH2, FLD_IRR, UNIT_PCT, CALC_IRR_CH, CH3, CMD_CALC, false, 3 }, { TYPE_DC, CH3, FLD_UDC, UNIT_V, 24, 2, 10, false, 1 }, - { TYPE_DC, CH3, FLD_IDC, UNIT_A, 28, 2, 100, false, 2 }, - { TYPE_DC, CH3, FLD_PDC, UNIT_W, 32, 2, 10, false, 1 }, - { TYPE_DC, CH3, FLD_YT, UNIT_KWH, 38, 4, 1000, false, 3 }, - { TYPE_DC, CH3, FLD_YD, UNIT_WH, 44, 2, 1, false, 0 }, - { TYPE_DC, CH3, FLD_IRR, UNIT_PCT, CALC_IRR_CH, CH3, CMD_CALC, false, 3 }, + { TYPE_DC, CH3, FLD_IDC, UNIT_A, 26, 2, 100, false, 2 }, + { TYPE_DC, CH3, FLD_PDC, UNIT_W, 30, 2, 10, false, 1 }, + { TYPE_DC, CH3, FLD_YT, UNIT_KWH, 34, 4, 1000, false, 3 }, + { TYPE_DC, CH3, FLD_YD, UNIT_WH, 42, 2, 1, false, 0 }, + { TYPE_DC, CH3, FLD_IRR, UNIT_PCT, CALC_IRR_CH, CH2, CMD_CALC, false, 3 }, - { TYPE_DC, CH4, FLD_UDC, UNIT_V, 46, 2, 10, false, 1 }, - { TYPE_DC, CH4, FLD_IDC, UNIT_A, 48, 2, 100, false, 2 }, - { TYPE_DC, CH4, FLD_PDC, UNIT_W, 52, 2, 10, false, 1 }, - { TYPE_DC, CH4, FLD_YT, UNIT_KWH, 56, 4, 1000, false, 3 }, - { TYPE_DC, CH4, FLD_YD, UNIT_WH, 64, 2, 1, false, 0 }, - { TYPE_DC, CH4, FLD_IRR, UNIT_PCT, CALC_IRR_CH, CH4, CMD_CALC, false, 3 }, + { TYPE_DC, CH4, FLD_UDC, UNIT_V, 2, 2, 10, false, 1 }, + { TYPE_DC, CH4, FLD_IDC, UNIT_A, 6, 2, 100, false, 2 }, + { TYPE_DC, CH4, FLD_PDC, UNIT_W, 10, 2, 10, false, 1 }, + { TYPE_DC, CH4, FLD_YT, UNIT_KWH, 16, 4, 1000, false, 3 }, + { TYPE_DC, CH4, FLD_YD, UNIT_WH, 22, 2, 1, false, 0 }, + { TYPE_DC, CH4, FLD_IRR, UNIT_PCT, CALC_IRR_CH, CH1, CMD_CALC, false, 3 }, - { TYPE_DC, CH5, FLD_UDC, UNIT_V, 46, 2, 10, false, 1 }, - { TYPE_DC, CH5, FLD_IDC, UNIT_A, 50, 2, 100, false, 2 }, - { TYPE_DC, CH5, FLD_PDC, UNIT_W, 54, 2, 10, false, 1 }, - { TYPE_DC, CH5, FLD_YT, UNIT_KWH, 60, 4, 1000, false, 3 }, - { TYPE_DC, CH5, FLD_YD, UNIT_WH, 66, 2, 1, false, 0 }, - { TYPE_DC, CH5, FLD_IRR, UNIT_PCT, CALC_IRR_CH, CH5, CMD_CALC, false, 3 }, + { TYPE_DC, CH5, FLD_UDC, UNIT_V, 2, 2, 10, false, 1 }, + { TYPE_DC, CH5, FLD_IDC, UNIT_A, 4, 2, 100, false, 2 }, + { TYPE_DC, CH5, FLD_PDC, UNIT_W, 8, 2, 10, false, 1 }, + { TYPE_DC, CH5, FLD_YT, UNIT_KWH, 12, 4, 1000, false, 3 }, + { TYPE_DC, CH5, FLD_YD, UNIT_WH, 20, 2, 1, false, 0 }, + { TYPE_DC, CH5, FLD_IRR, UNIT_PCT, CALC_IRR_CH, CH0, CMD_CALC, false, 3 }, { TYPE_AC, CH0, FLD_UAC, UNIT_V, 74, 2, 10, false, 1 }, // dummy { TYPE_AC, CH0, FLD_UAC_1N, UNIT_V, 68, 2, 10, false, 1 }, From 721f82a17c7ba114b93f35ab6c01df6b14f35cf5 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Thu, 8 Jun 2023 19:39:56 +0200 Subject: [PATCH 06/39] Added additional exception handler to also show unknown exceptions in live data api endpoint --- src/WebApi_ws_live.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/WebApi_ws_live.cpp b/src/WebApi_ws_live.cpp index 74db2beae..0213cc94e 100644 --- a/src/WebApi_ws_live.cpp +++ b/src/WebApi_ws_live.cpp @@ -79,8 +79,10 @@ void WebApiWsLiveClass::loop() _ws.textAll(buffer); } - } catch (std::bad_alloc& bad_alloc) { + } catch (const std::bad_alloc& bad_alloc) { MessageOutput.printf("Call to /api/livedata/status temporarely out of resources. Reason: \"%s\".\r\n", bad_alloc.what()); + } catch (const std::exception& exc) { + MessageOutput.printf("Unknown exception in /api/livedata/status. Reason: \"%s\".\r\n", exc.what()); } _lastWsPublish = millis(); @@ -229,9 +231,11 @@ void WebApiWsLiveClass::onLivedataStatus(AsyncWebServerRequest* request) response->setLength(); request->send(response); - } catch (std::bad_alloc& bad_alloc) { + } catch (const std::bad_alloc& bad_alloc) { MessageOutput.printf("Call to /api/livedata/status temporarely out of resources. Reason: \"%s\".\r\n", bad_alloc.what()); - + WebApi.sendTooManyRequests(request); + } catch (const std::exception& exc) { + MessageOutput.printf("Unknown exception in /api/livedata/status. Reason: \"%s\".\r\n", exc.what()); WebApi.sendTooManyRequests(request); } } \ No newline at end of file From 91d3cd1da277c1f4590cea04a105f2e691f362a8 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Thu, 8 Jun 2023 19:56:22 +0200 Subject: [PATCH 07/39] Feature: Show BSSID in the web interface --- src/WebApi_network.cpp | 1 + webapp/src/components/WifiStationInfo.vue | 4 ++++ webapp/src/locales/de.json | 1 + webapp/src/locales/en.json | 1 + webapp/src/locales/fr.json | 1 + webapp/src/types/NetworkStatus.ts | 1 + 6 files changed, 9 insertions(+) diff --git a/src/WebApi_network.cpp b/src/WebApi_network.cpp index 06d8261eb..1226917fa 100644 --- a/src/WebApi_network.cpp +++ b/src/WebApi_network.cpp @@ -36,6 +36,7 @@ void WebApiNetworkClass::onNetworkStatus(AsyncWebServerRequest* request) root["sta_status"] = ((WiFi.getMode() & WIFI_STA) != 0); root["sta_ssid"] = WiFi.SSID(); + root["sta_bssid"] = WiFi.BSSIDstr(); root["sta_rssi"] = WiFi.RSSI(); root["network_hostname"] = NetworkSettings.getHostname(); root["network_ip"] = NetworkSettings.localIP().toString(); diff --git a/webapp/src/components/WifiStationInfo.vue b/webapp/src/components/WifiStationInfo.vue index e1bd0dcdc..12769a8e4 100644 --- a/webapp/src/components/WifiStationInfo.vue +++ b/webapp/src/components/WifiStationInfo.vue @@ -13,6 +13,10 @@ {{ $t('wifistationinfo.Ssid') }} {{ networkStatus.sta_ssid }} + + {{ $t('wifistationinfo.Bssid') }} + {{ networkStatus.sta_bssid }} + {{ $t('wifistationinfo.Quality') }} {{ $n(getRSSIasQuality(networkStatus.sta_rssi), 'percent') }} diff --git a/webapp/src/locales/de.json b/webapp/src/locales/de.json index 0d454bae3..a014f09df 100644 --- a/webapp/src/locales/de.json +++ b/webapp/src/locales/de.json @@ -208,6 +208,7 @@ "Enabled": "aktiv", "Disabled": "nicht aktiv", "Ssid": "SSID", + "Bssid": "BSSID", "Quality": "Qualität", "Rssi": "RSSI" }, diff --git a/webapp/src/locales/en.json b/webapp/src/locales/en.json index 7a05b4db0..4532861be 100644 --- a/webapp/src/locales/en.json +++ b/webapp/src/locales/en.json @@ -208,6 +208,7 @@ "Enabled": "enabled", "Disabled": "disabled", "Ssid": "SSID", + "Bssid": "BSSID", "Quality": "Quality", "Rssi": "RSSI" }, diff --git a/webapp/src/locales/fr.json b/webapp/src/locales/fr.json index daafad70e..86b517f50 100644 --- a/webapp/src/locales/fr.json +++ b/webapp/src/locales/fr.json @@ -208,6 +208,7 @@ "Enabled": "activé", "Disabled": "désactivé", "Ssid": "SSID", + "Bssid": "BSSID", "Quality": "Qualité", "Rssi": "RSSI" }, diff --git a/webapp/src/types/NetworkStatus.ts b/webapp/src/types/NetworkStatus.ts index c10c4a0f6..90038c9d6 100644 --- a/webapp/src/types/NetworkStatus.ts +++ b/webapp/src/types/NetworkStatus.ts @@ -2,6 +2,7 @@ export interface NetworkStatus { // WifiStationInfo sta_status: boolean; sta_ssid: string; + sta_bssid: string; sta_rssi: number; // WifiApInfo ap_status: boolean; From b3e41c957bff2b94a7d0a7daceb09842fa5443db Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Thu, 8 Jun 2023 19:56:44 +0200 Subject: [PATCH 08/39] Feature: Publish BSSID via MQTT --- src/MqttHandleDtu.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/MqttHandleDtu.cpp b/src/MqttHandleDtu.cpp index dfca23406..ee5ad417f 100644 --- a/src/MqttHandleDtu.cpp +++ b/src/MqttHandleDtu.cpp @@ -28,6 +28,7 @@ void MqttHandleDtuClass::loop() MqttSettings.publish("dtu/hostname", NetworkSettings.getHostname()); if (NetworkSettings.NetworkMode() == network_mode::WiFi) { MqttSettings.publish("dtu/rssi", String(WiFi.RSSI())); + MqttSettings.publish("dtu/bssid", String(WiFi.BSSIDstr())); } _lastPublish = millis(); From 88cb59d1779166fc1179b09f5923fe6fc5635427 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Thu, 8 Jun 2023 19:57:07 +0200 Subject: [PATCH 09/39] Feature: Publish BSSID via prometheus --- src/WebApi_prometheus.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/WebApi_prometheus.cpp b/src/WebApi_prometheus.cpp index d921dac65..62f95c634 100644 --- a/src/WebApi_prometheus.cpp +++ b/src/WebApi_prometheus.cpp @@ -53,6 +53,10 @@ void WebApiPrometheusClass::onPrometheusMetricsGet(AsyncWebServerRequest* reques stream->print("# TYPE wifi_rssi gauge\n"); stream->printf("wifi_rssi %d\n", WiFi.RSSI()); + stream->print("# HELP wifi_bssid WiFi BSSID\n"); + stream->print("# TYPE wifi_bssid gauge\n"); + stream->printf("wifi_bssid %s\n", WiFi.BSSIDstr().c_str()); + for (uint8_t i = 0; i < Hoymiles.getNumInverters(); i++) { auto inv = Hoymiles.getInverterByPos(i); From 2ccc4a766e566c77ef7926570e2df233723a1c73 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Thu, 8 Jun 2023 20:29:14 +0200 Subject: [PATCH 10/39] webapp: Update dependencies --- webapp/package.json | 6 +++--- webapp/yarn.lock | 44 ++++++++++++++++++++++---------------------- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/webapp/package.json b/webapp/package.json index 7ae39f84f..9431e2d55 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -23,7 +23,7 @@ }, "devDependencies": { "@intlify/unplugin-vue-i18n": "^0.11.0", - "@rushstack/eslint-patch": "^1.3.0", + "@rushstack/eslint-patch": "^1.3.1", "@tsconfig/node18": "^2.0.1", "@types/bootstrap": "^5.2.6", "@types/node": "^20.2.5", @@ -32,10 +32,10 @@ "@vitejs/plugin-vue": "^4.2.3", "@vue/eslint-config-typescript": "^11.0.3", "@vue/tsconfig": "^0.4.0", - "eslint": "^8.41.0", + "eslint": "^8.42.0", "eslint-plugin-vue": "^9.14.1", "npm-run-all": "^4.1.5", - "sass": "^1.62.1", + "sass": "^1.62.2", "terser": "^5.17.7", "typescript": "^5.1.3", "vite": "^4.3.9", diff --git a/webapp/yarn.lock b/webapp/yarn.lock index 7a5d7d5c9..5888d035c 100644 --- a/webapp/yarn.lock +++ b/webapp/yarn.lock @@ -156,15 +156,15 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.41.0": - version "8.41.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.41.0.tgz#080321c3b68253522f7646b55b577dd99d2950b3" - integrity sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA== +"@eslint/js@8.42.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.42.0.tgz#484a1d638de2911e6f5a30c12f49c7e4a3270fb6" + integrity sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw== -"@humanwhocodes/config-array@^0.11.8": - version "0.11.8" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" - integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== +"@humanwhocodes/config-array@^0.11.10": + version "0.11.10" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" + integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== dependencies: "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" @@ -345,10 +345,10 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@rushstack/eslint-patch@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.3.0.tgz#f5635b36fc0dad96ef1e542a302cd914230188c0" - integrity sha512-IthPJsJR85GhOkp3Hvp8zFOPK5ynKn6STyHa/WZpioK7E1aYDiBzpqQPrngc14DszIUkIrdd3k9Iu0XSzlP/1w== +"@rushstack/eslint-patch@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.3.1.tgz#edbb85ff95f3be41eaa70c6d6ad6d8ba0a9c7e46" + integrity sha512-RkmuBcqiNioeeBKbgzMlOdreUkJfYaSjwgx9XDgGGpjvWgyaxWvDmZVSN9CS6LjEASadhgPv2BcFp+SeouWXXA== "@tsconfig/node18@^2.0.1": version "2.0.1" @@ -1184,16 +1184,16 @@ eslint-visitor-keys@^3.4.1: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== -eslint@^8.41.0: - version "8.41.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.41.0.tgz#3062ca73363b4714b16dbc1e60f035e6134b6f1c" - integrity sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q== +eslint@^8.42.0: + version "8.42.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.42.0.tgz#7bebdc3a55f9ed7167251fe7259f75219cade291" + integrity sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.4.0" "@eslint/eslintrc" "^2.0.3" - "@eslint/js" "8.41.0" - "@humanwhocodes/config-array" "^0.11.8" + "@eslint/js" "8.42.0" + "@humanwhocodes/config-array" "^0.11.10" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" ajv "^6.10.0" @@ -2220,10 +2220,10 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" -sass@^1.62.1: - version "1.62.1" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.62.1.tgz#caa8d6bf098935bc92fc73fa169fb3790cacd029" - integrity sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A== +sass@^1.62.2: + version "1.63.2" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.63.2.tgz#75f7d9a8e67d1d5b98a989507f4d98b6067b1f75" + integrity sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" From abef45524938f359d134f3932980e92724099dd1 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Thu, 8 Jun 2023 20:38:14 +0200 Subject: [PATCH 11/39] Doc: Enhanced device profile for nodemcu esp32 --- docs/DeviceProfiles/nodemcu_esp32.json | 96 +++++++++++++++++--------- 1 file changed, 63 insertions(+), 33 deletions(-) diff --git a/docs/DeviceProfiles/nodemcu_esp32.json b/docs/DeviceProfiles/nodemcu_esp32.json index a42af3719..d7f6a6141 100644 --- a/docs/DeviceProfiles/nodemcu_esp32.json +++ b/docs/DeviceProfiles/nodemcu_esp32.json @@ -1,6 +1,6 @@ [ { - "name": "Generic NodeMCU 32", + "name": "NRF24", "nrf24": { "miso": 19, "mosi": 23, @@ -10,17 +10,11 @@ "cs": 5 }, "eth": { - "enabled": false, - "phy_addr": -1, - "power": -1, - "mdc": -1, - "mdio": -1, - "type": 0, - "clk_mode": 0 + "enabled": false } }, { - "name": "Generic NodeMCU 32 with CMT2300A", + "name": "CMT2300A", "nrf24": { "miso": -1, "mosi": -1, @@ -38,17 +32,11 @@ "gpio3": 16 }, "eth": { - "enabled": false, - "phy_addr": -1, - "power": -1, - "mdc": -1, - "mdio": -1, - "type": 0, - "clk_mode": 0 + "enabled": false } }, { - "name": "Generic NodeMCU 32 with SSD1306", + "name": "NRF24 with SSD1306", "nrf24": { "miso": 19, "mosi": 23, @@ -58,13 +46,7 @@ "cs": 5 }, "eth": { - "enabled": false, - "phy_addr": -1, - "power": -1, - "mdc": -1, - "mdio": -1, - "type": 0, - "clk_mode": 0 + "enabled": false }, "display": { "type": 2, @@ -73,7 +55,7 @@ } }, { - "name": "Generic NodeMCU 32 with SH1106", + "name": "NRF24 with SH1106", "nrf24": { "miso": 19, "mosi": 23, @@ -83,13 +65,7 @@ "cs": 5 }, "eth": { - "enabled": false, - "phy_addr": -1, - "power": -1, - "mdc": -1, - "mdio": -1, - "type": 0, - "clk_mode": 0 + "enabled": false }, "display": { "type": 3, @@ -98,7 +74,61 @@ } }, { - "name": "Generic NodeMCU 32 with NRF + CMT Module", + "name": "CMT2300A with SSD1306", + "nrf24": { + "miso": -1, + "mosi": -1, + "clk": -1, + "irq": -1, + "en": -1, + "cs": -1 + }, + "cmt": { + "clk": 18, + "cs": 4, + "fcs": 5, + "sdio": 23, + "gpio2": 19, + "gpio3": 16 + }, + "eth": { + "enabled": false + }, + "display": { + "type": 2, + "data": 21, + "clk": 22 + } + }, + { + "name": "CMT2300A with SH1106", + "nrf24": { + "miso": -1, + "mosi": -1, + "clk": -1, + "irq": -1, + "en": -1, + "cs": -1 + }, + "cmt": { + "clk": 18, + "cs": 4, + "fcs": 5, + "sdio": 23, + "gpio2": 19, + "gpio3": 16 + }, + "eth": { + "enabled": false + }, + "display": { + "type": 3, + "data": 21, + "clk": 22 + } + }, + { + "name": "NRF24 + CMT2300A", "nrf24": { "miso": 19, "mosi": 23, From c1f64396d869971d0d0e369a0a15f53909d9983e Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Thu, 8 Jun 2023 20:43:46 +0200 Subject: [PATCH 12/39] Always use a latest patch level of the softprops/action-gh-release --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4fa430ea0..aecf1a64f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -121,7 +121,7 @@ jobs: - name: Build Changelog id: github_release - uses: mikepenz/release-changelog-builder-action@v3.7.0 + uses: mikepenz/release-changelog-builder-action@v3 with: failOnError: true commitMode: true From 78135fb62e5bca08ba2fdb8a3037c1f30b4fe4ef Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Thu, 8 Jun 2023 21:00:38 +0200 Subject: [PATCH 13/39] Update espressif32 from 6.3.0 to 6.3.1 --- platformio.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platformio.ini b/platformio.ini index 382441db6..e9ed041c3 100644 --- a/platformio.ini +++ b/platformio.ini @@ -15,7 +15,7 @@ extra_configs = [env] framework = arduino -platform = espressif32@6.3.0 +platform = espressif32@6.3.1 build_flags = -DCOMPONENT_EMBED_FILES=webapp_dist/index.html.gz:webapp_dist/zones.json.gz:webapp_dist/favicon.ico:webapp_dist/js/app.js.gz From b8745f6199680de6d1b5767bdeae50c922b06237 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Thu, 8 Jun 2023 21:01:58 +0200 Subject: [PATCH 14/39] Update nrf24/RF24 from 1.4.5 to 1.4.7 --- platformio.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platformio.ini b/platformio.ini index e9ed041c3..6209358fe 100644 --- a/platformio.ini +++ b/platformio.ini @@ -30,7 +30,7 @@ lib_deps = https://github.com/yubox-node-org/ESPAsyncWebServer bblanchon/ArduinoJson @ ^6.21.2 https://github.com/bertmelis/espMqttClient.git#v1.4.3 - nrf24/RF24 @ ^1.4.5 + nrf24/RF24 @ ^1.4.7 olikraus/U8g2 @ ^2.34.17 buelowp/sunset @ ^1.1.7 From 9ac1bb3409d89482bbee1bedbbb512362a5f37e4 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Thu, 8 Jun 2023 21:05:53 +0200 Subject: [PATCH 15/39] Update olikraus/U8g2 from 2.34.17 to 2.34.18 --- platformio.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platformio.ini b/platformio.ini index 6209358fe..18e3cb893 100644 --- a/platformio.ini +++ b/platformio.ini @@ -31,7 +31,7 @@ lib_deps = bblanchon/ArduinoJson @ ^6.21.2 https://github.com/bertmelis/espMqttClient.git#v1.4.3 nrf24/RF24 @ ^1.4.7 - olikraus/U8g2 @ ^2.34.17 + olikraus/U8g2 @ ^2.34.18 buelowp/sunset @ ^1.1.7 extra_scripts = From abfc2735bac983b6f092dabf2fff7f3f7b7a36f2 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Thu, 8 Jun 2023 22:48:04 +0200 Subject: [PATCH 16/39] Add separate property to platformio.ini to control the environments built by github actions This is now independent of the default_envs which also affects local development --- .github/workflows/build.yml | 2 +- platformio.ini | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index aecf1a64f..d891a86bc 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -37,7 +37,7 @@ jobs: - name: Get default environments id: envs run: | - echo "environments=$(pio project config --json-output | jq -cr '.[0][1][0][1]')" >> $GITHUB_OUTPUT + echo "environments=$(pio project config --json-output | jq -cr '.[1][1][0][1]|split(",")')" >> $GITHUB_OUTPUT outputs: environments: ${{ steps.envs.outputs.environments }} diff --git a/platformio.ini b/platformio.ini index 18e3cb893..ae2a623a2 100644 --- a/platformio.ini +++ b/platformio.ini @@ -14,6 +14,10 @@ extra_configs = platformio_override.ini [env] +; Make sure to NOT add any spaces in the custom_ci_action property +; (also the position in the file is important) +custom_ci_action = generic + framework = arduino platform = espressif32@6.3.1 From c8fc123e81bd681541f0d44975c47ca8ee27dbc4 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Fri, 9 Jun 2023 00:03:01 +0200 Subject: [PATCH 17/39] Feature: Only require one binary file for initial flashing There is no need anymore to upload multiple .bin files. All binaries are combined into one. --- .github/workflows/build.yml | 12 ++++-------- README.md | 14 ++------------ docs/esp32_flash_download_tool.png | Bin 31776 -> 171773 bytes 3 files changed, 6 insertions(+), 20 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d891a86bc..d557ccc65 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -98,17 +98,15 @@ jobs: - name: Rename Firmware run: mv .pio/build/${{ matrix.environment }}/firmware.bin .pio/build/${{ matrix.environment }}/opendtu-${{ matrix.environment }}.bin - - name: Copy boot_app0.bin - run: cp ~/.platformio/packages/framework-arduinoespressif32/tools/partitions/boot_app0.bin .pio/build/${{ matrix.environment }}/boot_app0.bin + - name: Rename Factory Firmware + run: mv .pio/build/${{ matrix.environment }}/firmware.factory.bin .pio/build/${{ matrix.environment }}/opendtu-${{ matrix.environment }}.factory.bin - uses: actions/upload-artifact@v3 with: name: opendtu-${{ matrix.environment }} path: | .pio/build/${{ matrix.environment }}/opendtu-${{ matrix.environment }}.bin - .pio/build/${{ matrix.environment }}/partitions.bin - .pio/build/${{ matrix.environment }}/bootloader.bin - .pio/build/${{ matrix.environment }}/boot_app0.bin + .pio/build/${{ matrix.environment }}/opendtu-${{ matrix.environment }}.factory.bin release: name: Create Release @@ -133,12 +131,10 @@ jobs: with: path: artifacts/ - - name: Create ZIPs + - name: Move all files to the same location run: | ls -R - sudo apt install zip cd artifacts - for i in */; do zip -r "${i%/}.zip" "$i"; done for i in */; do cp ${i}opendtu-*.bin ./; done - name: Create release diff --git a/README.md b/README.md index 5dbc8a241..005fd28ff 100644 --- a/README.md +++ b/README.md @@ -210,14 +210,7 @@ It is recommended to make all changes only in the 'platformio_override.ini', th ### using the pre-compiled .bin files -The pre-compiled binary files can be found here on the [github page behind "Releases"](https://github.com/tbnobody/OpenDTU/releases) (look at the right column). For a first installation on an ESP32, download `opendtu-generic.zip`, unpack and use a ESP32 flash tool of your choice (see next chapter) to flash the `.bin` files to the right addresses: - -| Address | File | -| ---------| ---------------------- | -| 0x1000 | bootloader.bin | -| 0x8000 | partitions.bin | -| 0xe000 | boot_app0.bin | -| 0x10000 | opendtu-*.bin | +The pre-compiled binary files can be found here on the [github page behind "Releases"](https://github.com/tbnobody/OpenDTU/releases) (look at the right column). For a first installation on an ESP32, download `opendtu-generic.factory.bin` and use a ESP32 flash tool of your choice to flash the `.bin` file to the address `0x0`. (The previous method with different .bin files is no more necessary.) For further updates download `opendtu-generic.bin` and use the over-the-air firmware update in OpenDTU's web interface. @@ -226,10 +219,7 @@ For further updates download `opendtu-generic.bin` and use the over-the-air firm ```bash esptool.py --port /dev/ttyUSB0 --chip esp32 --before default_reset --after hard_reset \ write_flash --flash_mode dout --flash_freq 40m --flash_size detect \ - 0x1000 bootloader.bin \ - 0x8000 partitions.bin \ - 0xe000 boot_app0.bin \ - 0x10000 opendtu-generic.bin + 0x0 opendtu-generic.factory.bin ``` #### Flash with Espressif Flash Download Tool (Windows) diff --git a/docs/esp32_flash_download_tool.png b/docs/esp32_flash_download_tool.png index 3f970e63fb5d988bfea0492fe7f0cf2408c0eaeb..7114d4c97aec2f6ab7a248418300cbabb837c052 100644 GIT binary patch literal 171773 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

Q<^J&VK*a(@V!#TwX-3q^q**hGnZ^KK6 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 E01qnQdH?_b From 170978c6f8ca97e2b6dfe9826b76466c65315c59 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Fri, 9 Jun 2023 01:42:17 +0200 Subject: [PATCH 18/39] webapp: add app.js.gz --- webapp_dist/js/app.js.gz | Bin 168428 -> 168460 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 47414dc30337567ccbcfd2b0faa4384826168ee4..05777db247e9781591cbe0d113cfd61777e7e272 100644 GIT binary patch delta 26732 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 Date: Sun, 11 Jun 2023 20:04:23 +0200 Subject: [PATCH 19/39] Fix: Prometheus syntax error with wifi_bssid Fixes #1021 --- src/WebApi_prometheus.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/WebApi_prometheus.cpp b/src/WebApi_prometheus.cpp index 62f95c634..e5f289a9e 100644 --- a/src/WebApi_prometheus.cpp +++ b/src/WebApi_prometheus.cpp @@ -53,9 +53,9 @@ void WebApiPrometheusClass::onPrometheusMetricsGet(AsyncWebServerRequest* reques stream->print("# TYPE wifi_rssi gauge\n"); stream->printf("wifi_rssi %d\n", WiFi.RSSI()); - stream->print("# HELP wifi_bssid WiFi BSSID\n"); - stream->print("# TYPE wifi_bssid gauge\n"); - stream->printf("wifi_bssid %s\n", WiFi.BSSIDstr().c_str()); + stream->print("# HELP wifi_station WiFi Station info\n"); + stream->print("# TYPE wifi_station label\n"); + stream->printf("wifi_station{bssid=\"%s\"} 1\n", WiFi.BSSIDstr().c_str()); for (uint8_t i = 0; i < Hoymiles.getNumInverters(); i++) { auto inv = Hoymiles.getInverterByPos(i); From 88de38e694933d77c702cc817337520512f16a15 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Sun, 11 Jun 2023 20:07:41 +0200 Subject: [PATCH 20/39] Doc: Add hint to adjusted partition upgrade guide to use only one .bin file --- docs/UpgradePartition.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/docs/UpgradePartition.md b/docs/UpgradePartition.md index 429e5f581..f2cd8bf9a 100644 --- a/docs/UpgradePartition.md +++ b/docs/UpgradePartition.md @@ -12,13 +12,10 @@ There are several possibilities to update the partition table: - Any kind of flash interface - If you like to use any kind of flash interface like `esptool.py`, Espressif Flash Download Tool, ESP_Flasher or esptool-js you have to make sure to upload **ALL** provided .bin files. It is important to enter the correct target addresses. + If you like to use any kind of flash interface like `esptool.py`, Espressif Flash Download Tool, ESP_Flasher or esptool-js you have to make sure to upload the provided .factory.bin file. It is important to enter the correct target address. | Address | File | | ---------| ---------------------- | - | 0x1000 | bootloader.bin | - | 0x8000 | partitions.bin | - | 0xe000 | boot_app0.bin | - | 0x10000 | opendtu-*.bin | + | 0x0 | opendtu-*.factory.bin | After upgrading the ESP32 will open the intergrated access point (AP) again. Just connect to it using the default password ("openDTU42"). If you are connected, just visit and enter the "Configuration Management". Recover the previously backuped config files. From ee4b479b7df7f3ad3aa2eeb38a25bbb6e236fed2 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Sun, 11 Jun 2023 21:00:14 +0200 Subject: [PATCH 21/39] webapp: Update dependencies --- webapp/package.json | 4 ++-- webapp/yarn.lock | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/webapp/package.json b/webapp/package.json index 9431e2d55..5a782910b 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -26,7 +26,7 @@ "@rushstack/eslint-patch": "^1.3.1", "@tsconfig/node18": "^2.0.1", "@types/bootstrap": "^5.2.6", - "@types/node": "^20.2.5", + "@types/node": "^20.3.0", "@types/sortablejs": "^1.15.1", "@types/spark-md5": "^3.0.2", "@vitejs/plugin-vue": "^4.2.3", @@ -35,7 +35,7 @@ "eslint": "^8.42.0", "eslint-plugin-vue": "^9.14.1", "npm-run-all": "^4.1.5", - "sass": "^1.62.2", + "sass": "^1.62.3", "terser": "^5.17.7", "typescript": "^5.1.3", "vite": "^4.3.9", diff --git a/webapp/yarn.lock b/webapp/yarn.lock index 5888d035c..e3cbb1ec6 100644 --- a/webapp/yarn.lock +++ b/webapp/yarn.lock @@ -372,10 +372,10 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== -"@types/node@^20.2.5": - version "20.2.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.5.tgz#26d295f3570323b2837d322180dfbf1ba156fefb" - integrity sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ== +"@types/node@^20.3.0": + version "20.3.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.0.tgz#719498898d5defab83c3560f45d8498f58d11938" + integrity sha512-cumHmIAf6On83X7yP+LrsEyUOf/YlociZelmpRYaGFydoaPdxdt80MAbu6vWerQT2COCp2nPvHdsbD7tHn/YlQ== "@types/semver@^7.3.12": version "7.3.13" @@ -2220,10 +2220,10 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" -sass@^1.62.2: - version "1.63.2" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.63.2.tgz#75f7d9a8e67d1d5b98a989507f4d98b6067b1f75" - integrity sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww== +sass@^1.62.3: + version "1.63.3" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.63.3.tgz#527746aa43bf2e4eac1ab424f67f6f18a081061a" + integrity sha512-ySdXN+DVpfwq49jG1+hmtDslYqpS7SkOR5GpF6o2bmb1RL/xS+wvPmegMvMywyfsmAV6p7TgwXYGrCZIFFbAHg== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" From 3562e85b5ec110c73fba0b72858e47bf9b667ea6 Mon Sep 17 00:00:00 2001 From: Dominic Michel Date: Tue, 13 Jun 2023 20:59:24 +0200 Subject: [PATCH 22/39] Change metric type back to gauge --- src/WebApi_prometheus.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/WebApi_prometheus.cpp b/src/WebApi_prometheus.cpp index e5f289a9e..28b003315 100644 --- a/src/WebApi_prometheus.cpp +++ b/src/WebApi_prometheus.cpp @@ -54,7 +54,7 @@ void WebApiPrometheusClass::onPrometheusMetricsGet(AsyncWebServerRequest* reques stream->printf("wifi_rssi %d\n", WiFi.RSSI()); stream->print("# HELP wifi_station WiFi Station info\n"); - stream->print("# TYPE wifi_station label\n"); + stream->print("# TYPE wifi_station gauge\n"); stream->printf("wifi_station{bssid=\"%s\"} 1\n", WiFi.BSSIDstr().c_str()); for (uint8_t i = 0; i < Hoymiles.getNumInverters(); i++) { From 64c96c34f4cf3c6669e2155ebda8857836413fad Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Wed, 14 Jun 2023 21:44:55 +0200 Subject: [PATCH 23/39] Revert "Fix: String numbers for HMT inverters are mirrored" This reverts commit 593a33020f4b51bbb63c35ab16312c43c2452930. --- lib/Hoymiles/src/inverters/HMT_6CH.cpp | 68 +++++++++++++------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/lib/Hoymiles/src/inverters/HMT_6CH.cpp b/lib/Hoymiles/src/inverters/HMT_6CH.cpp index e54382eae..eea3353da 100644 --- a/lib/Hoymiles/src/inverters/HMT_6CH.cpp +++ b/lib/Hoymiles/src/inverters/HMT_6CH.cpp @@ -5,47 +5,47 @@ #include "HMT_6CH.h" static const byteAssign_t byteAssignment[] = { - { TYPE_DC, CH0, FLD_UDC, UNIT_V, 46, 2, 10, false, 1 }, - { TYPE_DC, CH0, FLD_IDC, UNIT_A, 50, 2, 100, false, 2 }, - { TYPE_DC, CH0, FLD_PDC, UNIT_W, 54, 2, 10, false, 1 }, - { TYPE_DC, CH0, FLD_YT, UNIT_KWH, 60, 4, 1000, false, 3 }, - { TYPE_DC, CH0, FLD_YD, UNIT_WH, 66, 2, 1, false, 0 }, - { TYPE_DC, CH0, FLD_IRR, UNIT_PCT, CALC_IRR_CH, CH5, CMD_CALC, false, 3 }, + { TYPE_DC, CH0, FLD_UDC, UNIT_V, 2, 2, 10, false, 1 }, + { TYPE_DC, CH0, FLD_IDC, UNIT_A, 4, 2, 100, false, 2 }, + { TYPE_DC, CH0, FLD_PDC, UNIT_W, 8, 2, 10, false, 1 }, + { TYPE_DC, CH0, FLD_YT, UNIT_KWH, 12, 4, 1000, false, 3 }, + { TYPE_DC, CH0, FLD_YD, UNIT_WH, 20, 2, 1, false, 0 }, + { TYPE_DC, CH0, FLD_IRR, UNIT_PCT, CALC_IRR_CH, CH0, CMD_CALC, false, 3 }, - { TYPE_DC, CH1, FLD_UDC, UNIT_V, 46, 2, 10, false, 1 }, - { TYPE_DC, CH1, FLD_IDC, UNIT_A, 48, 2, 100, false, 2 }, - { TYPE_DC, CH1, FLD_PDC, UNIT_W, 52, 2, 10, false, 1 }, - { TYPE_DC, CH1, FLD_YT, UNIT_KWH, 56, 4, 1000, false, 3 }, - { TYPE_DC, CH1, FLD_YD, UNIT_WH, 64, 2, 1, false, 0 }, - { TYPE_DC, CH1, FLD_IRR, UNIT_PCT, CALC_IRR_CH, CH4, CMD_CALC, false, 3 }, + { TYPE_DC, CH1, FLD_UDC, UNIT_V, 2, 2, 10, false, 1 }, + { TYPE_DC, CH1, FLD_IDC, UNIT_A, 6, 2, 100, false, 2 }, + { TYPE_DC, CH1, FLD_PDC, UNIT_W, 10, 2, 10, false, 1 }, + { TYPE_DC, CH1, FLD_YT, UNIT_KWH, 16, 4, 1000, false, 3 }, + { TYPE_DC, CH1, FLD_YD, UNIT_WH, 22, 2, 1, false, 0 }, + { TYPE_DC, CH1, FLD_IRR, UNIT_PCT, CALC_IRR_CH, CH1, CMD_CALC, false, 3 }, { TYPE_DC, CH2, FLD_UDC, UNIT_V, 24, 2, 10, false, 1 }, - { TYPE_DC, CH2, FLD_IDC, UNIT_A, 28, 2, 100, false, 2 }, - { TYPE_DC, CH2, FLD_PDC, UNIT_W, 32, 2, 10, false, 1 }, - { TYPE_DC, CH2, FLD_YT, UNIT_KWH, 38, 4, 1000, false, 3 }, - { TYPE_DC, CH2, FLD_YD, UNIT_WH, 44, 2, 1, false, 0 }, - { TYPE_DC, CH2, FLD_IRR, UNIT_PCT, CALC_IRR_CH, CH3, CMD_CALC, false, 3 }, + { TYPE_DC, CH2, FLD_IDC, UNIT_A, 26, 2, 100, false, 2 }, + { TYPE_DC, CH2, FLD_PDC, UNIT_W, 30, 2, 10, false, 1 }, + { TYPE_DC, CH2, FLD_YT, UNIT_KWH, 34, 4, 1000, false, 3 }, + { TYPE_DC, CH2, FLD_YD, UNIT_WH, 42, 2, 1, false, 0 }, + { TYPE_DC, CH2, FLD_IRR, UNIT_PCT, CALC_IRR_CH, CH2, CMD_CALC, false, 3 }, { TYPE_DC, CH3, FLD_UDC, UNIT_V, 24, 2, 10, false, 1 }, - { TYPE_DC, CH3, FLD_IDC, UNIT_A, 26, 2, 100, false, 2 }, - { TYPE_DC, CH3, FLD_PDC, UNIT_W, 30, 2, 10, false, 1 }, - { TYPE_DC, CH3, FLD_YT, UNIT_KWH, 34, 4, 1000, false, 3 }, - { TYPE_DC, CH3, FLD_YD, UNIT_WH, 42, 2, 1, false, 0 }, - { TYPE_DC, CH3, FLD_IRR, UNIT_PCT, CALC_IRR_CH, CH2, CMD_CALC, false, 3 }, + { TYPE_DC, CH3, FLD_IDC, UNIT_A, 28, 2, 100, false, 2 }, + { TYPE_DC, CH3, FLD_PDC, UNIT_W, 32, 2, 10, false, 1 }, + { TYPE_DC, CH3, FLD_YT, UNIT_KWH, 38, 4, 1000, false, 3 }, + { TYPE_DC, CH3, FLD_YD, UNIT_WH, 44, 2, 1, false, 0 }, + { TYPE_DC, CH3, FLD_IRR, UNIT_PCT, CALC_IRR_CH, CH3, CMD_CALC, false, 3 }, - { TYPE_DC, CH4, FLD_UDC, UNIT_V, 2, 2, 10, false, 1 }, - { TYPE_DC, CH4, FLD_IDC, UNIT_A, 6, 2, 100, false, 2 }, - { TYPE_DC, CH4, FLD_PDC, UNIT_W, 10, 2, 10, false, 1 }, - { TYPE_DC, CH4, FLD_YT, UNIT_KWH, 16, 4, 1000, false, 3 }, - { TYPE_DC, CH4, FLD_YD, UNIT_WH, 22, 2, 1, false, 0 }, - { TYPE_DC, CH4, FLD_IRR, UNIT_PCT, CALC_IRR_CH, CH1, CMD_CALC, false, 3 }, + { TYPE_DC, CH4, FLD_UDC, UNIT_V, 46, 2, 10, false, 1 }, + { TYPE_DC, CH4, FLD_IDC, UNIT_A, 48, 2, 100, false, 2 }, + { TYPE_DC, CH4, FLD_PDC, UNIT_W, 52, 2, 10, false, 1 }, + { TYPE_DC, CH4, FLD_YT, UNIT_KWH, 56, 4, 1000, false, 3 }, + { TYPE_DC, CH4, FLD_YD, UNIT_WH, 64, 2, 1, false, 0 }, + { TYPE_DC, CH4, FLD_IRR, UNIT_PCT, CALC_IRR_CH, CH4, CMD_CALC, false, 3 }, - { TYPE_DC, CH5, FLD_UDC, UNIT_V, 2, 2, 10, false, 1 }, - { TYPE_DC, CH5, FLD_IDC, UNIT_A, 4, 2, 100, false, 2 }, - { TYPE_DC, CH5, FLD_PDC, UNIT_W, 8, 2, 10, false, 1 }, - { TYPE_DC, CH5, FLD_YT, UNIT_KWH, 12, 4, 1000, false, 3 }, - { TYPE_DC, CH5, FLD_YD, UNIT_WH, 20, 2, 1, false, 0 }, - { TYPE_DC, CH5, FLD_IRR, UNIT_PCT, CALC_IRR_CH, CH0, CMD_CALC, false, 3 }, + { TYPE_DC, CH5, FLD_UDC, UNIT_V, 46, 2, 10, false, 1 }, + { TYPE_DC, CH5, FLD_IDC, UNIT_A, 50, 2, 100, false, 2 }, + { TYPE_DC, CH5, FLD_PDC, UNIT_W, 54, 2, 10, false, 1 }, + { TYPE_DC, CH5, FLD_YT, UNIT_KWH, 60, 4, 1000, false, 3 }, + { TYPE_DC, CH5, FLD_YD, UNIT_WH, 66, 2, 1, false, 0 }, + { TYPE_DC, CH5, FLD_IRR, UNIT_PCT, CALC_IRR_CH, CH5, CMD_CALC, false, 3 }, { TYPE_AC, CH0, FLD_UAC, UNIT_V, 74, 2, 10, false, 1 }, // dummy { TYPE_AC, CH0, FLD_UAC_1N, UNIT_V, 68, 2, 10, false, 1 }, From 0a56dc2ae10fdcb460ea2b2862035bbb9678c27c Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Wed, 14 Jun 2023 21:53:53 +0200 Subject: [PATCH 24/39] webapp: Update dependencies --- webapp/package.json | 6 +++--- webapp/yarn.lock | 24 ++++++++++++------------ 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/webapp/package.json b/webapp/package.json index 5a782910b..fbd1c2177 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -26,7 +26,7 @@ "@rushstack/eslint-patch": "^1.3.1", "@tsconfig/node18": "^2.0.1", "@types/bootstrap": "^5.2.6", - "@types/node": "^20.3.0", + "@types/node": "^20.3.1", "@types/sortablejs": "^1.15.1", "@types/spark-md5": "^3.0.2", "@vitejs/plugin-vue": "^4.2.3", @@ -35,8 +35,8 @@ "eslint": "^8.42.0", "eslint-plugin-vue": "^9.14.1", "npm-run-all": "^4.1.5", - "sass": "^1.62.3", - "terser": "^5.17.7", + "sass": "^1.63.4", + "terser": "^5.18.0", "typescript": "^5.1.3", "vite": "^4.3.9", "vite-plugin-compression": "^0.5.1", diff --git a/webapp/yarn.lock b/webapp/yarn.lock index e3cbb1ec6..87cca0574 100644 --- a/webapp/yarn.lock +++ b/webapp/yarn.lock @@ -372,10 +372,10 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== -"@types/node@^20.3.0": - version "20.3.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.0.tgz#719498898d5defab83c3560f45d8498f58d11938" - integrity sha512-cumHmIAf6On83X7yP+LrsEyUOf/YlociZelmpRYaGFydoaPdxdt80MAbu6vWerQT2COCp2nPvHdsbD7tHn/YlQ== +"@types/node@^20.3.1": + version "20.3.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.1.tgz#e8a83f1aa8b649377bb1fb5d7bac5cb90e784dfe" + integrity sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg== "@types/semver@^7.3.12": version "7.3.13" @@ -2220,10 +2220,10 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" -sass@^1.62.3: - version "1.63.3" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.63.3.tgz#527746aa43bf2e4eac1ab424f67f6f18a081061a" - integrity sha512-ySdXN+DVpfwq49jG1+hmtDslYqpS7SkOR5GpF6o2bmb1RL/xS+wvPmegMvMywyfsmAV6p7TgwXYGrCZIFFbAHg== +sass@^1.63.4: + version "1.63.4" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.63.4.tgz#caf60643321044c61f6a0fe638a07abbd31cfb5d" + integrity sha512-Sx/+weUmK+oiIlI+9sdD0wZHsqpbgQg8wSwSnGBjwb5GwqFhYNwwnI+UWZtLjKvKyFlKkatRK235qQ3mokyPoQ== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" @@ -2418,10 +2418,10 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -terser@^5.17.7: - version "5.17.7" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.17.7.tgz#2a8b134826fe179b711969fd9d9a0c2479b2a8c3" - integrity sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ== +terser@^5.18.0: + version "5.18.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.18.0.tgz#dc811fb8e3481a875d545bda247c8730ee4dc76b" + integrity sha512-pdL757Ig5a0I+owA42l6tIuEycRuM7FPY4n62h44mRLRfnOxJkkOHd6i89dOpwZlpF6JXBwaAHF6yWzFrt+QyA== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" From 184c65919770d1f84ebdedc774af7376f0471988 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Mon, 19 Jun 2023 11:33:06 +0200 Subject: [PATCH 25/39] Added new found HMS-400 to DevInfoParser Fixes #1045 --- lib/Hoymiles/src/parser/DevInfoParser.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/Hoymiles/src/parser/DevInfoParser.cpp b/lib/Hoymiles/src/parser/DevInfoParser.cpp index 0c1a10f54..d5994dcab 100644 --- a/lib/Hoymiles/src/parser/DevInfoParser.cpp +++ b/lib/Hoymiles/src/parser/DevInfoParser.cpp @@ -29,6 +29,7 @@ const devInfo_t devInfo[] = { { { 0x10, 0x10, 0x10, 0x15 }, static_cast(300 * 0.7), "HM-300" }, // HM-300 factory limitted to 70% { { 0x10, 0x20, 0x21, ALL }, 350, "HMS-350" }, // 00 + { { 0x10, 0x20, 0x41, ALL }, 400, "HMS-400" }, // 00 { { 0x10, 0x10, 0x51, ALL }, 450, "HMS-450" }, // 01 { { 0x10, 0x10, 0x71, ALL }, 500, "HMS-500" }, // 02 { { 0x10, 0x21, 0x11, ALL }, 600, "HMS-600" }, // 01 From 915b084af54b7055e31ea343ea4657d8c5b20c1a Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Mon, 19 Jun 2023 11:35:48 +0200 Subject: [PATCH 26/39] webapp: Update dependencies --- webapp/package.json | 8 +- webapp/yarn.lock | 186 +++++++++++++++++++------------------------- 2 files changed, 82 insertions(+), 112 deletions(-) diff --git a/webapp/package.json b/webapp/package.json index fbd1c2177..88a6237e7 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -23,7 +23,7 @@ }, "devDependencies": { "@intlify/unplugin-vue-i18n": "^0.11.0", - "@rushstack/eslint-patch": "^1.3.1", + "@rushstack/eslint-patch": "^1.3.2", "@tsconfig/node18": "^2.0.1", "@types/bootstrap": "^5.2.6", "@types/node": "^20.3.1", @@ -32,8 +32,8 @@ "@vitejs/plugin-vue": "^4.2.3", "@vue/eslint-config-typescript": "^11.0.3", "@vue/tsconfig": "^0.4.0", - "eslint": "^8.42.0", - "eslint-plugin-vue": "^9.14.1", + "eslint": "^8.43.0", + "eslint-plugin-vue": "^9.15.0", "npm-run-all": "^4.1.5", "sass": "^1.63.4", "terser": "^5.18.0", @@ -41,6 +41,6 @@ "vite": "^4.3.9", "vite-plugin-compression": "^0.5.1", "vite-plugin-css-injected-by-js": "^3.1.1", - "vue-tsc": "^1.6.5" + "vue-tsc": "^1.8.0" } } diff --git a/webapp/yarn.lock b/webapp/yarn.lock index 87cca0574..affe54c5c 100644 --- a/webapp/yarn.lock +++ b/webapp/yarn.lock @@ -156,10 +156,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.42.0": - version "8.42.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.42.0.tgz#484a1d638de2911e6f5a30c12f49c7e4a3270fb6" - integrity sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw== +"@eslint/js@8.43.0": + version "8.43.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.43.0.tgz#559ca3d9ddbd6bf907ad524320a0d14b85586af0" + integrity sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg== "@humanwhocodes/config-array@^0.11.10": version "0.11.10" @@ -345,10 +345,10 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@rushstack/eslint-patch@^1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.3.1.tgz#edbb85ff95f3be41eaa70c6d6ad6d8ba0a9c7e46" - integrity sha512-RkmuBcqiNioeeBKbgzMlOdreUkJfYaSjwgx9XDgGGpjvWgyaxWvDmZVSN9CS6LjEASadhgPv2BcFp+SeouWXXA== +"@rushstack/eslint-patch@^1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.3.2.tgz#31b9c510d8cada9683549e1dbb4284cca5001faf" + integrity sha512-V+MvGwaHH03hYhY+k6Ef/xKd6RYlc4q8WBx+2ANmipHJcKuktNcI/NgEsJgdSUF6Lw32njT6OnrRsKYCdgHjYw== "@tsconfig/node18@^2.0.1": version "2.0.1" @@ -481,49 +481,26 @@ resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-4.2.3.tgz#ee0b6dfcc62fe65364e6395bf38fa2ba10bb44b6" integrity sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw== -"@volar/language-core@1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.4.1.tgz#66b5758252e35c4e5e71197ca7fa0344d306442c" - integrity sha512-EIY+Swv+TjsWpxOxujjMf1ZXqOjg9MT2VMXZ+1dKva0wD8W0L6EtptFFcCJdBbcKmGMFkr57Qzz9VNMWhs3jXQ== +"@volar/language-core@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.7.6.tgz#71da3e34e8e9f676378c7a7dae1a8eb5511dbd3c" + integrity sha512-r+82YGjae8ALzaX+TaESpeBOrp/H5MQnPYZLq4WKd8rsPrCAPbMwelwHLHhFpyjy66BK/cKreJAcvOc6YEwyFA== dependencies: - "@volar/source-map" "1.4.1" + "@volar/source-map" "1.7.6" -"@volar/source-map@1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-1.4.1.tgz#e3b561775c742508e5e1f28609a4787c98056715" - integrity sha512-bZ46ad72dsbzuOWPUtJjBXkzSQzzSejuR3CT81+GvTEI2E994D8JPXzM3tl98zyCNnjgs4OkRyliImL1dvJ5BA== +"@volar/source-map@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-1.7.6.tgz#e64e663d4ddb2620f771d7b9560ccc2c8ffcdd2e" + integrity sha512-6oGrgz+hg5GCzP8D2+ay7vOdIOA9/aXwpa22Wx5b6d4ZGwwosBqv7kVs8AyMh5zOSQpKhrImE1pfagpu+V+rBQ== dependencies: - muggle-string "^0.2.2" + muggle-string "^0.3.1" -"@volar/typescript@1.4.1-patch.2": - version "1.4.1-patch.2" - resolved "https://registry.yarnpkg.com/@volar/typescript/-/typescript-1.4.1-patch.2.tgz#89f4bd199ca81a832d86d1449b01f49f2b72137c" - integrity sha512-lPFYaGt8OdMEzNGJJChF40uYqMO4Z/7Q9fHPQC/NRVtht43KotSXLrkPandVVMf9aPbiJ059eAT+fwHGX16k4w== +"@volar/typescript@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@volar/typescript/-/typescript-1.7.6.tgz#2cf652831cf8b77915104eca215909677b3d9a0e" + integrity sha512-JkBRQe2GYSEgamW84tDk4XQ/7abQJw09czLQCgL1jfjndhaV4DuAet2I3pvQv41OjodVc59W0+E3hylrlNsgWA== dependencies: - "@volar/language-core" "1.4.1" - -"@volar/vue-language-core@1.6.5": - version "1.6.5" - resolved "https://registry.yarnpkg.com/@volar/vue-language-core/-/vue-language-core-1.6.5.tgz#db42520f1a29737c7e40fbb3e6aead8def85ba75" - integrity sha512-IF2b6hW4QAxfsLd5mePmLgtkXzNi+YnH6ltCd80gb7+cbdpFMjM1I+w+nSg2kfBTyfu+W8useCZvW89kPTBpzg== - dependencies: - "@volar/language-core" "1.4.1" - "@volar/source-map" "1.4.1" - "@vue/compiler-dom" "^3.3.0" - "@vue/compiler-sfc" "^3.3.0" - "@vue/reactivity" "^3.3.0" - "@vue/shared" "^3.3.0" - minimatch "^9.0.0" - muggle-string "^0.2.2" - vue-template-compiler "^2.7.14" - -"@volar/vue-typescript@1.6.5": - version "1.6.5" - resolved "https://registry.yarnpkg.com/@volar/vue-typescript/-/vue-typescript-1.6.5.tgz#6ca9bfefa5dc64ff97fcdbc74249e5e7da44e533" - integrity sha512-er9rVClS4PHztMUmtPMDTl+7c7JyrxweKSAEe/o/Noeq2bQx6v3/jZHVHBe8ZNUti5ubJL/+Tg8L3bzmlalV8A== - dependencies: - "@volar/typescript" "1.4.1-patch.2" - "@volar/vue-language-core" "1.6.5" + "@volar/language-core" "1.7.6" "@vue/compiler-core@3.2.47": version "3.2.47" @@ -563,14 +540,6 @@ "@vue/compiler-core" "3.2.47" "@vue/shared" "3.2.47" -"@vue/compiler-dom@3.3.2", "@vue/compiler-dom@^3.3.0": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.3.2.tgz#2012ef4879375a4ca4ee68012a9256398b848af2" - integrity sha512-6gS3auANuKXLw0XH6QxkWqyPYPunziS2xb6VRenM3JY7gVfZcJvkCBHkb5RuNY1FCbBO3lkIi0CdXUCW1c7SXw== - dependencies: - "@vue/compiler-core" "3.3.2" - "@vue/shared" "3.3.2" - "@vue/compiler-dom@3.3.4": version "3.3.4" resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz#f56e09b5f4d7dc350f981784de9713d823341151" @@ -579,6 +548,14 @@ "@vue/compiler-core" "3.3.4" "@vue/shared" "3.3.4" +"@vue/compiler-dom@^3.3.0": + version "3.3.2" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.3.2.tgz#2012ef4879375a4ca4ee68012a9256398b848af2" + integrity sha512-6gS3auANuKXLw0XH6QxkWqyPYPunziS2xb6VRenM3JY7gVfZcJvkCBHkb5RuNY1FCbBO3lkIi0CdXUCW1c7SXw== + dependencies: + "@vue/compiler-core" "3.3.2" + "@vue/shared" "3.3.2" + "@vue/compiler-sfc@3.3.4": version "3.3.4" resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz#b19d942c71938893535b46226d602720593001df" @@ -611,22 +588,6 @@ postcss "^8.1.10" source-map "^0.6.1" -"@vue/compiler-sfc@^3.3.0": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.3.2.tgz#d6467acba8446655bcee7e751441232e5ddebcbf" - integrity sha512-jG4jQy28H4BqzEKsQqqW65BZgmo3vzdLHTBjF+35RwtDdlFE+Fk1VWJYUnDMMqkFBo6Ye1ltSKVOMPgkzYj7SQ== - dependencies: - "@babel/parser" "^7.20.15" - "@vue/compiler-core" "3.3.2" - "@vue/compiler-dom" "3.3.2" - "@vue/compiler-ssr" "3.3.2" - "@vue/reactivity-transform" "3.3.2" - "@vue/shared" "3.3.2" - estree-walker "^2.0.2" - magic-string "^0.30.0" - postcss "^8.1.10" - source-map-js "^1.0.2" - "@vue/compiler-ssr@3.2.47": version "3.2.47" resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz#35872c01a273aac4d6070ab9d8da918ab13057ee" @@ -635,14 +596,6 @@ "@vue/compiler-dom" "3.2.47" "@vue/shared" "3.2.47" -"@vue/compiler-ssr@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.3.2.tgz#75ac4ccafa2d78c91d2e257ad243c86409493cc4" - integrity sha512-K8OfY5FQtZaSOJHHe8xhEfIfLrefL/Y9frv4k4NsyQL3+0lRKxr9QuJhfdBDjkl7Fhz8CzKh63mULvmOfx3l2w== - dependencies: - "@vue/compiler-dom" "3.3.2" - "@vue/shared" "3.3.2" - "@vue/compiler-ssr@3.3.4": version "3.3.4" resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz#9d1379abffa4f2b0cd844174ceec4a9721138777" @@ -670,6 +623,20 @@ "@typescript-eslint/parser" "^5.59.1" vue-eslint-parser "^9.1.1" +"@vue/language-core@1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@vue/language-core/-/language-core-1.8.0.tgz#3d106afdef859464435c90921fcce200a0b1d15c" + integrity sha512-rOAtqIRyyZ6OQreAkFDbbDt7L5BwvzrdbWaBAoEZjr4ImPBV9cRDBHxlMBU0SBOAZxIUQdjOvQ0uAl9uZDer0w== + dependencies: + "@volar/language-core" "1.7.6" + "@volar/source-map" "1.7.6" + "@vue/compiler-dom" "^3.3.0" + "@vue/reactivity" "^3.3.0" + "@vue/shared" "^3.3.0" + minimatch "^9.0.0" + muggle-string "^0.3.1" + vue-template-compiler "^2.7.14" + "@vue/reactivity-transform@3.2.47": version "3.2.47" resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz#e45df4d06370f8abf29081a16afd25cffba6d84e" @@ -681,17 +648,6 @@ estree-walker "^2.0.2" magic-string "^0.25.7" -"@vue/reactivity-transform@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.3.2.tgz#e1991d52d7ecefb65b214d8a3385a9dbe2cca74c" - integrity sha512-iu2WaQvlJHdnONrsyv4ibIEnSsuKF+aHFngGj/y1lwpHQtalpVhKg9wsKMoiKXS9zPNjG9mNKzJS9vudvjzvyg== - dependencies: - "@babel/parser" "^7.20.15" - "@vue/compiler-core" "3.3.2" - "@vue/shared" "3.3.2" - estree-walker "^2.0.2" - magic-string "^0.30.0" - "@vue/reactivity-transform@3.3.4": version "3.3.4" resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz#52908476e34d6a65c6c21cd2722d41ed8ae51929" @@ -762,6 +718,14 @@ resolved "https://registry.yarnpkg.com/@vue/tsconfig/-/tsconfig-0.4.0.tgz#f01e2f6089b5098136fb084a0dd0cdd4533b72b0" integrity sha512-CPuIReonid9+zOG/CGTT05FXrPYATEqoDGNrEaqS4hwcw5BUNM2FguC0mOwJD4Jr16UpRVl9N0pY3P+srIbqmg== +"@vue/typescript@1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@vue/typescript/-/typescript-1.8.0.tgz#0483abb622df89044509187960ca334d8b44662b" + integrity sha512-swi0NM+dpZCldXkMGS8wCxvoiRgA0PJw0UQeSTA7PqB2/5LsOQ8pmxyqLPE6YsbEdn0XqI9a7QgKOmmElkaMOA== + dependencies: + "@volar/typescript" "1.7.6" + "@vue/language-core" "1.8.0" + acorn-jsx@^5.2.0, acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" @@ -1125,10 +1089,10 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" -eslint-plugin-vue@^9.14.1: - version "9.14.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.14.1.tgz#3b0c9857642dac547c7564031cfb09d283eafdd4" - integrity sha512-LQazDB1qkNEKejLe/b5a9VfEbtbczcOaui5lQ4Qw0tbRBbQYREyxxOV5BQgNDTqGPs9pxqiEpbMi9ywuIaF7vw== +eslint-plugin-vue@^9.15.0: + version "9.15.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.15.0.tgz#2bffe2b8a628ee438f983672a73cd89df455c461" + integrity sha512-XYzpK6e2REli100+6iCeBA69v6Sm0D/yK2FZP+fCeNt0yH/m82qZQq+ztseyV0JsKdhFysuSEzeE1yCmSC92BA== dependencies: "@eslint-community/eslint-utils" "^4.3.0" natural-compare "^1.4.0" @@ -1184,15 +1148,15 @@ eslint-visitor-keys@^3.4.1: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== -eslint@^8.42.0: - version "8.42.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.42.0.tgz#7bebdc3a55f9ed7167251fe7259f75219cade291" - integrity sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A== +eslint@^8.43.0: + version "8.43.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.43.0.tgz#3e8c6066a57097adfd9d390b8fc93075f257a094" + integrity sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.4.0" "@eslint/eslintrc" "^2.0.3" - "@eslint/js" "8.42.0" + "@eslint/js" "8.43.0" "@humanwhocodes/config-array" "^0.11.10" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" @@ -1882,10 +1846,10 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -muggle-string@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.2.2.tgz#786aa53fea1652c61c6a59e1f839292b262bc72a" - integrity sha512-YVE1mIJ4VpUMqZObFndk9CJu6DBJR/GB13p3tXuNbwD4XExaI5EOuRl6BHeIDxIqXZVxSfAC+y6U1Z/IxCfKUg== +muggle-string@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.3.1.tgz#e524312eb1728c63dd0b2ac49e3282e6ed85963a" + integrity sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg== nanoid@^3.3.4: version "3.3.4" @@ -2551,6 +2515,11 @@ vite@^4.3.9: optionalDependencies: fsevents "~2.3.2" +vscode-uri@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.7.tgz#6d19fef387ee6b46c479e5fb00870e15e58c1eb8" + integrity sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA== + vue-eslint-parser@^9.1.1: version "9.1.1" resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.1.1.tgz#3f4859be7e9bb7edaa1dc7edb05abffee72bf3dd" @@ -2602,14 +2571,15 @@ vue-template-compiler@^2.7.14: de-indent "^1.0.2" he "^1.2.0" -vue-tsc@^1.6.5: - version "1.6.5" - resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-1.6.5.tgz#cd18804b12087c300b6c9ee2a1da41a63f11103e" - integrity sha512-Wtw3J7CC+JM2OR56huRd5iKlvFWpvDiU+fO1+rqyu4V2nMTotShz4zbOZpW5g9fUOcjnyZYfBo5q5q+D/q27JA== +vue-tsc@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-1.8.0.tgz#0312964b67c8e2a3fe15ae5328f087f3cef93a5c" + integrity sha512-zRjRghohec71o+o3dzzqwFLtbKmJ1K1xRnq9ToHRdnHbBSZA2eUaTT1o+y4xOkBLZtW4cv7FkZE0FGCZfMrcBw== dependencies: - "@volar/vue-language-core" "1.6.5" - "@volar/vue-typescript" "1.6.5" + "@vue/language-core" "1.8.0" + "@vue/typescript" "1.8.0" semver "^7.3.8" + vscode-uri "^3.0.7" vue@^3.3.4: version "3.3.4" From 30fbd982741492981b1fa37d234903a378d0dbc8 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Wed, 21 Jun 2023 19:56:14 +0200 Subject: [PATCH 27/39] Fix: Reboot loop occoured when no rf module was configured --- src/InverterSettings.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/InverterSettings.cpp b/src/InverterSettings.cpp index 52a37b5df..459b68228 100644 --- a/src/InverterSettings.cpp +++ b/src/InverterSettings.cpp @@ -28,10 +28,11 @@ void InverterSettingsClass::init() // Initialize inverter communication MessageOutput.print("Initialize Hoymiles interface... "); - if (PinMapping.isValidNrf24Config() || PinMapping.isValidCmt2300Config()) { - Hoymiles.setMessageOutput(&MessageOutput); - Hoymiles.init(); + Hoymiles.setMessageOutput(&MessageOutput); + Hoymiles.init(); + + if (PinMapping.isValidNrf24Config() || PinMapping.isValidCmt2300Config()) { if (PinMapping.isValidNrf24Config()) { SPIClass* spiClass = new SPIClass(SPI_NRF); spiClass->begin(pin.nrf24_clk, pin.nrf24_miso, pin.nrf24_mosi, pin.nrf24_cs); From e8fee49dc838a0ebe860b520c4700a19b04886d6 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Wed, 21 Jun 2023 19:59:35 +0200 Subject: [PATCH 28/39] Allow the non-existence of the HOYMILES_PIN_ defines --- src/PinMapping.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/PinMapping.cpp b/src/PinMapping.cpp index 9cbcd8764..b9532d665 100644 --- a/src/PinMapping.cpp +++ b/src/PinMapping.cpp @@ -38,6 +38,30 @@ #define LED1 -1 #endif +#ifndef HOYMILES_PIN_SCLK +#define HOYMILES_PIN_SCLK -1 +#endif + +#ifndef HOYMILES_PIN_CS +#define HOYMILES_PIN_CS -1 +#endif + +#ifndef HOYMILES_PIN_CE +#define HOYMILES_PIN_CE -1 +#endif + +#ifndef HOYMILES_PIN_IRQ +#define HOYMILES_PIN_IRQ -1 +#endif + +#ifndef HOYMILES_PIN_MISO +#define HOYMILES_PIN_MISO -1 +#endif + +#ifndef HOYMILES_PIN_MOSI +#define HOYMILES_PIN_MOSI -1 +#endif + #ifndef CMT_CLK #define CMT_CLK -1 #endif From 7656735103df31f6ef28a323a614ab9c1ee26bd1 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Wed, 21 Jun 2023 20:14:44 +0200 Subject: [PATCH 29/39] Pre-Compile a new generic esp32 binary without any pin config. --- platformio.ini | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/platformio.ini b/platformio.ini index ae2a623a2..d33506f99 100644 --- a/platformio.ini +++ b/platformio.ini @@ -9,14 +9,14 @@ ; https://docs.platformio.org/page/projectconf.html [platformio] -default_envs = generic +default_envs = generic_esp32 extra_configs = platformio_override.ini [env] ; Make sure to NOT add any spaces in the custom_ci_action property ; (also the position in the file is important) -custom_ci_action = generic +custom_ci_action = generic,generic_esp32 framework = arduino platform = espressif32@6.3.1 @@ -54,15 +54,9 @@ upload_protocol = esptool ; upload_port = COM4 -[env:generic] +[env:generic_esp32] board = esp32dev build_flags = ${env.build_flags} - -DHOYMILES_PIN_MISO=19 - -DHOYMILES_PIN_MOSI=23 - -DHOYMILES_PIN_SCLK=18 - -DHOYMILES_PIN_IRQ=16 - -DHOYMILES_PIN_CE=4 - -DHOYMILES_PIN_CS=5 [env:generic_esp32c3] @@ -70,10 +64,28 @@ board = esp32dev board_build.mcu = esp32c3 custom_patches = esp32c3 build_flags = ${env.build_flags} - -DHOYMILES_PIN_MISO=9 - -DHOYMILES_PIN_MOSI=10 - -DHOYMILES_PIN_SCLK=8 - -DHOYMILES_PIN_IRQ=3 + + +[env:generic_esp32s3] +board = esp32-s3-devkitc-1 +build_flags = ${env.build_flags} + + +[env:generic_esp32s3_usb] +board = esp32-s3-devkitc-1 +upload_protocol = esp-builtin +build_flags = ${env.build_flags} + -DARDUINO_USB_MODE=1 + -DARDUINO_USB_CDC_ON_BOOT=1 + + +[env:generic] +board = esp32dev +build_flags = ${env.build_flags} + -DHOYMILES_PIN_MISO=19 + -DHOYMILES_PIN_MOSI=23 + -DHOYMILES_PIN_SCLK=18 + -DHOYMILES_PIN_IRQ=16 -DHOYMILES_PIN_CE=4 -DHOYMILES_PIN_CS=5 From e0b054d2b53273fab9d2a0f8258857aecf428836 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Wed, 21 Jun 2023 20:31:31 +0200 Subject: [PATCH 30/39] Pre-Compile a new generic esp32s3 binary without any pin config. --- platformio.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platformio.ini b/platformio.ini index d33506f99..cd46b6f9c 100644 --- a/platformio.ini +++ b/platformio.ini @@ -16,7 +16,7 @@ extra_configs = [env] ; Make sure to NOT add any spaces in the custom_ci_action property ; (also the position in the file is important) -custom_ci_action = generic,generic_esp32 +custom_ci_action = generic,generic_esp32,generic_esp32s3,generic_esp32s3_usb framework = arduino platform = espressif32@6.3.1 From 37b3b5abb916a55577f470d8208388994dfddf7d Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Wed, 21 Jun 2023 20:38:52 +0200 Subject: [PATCH 31/39] webapp: Update dependencies --- webapp/package.json | 6 ++-- webapp/yarn.lock | 86 +++++++++++++++++++++------------------------ 2 files changed, 43 insertions(+), 49 deletions(-) diff --git a/webapp/package.json b/webapp/package.json index 88a6237e7..590181fbc 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -35,12 +35,12 @@ "eslint": "^8.43.0", "eslint-plugin-vue": "^9.15.0", "npm-run-all": "^4.1.5", - "sass": "^1.63.4", - "terser": "^5.18.0", + "sass": "^1.63.5", + "terser": "^5.18.1", "typescript": "^5.1.3", "vite": "^4.3.9", "vite-plugin-compression": "^0.5.1", "vite-plugin-css-injected-by-js": "^3.1.1", - "vue-tsc": "^1.8.0" + "vue-tsc": "^1.8.1" } } diff --git a/webapp/yarn.lock b/webapp/yarn.lock index affe54c5c..8f82522d5 100644 --- a/webapp/yarn.lock +++ b/webapp/yarn.lock @@ -481,26 +481,26 @@ resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-4.2.3.tgz#ee0b6dfcc62fe65364e6395bf38fa2ba10bb44b6" integrity sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw== -"@volar/language-core@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.7.6.tgz#71da3e34e8e9f676378c7a7dae1a8eb5511dbd3c" - integrity sha512-r+82YGjae8ALzaX+TaESpeBOrp/H5MQnPYZLq4WKd8rsPrCAPbMwelwHLHhFpyjy66BK/cKreJAcvOc6YEwyFA== +"@volar/language-core@1.7.8": + version "1.7.8" + resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.7.8.tgz#88e33fda749ecb1ecb28c031027d45e778b8cd5f" + integrity sha512-TPklg4c2e/f1xB/MGZEiQc3AWG+dH64ZfBlYjFB8nNaWJt4Z4k+IHBhmaP52APG+5PHFerwiWI9oF002RrRTPA== dependencies: - "@volar/source-map" "1.7.6" + "@volar/source-map" "1.7.8" -"@volar/source-map@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-1.7.6.tgz#e64e663d4ddb2620f771d7b9560ccc2c8ffcdd2e" - integrity sha512-6oGrgz+hg5GCzP8D2+ay7vOdIOA9/aXwpa22Wx5b6d4ZGwwosBqv7kVs8AyMh5zOSQpKhrImE1pfagpu+V+rBQ== +"@volar/source-map@1.7.8": + version "1.7.8" + resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-1.7.8.tgz#46710f1d1e948e8009993595b70670e3ee4bfc1d" + integrity sha512-g2dtC2kOghvfzMDWeODIo4HO1Ml4hxzPTZyAFDz+YhRF9HjZYJSCaWaVuPZ+z0kY+T2daOHYA10GdrWQ5q0teA== dependencies: muggle-string "^0.3.1" -"@volar/typescript@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@volar/typescript/-/typescript-1.7.6.tgz#2cf652831cf8b77915104eca215909677b3d9a0e" - integrity sha512-JkBRQe2GYSEgamW84tDk4XQ/7abQJw09czLQCgL1jfjndhaV4DuAet2I3pvQv41OjodVc59W0+E3hylrlNsgWA== +"@volar/typescript@1.7.8": + version "1.7.8" + resolved "https://registry.yarnpkg.com/@volar/typescript/-/typescript-1.7.8.tgz#6997b3c7637292a6dc6e4a3737e45f3c4e49ef12" + integrity sha512-NDcI5ZQcdr8kgxzMQrhSSWIM8Tl0MbMFrkvJPTjfm2rdAQZPFT8zv3LrEW9Fqh0e9z2YbCry7jr4a/GShBqeDA== dependencies: - "@volar/language-core" "1.7.6" + "@volar/language-core" "1.7.8" "@vue/compiler-core@3.2.47": version "3.2.47" @@ -623,13 +623,13 @@ "@typescript-eslint/parser" "^5.59.1" vue-eslint-parser "^9.1.1" -"@vue/language-core@1.8.0": - version "1.8.0" - resolved "https://registry.yarnpkg.com/@vue/language-core/-/language-core-1.8.0.tgz#3d106afdef859464435c90921fcce200a0b1d15c" - integrity sha512-rOAtqIRyyZ6OQreAkFDbbDt7L5BwvzrdbWaBAoEZjr4ImPBV9cRDBHxlMBU0SBOAZxIUQdjOvQ0uAl9uZDer0w== +"@vue/language-core@1.8.1": + version "1.8.1" + resolved "https://registry.yarnpkg.com/@vue/language-core/-/language-core-1.8.1.tgz#86b709f803bcc0cab84fd14677c0fb909154c562" + integrity sha512-pumv3k4J7P58hVh4YGRM9Qz3HaAr4TlFWM9bnVOkZ/2K9o2CK1lAP2y9Jw+Z0+mNL4F2uWQqnAPzj3seLyfpDA== dependencies: - "@volar/language-core" "1.7.6" - "@volar/source-map" "1.7.6" + "@volar/language-core" "1.7.8" + "@volar/source-map" "1.7.8" "@vue/compiler-dom" "^3.3.0" "@vue/reactivity" "^3.3.0" "@vue/shared" "^3.3.0" @@ -718,13 +718,13 @@ resolved "https://registry.yarnpkg.com/@vue/tsconfig/-/tsconfig-0.4.0.tgz#f01e2f6089b5098136fb084a0dd0cdd4533b72b0" integrity sha512-CPuIReonid9+zOG/CGTT05FXrPYATEqoDGNrEaqS4hwcw5BUNM2FguC0mOwJD4Jr16UpRVl9N0pY3P+srIbqmg== -"@vue/typescript@1.8.0": - version "1.8.0" - resolved "https://registry.yarnpkg.com/@vue/typescript/-/typescript-1.8.0.tgz#0483abb622df89044509187960ca334d8b44662b" - integrity sha512-swi0NM+dpZCldXkMGS8wCxvoiRgA0PJw0UQeSTA7PqB2/5LsOQ8pmxyqLPE6YsbEdn0XqI9a7QgKOmmElkaMOA== +"@vue/typescript@1.8.1": + version "1.8.1" + resolved "https://registry.yarnpkg.com/@vue/typescript/-/typescript-1.8.1.tgz#2302f3cc8330e8dd91982eecd64d71ee11198cb0" + integrity sha512-nQpo55j/roie8heCfqyXHnyayqD5+p4/0fzfxH4ZuHf7NSBQS791PNv7ztp2CCOjnGAiaiCMdtC9rc6oriyPUg== dependencies: - "@volar/typescript" "1.7.6" - "@vue/language-core" "1.8.0" + "@volar/typescript" "1.7.8" + "@vue/language-core" "1.8.1" acorn-jsx@^5.2.0, acorn-jsx@^5.3.2: version "5.3.2" @@ -2184,10 +2184,10 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" -sass@^1.63.4: - version "1.63.4" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.63.4.tgz#caf60643321044c61f6a0fe638a07abbd31cfb5d" - integrity sha512-Sx/+weUmK+oiIlI+9sdD0wZHsqpbgQg8wSwSnGBjwb5GwqFhYNwwnI+UWZtLjKvKyFlKkatRK235qQ3mokyPoQ== +sass@^1.63.5: + version "1.63.5" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.63.5.tgz#6e1900b12576e3e74a8ab0a9d8607cacbe584ef1" + integrity sha512-Q6c5gs482oezdAp+0fWF9cRisvpy7yfYb64knID0OE8AnMgtkluRPfpGMFjeD4/+M4+6QpJZCU6JRSxbjiktkg== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" @@ -2382,10 +2382,10 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -terser@^5.18.0: - version "5.18.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.18.0.tgz#dc811fb8e3481a875d545bda247c8730ee4dc76b" - integrity sha512-pdL757Ig5a0I+owA42l6tIuEycRuM7FPY4n62h44mRLRfnOxJkkOHd6i89dOpwZlpF6JXBwaAHF6yWzFrt+QyA== +terser@^5.18.1: + version "5.18.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.18.1.tgz#6d8642508ae9fb7b48768e48f16d675c89a78460" + integrity sha512-j1n0Ao919h/Ai5r43VAnfV/7azUYW43GPxK7qSATzrsERfW7+y2QW9Cp9ufnRF5CQUWbnLSo7UJokSWCqg4tsQ== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -2515,11 +2515,6 @@ vite@^4.3.9: optionalDependencies: fsevents "~2.3.2" -vscode-uri@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.7.tgz#6d19fef387ee6b46c479e5fb00870e15e58c1eb8" - integrity sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA== - vue-eslint-parser@^9.1.1: version "9.1.1" resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.1.1.tgz#3f4859be7e9bb7edaa1dc7edb05abffee72bf3dd" @@ -2571,15 +2566,14 @@ vue-template-compiler@^2.7.14: de-indent "^1.0.2" he "^1.2.0" -vue-tsc@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-1.8.0.tgz#0312964b67c8e2a3fe15ae5328f087f3cef93a5c" - integrity sha512-zRjRghohec71o+o3dzzqwFLtbKmJ1K1xRnq9ToHRdnHbBSZA2eUaTT1o+y4xOkBLZtW4cv7FkZE0FGCZfMrcBw== +vue-tsc@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-1.8.1.tgz#cdbc83ad7d1c80eac82e01917a58bc57e2debed2" + integrity sha512-GxBQrcb0Qvyrj1uZqnTXQyWbXdNDRY2MTa+r7ESgjhf+WzBSdxZfkS3KD/C3WhKYG+aN8hf44Hp5Gqzb6PehAA== dependencies: - "@vue/language-core" "1.8.0" - "@vue/typescript" "1.8.0" + "@vue/language-core" "1.8.1" + "@vue/typescript" "1.8.1" semver "^7.3.8" - vscode-uri "^3.0.7" vue@^3.3.4: version "3.3.4" From 582867cdb9fdff2c216f07cd5ff69afc9c98beea Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Wed, 21 Jun 2023 20:44:18 +0200 Subject: [PATCH 32/39] Update olikraus/U8g2 from 2.34.18 to 2.34.22 --- platformio.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platformio.ini b/platformio.ini index cd46b6f9c..bdc0e9370 100644 --- a/platformio.ini +++ b/platformio.ini @@ -35,7 +35,7 @@ lib_deps = bblanchon/ArduinoJson @ ^6.21.2 https://github.com/bertmelis/espMqttClient.git#v1.4.3 nrf24/RF24 @ ^1.4.7 - olikraus/U8g2 @ ^2.34.18 + olikraus/U8g2 @ ^2.34.22 buelowp/sunset @ ^1.1.7 extra_scripts = From 93057fc3dc3e8c6ff2831e1dc40cff71f36863a4 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Wed, 21 Jun 2023 22:44:18 +0200 Subject: [PATCH 33/39] Feature: Added touch icon for iOS and Android Implements #1060 --- platformio.ini | 2 +- src/WebApi_webapp.cpp | 7 +++++++ webapp/index.html | 2 ++ webapp/public/favicon.png | Bin 0 -> 682 bytes webapp_dist/favicon.png | Bin 0 -> 682 bytes webapp_dist/index.html.gz | Bin 329 -> 363 bytes 6 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 webapp/public/favicon.png create mode 100644 webapp_dist/favicon.png diff --git a/platformio.ini b/platformio.ini index bdc0e9370..76b9188f2 100644 --- a/platformio.ini +++ b/platformio.ini @@ -22,7 +22,7 @@ framework = arduino platform = espressif32@6.3.1 build_flags = - -DCOMPONENT_EMBED_FILES=webapp_dist/index.html.gz:webapp_dist/zones.json.gz:webapp_dist/favicon.ico:webapp_dist/js/app.js.gz + -DCOMPONENT_EMBED_FILES=webapp_dist/index.html.gz:webapp_dist/zones.json.gz:webapp_dist/favicon.ico:webapp_dist/favicon.png:webapp_dist/js/app.js.gz -DPIOENV=\"$PIOENV\" -Wall -Wextra -Werror -std=c++17 diff --git a/src/WebApi_webapp.cpp b/src/WebApi_webapp.cpp index 4976f78e2..fd42da5c1 100644 --- a/src/WebApi_webapp.cpp +++ b/src/WebApi_webapp.cpp @@ -6,11 +6,13 @@ extern const uint8_t file_index_html_start[] asm("_binary_webapp_dist_index_html_gz_start"); extern const uint8_t file_favicon_ico_start[] asm("_binary_webapp_dist_favicon_ico_start"); +extern const uint8_t file_favicon_png_start[] asm("_binary_webapp_dist_favicon_png_start"); extern const uint8_t file_zones_json_start[] asm("_binary_webapp_dist_zones_json_gz_start"); extern const uint8_t file_app_js_start[] asm("_binary_webapp_dist_js_app_js_gz_start"); extern const uint8_t file_index_html_end[] asm("_binary_webapp_dist_index_html_gz_end"); extern const uint8_t file_favicon_ico_end[] asm("_binary_webapp_dist_favicon_ico_end"); +extern const uint8_t file_favicon_png_end[] asm("_binary_webapp_dist_favicon_png_end"); extern const uint8_t file_zones_json_end[] asm("_binary_webapp_dist_zones_json_gz_end"); extern const uint8_t file_app_js_end[] asm("_binary_webapp_dist_js_app_js_gz_end"); @@ -41,6 +43,11 @@ void WebApiWebappClass::init(AsyncWebServer* server) request->send(response); }); + _server->on("/favicon.png", HTTP_GET, [](AsyncWebServerRequest* request) { + AsyncWebServerResponse* response = request->beginResponse_P(200, "image/png", file_favicon_png_start, file_favicon_png_end - file_favicon_png_start); + request->send(response); + }); + _server->on("/zones.json", HTTP_GET, [](AsyncWebServerRequest* request) { AsyncWebServerResponse* response = request->beginResponse_P(200, "application/json", file_zones_json_start, file_zones_json_end - file_zones_json_start); response->addHeader("Content-Encoding", "gzip"); diff --git a/webapp/index.html b/webapp/index.html index 36236f188..39a94a039 100644 --- a/webapp/index.html +++ b/webapp/index.html @@ -3,6 +3,8 @@ + + OpenDTU diff --git a/webapp/public/favicon.png b/webapp/public/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..3378b661323215355b212542a9fe59b610adeae1 GIT binary patch literal 682 zcmV;b0#*HqP)Yc1Y}7*P?l{03AtJT4RzxI-h<_!=egl{XkU>KF z^h5+}t&1^w5rN)AMB!rv0PxKGeY@RoyG zB!GHK6>3jNMf-P0;F;Mm^JDI7qN*y__q~fT&XRFW0io-jEVgNPu;m^l(wtDw;O zQztS30W=ed*X$XPl;&jiTcKrYboHmx>DR#lAmR8Y4jc}LvP!6yLbZ16{@hxlom1oN z3$uA*y0vzYDaIH8fSFzXP2S&i-C!+8BJrqenlbVv={RO~#u(^J7n>86N%Qx7rGl~~ zA0rnLpELUN`K&#@0nq5A??lSeq`Uxtgy$b4*zI-$nE*iF_miZ&-|s(dG-l8Ny;kPT z{K$CwF(b+2C|Wj%%jL3l&8IPEg4f7f*b#+JopLRD2Yrf(z?q8wkc>e!?@P~)W-U35ZvO;%Mm>D);IdSt?j#+LNBR2t(lcCg zx==iHwypz!%N!zWt$a%FFLC29!5>!qrv0I!+Z<&kMWS9bd_m}EwaZ%1oM=&P!7MD%nnDD5^s8I#}p|6T?E0Pw3|@?Jmc Qz5oCK07*qoM6N<$f~lH1Y5)KL literal 0 HcmV?d00001 diff --git a/webapp_dist/favicon.png b/webapp_dist/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..3378b661323215355b212542a9fe59b610adeae1 GIT binary patch literal 682 zcmV;b0#*HqP)Yc1Y}7*P?l{03AtJT4RzxI-h<_!=egl{XkU>KF z^h5+}t&1^w5rN)AMB!rv0PxKGeY@RoyG zB!GHK6>3jNMf-P0;F;Mm^JDI7qN*y__q~fT&XRFW0io-jEVgNPu;m^l(wtDw;O zQztS30W=ed*X$XPl;&jiTcKrYboHmx>DR#lAmR8Y4jc}LvP!6yLbZ16{@hxlom1oN z3$uA*y0vzYDaIH8fSFzXP2S&i-C!+8BJrqenlbVv={RO~#u(^J7n>86N%Qx7rGl~~ zA0rnLpELUN`K&#@0nq5A??lSeq`Uxtgy$b4*zI-$nE*iF_miZ&-|s(dG-l8Ny;kPT z{K$CwF(b+2C|Wj%%jL3l&8IPEg4f7f*b#+JopLRD2Yrf(z?q8wkc>e!?@P~)W-U35ZvO;%Mm>D);IdSt?j#+LNBR2t(lcCg zx==iHwypz!%N!zWt$a%FFLC29!5>!qrv0I!+Z<&kMWS9bd_m}EwaZ%1oM=&P!7MD%nnDD5^s8I#}p|6T?E0Pw3|@?Jmc Qz5oCK07*qoM6N<$f~lH1Y5)KL literal 0 HcmV?d00001 diff --git a/webapp_dist/index.html.gz b/webapp_dist/index.html.gz index d0a8c5248d5b683e445218e217e429462811da31..cc2cb3815560274c68bf49a7d9a0278102d8ad22 100644 GIT binary patch literal 363 zcmV-x0hIn9iwFP!000023T;w7Z-X!p-SaE1Ua}Nuw+_J4v_qFfYND#6gD>F3*p_WT z{QDl5s;QC%``LHz<4pdr*}m?-cW=;yR+X!KT0n7K7YsEkR{(i~Tud9zA;7}DzRz@>u9G(i6op?Xtls@-rePdjxx&W~$j24NYI|qRpr%NJ6rm{uQX3{Scm%0skX$9c;tGrB z^yx1~kU?R&wWv4yL!Lz#uYBdC4NIQZh)yBtIODx>vX&aWtH|NmXXHLTdsgOI?1==^ zL*+r zBp6&cgAdMQFe40 Date: Thu, 22 Jun 2023 10:11:40 +0200 Subject: [PATCH 34/39] =?UTF-8?q?Ajout=20de=20traductions=20en=20Fran?= =?UTF-8?q?=C3=A7ais?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- webapp/src/locales/fr.json | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/webapp/src/locales/fr.json b/webapp/src/locales/fr.json index 86b517f50..9e3807e99 100644 --- a/webapp/src/locales/fr.json +++ b/webapp/src/locales/fr.json @@ -27,8 +27,8 @@ "Reload": "Reload" }, "localeswitcher": { - "Dark": "Dark", - "Light": "Light", + "Dark": "Sombre", + "Light": "Clair", "Auto": "Auto" }, "apiresponse": { @@ -190,13 +190,13 @@ }, "radioinfo": { "RadioInformation": "Informations sur la radio", - "Status": "{module} Status", - "ChipStatus": "{module} sÉtat de la puce", + "Status": "{module} Statut", + "ChipStatus": "{module} État de la puce", "ChipType": "{module} Type de puce", "Connected": "connectée", "NotConnected": "non connectée", - "Configured": "configured", - "NotConfigured": "not configured", + "Configured": "configurée", + "NotConfigured": "non configurée", "Unknown": "Inconnue" }, "networkinfo": { @@ -245,12 +245,12 @@ "Synced": "synchronisée", "NotSynced": "pas synchronisée", "LocalTime": "Heure locale", - "Sunrise": "Sunrise", - "Sunset": "Sunset", + "Sunrise": "Lever du soleil", + "Sunset": "Coucher du soleil", "NotAvailable": "Not Available", "Mode": "Mode", - "Day": "Day", - "Night": "Night" + "Day": "Jour", + "Night": "Nuit" }, "mqttinfo": { "MqttInformation": "MQTT Information", @@ -448,7 +448,7 @@ "InverterSerial": "Numéro de série de l'onduleur", "InverterName": "Nom de l'onduleur :", "InverterNameHint": "Ici, vous pouvez spécifier un nom personnalisé pour votre onduleur.", - "InverterStatus": "Receive / Send", + "InverterStatus": "Recevoir / Envoyer", "PollEnable": "Interroger les données de l'onduleur", "PollEnableNight": "Interroger les données de l'onduleur la nuit", "CommandEnable": "Envoyer des commandes", @@ -538,10 +538,10 @@ "ScreensaverHint": "Déplacez un peu l'écran à chaque mise à jour pour éviter le phénomène de brûlure. (Utile surtout pour les écrans OLED)", "Contrast": "Contraste ({contrast}):", "Rotation": "Rotation:", - "rot0": "No rotation", - "rot90": "90 degree rotation", - "rot180": "180 degree rotation", - "rot270": "270 degree rotation", + "rot0": "Pas de rotation", + "rot90": "Rotation de 90 degrés", + "rot180": "Rotation de 180 degrés", + "rot270": "Rotation de 270 degrés", "DisplayLanguage": "Langue d'affichage", "en": "Anglais", "de": "Allemand", From d8a3a75c0bbca37976fed69b1a14bfdad3a62f3c Mon Sep 17 00:00:00 2001 From: Gregor Wolf Date: Mon, 26 Jun 2023 07:39:18 +0200 Subject: [PATCH 35/39] Device Profile for Wemos Lolin32 OLED --- docs/DeviceProfiles/wemos-lolin32-oled.json | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 docs/DeviceProfiles/wemos-lolin32-oled.json diff --git a/docs/DeviceProfiles/wemos-lolin32-oled.json b/docs/DeviceProfiles/wemos-lolin32-oled.json new file mode 100644 index 000000000..cbfa6eaa1 --- /dev/null +++ b/docs/DeviceProfiles/wemos-lolin32-oled.json @@ -0,0 +1,21 @@ +[ + { + "name": "Wemos Lolin32 OLED", + "nrf24": { + "miso": 2, + "mosi": 14, + "clk": 12, + "irq": 0, + "en": 15, + "cs": 13 + }, + "eth": { + "enabled": false + }, + "display": { + "type": 2, + "data": 5, + "clk": 4 + } + } +] From 6955233371d637d9b299fef8c1660c0bb4f63c8c Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Mon, 26 Jun 2023 20:42:43 +0200 Subject: [PATCH 36/39] webapp: Update dependencies --- webapp/package.json | 6 ++-- webapp/yarn.lock | 80 ++++++++++++++++++++++----------------------- 2 files changed, 43 insertions(+), 43 deletions(-) diff --git a/webapp/package.json b/webapp/package.json index 590181fbc..15f262050 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -33,14 +33,14 @@ "@vue/eslint-config-typescript": "^11.0.3", "@vue/tsconfig": "^0.4.0", "eslint": "^8.43.0", - "eslint-plugin-vue": "^9.15.0", + "eslint-plugin-vue": "^9.15.1", "npm-run-all": "^4.1.5", - "sass": "^1.63.5", + "sass": "^1.63.6", "terser": "^5.18.1", "typescript": "^5.1.3", "vite": "^4.3.9", "vite-plugin-compression": "^0.5.1", "vite-plugin-css-injected-by-js": "^3.1.1", - "vue-tsc": "^1.8.1" + "vue-tsc": "^1.8.2" } } diff --git a/webapp/yarn.lock b/webapp/yarn.lock index 8f82522d5..9f54d646f 100644 --- a/webapp/yarn.lock +++ b/webapp/yarn.lock @@ -481,26 +481,26 @@ resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-4.2.3.tgz#ee0b6dfcc62fe65364e6395bf38fa2ba10bb44b6" integrity sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw== -"@volar/language-core@1.7.8": - version "1.7.8" - resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.7.8.tgz#88e33fda749ecb1ecb28c031027d45e778b8cd5f" - integrity sha512-TPklg4c2e/f1xB/MGZEiQc3AWG+dH64ZfBlYjFB8nNaWJt4Z4k+IHBhmaP52APG+5PHFerwiWI9oF002RrRTPA== +"@volar/language-core@1.7.9": + version "1.7.9" + resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.7.9.tgz#e9ca92fcbffa88136394c692454036548d97ea5a" + integrity sha512-U6GMPDNqfGFqVRv4npUN2hEDW4/6EwL4YHd6qggapcvTzRrYAodTTbOTZs4PDzmw7NSZ2Cdrmd54SjzCCMXbZw== dependencies: - "@volar/source-map" "1.7.8" + "@volar/source-map" "1.7.9" -"@volar/source-map@1.7.8": - version "1.7.8" - resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-1.7.8.tgz#46710f1d1e948e8009993595b70670e3ee4bfc1d" - integrity sha512-g2dtC2kOghvfzMDWeODIo4HO1Ml4hxzPTZyAFDz+YhRF9HjZYJSCaWaVuPZ+z0kY+T2daOHYA10GdrWQ5q0teA== +"@volar/source-map@1.7.9": + version "1.7.9" + resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-1.7.9.tgz#a9588fce0a989f320bcd1ab37e31948a6a57f5cc" + integrity sha512-bLizh8HIAzbq7OdxfyoG18dXJJF9FNXBcaiRj7eqg2Bq+DkgkYHabaY+xobgaXeKFOp93Tg1KfMM7qyR2KXHmQ== dependencies: muggle-string "^0.3.1" -"@volar/typescript@1.7.8": - version "1.7.8" - resolved "https://registry.yarnpkg.com/@volar/typescript/-/typescript-1.7.8.tgz#6997b3c7637292a6dc6e4a3737e45f3c4e49ef12" - integrity sha512-NDcI5ZQcdr8kgxzMQrhSSWIM8Tl0MbMFrkvJPTjfm2rdAQZPFT8zv3LrEW9Fqh0e9z2YbCry7jr4a/GShBqeDA== +"@volar/typescript@1.7.9": + version "1.7.9" + resolved "https://registry.yarnpkg.com/@volar/typescript/-/typescript-1.7.9.tgz#28f3597a391a90036c9e90c770654cd45201f572" + integrity sha512-cXGg7lgvdjpRjYfz52cXKo6ExBi8k3pWeBe6Gckf4+9zmTfEwEFfKWMj0H/IyUYO+S2rjyE9jytdsu1Imk+Azw== dependencies: - "@volar/language-core" "1.7.8" + "@volar/language-core" "1.7.9" "@vue/compiler-core@3.2.47": version "3.2.47" @@ -623,13 +623,13 @@ "@typescript-eslint/parser" "^5.59.1" vue-eslint-parser "^9.1.1" -"@vue/language-core@1.8.1": - version "1.8.1" - resolved "https://registry.yarnpkg.com/@vue/language-core/-/language-core-1.8.1.tgz#86b709f803bcc0cab84fd14677c0fb909154c562" - integrity sha512-pumv3k4J7P58hVh4YGRM9Qz3HaAr4TlFWM9bnVOkZ/2K9o2CK1lAP2y9Jw+Z0+mNL4F2uWQqnAPzj3seLyfpDA== +"@vue/language-core@1.8.2": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@vue/language-core/-/language-core-1.8.2.tgz#560c1df639394a5df0043f2d7989dc2fba5bf4ca" + integrity sha512-QJujhmp89TRoWwzjn2sPMezG97+mNyaCTfznGHWNCE3LBsillZCBqAO7M7cxO8ee1V3r+qHjWytkoh3M4YkRJw== dependencies: - "@volar/language-core" "1.7.8" - "@volar/source-map" "1.7.8" + "@volar/language-core" "1.7.9" + "@volar/source-map" "1.7.9" "@vue/compiler-dom" "^3.3.0" "@vue/reactivity" "^3.3.0" "@vue/shared" "^3.3.0" @@ -718,13 +718,13 @@ resolved "https://registry.yarnpkg.com/@vue/tsconfig/-/tsconfig-0.4.0.tgz#f01e2f6089b5098136fb084a0dd0cdd4533b72b0" integrity sha512-CPuIReonid9+zOG/CGTT05FXrPYATEqoDGNrEaqS4hwcw5BUNM2FguC0mOwJD4Jr16UpRVl9N0pY3P+srIbqmg== -"@vue/typescript@1.8.1": - version "1.8.1" - resolved "https://registry.yarnpkg.com/@vue/typescript/-/typescript-1.8.1.tgz#2302f3cc8330e8dd91982eecd64d71ee11198cb0" - integrity sha512-nQpo55j/roie8heCfqyXHnyayqD5+p4/0fzfxH4ZuHf7NSBQS791PNv7ztp2CCOjnGAiaiCMdtC9rc6oriyPUg== +"@vue/typescript@1.8.2": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@vue/typescript/-/typescript-1.8.2.tgz#d81e2c16197e8fcf032fe766d79952cb9a629af7" + integrity sha512-5q2gpCBIfGlygfJupyjAQbc82r5J6qQuhupPeX3NlHvDK+mR6m5n4jVGknSacsp+7gtgs4RKYDq+tysoto+npA== dependencies: - "@volar/typescript" "1.7.8" - "@vue/language-core" "1.8.1" + "@volar/typescript" "1.7.9" + "@vue/language-core" "1.8.2" acorn-jsx@^5.2.0, acorn-jsx@^5.3.2: version "5.3.2" @@ -1089,10 +1089,10 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" -eslint-plugin-vue@^9.15.0: - version "9.15.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.15.0.tgz#2bffe2b8a628ee438f983672a73cd89df455c461" - integrity sha512-XYzpK6e2REli100+6iCeBA69v6Sm0D/yK2FZP+fCeNt0yH/m82qZQq+ztseyV0JsKdhFysuSEzeE1yCmSC92BA== +eslint-plugin-vue@^9.15.1: + version "9.15.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.15.1.tgz#3c09e0edab444b5d4d9239a12a645a0e2e2ea5be" + integrity sha512-CJE/oZOslvmAR9hf8SClTdQ9JLweghT6JCBQNrT2Iel1uVw0W0OLJxzvPd6CxmABKCvLrtyDnqGV37O7KQv6+A== dependencies: "@eslint-community/eslint-utils" "^4.3.0" natural-compare "^1.4.0" @@ -2184,10 +2184,10 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" -sass@^1.63.5: - version "1.63.5" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.63.5.tgz#6e1900b12576e3e74a8ab0a9d8607cacbe584ef1" - integrity sha512-Q6c5gs482oezdAp+0fWF9cRisvpy7yfYb64knID0OE8AnMgtkluRPfpGMFjeD4/+M4+6QpJZCU6JRSxbjiktkg== +sass@^1.63.6: + version "1.63.6" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.63.6.tgz#481610e612902e0c31c46b46cf2dad66943283ea" + integrity sha512-MJuxGMHzaOW7ipp+1KdELtqKbfAWbH7OLIdoSMnVe3EXPMTmxTmlaZDCTsgIpPCs3w99lLo9/zDKkOrJuT5byw== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" @@ -2566,13 +2566,13 @@ vue-template-compiler@^2.7.14: de-indent "^1.0.2" he "^1.2.0" -vue-tsc@^1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-1.8.1.tgz#cdbc83ad7d1c80eac82e01917a58bc57e2debed2" - integrity sha512-GxBQrcb0Qvyrj1uZqnTXQyWbXdNDRY2MTa+r7ESgjhf+WzBSdxZfkS3KD/C3WhKYG+aN8hf44Hp5Gqzb6PehAA== +vue-tsc@^1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-1.8.2.tgz#dd9b0edfed10b590a82f964969e12d7733a282c4" + integrity sha512-iLS+z7jzxEAZRGLo4bYWfzZeBNVA71uXKmT2+5bQSsOJBtGLniR45sVpR+X7sa0m3J8iMEIU5+phLB7FnMLS0A== dependencies: - "@vue/language-core" "1.8.1" - "@vue/typescript" "1.8.1" + "@vue/language-core" "1.8.2" + "@vue/typescript" "1.8.2" semver "^7.3.8" vue@^3.3.4: From 12a18fb34b6aea58c12c802f16e91aab7023f52e Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Mon, 26 Jun 2023 20:44:30 +0200 Subject: [PATCH 37/39] webapp: add app.js.gz --- webapp_dist/js/app.js.gz | Bin 168460 -> 168482 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 05777db247e9781591cbe0d113cfd61777e7e272..d5965f1ed7cd9f4c115f76ad0e57c5fd21f9120c 100644 GIT binary patch delta 8280 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 W`#o%vYny-kr~d_gdb3R;M+*S2Ef!b+ delta 8267 zcmV-RAhh42qza6r3V?(Gv;x?1e*rd>mo(bOIPU9^MojClTN`L7-5HqsfXWR{)#}R1 zYT5I^5kVvdSnvqw*I}0p;90ZmM>h=w2D%B<`lB#CyZML6uspG>ei{S-79)a*VJ{njKuT zo%el#Ft_%k*8y&6;La=dXjVV|H7I;8$ZKrw-Wo0JejNL6YGSI_K1sypan73 zIGxZ7VWog$Us5mhTb|hRxPeb-Qzrny#ZB>Dlhli2j1E8@5deE4!~1jrWeII?S@k|u z7Aqz@9N(-gl_(Huxl|h36@An*_cK2my}hL83f_fJe&S7hDxa6{asm~99-wNFkq67_ zXgq6kTpI-&P=&()WeChrFpfhVkfB-I(_6cHrz&7@jRq2L!L|PM)&bZR-~$Q{$4q)? zTM5Z*08AN(aMgk3D=tx&N}S#NccgdJ(_1OhuGGH(aSxAysaJ(c66CFnO9$P{Sl?4y zUZX@xrwi+*m;R|OYuW36q2aObVHi;i`?3q40ZU;60lH_UH|7`y<`SFw?4dOouyuhO zrk`hEe_n2^dkA1xSq*`L{R$Q&L!H-Ljt<9L4ix|d;6 zDSJa;*pykj2-A9gKWy_+ns{&oKvU>cAgKq1gRENPoqVoqnq#8Ii-UD2Rj={j$}? zjvc9wVIM$H^}Rum-?_k3X*)-DLtneMf8GqkC|5w$Xu1=a#OFnjn%!dR(T(}RJBQ91*hN+iK0CyA|_4~G$ain9yy_*Ox=tWcbu-~fF z*3NR>XUxCx49__xyUu#UF0xNQ9F)aQJTD-FbnM*x#H^(xs-8EBNCuHGWy@PK z;zXe=TZk-?=z1awJYb0f~w7#^(UTlh6Q;+^Y7!;M6tLuxC*d)e`#QG`K@(ye$%c~ zQ8d~F1IJ9tN-n8zE=nU>82LSYy#MeGNA%8J;Cy`o{Hq+e?=@G(+BC6<7!K>;{gTAZ2iGkL-eQ zj((I!3T7@^UWpuF&{E3cmry6%)rs}w?4VsPQl-hliDg-d2-Fbf?{+~-dpjI3CX3jX zC|H}NpHQ6dVQ4QQaFmZB8&F_;7+}hTEMbGl@Y*Ch8S@dDf83l%-26WjL865_wo}D< zS;_e=je$D>qneP-4>NfF@(4%eVMu?9>?>AL5pvNF!k*oYr;niJ&42rJX(v*E^T7Ea zQV+P~rGrT|uFt|tCK&(xi1Lhmv_&Q)BKxEt;sc4Rif$b7S&Sz>@Z+}!OHbBUYE;LL zG)_z{^)blse||C&y{@OP6`r#c>v0tJeiCkEo5tQtIpiB*G=h&pjLITF7^Z031*^yf zlOd)FMPz@yINnrscNMQBLnO#Wjfj-6@j46>3ZZZq+TQ}NlBE%k);3|q<|Q_1^`Jbf}28hqEW-{s!~0g1Qd*zwYUBO$80?C$_wpg z=MMjufA1@^vZ@t*bv3MT_+%h%SSx}9G3>WYc{;jN>|CgbMTnR zf6!&hL?MZxkNniXlAVNCBfYPzV>N2-SSUy4?Ts*&AX3J{DLC5BlmB#n%TG%qHY^R( z+?8cSx(2rS|M@qa?KI3PKc)FsFk1Nf4%(RtypU~4rFa?-H+WjBD_B#*4hN@_l_R#k7#pk z_V_!;jDJgkskU|gv)hdOeV`xT5G5#Kms!3H$sbn$Fc=#KUa6T%V*D-BlsKH)A8aW* zwlL7PT21Arw7X*R2Q)K4BSrMA znodJk9%ASU49(toEN2yG*NcLg!K}bp{w8(QU3}HRyEfk6t&y>g#Ao*)X>EYgxofb2 z0eOu8RX1M<$?_aMnwmS%e{!fj-p5gmR^VB0i;U&0N)V{+R&9P(zvoK7&yVT~ z?`Sqw$EZdbm^aK_k!x^9?ulF}*o1z~U7_kovp29txx_o*C*M_o(hsedJg5JI3!1D@ zgJmX{xG0^SMg1LrCvh2JQkP@HZu{79&r0WB9Wv6Yj+Y9#zh=Qve>)wtgA(@{=NT%Z zy6!B9y?`ecNo1*A)t+mCY)W55#?+OLVOAC-qkO6|CF&>& z&6+F&t>E=STItu zMA&3PhnJFw647sLXUn{nFtZ+*|3SbiD;USBbgc zm-D47aec10qz$HJ-W_guHVEck$8zz|UqjEVVUTpaN#>COn;L5IxnhR#dBRjxxdrNG zr88$yG(l)(jUjNV=zO5M3{wQq87kNQOT@y&&MiWZe}l`XSC0K!9o5Y#tDl!MXIrOD zlgh7;c2lGXJq$uE6^2z1r61&$b!mM6k|~`md7r3VdrL;TAUO>1Hw8%R{b^hEi7ox9 zVlq{?ML&gd+&rQrj#(ZO;=gVd+}=%t2R~RJaRoH>+8HB9^d!yQegH<3cZLWc0SAnb z(~J{=f7LXa-=d2#|MzxhA#R88uTkjdoUe-ePFfyB?N65rVTH%rxQ~ zQ(q7wl8dWs5a3YE$veZkP*m{@Q%$w5S8Ap=HejnZA&OY8h~b`5n{=1dPtdF`V*n#nAz$Hq8ERe+mcR z5|&P`NPzQbJimqUo%87xCJAE!!wDj*5t|fDkmhED5>jePPIo;qEGDU>o~0J|r>58w ze*r8wf28^`IT%TKs4@Eqx3R z56_=|@%ZtMlkK|D&f^8)S|t6jclbzWTNVS1FM$6c%Qprf7!qn{ZqcYHD%jhLa7z6N zPAn-Y;wpjHVAU9Z%_q5~g&wq8q)VyKf427y&ws{2XeC zr@@o2V8snE+A|44jda3>MJfqu%ec5wqs2yg8|H~?8XW2MX`!9ERH$xUl?5{Ue^6CO zbEs9nm#+tb)jBK#6>TX|EIuLCs=1atElTNY_KqIOB@XVv+-TxOcNEH0|n!qr3tX z?T=neS2Q`gn6gPQ^?*o5dz}lbnHq<=&eJ)(EAr|Tl7P44X*D&7iP42AmgE7aA678` z0``bIP4C6ys}*eTflGI{@x$=rW-85sNmlnX%cp)Jf(+ulbkb*NC8rlnxrQCI?4><+ zXj7_C!4T?R-@A{u-*WZQ3-ZJu=tZ>LZVrErS9We++{C1xA$-lG?xv&%U%7R0jIUDw|W`%%`6V z+FM^cg`;EGM|@uAlN=#lh<6bWOUS#9WYk=>W((2TWuYfOm%>j{W-`By%B=I$(zq0` zv4*38miw*oE+jtajZ9fUn6L@=qk^GGuuxk#E@v^FZ_yP(|4E;OLp(W1PczvLfA%l= z-iay)YX!=1qjhWFB`6uhir}C9d+*2jZAxx|ofd&P-*H(v;xWwALa9)CyebcCh2U2K=gNSb@>I0Re z7GBS?Nvu7@<5#cthx3@l$PPxc_F~&BidE#oEBP&-D8{XXnR9$A``(fh{RdlXTiBjj7b$l ztgGBI*4a0CgXh-_!2mbngz#~+Xf?g&)ihl|9)|Gdn4(#YsarAtZzM#Piw3hP)2G(S z)_9OY=Yw59OWq~PR@U&-R|Yt$rn#4 zAcd7I6f+D{XcXFVlA?qyArZiynhY8lFxr{uASGuz6gJ=*Ga%OBRcI74W#{cITEI8Cl^9?@N(FB3BvYa4tw)0wI)bY^D z8Ws{w4^kWEk&Nbje@Al51On##Oms!WVPRk7>3fw^Q>oJR#@jS3et<31wfH|>+H3;> zYQi^X;BSJ$)h0aaV3`3AA&iO1e})lU@>Ou>jcQnDk|x(vwOYLCdAInGZ9DBee<&ExjMvG{yJ`(R+TI%c z7Rc##?udOU$E%13IGWZGv$7FvBvy%K%M~wet!WMDbm%OpC%r}H!M!W~_ z@PDp)@r0k#pEuvVy!5VurGC?@1RMMOwWv#AQ2Q$kHbzb_bxH2=N9d!ux{N=%kI<7G z&+s3~6QRm2v*aG_RkR(j!Dby6?E9{;DqmP$(Tqo0e}Y-Lda9YAfOhI6h1Jp%K9?u2 zcTDl-JBhV7hgeZdcFIlONLzJlPF#%`iI@wy&LX6u?#0pk*M#Rzc|A!b#{e0si&8ba zaM0i~e?Nc+9QlV9Ecxc^QUZ*0c`|Y&AD*Sx20$7qck=K^VY699?0zk4f!K;tLw6)N zgGffCsl$k$)>shG_#imLRX^!n2h6ogXt0TjCw-e)7j5FDa*Rk(x|&6=7y%~p|3n>^ zOjR>McoNI5gc}vM3=;MZI`VMsM9!yje$=d5f5!;ca0GYE6wAd*lx3nY{mo z^MIU)f~rOcUJ{M(l2OVfx}SpDEvIb>F|}KB=#M)$$xCE6y=h`Pt&gH}Ag&|q8tf66 z#LdF4_D^_vxswLMjoSt~Bh>2Uc{A(if4&9?o-ZkfI}0p({`_IuTk#$qHojZJ>KH@_ z2J2g8LTwK@YRy7exJ&Yg_9uKRC&FS4uoRrI@RyTCTTo?V13!F2i+d5{z^wmJ!Fdk@ zSr!Vbxk5Tu`=7P~-S;YZ`(068e4l-{jsKyP?hsXLsK|_Mpe-w|vyKK2X5l<|e}Gs> zSsJjpHVMV&x$I{*;ILRFrFH(V;2SZjx|shx=XIf)pr>3caT$Vl8+zm-#}y3S-Ug@a zPnKmGZ1noVhd}iF{P+*Oy6}F!i%GM-jK^{;ZE_lbD5XSX_7Q+X>_ilsRGdB-H zqnmo){aypT+2|+n)a(XwY#N=UNc(c#5O;1Mowkbha5D%ctc2C&cZ@7@STHCeK1A-{|urm|}>BOT`H6=mTcu#z)ey(Cy#$wDs zY+EDe4iv4#W${kCth8aV>35>bnLtUHZftJOxTYz*$Ess%@0%P&^ei}-BXkjG`{ zEgN%uzSDW5g&*BXh48XShcTg`{^E?fr1)}|y`3Pd=R1SopjQ!>e@PGqM4qycNNyHv z*=Xs~3VM?w_n7io3*S(X8Qz<~|4@a5E|`izaMVljG7L5wiF)QLy29-0d?EkhcP$YS zbY9%Tm`zt@VVtq4lROu*j2mKB>=D4c*AZtom)PPsb zdGlxREspcpb*1D-f0d+e=zFq;ofqlo+DWCPH&kN83J`4-!>wmv|?*{ngX2zW(}~#RU7!!^Ky&Y8ADGDmjT__gMZ}Qd;)X z>uHQTwN*U=Ho%YLeE!!6uS`E8t3sNWuyv=CRA0V~l&F%!f8R6G)rvD7-qL@4k*9$P z1kd;FPt4RL%`$x%9MZiz^Ueij9wLt>Ww=YzQ~EEt6mdk7ANYab3>F&rd2?xFkCSRJ zQrn|6sz~@{dz?)kJsmuTUk1467e>{2}2-#9V7@8i_~{|ndM z2_1(hR+FXee*x>qG{zRC*5!CsD6y|1V330ReilcZ^coz^Z^LAo!urx@gg9pm!{5S- zn5f?k8k^%jAuN#C#mWMQkFJX*j~jy6MkI&Is%&t;4DrIa83i6JpIu+NO;t_W(SWeS zz=I_n=GK%{6g5>wIHUFQ+6sN@rtI5KHu^&jUa8?AXeRR5*BjRi<7Tm)7)oqU%}k3W)ywLx#Gj+(TTAGhdAS*(N{QC7+rSF z06&GZB?hBMJ?1PC6j;NMa|_(}D4BU#+ZV@R-@;c^d3X^#f^hT+r~0YWgbqahg@Ds;d? zyf!zCMt8Ax2H6BR*fbdjo8Lc?jKHlv?8q>+5SfFBDM|!VOY)DfNka0vDF><1!Uu3< ze{ob7TPmQn&1uJ6>mC^01Y{^nk!RetA&I#fA)1>GfL{8&h~AJj6+kG`db>JD+31laAJ(OG`bZ{Z?tXtQ^*5;`Q zpErV2TiV4zJI=wyH%w!rc>>7$!U>|Z7%O-?Bg~%@_r|IKW)PA9Ggb^GpQjm|KPkCy z7uOb~T?~u9%^;>45m<`a$w6%vhmBDz1X6k{$|jE4JUb+)sfn6cWj?(0g$ok3e{PEY z4u(G9pWtwhv=$gjgs04nC1apnL zon_9s{HVu{v3~AvSkR4aJXKzWxZXAh=x9ws9Y&$p!08ChIsY5ObuaSy-%;&;5Nsm! zjV^$R_f8yU@G;4J5gZ@9+}+aDf68#=Dpt80*Cv#qPl@C=EXDI&0QjYQnv;2$UWMc8 zW5@7jkjtC;#c$o-{Pr<4;264a!N8Mm+$_LzcbRzlwVMfeZm9{Grw6dwSFWtE^f0Cm zhmDD=906^~7}IH({K#>V<5m|6oaxe${1gV`{6F-EJ{RCOi$$RhwyR^9b)U1?QPlcP z#Tv4OnqCOx#B5lCRf2gjP95W%LzHlZr@NwZiNe|Ia`tRtS0o#}l=%u=d_tcB>WiH5 zuPBYSc>Yt-Pe_Md|Ki8u)7Bq;J|9$t+I(@o)t4XN@{dzwFWcPsJ#32`TYvb6{{`gk JTKf1#3jm(p1uFmm From 69aa247470acf0a46db97088bd3745086a39c222 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Tue, 27 Jun 2023 18:59:54 +0200 Subject: [PATCH 38/39] Added check in statistics data that at least all required bytes are received It can occour for some inverters that incomplete fragments with valid crc but less bytes are received This was mentioned in #1084 --- .../src/commands/MultiDataCommand.cpp | 11 ++++++++++- lib/Hoymiles/src/commands/MultiDataCommand.h | 1 + .../src/commands/RealTimeRunDataCommand.cpp | 13 +++++++++++++ lib/Hoymiles/src/parser/StatisticsParser.cpp | 19 +++++++++++++++++++ lib/Hoymiles/src/parser/StatisticsParser.h | 3 +++ 5 files changed, 46 insertions(+), 1 deletion(-) diff --git a/lib/Hoymiles/src/commands/MultiDataCommand.cpp b/lib/Hoymiles/src/commands/MultiDataCommand.cpp index b25c9027d..39a0d4c64 100644 --- a/lib/Hoymiles/src/commands/MultiDataCommand.cpp +++ b/lib/Hoymiles/src/commands/MultiDataCommand.cpp @@ -91,4 +91,13 @@ void MultiDataCommand::udpateCRC() uint16_t crc = crc16(&_payload[10], 14); // From data_type till password _payload[24] = (uint8_t)(crc >> 8); _payload[25] = (uint8_t)(crc); -} \ No newline at end of file +} + +uint8_t MultiDataCommand::getTotalFragmentSize(fragment_t fragment[], uint8_t max_fragment_id) +{ + uint8_t fragmentSize = 0; + for (uint8_t i = 0; i < max_fragment_id; i++) { + fragmentSize += fragment[i].len; + } + return fragmentSize; +} diff --git a/lib/Hoymiles/src/commands/MultiDataCommand.h b/lib/Hoymiles/src/commands/MultiDataCommand.h index ff835d7b9..4d2adfde4 100644 --- a/lib/Hoymiles/src/commands/MultiDataCommand.h +++ b/lib/Hoymiles/src/commands/MultiDataCommand.h @@ -20,6 +20,7 @@ class MultiDataCommand : public CommandAbstract { void setDataType(uint8_t data_type); uint8_t getDataType(); void udpateCRC(); + static uint8_t getTotalFragmentSize(fragment_t fragment[], uint8_t max_fragment_id); RequestFrameCommand _cmdRequestFrame; }; \ No newline at end of file diff --git a/lib/Hoymiles/src/commands/RealTimeRunDataCommand.cpp b/lib/Hoymiles/src/commands/RealTimeRunDataCommand.cpp index 6a7db92a9..646e363fe 100644 --- a/lib/Hoymiles/src/commands/RealTimeRunDataCommand.cpp +++ b/lib/Hoymiles/src/commands/RealTimeRunDataCommand.cpp @@ -3,6 +3,7 @@ * Copyright (C) 2022 Thomas Basler and others */ #include "RealTimeRunDataCommand.h" +#include "Hoymiles.h" #include "inverters/InverterAbstract.h" RealTimeRunDataCommand::RealTimeRunDataCommand(uint64_t target_address, uint64_t router_address, time_t time) @@ -25,6 +26,18 @@ bool RealTimeRunDataCommand::handleResponse(InverterAbstract* inverter, fragment return false; } + // Check if at least all required bytes are received + // In case of low power in the inverter it occours that some incomplete fragments + // with a valid CRC are received. + if (getTotalFragmentSize(fragment, max_fragment_id) < inverter->Statistics()->getMaxByteCount()) { + Hoymiles.getMessageOutput()->printf("ERROR in %s: Received fragment size: %d min. expected size: %d\r\n", + getCommandName().c_str(), + getTotalFragmentSize(fragment, max_fragment_id), + inverter->Statistics()->getMaxByteCount()); + + return false; + } + // Move all fragments into target buffer uint8_t offs = 0; inverter->Statistics()->clearBuffer(); diff --git a/lib/Hoymiles/src/parser/StatisticsParser.cpp b/lib/Hoymiles/src/parser/StatisticsParser.cpp index 0575a5fbb..c0e0b8ba5 100644 --- a/lib/Hoymiles/src/parser/StatisticsParser.cpp +++ b/lib/Hoymiles/src/parser/StatisticsParser.cpp @@ -34,6 +34,25 @@ void StatisticsParser::setByteAssignment(const byteAssign_t* byteAssignment, uin _byteAssignmentSize = size; } +uint8_t StatisticsParser::getMaxByteCount() +{ + static uint8_t maxByteCount = 0; + + // Use already calculated value + if (maxByteCount > 0) { + return maxByteCount; + } + + for (uint8_t i = 0; i < _byteAssignmentSize; i++) { + if (_byteAssignment[i].div == CMD_CALC) { + continue; + } + maxByteCount = max(maxByteCount, _byteAssignment[i].start + _byteAssignment[i].num); + } + + return maxByteCount; +} + void StatisticsParser::clearBuffer() { memset(_payloadStatistic, 0, STATISTIC_PACKET_SIZE); diff --git a/lib/Hoymiles/src/parser/StatisticsParser.h b/lib/Hoymiles/src/parser/StatisticsParser.h index f4bf7ae02..9f71045a3 100644 --- a/lib/Hoymiles/src/parser/StatisticsParser.h +++ b/lib/Hoymiles/src/parser/StatisticsParser.h @@ -109,6 +109,9 @@ class StatisticsParser : public Parser { void setByteAssignment(const byteAssign_t* byteAssignment, uint8_t size); + // Returns 1 based amount of expected bytes of statistic data + uint8_t getMaxByteCount(); + const byteAssign_t* getAssignmentByChannelField(ChannelType_t type, ChannelNum_t channel, FieldId_t fieldId); fieldSettings_t* getSettingByChannelField(ChannelType_t type, ChannelNum_t channel, FieldId_t fieldId); From a510afe53e5b91b7eb88835106b4a125649f1326 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Tue, 27 Jun 2023 19:01:43 +0200 Subject: [PATCH 39/39] webapp: Update dependencies --- webapp/package.json | 4 ++-- webapp/yarn.lock | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/webapp/package.json b/webapp/package.json index 15f262050..23660a816 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -26,7 +26,7 @@ "@rushstack/eslint-patch": "^1.3.2", "@tsconfig/node18": "^2.0.1", "@types/bootstrap": "^5.2.6", - "@types/node": "^20.3.1", + "@types/node": "^20.3.2", "@types/sortablejs": "^1.15.1", "@types/spark-md5": "^3.0.2", "@vitejs/plugin-vue": "^4.2.3", @@ -36,7 +36,7 @@ "eslint-plugin-vue": "^9.15.1", "npm-run-all": "^4.1.5", "sass": "^1.63.6", - "terser": "^5.18.1", + "terser": "^5.18.2", "typescript": "^5.1.3", "vite": "^4.3.9", "vite-plugin-compression": "^0.5.1", diff --git a/webapp/yarn.lock b/webapp/yarn.lock index 9f54d646f..330d42667 100644 --- a/webapp/yarn.lock +++ b/webapp/yarn.lock @@ -372,10 +372,10 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== -"@types/node@^20.3.1": - version "20.3.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.1.tgz#e8a83f1aa8b649377bb1fb5d7bac5cb90e784dfe" - integrity sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg== +"@types/node@^20.3.2": + version "20.3.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.2.tgz#fa6a90f2600e052a03c18b8cb3fd83dd4e599898" + integrity sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw== "@types/semver@^7.3.12": version "7.3.13" @@ -2382,10 +2382,10 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -terser@^5.18.1: - version "5.18.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.18.1.tgz#6d8642508ae9fb7b48768e48f16d675c89a78460" - integrity sha512-j1n0Ao919h/Ai5r43VAnfV/7azUYW43GPxK7qSATzrsERfW7+y2QW9Cp9ufnRF5CQUWbnLSo7UJokSWCqg4tsQ== +terser@^5.18.2: + version "5.18.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.18.2.tgz#ff3072a0faf21ffd38f99acc9a0ddf7b5f07b948" + integrity sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2"