From 3c33e706e4cc5fc4bb99bceb0e465fa4f49e43f0 Mon Sep 17 00:00:00 2001 From: Ryan McLean Date: Thu, 16 Mar 2023 14:38:40 +0000 Subject: [PATCH] Added Python Generator to create tariff switcher Creating the automation to switch all the tariffs is a pain. This script will do it for you by reading the file containing all the utilities `utility_meter:` and then it will create yaml for the automation to switch python3 ./tariffSwitchGen.py packages/energy_utilities.yaml packages/electricity_tarriff_automations.yaml --- tariffSwitchGen.py | 97 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 tariffSwitchGen.py diff --git a/tariffSwitchGen.py b/tariffSwitchGen.py new file mode 100644 index 0000000..52a5b6a --- /dev/null +++ b/tariffSwitchGen.py @@ -0,0 +1,97 @@ +# Requires pyaml +import sys +import yaml +import yaml.emitter +import yaml.serializer +import yaml.representer +import yaml.resolver + + +class IndentingEmitter(yaml.emitter.Emitter): + def increase_indent(self, flow=False, indentless=False): + """Ensure that lists items are always indented.""" + return super().increase_indent( + flow=False, + indentless=False, + ) + + +class PrettyDumper( + IndentingEmitter, + yaml.serializer.Serializer, + yaml.representer.Representer, + yaml.resolver.Resolver, +): + def __init__( + self, + stream, + default_style=None, + default_flow_style=False, + canonical=None, + indent=None, + width=None, + allow_unicode=None, + line_break=None, + encoding=None, + explicit_start=None, + explicit_end=None, + version=None, + tags=None, + sort_keys=True, + ): + IndentingEmitter.__init__( + self, + stream, + canonical=canonical, + indent=indent, + width=width, + allow_unicode=allow_unicode, + line_break=line_break, + ) + yaml.serializer.Serializer.__init__( + self, + encoding=encoding, + explicit_start=explicit_start, + explicit_end=explicit_end, + version=version, + tags=tags, + ) + yaml.representer.Representer.__init__( + self, + default_style=default_style, + default_flow_style=default_flow_style, + sort_keys=sort_keys, + ) + yaml.resolver.Resolver.__init__(self) + + +def main(args): + utilfile = args[0] + outfile = args[1] + with open(utilfile,'r') as f: + utility = yaml.safe_load(f) + + svc = [] + + for i in utility['utility_meter'].keys(): + if 'tariffs' in utility['utility_meter'][i].keys(): + svcobj = dict( + service="select.select_option", + target=dict( + entity_id="select.{}".format(i) + ), + data=dict( + option="{{ tariff }}" + ) + ) + + svc.append(svcobj) + x = dict(action=svc) + + with open(outfile,'a') as f: + f.write(yaml.dump(x, Dumper=PrettyDumper)) + + +if __name__ == "__main__": + args = sys.argv[1:] + main(args)