def queryLastTimeOffDueLackEnergy(qhawax_name): """Helper qHAWAX function to get last time off due to lack energy""" if ( same_helper.getInstallationIdBaseName(qhawax_name) is not None ): # Enter if qHAWAX is in field qhawax_id = same_helper.getQhawaxID(qhawax_name) list_last_turn_off = ( session.query(Bitacora.timestamp_zone) .filter_by(qhawax_id=qhawax_id) .filter_by(description="qHAWAX off") .order_by(Bitacora.timestamp_zone.desc()) .limit(1) .all() ) if list_last_turn_off != []: return list_last_turn_off[0][0] else: list_last_turn_on = ( session.query( QhawaxInstallationHistory.last_time_physically_turn_on_zone ) .filter_by(qhawax_id=qhawax_id) .filter_by(end_date_zone=None) .limit(1) .all() ) return list_last_turn_on[0] return None
def recordEndTrip(qhawax_name, details): qhawax_id = same_helper.getQhawaxID(qhawax_name) name = qhawax_name.strip() if qhawax_id != None: finish_date = ( session.query(TripLog.trip_end) .filter(TripLog.qhawax_id == qhawax_id) .order_by(TripLog.id.desc()) .first() ) if finish_date[0] == None: installation_id = same_helper.getInstallationIdBaseName( qhawax_name ) if installation_id is not None: value = ( session.query(ValidProcessedMeasurement.timestamp_zone) .filter_by(qhawax_installation_id=installation_id) .order_by(ValidProcessedMeasurement.id.desc()) .first() .timestamp_zone ) socketio.emit(name + "_finishTrip", str(value)) finish_json = {"trip_end": value, "details": details} session.query(TripLog).filter_by( qhawax_id=qhawax_id, trip_end=None ).update(values=finish_json) session.commit()
def updateTimeOnPreviousTurnOn(qhawax_name, mins): MINUTES_ALLOWED = 240 installation_id = same_helper.getInstallationIdBaseName(qhawax_name) if installation_id is not None: turn_on = ( get_data_helper.getQhawaxLatestTimestampValidProcessedMeasurement( qhawax_name)) # what if the turn_on is very recent? does not matter as long as there a value now = datetime.datetime.now(dateutil.tz.tzutc()) if turn_on != None: minutes_difference = int((now - turn_on).total_seconds() / 60) # if(minutes_difference>=) turn_off = turn_on - datetime.timedelta(minutes=mins) session.query(QhawaxInstallationHistory).filter_by( id=installation_id).update( values={"last_registration_time_zone": turn_off}) session.commit() else: turn_on = datetime.datetime.now( dateutil.tz.tzutc()) - datetime.timedelta(minutes=120 - mins) turn_off = datetime.datetime.now( dateutil.tz.tzutc()) - datetime.timedelta(minutes=120) session.query(QhawaxInstallationHistory).filter_by( id=installation_id).update( values={ "last_time_physically_turn_on_zone": turn_on, "last_registration_time_zone": turn_off, }) session.commit()
def isItFieldQhawax(qhawax_name): """ Check qhawax in field """ return True if (same_helper.getInstallationIdBaseName(qhawax_name) is not None) else False
def isItFieldQhawax(qhawax_name): """Check qhawax in field""" qhawax_type = exception_helper.checkVariable_helper(qhawax_name, str) return ( True if (same_helper.getInstallationIdBaseName(qhawax_name) is not None) else False )
def getNoiseData(qhawax_name): """Helper Processed Measurement function to get Noise Area Description""" installation_id = same_helper.getInstallationIdBaseName(qhawax_name) if (installation_id is not None): eca_noise_id = session.query(QhawaxInstallationHistory.eca_noise_id).\ filter_by(id=installation_id).first() return session.query( EcaNoise.area_name).filter_by(id=eca_noise_id).first()[0] return None
def getMobileLatestLatLonValidProcessedMeasurement(qhawax_name): installation_id = same_helper.getInstallationIdBaseName(qhawax_name) if installation_id is not None: values = (session.query( ValidProcessedMeasurement.lat, ValidProcessedMeasurement.lon).filter_by( qhawax_installation_id=installation_id).order_by( ValidProcessedMeasurement.id.desc()).first()) return values._asdict() return None
def getTimeQhawaxHistory(name): """ Get time qHAWAX History """ fields = (QhawaxInstallationHistory.last_time_physically_turn_on_zone,\ QhawaxInstallationHistory.last_registration_time_zone) installation_id = same_helper.getInstallationIdBaseName(name) return None if (installation_id is None) else session.query(*fields).\ filter_by(id= installation_id).first()
def queryDBValidProcessedByPollutantMobile(qhawax_name, initial_timestamp, final_timestamp, pollutant): """Helper function to get Valid Processed Measurement filter by qHAWAX between timestamp""" qhawax_installation_id = same_helper.getInstallationIdBaseName(qhawax_name) if qhawax_installation_id is not None: column_array = [ ValidProcessedMeasurement.CO.label("pollutant"), ValidProcessedMeasurement.H2S.label("pollutant"), ValidProcessedMeasurement.NO2.label("pollutant"), ValidProcessedMeasurement.O3.label("pollutant"), ValidProcessedMeasurement.PM25.label("pollutant"), ValidProcessedMeasurement.PM10.label("pollutant"), ValidProcessedMeasurement.SO2.label("pollutant"), ValidProcessedMeasurement.CO2.label("pollutant"), ValidProcessedMeasurement.VOC.label("pollutant"), ] # sensor_array = ['CO','H2S','NO2','O3','PM25','PM10','SO2'] for i in range(len(mobile_sensor_array)): if pollutant == mobile_sensor_array[i]: sensors = ( ValidProcessedMeasurement.timestamp_zone, column_array[i], ValidProcessedMeasurement.lat, ValidProcessedMeasurement.lon, ) measurements = (session.query(*sensors).filter( ValidProcessedMeasurement.qhawax_installation_id == qhawax_installation_id).filter( ValidProcessedMeasurement.timestamp_zone >= initial_timestamp ).filter( ValidProcessedMeasurement.timestamp_zone <= final_timestamp ).order_by(ValidProcessedMeasurement.timestamp_zone.asc()).all()) factor_final_json = { "CO": 100 / 10000, "NO2": 100 / 200, "PM10": 100 / 150, "PM25": 100 / 25, "SO2": 100 / 20, "O3": 100 / 120, "H2S": 100 / 150, } values = [] if pollutant in factor_final_json: for t in measurements: dictValue = t._asdict() dictValue["pollutant"] = round( dictValue["pollutant"] * factor_final_json[pollutant], 3) values.append(dictValue) return values else: return [t._asdict() for t in measurements] return None
def saveStatusOffQhawaxInstallationTable(qhawax_name, qhawax_lost_timestamp): """ Set qHAWAX OFF in qHAWAX Installation table """ installation_id = same_helper.getInstallationIdBaseName(qhawax_name) if (installation_id is not None): session.query(QhawaxInstallationHistory).\ filter_by(id=installation_id).\ update(values={'main_inca': -1,'last_registration_time_zone':qhawax_lost_timestamp}) session.commit()
def saveTimeQhawaxOff(qhawax_name): """Save time qHAWAX off with timestamp in UTC 0""" installation_id = same_helper.getInstallationIdBaseName(qhawax_name) if installation_id != None: session.query(QhawaxInstallationHistory).filter_by( id=installation_id).update( values={ "last_registration_time_zone": datetime.datetime.now(dateutil.tz.tzutc()) }) session.commit()
def turnOnAfterCalibration(qhawax_name): """ Set qHAWAX ON in qHAWAX Installation table """ installation_id = same_helper.getInstallationIdBaseName(qhawax_name) if (installation_id is not None): now = datetime.datetime.now(dateutil.tz.tzutc()) session.query(QhawaxInstallationHistory).\ filter_by(id=installation_id).\ update(values={'last_time_physically_turn_on_zone': now.replace(tzinfo=None)}) session.commit()
def updateMainIncaQhawaxInstallationTable(new_main_inca, qhawax_name): """ Helper qHAWAX function to save main inca value in qHAWAX Installation table """ if (type(new_main_inca) not in [int]): raise TypeError("Inca value " + str(new_main_inca) + " should be int") if (same_helper.qhawaxExistBasedOnName(qhawax_name)): installation_id = same_helper.getInstallationIdBaseName(qhawax_name) session.query(QhawaxInstallationHistory).filter_by(id=installation_id).\ update(values={'main_inca': new_main_inca}) session.commit()
def getqHAWAXMobileTripByTurn(qhawax_name, turn, id): installation_id = same_helper.getInstallationIdBaseName(qhawax_name) if installation_id != None: query = session.query(TripLog.trip_start).filter_by(id=id).first() if query != None: trip_time = query[0] ( start_time, finish_time, ) = util_helper.getStartAndFinishTimestampBasedOnTurnAndTimestampMobile( trip_time, turn) return queryDBValidProcessedMeasurementsSimulationMobile( qhawax_name, start_time, finish_time) return None
def getLatestTimeInValidProcessed(qhawax_name): """ Helper qHAWAX function to get latest timestamp in UTC 00 from Valid Processed Measurement """ installation_id = same_helper.getInstallationIdBaseName(qhawax_name) if (installation_id is not None): valid_processed_timestamp = "" qhawax_time = session.query(ValidProcessedMeasurement.timestamp_zone).\ filter_by(qhawax_installation_id=installation_id).first() if (qhawax_time != None): return session.query(ValidProcessedMeasurement.timestamp_zone).\ filter_by(qhawax_installation_id=installation_id). \ order_by(ValidProcessedMeasurement.timestamp_zone.desc()).\ first().timestamp_zone return None
def getLatestTimestampValidProcessed(qhawax_name): """ Helper Valid Processed Measurement function to get latest timestamp by qHAWAX name """ installation_id = same_helper.getInstallationIdBaseName(qhawax_name) if (installation_id is not None): time_valid_data = session.query(ValidProcessedMeasurement.timestamp_zone).\ filter_by(qhawax_installation_id=installation_id).first() valid_processed_measurement_timestamp = [] if (time_valid_data != None): valid_processed_measurement_timestamp = session.query(ValidProcessedMeasurement.timestamp_zone).\ filter_by(qhawax_installation_id=installation_id). \ order_by(ValidProcessedMeasurement.id.desc()).\ first().timestamp_zone return valid_processed_measurement_timestamp return None
def getQhawaxLatestTimestampValidProcessedMeasurement(qhawax_name): """Helper qHAWAX function to get latest timestamp in UTC 00 from Processed Measurement""" qhawax_installation_id = same_helper.getInstallationIdBaseName(qhawax_name) if qhawax_installation_id is not None: qhawax_time = (session.query( ValidProcessedMeasurement.timestamp_zone).filter_by( qhawax_installation_id=qhawax_installation_id).first()) valid_measurement_timestamp = "" if qhawax_time != None: valid_measurement_timestamp = (session.query( ValidProcessedMeasurement.timestamp_zone).filter_by( qhawax_installation_id=qhawax_installation_id).order_by( ValidProcessedMeasurement.timestamp_zone.desc()).first( ).timestamp_zone) return valid_measurement_timestamp return None
def storeValidProcessedDataInDB(data, product_id): """ Helper Processed Measurement function to insert Valid Processed Data """ installation_id = same_helper.getInstallationIdBaseName(product_id) if(installation_id!=None): valid_data = {'timestamp': data['timestamp'],'CO': data['CO'],'CO_ug_m3': data['CO_ug_m3'], 'H2S': data['H2S'], 'H2S_ug_m3': data['H2S_ug_m3'],'SO2': data['SO2'],'SO2_ug_m3': data['SO2_ug_m3'],'NO2': data['NO2'], 'NO2_ug_m3': data['NO2_ug_m3'],'O3': data['O3'],'O3_ug_m3': data['O3_ug_m3'],'PM25': data['PM25'], 'lat':data['lat'],'lon':data['lon'],'PM1': data['PM1'],'PM10': data['PM10'], 'UV': data['UV'], 'UVA': data['UVA'],'UVB': data['UVB'],'SPL': data['spl'],'humidity': data['humidity'], 'CO2':data['CO2'], 'pressure': data['pressure'],'temperature': data['temperature'],'timestamp_zone': data['timestamp_zone'], 'I_temperature':data['I_temperature'],'VOC':data['VOC']} valid_processed_measurement = ValidProcessedMeasurement(**valid_data, qhawax_installation_id=installation_id) session.add(valid_processed_measurement) session.commit() data = util_helper.setNoneStringElements(data) socketio.emit(data['ID'], data)
def queryDBValidProcessedMeasurementsSimulationMobile(qhawax_name, initial_timestamp, final_timestamp): qhawax_installation_id = same_helper.getInstallationIdBaseName(qhawax_name) if qhawax_installation_id is not None: sensors = ( ValidProcessedMeasurement.CO, ValidProcessedMeasurement.H2S, ValidProcessedMeasurement.NO2, ValidProcessedMeasurement.O3, ValidProcessedMeasurement.PM25, ValidProcessedMeasurement.PM10, ValidProcessedMeasurement.SO2, ValidProcessedMeasurement.timestamp_zone, ValidProcessedMeasurement.lat, ValidProcessedMeasurement.lon, ) validMeasurements = (session.query(*sensors).filter( ValidProcessedMeasurement.qhawax_installation_id == qhawax_installation_id).filter( ValidProcessedMeasurement.timestamp_zone >= initial_timestamp ).filter( ValidProcessedMeasurement.timestamp_zone <= final_timestamp ).order_by(ValidProcessedMeasurement.timestamp_zone.asc()).all()) factor_final_json = { "CO": 100 / 10000, "NO2": 100 / 200, "PM10": 100 / 150, "PM25": 100 / 25, "SO2": 100 / 20, "O3": 100 / 100, "H2S": 100 / 150, } values = [] for t in validMeasurements: dictValue = t._asdict() for key in factor_final_json: if dictValue[key] != None: dictValue[key] = round( dictValue[key] * factor_final_json[key], 3) # print(dictValue) # json # {'CO': 2076.038, 'H2S': 17.78, 'NO2': 75.955, 'O3': -16.706, 'PM25': 42.196, 'PM10': 69.863, 'SO2': 47.115, 'CO2': None, 'VOC': None, 'timestamp_zone': datetime.datetime(2021, 6, 14, 14, 59, 57, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=0, # name=None)), 'lat': -12.048906, 'lon': -77.037643} values.append(dictValue) return values
def queryDBValidProcessed(qhawax_name, initial_timestamp, final_timestamp): qhawax_installation_id = same_helper.getInstallationIdBaseName(qhawax_name) if qhawax_installation_id is not None: sensors = ( ValidProcessedMeasurement.CO, ValidProcessedMeasurement.H2S, ValidProcessedMeasurement.NO2, ValidProcessedMeasurement.O3, ValidProcessedMeasurement.PM25, ValidProcessedMeasurement.PM10, ValidProcessedMeasurement.SO2, ValidProcessedMeasurement.humidity, ValidProcessedMeasurement.pressure, ValidProcessedMeasurement.temperature, ValidProcessedMeasurement.lat, ValidProcessedMeasurement.lon, ValidProcessedMeasurement.timestamp_zone, ValidProcessedMeasurement.CO_ug_m3, ValidProcessedMeasurement.H2S_ug_m3, ValidProcessedMeasurement.NO2_ug_m3, ValidProcessedMeasurement.O3_ug_m3, ValidProcessedMeasurement.SO2_ug_m3, ValidProcessedMeasurement.I_temperature, ) valid_processed_measurements = (session.query(*sensors).filter( ValidProcessedMeasurement.qhawax_installation_id == qhawax_installation_id).filter( ValidProcessedMeasurement.timestamp_zone >= initial_timestamp ).filter( ValidProcessedMeasurement.timestamp_zone <= final_timestamp ).order_by(ValidProcessedMeasurement.timestamp_zone).all()) all_measurement = [] for measurement in valid_processed_measurements: measurement = measurement._asdict() for key, value in measurement.items(): if (type(value) is float) and math.isnan(value): measurement[key] = None all_measurement.append(measurement) return all_measurement return None
def storeValidProcessedDataInDBMobile(data, product_id): """Helper Processed Measurement function to insert Valid Processed Data""" installation_id = same_helper.getInstallationIdBaseName(product_id) if installation_id != None: valid_data = { "timestamp": data["timestamp"], "CO": data["CO"], "CO_ug_m3": data["CO_ug_m3"], "H2S": data["H2S"], "H2S_ug_m3": data["H2S_ug_m3"], "SO2": data["SO2"], "SO2_ug_m3": data["SO2_ug_m3"], "NO2": data["NO2"], "NO2_ug_m3": data["NO2_ug_m3"], "O3": data["O3"], "O3_ug_m3": data["O3_ug_m3"], "PM25": data["PM25"], "lat": data["lat"], "lon": data["lon"], "PM1": data["PM1"], "PM10": data["PM10"], "UV": data["UV"], "UVA": data["UVA"], "UVB": data["UVB"], "SPL": data["spl"], "humidity": data["humidity"], "CO2": data["CO2"], "pressure": data["pressure"], "temperature": data["temperature"], "timestamp_zone": data["timestamp_zone"], "I_temperature": data["I_temperature"], "VOC": data["VOC"], } valid_processed_measurement = ValidProcessedMeasurement( **valid_data, qhawax_installation_id=installation_id ) session.add(valid_processed_measurement) session.commit() data = util_helper.setNoneStringElements(data) socketio.emit(data["ID"] + "_mobile", data)
def test_get_installation_id_based_name_valid(self): self.assertAlmostEqual(same_helper.getInstallationIdBaseName("qH021"), 327) self.assertAlmostEqual(same_helper.getInstallationIdBaseName("qH100"), None)