forked from Silias-Public/Sonnendach
				
			Compare commits
	
		
			4 Commits
		
	
	
	| Author | SHA1 | Date | 
|---|---|---|
| 
							
							
								 | 
						450b58e1e9 | |
| 
							
							
								 | 
						7234a330a8 | |
| 
							
							
								 | 
						76733fd896 | |
| 
							
							
								 | 
						4b70dc34a1 | 
							
								
								
									
										210
									
								
								Sonnendach.py
								
								
								
								
							
							
						
						
									
										210
									
								
								Sonnendach.py
								
								
								
								
							| 
						 | 
					@ -1,5 +1,8 @@
 | 
				
			||||||
import tkinter
 | 
					import tkinter
 | 
				
			||||||
import threading
 | 
					import threading
 | 
				
			||||||
 | 
					import matplotlib.pyplot as plt
 | 
				
			||||||
 | 
					plt.switch_backend("Agg")  # Set the backend dynamically
 | 
				
			||||||
 | 
					from urllib.parse import urlencode, quote_plus
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import selenium.webdriver.firefox.service
 | 
					import selenium.webdriver.firefox.service
 | 
				
			||||||
import webdriver_manager.chrome
 | 
					import webdriver_manager.chrome
 | 
				
			||||||
| 
						 | 
					@ -23,11 +26,12 @@ import requests
 | 
				
			||||||
import statistics
 | 
					import statistics
 | 
				
			||||||
from webdriver_manager.firefox import GeckoDriverManager
 | 
					from webdriver_manager.firefox import GeckoDriverManager
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DropDownLabels = ["Street: ", "Number: ", "Postal code: ", "City: ", "coordinate X", "coordinate Y", "Sonnendach URL: ", "Suitability:", "Image Filename: ", "PV Production 100", "Value Electricity production", "Roof area", "existing PV Production"]
 | 
					DropDownLabels = ["Street: ", "Number: ", "Postal code: ", "City: ", "coordinate X", "coordinate Y", "Sonnendach URL: ", "Suitability:", "Image Filename: ", "PV Production 75", "Value Electricity production", "Roof area", "existing PV Production Power", "existing PV Production begining of operation","id", "firstname", "lastname"]
 | 
				
			||||||
file_split_char = ","
 | 
					file_split_char = ";"
 | 
				
			||||||
minRoofSize = 2
 | 
					minRoofSize = 5
 | 
				
			||||||
minSuitability = 3
 | 
					minSuitability = 3
 | 
				
			||||||
electricityPrice = 0.1
 | 
					electricityPrice = 0.11556
 | 
				
			||||||
 | 
					electricityUsageFactor = 0.75
 | 
				
			||||||
OptionList = []
 | 
					OptionList = []
 | 
				
			||||||
exit = False
 | 
					exit = False
 | 
				
			||||||
stopThread = False
 | 
					stopThread = False
 | 
				
			||||||
| 
						 | 
					@ -67,12 +71,15 @@ def search_adresses(adress_list, filename_adresslist, driver, mainText):
 | 
				
			||||||
    image_folder_map = "screenshots_map/"
 | 
					    image_folder_map = "screenshots_map/"
 | 
				
			||||||
    image_folder_production = "screenshots_production/"
 | 
					    image_folder_production = "screenshots_production/"
 | 
				
			||||||
    image_folder_qrcode = "qrcodes/"
 | 
					    image_folder_qrcode = "qrcodes/"
 | 
				
			||||||
 | 
					    image_folder_barcharts = "barcharts/"
 | 
				
			||||||
    if(not os.path.exists(image_folder_map[:-1])):
 | 
					    if(not os.path.exists(image_folder_map[:-1])):
 | 
				
			||||||
        os.makedirs(image_folder_map[:-1], exist_ok=False)
 | 
					        os.makedirs(image_folder_map[:-1], exist_ok=False)
 | 
				
			||||||
    if(not os.path.exists(image_folder_production[:-1])):
 | 
					    # if(not os.path.exists(image_folder_production[:-1])):
 | 
				
			||||||
        os.makedirs(image_folder_production[:-1], exist_ok=False)
 | 
					    #     os.makedirs(image_folder_production[:-1], exist_ok=False)
 | 
				
			||||||
    if (not os.path.exists(image_folder_qrcode[:-1])):
 | 
					    if (not os.path.exists(image_folder_qrcode[:-1])):
 | 
				
			||||||
        os.makedirs(image_folder_qrcode[:-1], exist_ok=False)
 | 
					        os.makedirs(image_folder_qrcode[:-1], exist_ok=False)
 | 
				
			||||||
 | 
					    if (not os.path.exists(image_folder_barcharts[:-1])):
 | 
				
			||||||
 | 
					        os.makedirs(image_folder_barcharts[:-1], exist_ok=False)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    startTime = datetime.datetime.now()
 | 
					    startTime = datetime.datetime.now()
 | 
				
			||||||
    address_count = len(adress_list)
 | 
					    address_count = len(adress_list)
 | 
				
			||||||
| 
						 | 
					@ -86,9 +93,12 @@ def search_adresses(adress_list, filename_adresslist, driver, mainText):
 | 
				
			||||||
        sumRoofArea = "not-found"
 | 
					        sumRoofArea = "not-found"
 | 
				
			||||||
        featureId = "not-found"
 | 
					        featureId = "not-found"
 | 
				
			||||||
        response_all_roofs_decoded = "not-found"
 | 
					        response_all_roofs_decoded = "not-found"
 | 
				
			||||||
 | 
					        coordinates = ("not-found", "not-found")
 | 
				
			||||||
        found = True
 | 
					        found = True
 | 
				
			||||||
        line = adress_list[i]
 | 
					        line = adress_list[i]
 | 
				
			||||||
        adress = line.split(file_split_char)
 | 
					        adress = line.split(file_split_char)
 | 
				
			||||||
 | 
					        barChartMonth = [0] * 12
 | 
				
			||||||
 | 
					        barChartData = [0] * 12
 | 
				
			||||||
        if((line != adress_list[0]) and (adress[columnIndexes[6]] == "") and (((len(adress[columnIndexes[0]]) > 0) and (len(adress[columnIndexes[1]]) > 0) and (len(adress[columnIndexes[2]]) > 0) and (len(adress[columnIndexes[3]]) > 0)) or ((len(adress[columnIndexes[4]]) > 0) and (len(adress[columnIndexes[5]]) > 0)))):
 | 
					        if((line != adress_list[0]) and (adress[columnIndexes[6]] == "") and (((len(adress[columnIndexes[0]]) > 0) and (len(adress[columnIndexes[1]]) > 0) and (len(adress[columnIndexes[2]]) > 0) and (len(adress[columnIndexes[3]]) > 0)) or ((len(adress[columnIndexes[4]]) > 0) and (len(adress[columnIndexes[5]]) > 0)))):
 | 
				
			||||||
            address_string = adress[columnIndexes[0]] + " " + adress[columnIndexes[1]] + " " + adress[columnIndexes[2]] + " " + adress[columnIndexes[3]]
 | 
					            address_string = adress[columnIndexes[0]] + " " + adress[columnIndexes[1]] + " " + adress[columnIndexes[2]] + " " + adress[columnIndexes[3]]
 | 
				
			||||||
            print("searching for Address: " + address_string)
 | 
					            print("searching for Address: " + address_string)
 | 
				
			||||||
| 
						 | 
					@ -140,9 +150,8 @@ def search_adresses(adress_list, filename_adresslist, driver, mainText):
 | 
				
			||||||
                    response_one_roof = requests.get('https://api3.geo.admin.ch/rest/services/api/MapServer/identify',
 | 
					                    response_one_roof = requests.get('https://api3.geo.admin.ch/rest/services/api/MapServer/identify',
 | 
				
			||||||
                                                     params=params)
 | 
					                                                     params=params)
 | 
				
			||||||
                    response_one_roof_decoded = json.loads(response_one_roof.content.decode())
 | 
					                    response_one_roof_decoded = json.loads(response_one_roof.content.decode())
 | 
				
			||||||
                    results = (response_one_roof_decoded['results'])
 | 
					                    # results = (response_one_roof_decoded['results'])
 | 
				
			||||||
                    # for result in results:
 | 
					
 | 
				
			||||||
                    #     print(result)
 | 
					 | 
				
			||||||
                    building_id = (response_one_roof_decoded)['results'][0]['attributes']['building_id']
 | 
					                    building_id = (response_one_roof_decoded)['results'][0]['attributes']['building_id']
 | 
				
			||||||
                except:
 | 
					                except:
 | 
				
			||||||
                    found = False
 | 
					                    found = False
 | 
				
			||||||
| 
						 | 
					@ -166,12 +175,19 @@ def search_adresses(adress_list, filename_adresslist, driver, mainText):
 | 
				
			||||||
                        suitabilities = []
 | 
					                        suitabilities = []
 | 
				
			||||||
                        bestRoofEnergy = 0
 | 
					                        bestRoofEnergy = 0
 | 
				
			||||||
                        bestRoof = response_all_roofs_decoded[0]
 | 
					                        bestRoof = response_all_roofs_decoded[0]
 | 
				
			||||||
 | 
					                        barChartMonth = response_all_roofs_decoded[0]['attributes']['monate']
 | 
				
			||||||
 | 
					                        barChartData = [0] * 12
 | 
				
			||||||
                        for roof in response_all_roofs_decoded:
 | 
					                        for roof in response_all_roofs_decoded:
 | 
				
			||||||
                            energy = float(roof['attributes']['gstrahlung'])*0.2*0.8
 | 
					                            energy = float(roof['attributes']['gstrahlung'])*0.2*0.8*electricityUsageFactor
 | 
				
			||||||
                            if(energy > bestRoofEnergy):
 | 
					
 | 
				
			||||||
                                bestRoofEnergy = energy
 | 
					 | 
				
			||||||
                                bestRoof = roof
 | 
					 | 
				
			||||||
                            if(float(roof['attributes']['flaeche']) > minRoofSize and int(roof['attributes']['klasse']) >= minSuitability):
 | 
					                            if(float(roof['attributes']['flaeche']) > minRoofSize and int(roof['attributes']['klasse']) >= minSuitability):
 | 
				
			||||||
 | 
					                                if (energy > bestRoofEnergy):
 | 
				
			||||||
 | 
					                                    bestRoofEnergy = energy
 | 
				
			||||||
 | 
					                                    bestRoof = roof
 | 
				
			||||||
 | 
					                                for month_count in range(12):
 | 
				
			||||||
 | 
					                                    barChartData[month_count] = barChartData[month_count] + float(
 | 
				
			||||||
 | 
					                                        roof['attributes']['monats_ertrag'][month_count]) * float(
 | 
				
			||||||
 | 
					                                        roof['attributes']['flaeche']) * electricityPrice
 | 
				
			||||||
                                sumEnergyRoofs = sumEnergyRoofs + energy
 | 
					                                sumEnergyRoofs = sumEnergyRoofs + energy
 | 
				
			||||||
                                sumRoofArea = sumRoofArea + float(roof['attributes']['flaeche'])
 | 
					                                sumRoofArea = sumRoofArea + float(roof['attributes']['flaeche'])
 | 
				
			||||||
                                suitabilities.append(int(roof['attributes']['klasse']))
 | 
					                                suitabilities.append(int(roof['attributes']['klasse']))
 | 
				
			||||||
| 
						 | 
					@ -187,7 +203,8 @@ def search_adresses(adress_list, filename_adresslist, driver, mainText):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            roof_is_suitable = True # TODO decide if roof is suitable
 | 
					            roof_is_suitable = True # TODO decide if roof is suitable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            existing_solar_panel_power = "none"
 | 
					            existing_solar_panel_power = "error"
 | 
				
			||||||
 | 
					            existing_solar_panel_begining_of_operation = "error"
 | 
				
			||||||
            roof_has_solarpanel = False # TODO check if roof has solar Panel
 | 
					            roof_has_solarpanel = False # TODO check if roof has solar Panel
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            #Check if there is solar panel existing
 | 
					            #Check if there is solar panel existing
 | 
				
			||||||
| 
						 | 
					@ -203,43 +220,73 @@ def search_adresses(adress_list, filename_adresslist, driver, mainText):
 | 
				
			||||||
                repsonse_solar_panel = requests.get('https://api3.geo.admin.ch/rest/services/api/MapServer/find',
 | 
					                repsonse_solar_panel = requests.get('https://api3.geo.admin.ch/rest/services/api/MapServer/find',
 | 
				
			||||||
                                                    params=params)
 | 
					                                                    params=params)
 | 
				
			||||||
                repsonse_solar_panel_decoded = json.loads(repsonse_solar_panel.content.decode())
 | 
					                repsonse_solar_panel_decoded = json.loads(repsonse_solar_panel.content.decode())
 | 
				
			||||||
                print(repsonse_solar_panel_decoded)
 | 
					
 | 
				
			||||||
                results = (repsonse_solar_panel_decoded['results'])
 | 
					                results = (repsonse_solar_panel_decoded['results'])
 | 
				
			||||||
                if(len(results) > 0):
 | 
					                if(len(results) > 0):
 | 
				
			||||||
                    existing_solar_panel_power = results[0]['attributes']['total_power']
 | 
					                    existing_solar_panel_power = results[0]['attributes']['total_power']
 | 
				
			||||||
 | 
					                    existing_solar_panel_begining_of_operation = results[0]['attributes']['beginning_of_operation']
 | 
				
			||||||
 | 
					                else:
 | 
				
			||||||
 | 
					                    existing_solar_panel_power = "none"
 | 
				
			||||||
 | 
					                    existing_solar_panel_begining_of_operation = "none"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            except:
 | 
					            except:
 | 
				
			||||||
                existing_solar_panel_power = "not-found"
 | 
					                existing_solar_panel_power = "error"
 | 
				
			||||||
 | 
					                existing_solar_panel_begining_of_operation = "error"
 | 
				
			||||||
                roof_has_solarpanel = False
 | 
					                roof_has_solarpanel = False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if(found and createImages.get() > 0 and roof_is_suitable and (not roof_has_solarpanel)):
 | 
					            if(found and createImages.get() > 0 and roof_is_suitable and (not roof_has_solarpanel)):
 | 
				
			||||||
                image_filename = address_string + ".png"
 | 
					                image_filename = adress[columnIndexes[14]] + " " + address_string + ".png"
 | 
				
			||||||
                create_images(address_string, driver, image_filename, image_folder_map, image_folder_production, image_folder_qrcode,
 | 
					
 | 
				
			||||||
                              url)
 | 
					                barchart_color = ""
 | 
				
			||||||
 | 
					                if(suitability == 1):
 | 
				
			||||||
 | 
					                    barchart_color = "#00c5ff"
 | 
				
			||||||
 | 
					                elif(suitability == 2):
 | 
				
			||||||
 | 
					                    barchart_color = "#ffff00"
 | 
				
			||||||
 | 
					                elif(suitability == 3):
 | 
				
			||||||
 | 
					                    barchart_color = "#ffaa00"
 | 
				
			||||||
 | 
					                elif(suitability == 4):
 | 
				
			||||||
 | 
					                    barchart_color = "#ff5500"
 | 
				
			||||||
 | 
					                elif(suitability == 5):
 | 
				
			||||||
 | 
					                    barchart_color = "#a80000"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                qr_url = "https://nexs.ch/redirect?" + urlencode({
 | 
				
			||||||
 | 
					                    "id": adress[columnIndexes[14]],
 | 
				
			||||||
 | 
					                    "project": "PJ2505-0014",
 | 
				
			||||||
 | 
					                    "target": "https://www.solosolar.ch/de/kontakt?" + urlencode({
 | 
				
			||||||
 | 
					                        "firstname": adress[columnIndexes[15]],
 | 
				
			||||||
 | 
					                        "lastname": adress[columnIndexes[16]],
 | 
				
			||||||
 | 
					                        "adresse": f"{adress[columnIndexes[0]]} {adress[columnIndexes[1]]}",
 | 
				
			||||||
 | 
					                        "zip": adress[columnIndexes[2]],
 | 
				
			||||||
 | 
					                        "city": adress[columnIndexes[3]]
 | 
				
			||||||
 | 
					                    }, quote_via=quote_plus)
 | 
				
			||||||
 | 
					                }, quote_via=quote_plus)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                create_images(address_string, driver, image_filename, image_folder_map, image_folder_production, image_folder_qrcode, image_folder_barcharts,
 | 
				
			||||||
 | 
					                              url, barChartMonth, barChartData, barchart_color, qr_url)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                image_filename = "not-created"
 | 
					                image_filename = "not-created"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            print("saving Address: " + address_string)
 | 
					            # print("saving Address: " + address_string)
 | 
				
			||||||
            save_information_to_addresslist(adress, adress_list, columnIndexes, coordinates, file_split_char, i,
 | 
					            save_information_to_addresslist(adress, adress_list, columnIndexes, coordinates, file_split_char, i,
 | 
				
			||||||
                                            image_filename, sumEnergyRoofs, sumRoofArea, suitability, url,
 | 
					                                            image_filename, sumEnergyRoofs, sumRoofArea, suitability, url,
 | 
				
			||||||
                                            value_electricity_production, existing_solar_panel_power)
 | 
					                                            value_electricity_production, existing_solar_panel_power, existing_solar_panel_begining_of_operation)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if(i % 100 == 0 or i + 1 == address_count):
 | 
				
			||||||
            save_addresslist_in_file(adress_list, filename_adresslist)
 | 
					            save_addresslist_in_file(adress_list, filename_adresslist)
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if(found):
 | 
					 | 
				
			||||||
                street = adress[columnIndexes[0]] + " " + adress[columnIndexes[1]]
 | 
					 | 
				
			||||||
                plz = adress[columnIndexes[2]]
 | 
					 | 
				
			||||||
                city = adress[columnIndexes[3]]
 | 
					 | 
				
			||||||
                create_Partner_in_dolibarr(street, plz, city, coordinates, sumEnergyRoofs, sumRoofArea, suitability, featureId, url, response_all_roofs_decoded)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            print("saved Address: " + address_string)
 | 
					 | 
				
			||||||
            print("Address " + str(i) + " of " + str(address_count))
 | 
					            print("Address " + str(i) + " of " + str(address_count))
 | 
				
			||||||
            timediff = relativedelta(datetime.datetime.now(), startTime)
 | 
					            timediff = relativedelta(datetime.datetime.now(), startTime)
 | 
				
			||||||
            print("Process is running since %d years %d months %d days %d hours %d minutes %d seconds" % (
 | 
					            print("Process is running since %d years %d months %d days %d hours %d minutes %d seconds" % (
 | 
				
			||||||
                timediff.years, timediff.months, timediff.days, timediff.hours, timediff.minutes, timediff.seconds))
 | 
					                timediff.years, timediff.months, timediff.days, timediff.hours, timediff.minutes, timediff.seconds))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            # if(found):
 | 
				
			||||||
 | 
					                # street = adress[columnIndexes[0]] + " " + adress[columnIndexes[1]]
 | 
				
			||||||
 | 
					                # plz = adress[columnIndexes[2]]
 | 
				
			||||||
 | 
					                # city = adress[columnIndexes[3]]
 | 
				
			||||||
 | 
					                # create_Partner_in_dolibarr(street, plz, city, coordinates, sumEnergyRoofs, sumRoofArea, suitability, featureId, url, response_all_roofs_decoded)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if(stopThread == True):
 | 
					        if(stopThread == True):
 | 
				
			||||||
            print("closing Thread")
 | 
					            print("closing Thread")
 | 
				
			||||||
| 
						 | 
					@ -253,7 +300,7 @@ def search_adresses(adress_list, filename_adresslist, driver, mainText):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def save_information_to_addresslist(adress, adress_list, columnIndexes, coordinates, file_split_char, list_index,
 | 
					def save_information_to_addresslist(adress, adress_list, columnIndexes, coordinates, file_split_char, list_index,
 | 
				
			||||||
                                    image_filename, pv_Production100, roof_area, suitability, url,
 | 
					                                    image_filename, pv_Production100, roof_area, suitability, url,
 | 
				
			||||||
                                    value_electricity_production, existing_solar_panel_power):
 | 
					                                    value_electricity_production, existing_solar_panel_power, existing_solar_panel_begining_of_operation):
 | 
				
			||||||
    # Save Information in Addresslist
 | 
					    # Save Information in Addresslist
 | 
				
			||||||
    adress[columnIndexes[4]] = str(coordinates[0])
 | 
					    adress[columnIndexes[4]] = str(coordinates[0])
 | 
				
			||||||
    adress[columnIndexes[5]] = str(coordinates[1])
 | 
					    adress[columnIndexes[5]] = str(coordinates[1])
 | 
				
			||||||
| 
						 | 
					@ -264,20 +311,15 @@ def save_information_to_addresslist(adress, adress_list, columnIndexes, coordina
 | 
				
			||||||
    adress[columnIndexes[10]] = value_electricity_production
 | 
					    adress[columnIndexes[10]] = value_electricity_production
 | 
				
			||||||
    adress[columnIndexes[11]] = roof_area
 | 
					    adress[columnIndexes[11]] = roof_area
 | 
				
			||||||
    adress[columnIndexes[12]] = existing_solar_panel_power
 | 
					    adress[columnIndexes[12]] = existing_solar_panel_power
 | 
				
			||||||
    new_line_string = ""
 | 
					    adress[columnIndexes[13]] = existing_solar_panel_begining_of_operation
 | 
				
			||||||
    for j in adress:
 | 
					    new_line_string = file_split_char.join(str(j) for j in adress)
 | 
				
			||||||
        new_line_string = new_line_string + str(j) + file_split_char
 | 
					 | 
				
			||||||
    adress_list[list_index] = new_line_string
 | 
					    adress_list[list_index] = new_line_string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def save_addresslist_in_file(adress_list, filename_adresslist):
 | 
					def save_addresslist_in_file(address_list, filename_addresslist):
 | 
				
			||||||
    new_adress_list = ""
 | 
					    with open(filename_addresslist, "w", encoding="utf-8") as address_file:
 | 
				
			||||||
    for j in adress_list:
 | 
					        for address in address_list:
 | 
				
			||||||
        new_adress_list = new_adress_list + (j) + "\n"
 | 
					            address_file.write(f"{address}\n")
 | 
				
			||||||
    # save File
 | 
					 | 
				
			||||||
    adress_file = open(filename_adresslist, "w", encoding="utf-8")
 | 
					 | 
				
			||||||
    adress_file.write(new_adress_list)
 | 
					 | 
				
			||||||
    adress_file.close()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
def create_Partner_in_dolibarr(street, plz, city, coordinates, sumEnergyRoofs, sumRoofArea, suitability, featureId, url, roofs):
 | 
					def create_Partner_in_dolibarr(street, plz, city, coordinates, sumEnergyRoofs, sumRoofArea, suitability, featureId, url, roofs):
 | 
				
			||||||
    global electricityPrice
 | 
					    global electricityPrice
 | 
				
			||||||
| 
						 | 
					@ -324,13 +366,13 @@ def create_roof_info(roofs):
 | 
				
			||||||
        info_text = info_text + str(i + 1) + ". Fläche\n" + "Potenzielle Energie: " + str(roofs[i]['attributes']['gstrahlung']*0.2*0.8) + "\nFläche: " + str(roofs[i]['attributes']['flaeche']) + "\nEignung: " + str(roofs[i]['attributes']['klasse']) + " (" + str(roofs[i]['attributes']['klasse_text']).split("##")[0] + ")\n\n"
 | 
					        info_text = info_text + str(i + 1) + ". Fläche\n" + "Potenzielle Energie: " + str(roofs[i]['attributes']['gstrahlung']*0.2*0.8) + "\nFläche: " + str(roofs[i]['attributes']['flaeche']) + "\nEignung: " + str(roofs[i]['attributes']['klasse']) + " (" + str(roofs[i]['attributes']['klasse_text']).split("##")[0] + ")\n\n"
 | 
				
			||||||
    return info_text
 | 
					    return info_text
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def create_images(address_string, driver, image_filename, image_folder_map, image_folder_production, image_folder_qrcode, url):
 | 
					def create_images(address_string, driver, image_filename, image_folder_map, image_folder_production, image_folder_qrcode, image_folder_barcharts, url, barChartMonth, barChartData, barchart_color, qr_url):
 | 
				
			||||||
    driver.get(url)
 | 
					    driver.get(url)
 | 
				
			||||||
    time.sleep(2)
 | 
					    time.sleep(2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Create QR-Code
 | 
					    # Create QR-Code
 | 
				
			||||||
    qr = qrcode.QRCode(version=1, box_size=10, border=5)
 | 
					    qr = qrcode.QRCode(version=1, box_size=10, border=5)
 | 
				
			||||||
    qr.add_data(url)
 | 
					    qr.add_data(qr_url)
 | 
				
			||||||
    qr.make(fit=True)
 | 
					    qr.make(fit=True)
 | 
				
			||||||
    qr.make_image(fill='black', back_color='white').save(image_folder_qrcode + image_filename)
 | 
					    qr.make_image(fill='black', back_color='white').save(image_folder_qrcode + image_filename)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -339,6 +381,11 @@ def create_images(address_string, driver, image_filename, image_folder_map, imag
 | 
				
			||||||
    try:
 | 
					    try:
 | 
				
			||||||
        driver.execute_script("""var l = document.getElementsByClassName("ol-zoom ol-unselectable ol-control")[0];
 | 
					        driver.execute_script("""var l = document.getElementsByClassName("ol-zoom ol-unselectable ol-control")[0];
 | 
				
			||||||
                                               l.parentNode.removeChild(l);""")
 | 
					                                               l.parentNode.removeChild(l);""")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Marker entfernen
 | 
				
			||||||
 | 
					        # driver.execute_script("""var l = document.getElementsByClassName("marker ga-crosshair")[0];
 | 
				
			||||||
 | 
					        #                                        l.parentNode.removeChild(l);""")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    except:
 | 
					    except:
 | 
				
			||||||
        pass
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -351,30 +398,63 @@ def create_images(address_string, driver, image_filename, image_folder_map, imag
 | 
				
			||||||
    w = x + size["width"]
 | 
					    w = x + size["width"]
 | 
				
			||||||
    h = size["height"]
 | 
					    h = size["height"]
 | 
				
			||||||
    area = (x, 0, w, h)
 | 
					    area = (x, 0, w, h)
 | 
				
			||||||
    driver.execute_script("window.scrollTo(0, " + str(y) + ")")
 | 
					    mapElement.screenshot(image_folder_map + image_filename)
 | 
				
			||||||
    time.sleep(1)
 | 
					    # driver.execute_script("window.scrollTo(0, " + str(y) + ")")
 | 
				
			||||||
    driver.save_screenshot(image_folder_map + image_filename)
 | 
					    # time.sleep(1)
 | 
				
			||||||
    time.sleep(0.2)
 | 
					    # driver.save_screenshot(image_folder_map + image_filename)
 | 
				
			||||||
    Image.open(image_folder_map + image_filename).crop(area).save(
 | 
					    # time.sleep(0.2)
 | 
				
			||||||
        image_folder_map + image_filename)
 | 
					    # Image.open(image_folder_map + image_filename).crop(area).save(
 | 
				
			||||||
 | 
					    #     image_folder_map + image_filename)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Create Screenshot of Chart
 | 
					    # Create Screenshot of Chart
 | 
				
			||||||
    try:
 | 
					    # try:
 | 
				
			||||||
        chartElement = driver.find_elements(By.XPATH, "//div[@id='chart']//*")[0]
 | 
					    #     chartElement = driver.find_elements(By.XPATH, "//div[@id='chart']//*")[0]
 | 
				
			||||||
        location = chartElement.location
 | 
					    #     location = chartElement.location
 | 
				
			||||||
        size = chartElement.size
 | 
					    #     size = chartElement.size
 | 
				
			||||||
        x = location["x"]
 | 
					    #     x = location["x"]
 | 
				
			||||||
        y = location["y"]
 | 
					    #     y = location["y"]
 | 
				
			||||||
        w = x + size["width"]
 | 
					    #     w = x + size["width"]
 | 
				
			||||||
        h = size["height"]
 | 
					    #     h = size["height"]
 | 
				
			||||||
        area = (x, 0, w, h)
 | 
					    #     area = (x, 0, w, h)
 | 
				
			||||||
        driver.execute_script("window.scrollTo(0, " + str(y) + ")")
 | 
					    #     driver.execute_script("window.scrollTo(0, " + str(y) + ")")
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    #     time.sleep(1)
 | 
				
			||||||
 | 
					    #     driver.save_screenshot(image_folder_production + image_filename)
 | 
				
			||||||
 | 
					    #     time.sleep(0.2)
 | 
				
			||||||
 | 
					    #     Image.open(image_folder_production + image_filename).crop(area).save(
 | 
				
			||||||
 | 
					    #         image_folder_production + image_filename)
 | 
				
			||||||
 | 
					    # except:
 | 
				
			||||||
 | 
					    #     pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        time.sleep(1)
 | 
					    # Create barchar with matplotlib.pyplot
 | 
				
			||||||
        driver.save_screenshot(image_folder_production + image_filename)
 | 
					    try:
 | 
				
			||||||
        time.sleep(0.2)
 | 
					        barChartMonth.reverse()
 | 
				
			||||||
        Image.open(image_folder_production + image_filename).crop(area).save(
 | 
					        barChartMonth = [str(item) for item in barChartMonth]
 | 
				
			||||||
            image_folder_production + image_filename)
 | 
					        barChartData.reverse()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        max_wert = max(barChartData)
 | 
				
			||||||
 | 
					        min_wert = min(barChartData)
 | 
				
			||||||
 | 
					        skala = max_wert + max_wert * 0.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        plt.figure(figsize=(7, 3))
 | 
				
			||||||
 | 
					        plt.bar(barChartMonth, barChartData, color=barchart_color)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        plt.ylabel('Stromproduktion in Franken', fontsize=12)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        plt.ylim(0, skala)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Turn off the frame (border) around the graphic
 | 
				
			||||||
 | 
					        ax = plt.gca()  # Get the current axis
 | 
				
			||||||
 | 
					        ax.spines['top'].set_visible(False)
 | 
				
			||||||
 | 
					        ax.spines['right'].set_visible(False)
 | 
				
			||||||
 | 
					        ax.spines['bottom'].set_visible(False)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        plt.xticks(barChartMonth)
 | 
				
			||||||
 | 
					        # Set the x-axis limits to remove extra space on the right
 | 
				
			||||||
 | 
					        # plt.xlim(barChartMonth[0], barChartMonth[-1])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        plt.savefig(f"{image_folder_barcharts}{image_filename}", bbox_inches='tight')
 | 
				
			||||||
 | 
					        plt.close('all')
 | 
				
			||||||
    except:
 | 
					    except:
 | 
				
			||||||
        pass
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
import json
 | 
					import json
 | 
				
			||||||
import requests
 | 
					import requests
 | 
				
			||||||
 | 
					
 | 
				
			||||||
search_string = "Toggenburgstrasse 31 8245 Feuerthalen"
 | 
					search_string = "Pelikanweg 51 3074 Muri b. Bern"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#Address to coordinates
 | 
					#Address to coordinates
 | 
				
			||||||
params={
 | 
					params={
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue