From 900d6b9974e69ff2c3c399856e56824420233df6 Mon Sep 17 00:00:00 2001 From: Matthias Bolte Date: Tue, 29 Oct 2024 18:52:25 +0100 Subject: [PATCH] meters-rct-power: Don't log checksum error, use error counter instead --- .../meters_rct_power/meter_rct_power.cpp | 17 ++++++++++------- .../modules/meters_rct_power/meter_rct_power.h | 6 ++++-- .../meters_rct_power/meters_rct_power.cpp | 10 +++++++--- .../modules/meters_rct_power/meters_rct_power.h | 3 ++- 4 files changed, 23 insertions(+), 13 deletions(-) diff --git a/software/src/modules/meters_rct_power/meter_rct_power.cpp b/software/src/modules/meters_rct_power/meter_rct_power.cpp index a8441ace8..d58a10ecb 100644 --- a/software/src/modules/meters_rct_power/meter_rct_power.cpp +++ b/software/src/modules/meters_rct_power/meter_rct_power.cpp @@ -26,9 +26,9 @@ #include "tools.h" #if 0 -#define debugfln(...) logger.printfln(__VA_ARGS__) +#define debugfln(fmt, ...) logger.printfln(fmt __VA_OPT__(,) __VA_ARGS__) #else -#define debugfln(...) do {} while (0) +#define debugfln(fmt, ...) do {} while (0) #endif static const MeterValueID grid_value_ids[] = { @@ -281,10 +281,13 @@ bool RCTPowerClient::receive_hook() if (actual_checksum != expected_checksum) { for (size_t i = 0; i < value_specs_length; ++i) { if (value_specs[i].id == id) { - logger.printfln("Received response [%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x] for ID 0x%08x with checksum mismatch (actual=0x%04x expected=0x%04x), ignoring response", - pending_response[0], pending_response[1], pending_response[2], pending_response[3], pending_response[4], pending_response[5], - pending_response[6], pending_response[7], pending_response[8], pending_response[9], pending_response[10], pending_response[11], - id, actual_checksum, expected_checksum); + debugfln("Received response [%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x] for ID 0x%08x with checksum mismatch (actual=0x%04x expected=0x%04x), ignoring response", + pending_response[0], pending_response[1], pending_response[2], pending_response[3], pending_response[4], pending_response[5], + pending_response[6], pending_response[7], pending_response[8], pending_response[9], pending_response[10], pending_response[11], + id, actual_checksum, expected_checksum); + + auto checksum_mismatch = errors->get("checksum_mismatch"); + checksum_mismatch->updateUint(checksum_mismatch->asUint() + 1); break; } } @@ -313,7 +316,7 @@ bool RCTPowerClient::receive_hook() value *= value_specs[i].scale_factor; } - debugfln("Received response for ID 0x%08x with value %f", id, u.value, value); + debugfln("Received response for ID 0x%08x with value %f [%f]", id, u.value, value); meters.update_value(slot, i, value); meters.finish_update(slot); diff --git a/software/src/modules/meters_rct_power/meter_rct_power.h b/software/src/modules/meters_rct_power/meter_rct_power.h index a01777a51..d8db1e92b 100644 --- a/software/src/modules/meters_rct_power/meter_rct_power.h +++ b/software/src/modules/meters_rct_power/meter_rct_power.h @@ -36,7 +36,7 @@ struct RCTValueSpec class RCTPowerClient final : public TFGenericTCPClient { public: - RCTPowerClient(uint32_t slot_) : slot(slot_) {} + RCTPowerClient(uint32_t slot_, Config *state_, Config *errors_) : slot(slot_), state(state_), errors(errors_) {} void setup(const Config &ephemeral_config); void read_next_value(); @@ -47,6 +47,8 @@ class RCTPowerClient final : public TFGenericTCPClient bool receive_hook() override; uint32_t slot; + Config *state; + Config *errors; VirtualMeter virtual_meter = VirtualMeter::None; const RCTValueSpec *value_specs = nullptr; size_t value_specs_length = 0; @@ -62,7 +64,7 @@ class RCTPowerClient final : public TFGenericTCPClient class MeterRCTPower final : protected GenericTCPClientConnector, public IMeter { public: - MeterRCTPower(uint32_t slot) : GenericTCPClientConnector("meter_rct_power", &client, &shared_client), client(slot), shared_client(&client) {} + MeterRCTPower(uint32_t slot, Config *state, Config *errors) : GenericTCPClientConnector("meter_rct_power", &client, &shared_client), client(slot, state, errors), shared_client(&client) {} [[gnu::const]] MeterClassID get_class() const override; void setup(const Config &ephemeral_config) override; diff --git a/software/src/modules/meters_rct_power/meters_rct_power.cpp b/software/src/modules/meters_rct_power/meters_rct_power.cpp index 4ee0d635e..9df7dc16b 100644 --- a/software/src/modules/meters_rct_power/meters_rct_power.cpp +++ b/software/src/modules/meters_rct_power/meters_rct_power.cpp @@ -34,6 +34,10 @@ void MetersRCTPower::pre_setup() {"virtual_meter", Config::Uint8(static_cast(VirtualMeter::None))}, }); + errors_prototype = Config::Object({ + {"checksum_mismatch", Config::Uint32(0)}, + }); + meters.register_meter_generator(get_class(), this); } @@ -42,9 +46,9 @@ MeterClassID MetersRCTPower::get_class() const return MeterClassID::RCTPower; } -IMeter *MetersRCTPower::new_meter(uint32_t slot, Config * /*state*/, Config * /*errors*/) +IMeter *MetersRCTPower::new_meter(uint32_t slot, Config *state, Config *errors) { - return new MeterRCTPower(slot); + return new MeterRCTPower(slot, state, errors); } const Config *MetersRCTPower::get_config_prototype() @@ -59,5 +63,5 @@ const Config *MetersRCTPower::get_state_prototype() const Config *MetersRCTPower::get_errors_prototype() { - return Config::Null(); + return &errors_prototype; } diff --git a/software/src/modules/meters_rct_power/meters_rct_power.h b/software/src/modules/meters_rct_power/meters_rct_power.h index 308ef3377..c373c8eab 100644 --- a/software/src/modules/meters_rct_power/meters_rct_power.h +++ b/software/src/modules/meters_rct_power/meters_rct_power.h @@ -45,7 +45,8 @@ class MetersRCTPower final : public IModule, public MeterGenerator [[gnu::const]] virtual const Config *get_errors_prototype() override; private: - ConfigRoot config_prototype; + Config config_prototype; + Config errors_prototype; }; #if defined(__GNUC__)