2 changed files with 122 additions and 0 deletions
			
			
		@ -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 | 
				
			|||
        } | 
				
			|||
    ] | 
				
			|||
} | 
				
			|||
@ -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() | 
				
			|||
					Loading…
					
					
				
		Reference in new issue