from ..physical.Battery import Battery from datetime import datetime class FlexHouse_sim_batt(Battery): def __init__(self, which='localhost'): super().__init__(which) self.internal_temperature = 20 # Celsius self.time = datetime.now() self.loss = 1 # kW if self.getRemainingFloodTime() == 300: #print('Battery is not started. I will initiate start sequence, please retry in 5 minutes') self.startBattery() raise SystemError('Battery is not started. I will initiate start sequence, please retry in 5 minutes') if (self.getRemainingFloodTime() > 1) and (self.getRemainingFloodTime() < 300): #print('Battery is not ready yet') raise SystemError('Battery is not ready yet, please wait {} seconds'.format(self.getRemainingFloodTime())) # The variables below are only relevant for implementing and advanced house model. #self.__Th = 20 # internal heater state #self.__Te = 19 # envelope state #self.__Aw = 14.351 # m^2 #self.__Ce = 4.741 # kWh/C #self.__Ch = 0.00225 # kWh/C #self.__Ci = 2.555 # kWh/C #self.__Rea = 3.265 # C/kW #self.__Rie = 0.817 # C/kW #self.__Ria = 37.005 # C/kW #self.__Rih = 140.44 # C/kW def setPowerConsumption(self, power_reference): if power_reference > 10: power_reference = 10 if power_reference < 0: raise ValueError("Negative power means production") self.setActivePower(power_reference) def step_sim(self): time_now = datetime.now() time_delta = (time_now - self.time).total_seconds() # Below is a simple house model. A more complex one can be implemented self.internal_temperature += 0.5*(self.getActivePower().value/3600*time_delta) - 2*(self.loss/3600*time_delta) #self.__Th = 20 # internal heater state #self.__Te = 19 # envelope state self.time = time_now def getTemperature(self): self.step_sim() return self.internal_temperature