class Wechselrichter: def __init__(self, max_leistung_wh, akku): self.max_leistung_wh = max_leistung_wh # Maximum power that the inverter can handle self.akku = akku # Connection to a battery object def energie_verarbeiten(self, erzeugung, verbrauch, hour): verluste = 0 # Losses during processing netzeinspeisung = 0 # Grid feed-in netzbezug = 0.0 # Grid draw eigenverbrauch = 0.0 # Self-consumption if erzeugung >= verbrauch: if verbrauch > self.max_leistung_wh: # If consumption exceeds maximum inverter power verluste += erzeugung - self.max_leistung_wh restleistung_nach_verbrauch = self.max_leistung_wh - verbrauch netzbezug = -restleistung_nach_verbrauch # Negative indicates feeding into the grid eigenverbrauch = self.max_leistung_wh else: # Remaining power after consumption restleistung_nach_verbrauch = erzeugung - verbrauch # Load battery with excess energy geladene_energie, verluste_laden_akku = self.akku.energie_laden(restleistung_nach_verbrauch, hour) rest_überschuss = restleistung_nach_verbrauch - (geladene_energie + verluste_laden_akku) # Feed-in to the grid based on remaining capacity if rest_überschuss > self.max_leistung_wh - verbrauch: netzeinspeisung = self.max_leistung_wh - verbrauch verluste += rest_überschuss - netzeinspeisung else: netzeinspeisung = rest_überschuss verluste += verluste_laden_akku eigenverbrauch = verbrauch # Self-consumption is equal to the load else: benötigte_energie = verbrauch - erzeugung # Energy needed from external sources max_akku_leistung = self.akku.max_ladeleistung_w # Maximum battery discharge power # Calculate remaining AC power available rest_ac_leistung = max(self.max_leistung_wh - erzeugung, 0) # Discharge energy from the battery based on need if benötigte_energie < rest_ac_leistung: aus_akku, akku_entladeverluste = self.akku.energie_abgeben(benötigte_energie, hour) else: aus_akku, akku_entladeverluste = self.akku.energie_abgeben(rest_ac_leistung, hour) verluste += akku_entladeverluste # Include losses from battery discharge netzbezug = benötigte_energie - aus_akku # Energy drawn from the grid eigenverbrauch = erzeugung + aus_akku # Total self-consumption return netzeinspeisung, netzbezug, verluste, eigenverbrauch