46045-syslab/syslab-python/syslab/virtual/FlexHouse_sim_batt.py

53 lines
2.1 KiB
Python

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