コード例 #1
0
ファイル: admin.py プロジェクト: hendmzh/hsh
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)
コード例 #2
0
    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()
コード例 #3
0
 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
コード例 #4
0
    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")
コード例 #5
0
 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
コード例 #7
0
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)
コード例 #8
0
    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()
コード例 #9
0
ファイル: populatedb.py プロジェクト: hbradlow/bighack2
     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]
コード例 #10
0
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()
コード例 #11
0
 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()