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

52 lines
1.9 KiB
Python

from ..physical.Dumpload import Dumpload
from ..virtual.MetMast import MetMast
from datetime import datetime
class FlexHouse_sim(Dumpload):
def __init__(self, which='localhost'):
super().__init__(which)
self.internal_temperature = 20 # Celsius
self.time = datetime.now()
self.mt = MetMast()
# The variables below are only relevant for implementing an 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/Cst
#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:
self.startLoad()
power_reference = 10.0
if power_reference < 0:
raise ValueError("Negative power means production")
if power_reference == 0:
self.stopLoad()
self.setPowerSetPoint(power_reference)
def step_sim(self):
time_now = datetime.now()
time_delta = (time_now - self.time).total_seconds()
T_ambient = self.mt.getTemperature()
irradiance = self.mt.getInsolation()/1000
# Below is a simple house model. A more complex one can be implemented
self.internal_temperature += 0.5*(self.getActivePower().value/3600*time_delta) - 0.00025*((self.internal_temperature-T_ambient)*time_delta) + 0.001*irradiance*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