From e8a946a68bcba8716ff3f918d687b03c8a61f3e3 Mon Sep 17 00:00:00 2001 From: Ben Roberts Date: Mon, 31 Aug 2020 11:57:38 +0100 Subject: [PATCH] Handle unit conversion for SMETS2 gas meters SMETS2 gas meter consumption is measured in m3 rather than kWh, so conversion from one unit to the other is required. Algorithm and description of terms is taken from: https://www.theenergyshop.com/guides/how-to-convert-gas-units-to-kwh This commit adds additional config file options to the `gas` section: - `meter_type` (default `1` for backward compatibility) Enables unit conversion from m3 to kWh before reporting metrics to influxdb - `volume_correction_factor` (default `1.02264`) - `calorific_value` (default `40`) --- app/octopus_to_influxdb.py | 8 ++++++++ example-octograph.ini | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/app/octopus_to_influxdb.py b/app/octopus_to_influxdb.py index 1cead72..1cdb509 100644 --- a/app/octopus_to_influxdb.py +++ b/app/octopus_to_influxdb.py @@ -71,6 +71,9 @@ def store_series(connection, series, metrics, rate_data): def fields_for_measurement(measurement): consumption = measurement['consumption'] + conversion_factor = rate_data.get('conversion_factor', None) + if conversion_factor: + consumption *= conversion_factor rate = active_rate_field(measurement) rate_cost = rate_data[rate] cost = consumption * rate_cost @@ -149,6 +152,9 @@ def cmd(config_file, from_date, to_date): g_mpan = config.get('gas', 'mpan', fallback=None) g_serial = config.get('gas', 'serial_number', fallback=None) + g_meter_type = config.get('gas', 'meter_type', fallback=1) + g_vcf = config.get('gas', 'volume_correction_factor', fallback=1.02264) + g_cv = config.get('gas', 'calorific_value', fallback=40) if not g_mpan or not g_serial: raise click.ClickException('No gas meter identifiers') g_url = 'https://api.octopus.energy/v1/gas-meter-points/' \ @@ -184,6 +190,8 @@ def cmd(config_file, from_date, to_date): 'gas', 'standing_charge', fallback=0.0 ), 'unit_rate': config.getfloat('gas', 'unit_rate', fallback=0.0), + # SMETS1 meters report kWh, SMET2 report m^3 and need converting to kWh first + 'conversion_factor': (float(g_vcf) * float(g_cv)) / 3.6 if int(g_meter_type) > 1 else None, } } diff --git a/example-octograph.ini b/example-octograph.ini index 811bf13..9142191 100644 --- a/example-octograph.ini +++ b/example-octograph.ini @@ -25,3 +25,9 @@ mpan = 12345 serial_number = 12A3456 standing_charge = 16.80 unit_rate = 3.03 +# 1 for SMETS1 meters, 2 for SMETS2 meters +meter_type = 1 +# volume correction factor, and calorific values used to convert SMETS2 consumption from m^3 to kWh +# Defaults are typically used values. Your energy bill will show you the values used for your supply. +volume_correction_factor = 1.02264 +calorific_value = 40