Beispiel #1
0
	def addPV(self, area):
		self.hasPV = True
		self.pvArea = area
		self.pvEfficiency = random.randint(external_inputs.PVEfficiencyMin, external_inputs.PVEfficiencyMax)
		self.pvAzimuth = profilegentools.gaussMinMax(external_inputs.PVAzimuthMean, external_inputs.PVAzimuthSigma)
		if(self.pvAzimuth < 0):
			self.pvAzimuth = self.pvAzimuth + 360
		self.pvElevation = profilegentools.gaussMinMax(external_inputs.PVAngleMean, external_inputs.PVAngleSigma)
Beispiel #2
0
 def __init__(self, age):
     self.generate(age)
     self.generateWorkdays(0)
     self.WeekendWakeUp_Avg = profilegentools.gaussMinMax(8.5 * 60, 1 * 60)
     self.WeekendActivities = 0.7 - (0.03 * (age - 65))
     self.WorkdayBedTime_Avg = profilegentools.gaussMinMax(
         (23 - (age - 65) * 0.15) * 60, 30)
     self.WeekendBedTime_Avg = profilegentools.gaussMinMax(
         (23 - (age - 65) * 0.15) * 60, 30)
Beispiel #3
0
 def __init__(self, age):
     self.generate(age)
     self.WorkdayArrival_Avg = self.WorkdayLeave_Avg + profilegentools.gaussMinMax(
         7 * 60, 30)
     if (age < 16):
         self.WorkdayBedTime_Avg = profilegentools.gaussMinMax(
             (23 - (16 - age) * 0.25) * 60, 30)
         self.WeekendBedTime_Avg = profilegentools.gaussMinMax(
             (23 - (16 - age) * 0.25) * 60, 30)
     self.WorkdaySport_Avg = profilegentools.gaussMinMax(19 * 60, 1 * 60)
Beispiel #4
0
    def generate(self, consumption):
        self.Runtime = profilegentools.gaussMinMax(15, 5)
        self.Offtime = profilegentools.gaussMinMax(40, 10)
        self.Consumption = consumption
        self.State = 0

        self.RuntimeCycle = self.Runtime
        self.OfftimeCycle = self.Offtime
        self.CycleProgress = random.randint(0, self.Runtime + self.Offtime)
        if (self.CycleProgress < (self.Runtime + self.Offtime)):
            self.State = 1
Beispiel #5
0
    def __init__(self):
        self.generate()
        self.ConsumptionYearly = profilegentools.gaussMinMax(external_inputs.yearlyConsumption,
                                                             400) * external_inputs.consumptionFactor  # kWh http://www.nibud.nl/uitgaven/huishouden/gas-elektriciteit-en-water.html

        age = random.triangular(65, 85, 70)
        self.Persons = [persons.PersonRetired(age)]

        if (random.randint(1, 2) == 1):
            self.Fridges = [
                devices.DeviceFridge(random.randint(external_inputs.ConsumptionFridgeBigMin, external_inputs.ConsumptionFridgeBigMax))]
        else:
            self.Fridges = [devices.DeviceFridge(
                random.randint(external_inputs.ConsumptionFridgeSmallMin, external_inputs.ConsumptionFridgeSmallMax)),
                devices.DeviceFridge(
                    random.randint(external_inputs.ConsumptionFridgeSmallMin, external_inputs.ConsumptionFridgeSmallMax))]

        self.hasDishwasher = random.randint(0, 5) < 3  # 40%

        # Determine washing days
        self.generateWashingdays(random.randint(2, 3))

        # Dermine Dishwasher times
        if self.hasDishwasher:
            self.generateDishwashdays(3)
Beispiel #6
0
    def __init__(self, parttime=False, jobless=False):
        self.generate()
                             # http://www.cbs.nl/nl-NL/menu/themas/bevolking/faq/specifiek/faq-hoeveel-kinderen.htm

        self.ConsumptionYearly = profilegentools.gaussMinMax(external_inputs.yearlyConsumption + (700 * external_inputs.numKids), 500 + (
                external_inputs.numKids * 100)) * external_inputs.consumptionFactor  # kWh http://www.nibud.nl/uitgaven/huishouden/gas-elektriciteit-en-water.html

        ageParents = random.randint(40, 55)
        if parttime == True:
            self.Persons = [persons.PersonParttimeWorker(ageParents)]
        elif jobless == True:
            self.Persons = [persons.PersonJobless(ageParents)]
        else:
            self.Persons = [persons.PersonWorker(ageParents)]

        if not jobless:
            # To make life easy, only one persons.Person will use the electric vehicle, so only the main persons.Person will receive a driving distance
            self.Persons[0].setDistanceToWork(external_inputs.distancetoWork)

        # now add the kids
        for i in range(0, external_inputs.numKids):
            self.Persons.append(persons.PersonStudent(random.randint(ageParents - 3, ageParents + 3) - 30))

        self.Fridges = [
            devices.DeviceFridge(random.randint(external_inputs.ConsumptionFridgeSmallMin, external_inputs.ConsumptionFridgeSmallMax)),
            devices.DeviceFridge(random.randint(external_inputs.ConsumptionFridgeSmallMin, external_inputs.ConsumptionFridgeSmallMax))]

        self.hasDishwasher = random.randint(0, 5) < 4  # 60%

        # Determine washing days
        self.generateWashingdays(min(5 + external_inputs.numKids, 7))

        # Dermine Dishwasher times
        if self.hasDishwasher:
            self.generateDishwashdays(min(5 + external_inputs.numKids, 7))
Beispiel #7
0
    def __init__(self, parttime=False, jobless=False):
        self.generate()
        self.ConsumptionYearly = profilegentools.gaussMinMax(external_inputs.yearlyConsumption,
                                                             700) * external_inputs.consumptionFactor  # kWh http://www.nibud.nl/uitgaven/huishouden/gas-elektriciteit-en-water.html

        assert (parttime == False or jobless == False)  # ONLY one van be active

        age = random.randint(26, 65)
        if parttime:
            self.Persons = [persons.PersonWorker(age), persons.PersonParttimeWorker(age)]
        elif jobless:
            self.Persons = [persons.PersonWorker(age), persons.PersonJobless(age)]
        else:
            self.Persons = [persons.PersonWorker(age), persons.PersonWorker(age)]

        # To make life easy, only one persons.Person will use the electric vehicle, so only the main persons.Person will receive a driving distance
        self.Persons[0].setDistanceToWork(external_inputs.distancetoWork)

        if (random.randint(1, 2) == 1):
            self.Fridges = [
                devices.DeviceFridge(random.randint(external_inputs.ConsumptionFridgeBigMin, external_inputs.ConsumptionFridgeBigMax))]
        else:
            self.Fridges = [devices.DeviceFridge(
                random.randint(external_inputs.ConsumptionFridgeSmallMin, external_inputs.ConsumptionFridgeSmallMax)),
                devices.DeviceFridge(
                    random.randint(external_inputs.ConsumptionFridgeSmallMin,external_inputs.ConsumptionFridgeSmallMax))]

        self.hasDishwasher = random.randint(0, 5) < 2  # 40%

        # Determine washing days
        self.generateWashingdays(random.randint(3, 4))

        # Dermine Dishwasher times
        if self.hasDishwasher:
            self.generateDishwashdays(3)
Beispiel #8
0
    def __init__(self):
        self.generate()
        self.ConsumptionYearly = profilegentools.gaussMinMax(external_inputs.yearlyConsumption,
                                                             400) * external_inputs.consumptionFactor  # kWh http://www.nibud.nl/uitgaven/huishouden/gas-elektriciteit-en-water.html

        self.Persons = [persons.PersonParttimeWorker(random.randint(26, 65))]

        # For information about commuters, see this:
        # http://www.kimnet.nl/publicatie/mobiliteitsbalans-2013
        # Approx 50% uses the car to commute, which is our interrest as this part can be replaced by (PH)EV
        # http://www.cbs.nl/NR/rdonlyres/13516DAC-36E1-47B7-9918-2364EF7D0B48/0/2011k2v4p34art.pdf
        # 3 out of 5 working people don't work in town. Fair to assume that these people commute by car
        # Average commute distance is not too clear from multiple sources, such as the once above. Something around 20km seems to be average in most sources
        # However 30 is also mentioned: http://www.nederlandheeftwerk.nl/index.php/cms_categorie/58707/bb/1/id/58707
        # Depends also on the region and work in vicinity.

        if (random.randint(1, 2) == 1):
            self.Fridges = [
                devices.DeviceFridge(random.randint(external_inputs.ConsumptionFridgeBigMin, external_inputs.ConsumptionFridgeBigMax))]
        else:
            self.Fridges = [devices.DeviceFridge(
                random.randint(external_inputs.ConsumptionFridgeSmallMin, external_inputs.ConsumptionFridgeSmallMax)),
                devices.DeviceFridge(
                    random.randint(external_inputs.ConsumptionFridgeSmallMin, external_inputs.ConsumptionFridgeSmallMax))]

        # We synchronize the dishwasher and dryer based on the annual consumption. Furthermore, this also influences the number of washes.
        self.hasDishwasher = random.randint(0, 5) == 0  # 20%

        # Determine washing days
        self.generateWashingdays(random.randint(2, 3))

        # Dermine Dishwasher times
        if self.hasDishwasher:
            self.generateDishwashdays(3)
Beispiel #9
0
    def generate(self, age):
        # Variates could also use a gauss distribution, some persons are more predictable than others ;)
        self.Age = age

        # Routine of people
        # 7*60= 420 min --> mean is 420/60=  7:00 wake up with 1,5h deviation
        self.WorkdayWakeUp_Avg = profilegentools.gaussMinMax(7 * 60, 1.5 * 60)
        self.WorkdayWakeUp_Variate = 10
        self.WorkdayLeave_Avg = self.WorkdayWakeUp_Avg + profilegentools.gaussMinMax(
            45, 15)
        self.WorkdayLeave_Variate = 10
        self.WorkdayArrival_Avg = self.WorkdayLeave_Avg + profilegentools.gaussMinMax(
            8.5 * 60, 30)
        self.WorkdayArrival_Variate = 15
        self.WorkdaySport_Avg = self.WorkdayArrival_Avg + profilegentools.gaussMinMax(
            2.5 * 60, 2 * 60)
        self.WorkdaySport_Variate = 15
        self.WorkdaySportDuration_Avg = profilegentools.gaussMinMax(
            1.5 * 60, 30)
        self.WorkdaySportDuration_Variate = 10
        self.WorkdayBedTime_Avg = self.WorkdayWakeUp_Avg + profilegentools.gaussMinMax(
            15.5 * 60, 30)
        self.WorkdayBedTime_Variate = 15
        self.WorkdayActivities = random.randint(
            external_inputs.personWeekdayActivityChanceMin,
            external_inputs.personWeekdayActivityChanceMax
        ) / 100  # Chance to conduct random activities

        self.WeekendWakeUp_Avg = profilegentools.gaussMinMax(9 * 60, 2 * 60)
        self.WeekendWakeUp_Variate = 20
        self.WeekendSport_Avg = profilegentools.gaussMinMax(14 * 60, 5 * 60)
        self.WeekendSport_Variate = 60
        self.WeekendSportDuration_Avg = profilegentools.gaussMinMax(
            1.5 * 60, 30)
        self.WeekendSportDuration_Variate = 30
        self.WeekendBedTime_Avg = profilegentools.gaussMinMax(23 * 60, 30)
        self.WeekendBedTime_Variate = 10
        self.WeekendActivities = random.randint(
            external_inputs.personWeekendActivityChanceMin,
            external_inputs.personWeekendActivityChanceMax) / 100

        # For a new deepcopy, the following values should be regenerated
        self.WorkdaySportday = 1 + random.randint(1, 5)
        self.WeekendSportday = 6 * random.randint(0, 1)
        self.Workdays = range(1, 6)
        self.DistanceToWork = 0

        self.CookingTime = self.WorkdayArrival_Avg + 30

        self.showerMorning = True
        self.showerDays = list(range(0, 7))
        self.showerDuration = profilegentools.gaussMinMax(8, 3)

        # Generate Heat parameters
        self.generateHeatParams()
Beispiel #10
0
    def generate(self):
        # The Yearly consumption is the normal consumption of domestic appliances as found for years in households. This excludes:
        #																										   (PH)EV, Heat Pump, PV
        self.ConsumptionYearly = profilegentools.gaussMinMax(external_inputs.yearlyConsumption, 500)  # kWh

        # According to http://www.energie-nederland.nl/wp-content/uploads/2013/04/EnergieTrends2014.pdf, this is the distribution for devices we are interested in:
        # yearly energy consumption
        self.ConsumptionShare = {"Electronics": profilegentools.gaussMinMax(17, 3),
                                 "Lighting": profilegentools.gaussMinMax(6, 2),
                                 "Standby": profilegentools.gaussMinMax(35, 6)}

        self.Persons = []

        self.Consumption = {"Total": [],
                            "Other": [],
                            "Inductive": [],
                            "Fridges": [],
                            "Electronics": [],
                            "Lighting": [],
                            "Standby": []}

        self.consumptionFactor = {"Other": [],
                                  "Inductive": [],
                                  "Fridges": [],
                                  "Electronics": [],
                                  "Lighting": [],
                                  "Standby": []}

        self.HeatGain = {"PersonGain": [],
                         "DeviceGain": [],
                         "SolarGain": [],
                         "VentFlow": [],
                         "Total": []}

        self.HeatDemand = {"DHWDemand": [],
                           "Total": []}

        # Heat gain factors from devices
        self.HeatGainShare = {"Other": 0.3,
                              "Fridges": 0.5,
                              "Electronics": 1.0,
                              "Lighting": 0.8,
                              "Standby": 1.0}

        self.ReactiveConsumption = {"Total": [],
                                    "Other": [],
                                    "Inductive": [],
                                    "Fridges": [],
                                    "Electronics": [],
                                    "Lighting": [],
                                    "Standby": []}

        self.ReactiveFactor = {"Other": 1,
                               "Inductive": (random.randint(70, 90) / 100),
                               "Fridges": (random.randint(50, 65) / 100),
                               "Electronics": -(random.randint(99, 100) / 100),
                               "Lighting": -(random.randint(99, 100) / 100),
                               "Standby": -(random.randint(75, 85) / 100)}

        self.PVProfile = []

        self.Occupancy = []

        self.hasDishwasher = False
        self.hasInductionCooking = random.randint(1, 10) < 4
        self.hasEV = False
        self.hasHP = False
        self.hasCHP = False
        self.hasFloorHeating = True

        self.numOfWashes = 0  # weekly
        self.numOfDishwashes = 0  # Weekly

        self.WashingDays = []
        self.washingMoment = [-1] * 7
        self.DishwashDays = []
        self.DishwashMoment = [-1] * 7

        # devices
        self.Fridges = []
        self.Devices = {"Kettle": devices.DeviceKettle(external_inputs.ConsumptionKettle),
                        "Lighting": devices.DeviceLighting(),
                        "Electronics": devices.DeviceElectronics(),
                        "Cooking": devices.DeviceCooking(),
                        "Ventilation": devices.DeviceVentilation(external_inputs.ConsumptionHouseVentilation),
                        "Ironing": devices.DeviceIroning(external_inputs.ConsumptionIron),
                        "Vacuumcleaner": devices.DeviceVacuumcleaner(external_inputs.ConsumptionVacuumcleaner),
                        "WashingMachine": devices.DeviceWashingMachine(),
                        "DishwashMachine": devices.DeviceDishwasher(),
                        "ElectricalVehicle": devices.DeviceElectricalVehicle(),
                        "PVPanel": devices.DeviceSolarPanel()}

        self.HeatingDevices = {"PersonGain": heatdemand.PersonGain(),
                               "Thermostat": heatdemand.Thermostat(),
                               "VentFlow": heatdemand.Ventilation(),
                               "DHWDemand": heatdemand.DHWDemand()}

        self.familyActivites = random.randint(external_inputs.familyOutingChanceMin, external_inputs.familyOutingChanceMax) / 100