From 68fc0c25473f51f159c8e48d74e2296fd103a2a0 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Sun, 25 Sep 2022 16:53:57 +0200 Subject: [PATCH] Extend memory to fetch all eventlog entries --- lib/Hoymiles/src/commands/AlarmDataCommand.cpp | 2 +- lib/Hoymiles/src/inverters/InverterAbstract.h | 2 +- lib/Hoymiles/src/parser/AlarmLogParser.cpp | 6 +++--- lib/Hoymiles/src/parser/AlarmLogParser.h | 3 ++- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/Hoymiles/src/commands/AlarmDataCommand.cpp b/lib/Hoymiles/src/commands/AlarmDataCommand.cpp index 9600bd7..719f4e0 100644 --- a/lib/Hoymiles/src/commands/AlarmDataCommand.cpp +++ b/lib/Hoymiles/src/commands/AlarmDataCommand.cpp @@ -6,7 +6,7 @@ AlarmDataCommand::AlarmDataCommand(uint64_t target_address, uint64_t router_addr { setTime(time); setDataType(0x11); - setTimeout(400); + setTimeout(500); } bool AlarmDataCommand::handleResponse(InverterAbstract* inverter, fragment_t fragment[], uint8_t max_fragment_id) diff --git a/lib/Hoymiles/src/inverters/InverterAbstract.h b/lib/Hoymiles/src/inverters/InverterAbstract.h index aba60a5..62f0d68 100644 --- a/lib/Hoymiles/src/inverters/InverterAbstract.h +++ b/lib/Hoymiles/src/inverters/InverterAbstract.h @@ -18,7 +18,7 @@ enum { FRAGMENT_OK = 0 }; -#define MAX_RF_FRAGMENT_COUNT 12 +#define MAX_RF_FRAGMENT_COUNT 13 #define MAX_RETRANSMIT_COUNT 5 class CommandAbstract; diff --git a/lib/Hoymiles/src/parser/AlarmLogParser.cpp b/lib/Hoymiles/src/parser/AlarmLogParser.cpp index 9fc56bb..f8b56a3 100644 --- a/lib/Hoymiles/src/parser/AlarmLogParser.cpp +++ b/lib/Hoymiles/src/parser/AlarmLogParser.cpp @@ -3,14 +3,14 @@ void AlarmLogParser::clearBuffer() { - memset(_payloadAlarmLog, 0, ALARM_LOG_ENTRY_COUNT * ALARM_LOG_ENTRY_SIZE); + memset(_payloadAlarmLog, 0, ALARM_LOG_PAYLOAD_SIZE); _alarmLogLength = 0; } void AlarmLogParser::appendFragment(uint8_t offset, uint8_t* payload, uint8_t len) { - if (offset + len > (ALARM_LOG_ENTRY_COUNT * ALARM_LOG_ENTRY_SIZE)) { - Serial.printf("FATAL: (%s, %d) stats packet too large for buffer\n", __FILE__, __LINE__); + if (offset + len > ALARM_LOG_PAYLOAD_SIZE) { + Serial.printf("FATAL: (%s, %d) stats packet too large for buffer (%d > %d)\n", __FILE__, __LINE__, offset + len, ALARM_LOG_PAYLOAD_SIZE); return; } memcpy(&_payloadAlarmLog[offset], payload, len); diff --git a/lib/Hoymiles/src/parser/AlarmLogParser.h b/lib/Hoymiles/src/parser/AlarmLogParser.h index c984e34..a33944e 100644 --- a/lib/Hoymiles/src/parser/AlarmLogParser.h +++ b/lib/Hoymiles/src/parser/AlarmLogParser.h @@ -5,6 +5,7 @@ #define ALARM_LOG_ENTRY_COUNT 15 #define ALARM_LOG_ENTRY_SIZE 12 +#define ALARM_LOG_PAYLOAD_SIZE (ALARM_LOG_ENTRY_COUNT * ALARM_LOG_ENTRY_SIZE + 4) struct AlarmLogEntry_t { uint16_t MessageId; @@ -24,6 +25,6 @@ public: private: static int getTimezoneOffset(); - uint8_t _payloadAlarmLog[ALARM_LOG_ENTRY_SIZE * ALARM_LOG_ENTRY_COUNT]; + uint8_t _payloadAlarmLog[ALARM_LOG_PAYLOAD_SIZE]; uint8_t _alarmLogLength; }; \ No newline at end of file