diff --git a/energy_usage/config_default.yaml b/energy_usage/config_default.yaml index 35d304c..67744b7 100644 --- a/energy_usage/config_default.yaml +++ b/energy_usage/config_default.yaml @@ -1,6 +1,7 @@ --- ca_certs: /etc/ssl/certs/ca-certificates.crt debug: false +noop: False mqtt: server: glowmqtt.energyhive.com port: 8883 diff --git a/energy_usage/main.py b/energy_usage/main.py index 9c85a43..963b388 100644 --- a/energy_usage/main.py +++ b/energy_usage/main.py @@ -97,8 +97,10 @@ def main(): msg = msg_q.get() logger.debug(msg.topic + " " + str(msg.payload)) usage = parse_sep(msg.topic, msg.payload) - usage_datapoints = usage_to_datapoints(usage) - influx_client.write_points(usage_datapoints) + if usage: + usage_datapoints = usage_to_datapoints(usage) + if not config["noop"].get(bool): + influx_client.write_points(usage_datapoints) except KeyboardInterrupt: break diff --git a/energy_usage/sep.py b/energy_usage/sep.py index 20ac07f..f1f6d12 100644 --- a/energy_usage/sep.py +++ b/energy_usage/sep.py @@ -2,6 +2,7 @@ """ import datetime import json +import logging def parse_sep(topic, payload_str): @@ -13,6 +14,8 @@ def parse_sep(topic, payload_str): :param payload_str: str SEP payload message as a string :return: """ + logger = logging.getLogger(__name__) + def _get_metric(path, type=int): value = payload try: @@ -23,9 +26,19 @@ def parse_sep(topic, payload_str): else: return type(value) except KeyError: + logger.debug("Ignoring payload missing metric: %s", ".".join(path)) return None payload = json.loads(payload_str) + + try: + assert(_get_metric(["elecMtr", "0702", "03", "00"]) == 0) # kWh + assert(_get_metric(["gasMtr", "0702", "03", "01"]) == 1) # m3 + assert(_get_metric(["gasMtr", "0702", "03", "12"]) == 0) # kWh + except AssertionError: + logger.warning("Received a payload without expected data") + return None + timestamp = datetime.datetime.fromtimestamp(payload["gmtime"], tz=datetime.timezone.utc) electricity_consumption = _get_metric(["elecMtr", "0702", "04", "00"]) electricity_daily_consumption = _get_metric(["elecMtr", "0702", "04", "01"]) @@ -44,10 +57,6 @@ def parse_sep(topic, payload_str): gas_mpan = _get_metric(["gasMtr", "0702", "03", "07"], str) device_gid = _get_metric(["gid"], str) - assert(int(payload["elecMtr"]["0702"]["03"]["00"], 16) == 0) # kWh - assert(int(payload["gasMtr"]["0702"]["03"]["01"], 16) == 1) # m3 - assert(int(payload["gasMtr"]["0702"]["03"]["12"], 16) == 0) # kWh - data = { 'timestamp': timestamp, 'tags': {