Ejemplo n.º 1
0
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()
Ejemplo n.º 3
0
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()
Ejemplo n.º 4
0
def isItFieldQhawax(qhawax_name):
    """
    Check qhawax in field

    """
    return True if (same_helper.getInstallationIdBaseName(qhawax_name)
                    is not None) else False
Ejemplo n.º 5
0
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
Ejemplo n.º 8
0
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
Ejemplo n.º 10
0
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()
Ejemplo n.º 11
0
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()
Ejemplo n.º 12
0
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()
Ejemplo n.º 13
0
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()
Ejemplo n.º 14
0
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
Ejemplo n.º 15
0
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
Ejemplo n.º 16
0
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
Ejemplo n.º 17
0
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
Ejemplo n.º 18
0
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)
Ejemplo n.º 19
0
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
Ejemplo n.º 20
0
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)