From 4ad27aba5869686b6458458da66caa11004f8098 Mon Sep 17 00:00:00 2001 From: Maximilian Stiefel Date: Sun, 27 Oct 2024 14:01:33 +0100 Subject: [PATCH] Havin a rough idea of how the json file shoudl look like for now --- example_1.json | 30 ++++++++++++++++ heatpump.py | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 example_1.json create mode 100644 heatpump.py diff --git a/example_1.json b/example_1.json new file mode 100644 index 0000000..0460051 --- /dev/null +++ b/example_1.json @@ -0,0 +1,30 @@ +{ + "currency": "SEK", + "legend": ["Installation price", "Heating expenditure"], + "technologies": [ + { + "label": "Air water heat pump", + "installation_price": 120000, + "kwh_expenditure": 11000, + "kwh_price": 2, + "percent_inflation": 2, + "years_lifespan": 15 + }, + { + "label": "Geothermal heat pump", + "installation_price": 222788, + "kwh_expenditure": 5000, + "kwh_price": 2, + "percent_inflation": 2, + "years_lifespan": 25 + }, + { + "label": "District heating", + "installation_price": 95133, + "kwh_expenditure": 25000, + "kwh_price": 0.95, + "percent_inflation": 10, + "years_lifespan": 50 + } + ] +} \ No newline at end of file diff --git a/heatpump.py b/heatpump.py new file mode 100644 index 0000000..63a5dd5 --- /dev/null +++ b/heatpump.py @@ -0,0 +1,92 @@ +import matplotlib +matplotlib.use('Qt5Agg') # or 'Qt5Agg', depending on your setup +import matplotlib.pyplot as plt +import numpy as np +import json +import sys +import argparse +__author__ = 'm3x1m0m' + +class JsonSettingsExtractor: + + def __init__(self, fname): + with open(fname, "r") as rf: + settings = json.load(rf) + self._currency = settings["currency"] + self._legend = settings["legend"] + # Kind of inefficient code. Does not matter only runs once at startup + _technologies = settings["technologies"] + self._label = [technology["label"] for technology in _technologies] + self._installation_price = [technology["installation_price"] for technology in _technologies] + self._kwh_expenditure = [technology["kwh_expenditure"] for technology in _technologies] + self._kwh_price = [technology["kwh_price"] for technology in _technologies] + self._percent_inflation = [technology["percent_inflation"] for technology in _technologies] + self._years_lifespan = [technology["years_lifespan"] for technology in _technologies] + + @property + def currency(self): + return self._currency + + @property + def legend(self): + return self._legend + + @property + def label(self): + return self._label + + @property + def installation_price(self): + return self._installation_price + + @property + def kwh_expenditure(self): + return self._kwh_expenditure + + @property + def percent_inflation(self): + self._percent_inflation + + @property + def years_lifespan(self): + self._years_lifespan + +def main(): + + parser = argparse.ArgumentParser(description='This script allows to calculate which heating technology makes sense financially for you.') + parser.add_argument('-a','--settings', help='Settings file.', required=True, metavar=('FILENAME')) + parser.add_argument('-g','--plot', help='Visualize costs over one or multiple years.', type=int, metavar=('YEARS')) + args = parser.parse_args() + + input_data = JsonSettingsExtractor(args.settings) + + print("Inflations: {}".format(input_data.percent_inflation)) + print("Expend: {}".format(input_data.kwh_expenditure)) + + + # if args.plot != None: + # # Basic settings + # width = 0.3 + # plt_colors = ["#8ecae6", "#219ebc", "#023047", "#ffb703", "#fb8500"]; + # fig, ax = plt.subplots() + # ax.bar(input_data.label, input_data.installation_price, width, label = "Installation price", color = plt_colors[0]) + + # current_y = input_data.installation_price + # years = 0 #first year + + # # Iteration for years in service + # for i in range(args.plot): + # inflation_factor = 1.0 + (input_data.percent_inflation * years) / 100.0 + # increase = input_data.kwh_expenditure * inflation_factor + # ax.bar(input_data.label, increase, width, bottom = current_y, label = "Expenditure".format(y), color = plt_colors[1]) + # years += 1 + # current_y += increase + + # ax.set_ylabel(input_data.currency) + # ax.set_title("Comparision of economics w/ different heating technologies") + # ax.legend(input_data.legend) + + # plt.show() + +if __name__ == "__main__": + main()