예제 #1
0
파일: sensor.py 프로젝트: indietyp/IoP
    def insert_data(self, data, mesh=True, prediction=True):
        """ dict of data:
          'sensor': object of sensor
          'value': value - float
          'plant': current selected plant
    """
        start = datetime.datetime.now()
        current_entries = SensorData.select()\
                                    .where(SensorData.sensor == data['sensor'])\
                                    .count()

        persistant = False
        data['value'] = round(data['value'], 2)

        sensor_db = SensorData()
        sensor_db.value = data['value']
        sensor_db.plant = data['plant']
        sensor_db.sensor = data['sensor']
        sensor_db.persistant = False
        sensor_db.save()

        last_entry = self.get_second_last_entry(sensor_db, data['plant'])
        last_value = last_entry.value if last_entry is not None else data[
            'value']

        offset = abs(data['value'] - last_value)
        if offset >= data['sensor'].persistant_offset:
            persistant = True
        elif current_entries > 6:
            persistant = self.persistant_evaluation(data['plant'],
                                                    data['sensor'])

        sensor_db.persistant = persistant
        sensor_db.save()

        self.delete_non_persistant_overflow(data['sensor'], data['plant'])
        logger.debug('{} - {} persistant: {}'.format(data['plant'].name,
                                                     data['sensor'].name,
                                                     persistant))

        if persistant:
            data['satisfaction'] = self.modify_sensor_status(data, mesh)
            self.mail_evaluation(data)

            if prediction:
                SensorDataForecast().run(data)

            if mesh:
                from mesh_network.dedicated import MeshDedicatedDispatch
                MeshDedicatedDispatch().new_data(data['sensor'],
                                                 plant=data['plant'])

                if data['plant'].localhost:
                    print('slave data')
                    slaves = Plant.select().where(
                        Plant.role == str(data['plant'].uuid))
                    slaves = list(slaves)

                    for slave in slaves:
                        print('slaved')
                        MeshDedicatedDispatch().slave_data(
                            slave, data['sensor'])

        logger.debug('time elapsed: {}'.format(datetime.datetime.now() -
                                               start))
        return persistant
예제 #2
0
파일: sensor_data.py 프로젝트: indietyp/IoP
i = 0
for asset in db.SensorData.find({
        "_id": {
            '$gt': ObjectId("57e954100000000000000000")
        }
}).sort("_id", pymongo.ASCENDING):
    if asset['p'] == 'm':
        if asset['s'] == 't':
            sensor = temperature
        elif asset['s'] == 'h':
            sensor = humidity
        elif asset['s'] == 'l':
            sensor = light
        else:
            sensor = moisture

        imported = SensorData()
        imported.value = asset['v']
        imported.sensor = sensor
        imported.plant = plant
        imported.persistant = True
        imported.created_at = datetime.datetime.fromtimestamp(
            asset['_id'].generation_time.timestamp())
        imported.save()

        i += 1
        if i % 100 == 0:
            print(i)

print(i)