def new_appliance(): form = ApplianceForm(request.form) form.Rooms.choices = [(r.RoomID, r.Name) for r in db_session.query(Room)] print form.errors if request.method == 'POST': Type = request.form['Type'] Name = request.form['Name'] Rooms = request.form['Rooms'] print Type, " ", Name, " ", Rooms if request.method == "POST" and form.validate(): if form.Type.data == 'Appliance': new_appliance = Appliance() new_appliance.Name = form.Name.data new_appliance.RoomID = form.Rooms.data db_session.add(new_appliance) else: new_door = Door() new_door.RoomID = form.Rooms.data db_session.add(new_door) db_session.commit() flash('Added Successfully') else: flash(form.errors) return render_template('newappliance.html', form=form)
def setUp(self): #clear database db.drop_all() db.create_all() self.client = app.test_client() #create search user12 = User(username="******", email="*****@*****.**", password="******") user12.id = 12 blender = Appliance(name="Blender", watts=300, category="kitchen") blender.id = 2 db.session.add_all([user12, blender]) db.session.commit() search = UserSearch(user_id=12, appliance_id=2, daily_kWh=12, annual_Consump=1440, annual_Cost="$169.20", timestamp=datetime(2020, 5, 23, 20, 21, 44), grid="ERCOT_NORTH", gridpercent=77, state="Texas", city="Denton") db.session.add(search) db.session.commit()
def _get_some_appliance_activation(self, appliance_type, dataset, location, features=None): """ helper method to get some appliance's activation :param appliance_type: Appliance Type according to nilm_database appliance_type table :param dataset: Dataset according to nilm_database origin_dataset table :param location: Location specified for the appliance :return: list of pd.Series activations if available else None """ activations = [] try: appliances = Appliance.get_appliances( dataset_name=dataset, location=location, appliance_type_name=appliance_type) quantity_name = self.features if features is None else features if 'active_power' not in quantity_name: quantity_name = ['active_power'] + quantity_name for appliance in appliances: sampling_period = self.sampling_period if self.sampling_period is not None \ else appliance.sampling_period activations += list(map(lambda act: act.resample("{}S".format(sampling_period)).bfill().ffill(), appliance.get_activations(quantity_name=quantity_name))) return activations except IndexError as ex: print("Appliance {} not available for {} in {}".format(appliance_type, location, dataset)) return None
def test_get_noisy_appliance_activations(self): print("Testing retrieving noisy appliance activations") data_loader = DatasetLoader(features=['apparent_power'], sampling_period=6, window_size=512, seed=1, data_dir='./data_test') data_loader._get_noisy_appliance_activations(noisy_appliance_type='refrigerator', dataset_name='ukdale', location='house_2') self.assertIn('ukdale', data_loader.noisy_appliance_activations.keys(), "Didn't add dataset name to dict") self.assertIn('house_2', data_loader.noisy_appliance_activations['ukdale'], "Didn't add house to dict") appliance = Appliance.get_appliances(dataset_name='ukdale', location='house_2', appliance_type_name='refrigerator')[0] activations_true = appliance.get_activations(quantity_name=['active_power']) for idx, act in enumerate(activations_true): retrieved_act = data_loader.noisy_appliance_activations['ukdale']['house_2']['refrigerator'][idx] act = act.resample('6S').bfill().ffill().values self.assertIs(np.allclose(act, retrieved_act), True, "Activation is different than what it should be")
def insert_appliance(self, appliance, aggregate): appliance_object = Appliance(aggregate_id=aggregate.id, appliance_type_id=np.asscalar(appliance['appliance_label_id'].values[0]), location=aggregate.location, origin_dataset_id=self.origin_dataset.id) self.session.add(appliance_object) self.session.commit() return appliance_object
def get_all_location_samples(self): """ builds list of dataframes containing all measurements from each location :return: the samples per location object (a list of dataframes) """ for dataset_name, dataset in self.origin_dataset_dict.items(): for location, house_data in dataset.items(): location_df: pd.DataFrame = self.get_location_aggregate(location=location, dataset_name=dataset_name) time_bounds = TimeFrame(start=location_df.index[0], end=location_df.index[-1]) # iterates appliance to build labels for appliance in house_data['target_appliances']: appliance_type = appliance['appliance_type'] description = appliance['description'] if 'description' in appliance.keys() else None appliance_object = Appliance.get_appliances(dataset_name=dataset_name, appliance_type_name=appliance_type, location=location, description=description) # there's no such appliance in the house if len(appliance_object) == 0: appliance_samples = np.zeros_like(location_df[self.features[0]].values) appliance_samples = pd.DataFrame( {'active_power_{}'.format(appliance_type): appliance_samples}) \ .set_index(location_df.index) else: # if there is more than 1 meter measuring the appliance (one per leg) we need to sum the values appliance_samples = None # iterates through legs for i in range(min(2, len(appliance_object))): print("Reading leg {} for {} in {}".format(i, appliance_type, location)) leg_samples = appliance_object[i].get_samples(quantity_name=['active_power'], timeframe=time_bounds) appliance_samples = leg_samples if appliance_samples is None else \ appliance_samples + leg_samples appliance_samples.rename({'active_power': 'active_power_{}'.format(appliance_type)}, axis=1, inplace=True) location_df = location_df.merge(appliance_samples, how='left', left_index=True, right_index=True) location_df = location_df.resample('{}S'.format(self.sampling_period)).bfill().ffill() location_df = location_df.dropna() self.samples_per_location += [location_df] return self.samples_per_location
def add_appliance(): form = NewApplianceForm() form.category.choices = utils.get_categories() if current_user.is_authenticated: if form.validate_on_submit(): try: appliance = Appliance( name = form.name.data, watts = form.watts.data, category = form.category.data ) db.session.add(appliance) db.session.commit() flash("New appliance added", "success") except IntegrityError: flash(f"{form.name.data} is already in the database", "danger") return redirect("/addappliance") return redirect("/") return render_template("new-app.html", form=form)
def setUp(self): User.query.delete() #clear database db.session.close() db.drop_all() db.create_all() self.client = app.test_client() self.testuser = User.signup(username="******", email="*****@*****.**", password="******") self.testuser_id = 4567 self.testuser.id = self.testuser_id self.blender = Appliance(name="Blender", watts=600, category="Kitchen") self.blender_id = 1 self.blender.id = self.blender_id db.session.add_all([self.testuser, self.blender]) db.session.commit()
manufacturer=row[1] except: manufacturer=None try: brand=row[2] except: brand=None try: model=row[3] except: model = None try: int(annual_energy_consumption=row[27]) except: annual_energy_consumption=-1 app = Appliance(manufacturer=manufacturer,brand=brand,model=model,annual_energy_consumption=annual_energy_consumption) app.save() try: boiler_type=row[4] except: boiler_type = None try: burner_type=row[6] except: burner_type=None try: energy_source=row[5] except: energy_source=None try: pilot_light=row[7]
row_range = [] for r in range(len(appliance_cats_rows) - 1): ran = (appliance_cats_rows[r] + 1, appliance_cats_rows[r + 1] - 1) row_range.append(ran) zipped = zip(appliance_cats_cleaned, row_range) appliance_dict = dict(zipped) #{'Kitchen': (9, 14), 'Lighting': (16, 19, ...} ## make list of appliance instances to add to seed the database appliances = [] for (cat, ra) in appliance_dict.items(): for val in wsheet_app.iter_rows(min_row=ra[0], max_row=ra[1], values_only=True): appliance = Appliance(name=val[0], watts=val[5], category=cat) appliances.append(appliance) # remove appliance from list if there is no wattage cleaned_appliances = [appl for appl in appliances if appl.watts != None] #remove extra water heater entry cleaned_appliances.pop(26) ## Supplement missing wattage information for washer, dryer, refrigerator, etc # pdfFileObj = open('static/1min_data.pdf', 'rb') # pdfReader = PyPDF2.PdfFileReader(pdfFileObj) # pageObj = pdfReader.getPage(0) # pageObj.extractText()
def setUp(self): #clear database db.drop_all() db.create_all() self.client = app.test_client() #create user blender = Appliance(name="Blender", watts=600, category="Kitchen") oven = Appliance(name="Oven", watts=3000, category="Kitchen") bulb = Appliance(name="Light bulb", watts=60, category="Lighting") hair_dryer = Appliance(name="Hair dryer", watts=300, category="Bathroom") tv = Appliance(name="Tv", watts=200, category="Home Electronics") dryer = Appliance(name="Dryer", watts=4000, category="Laundry") blender.id = 1 oven.id = 2 bulb.id = 3 hair_dryer.id = 4 tv.id = 5 dryer.id = 6 db.session.add_all([blender, oven, bulb, hair_dryer, tv, dryer]) db.session.commit()