def handleProcessedDataByQhawax():
    """
    Records processed and valid processed measurements every five seconds
    qHAWAX: Record new measurement
    """
    flag_email = False
    data_json = request.get_json()
    try:
        product_id = data_json['ID']
        data_json = util_helper.validTimeJsonProcessed(data_json)
        data_json = util_helper.validAndBeautyJsonProcessed(data_json)
        post_data_helper.storeProcessedDataInDB(data_json)
        data_json['ID'] = product_id
        data_json['zone'] = "Undefined Zone"
        mode = same_helper.getQhawaxMode(product_id)
        inca_value = same_helper.getMainIncaQhawaxTable(product_id)
        if (mode == "Customer" and inca_value != None):
            data_json['zone'] = get_business_helper.getNoiseData(product_id)
            minutes_difference, last_time_turn_on = get_business_helper.getHoursDifference(
                product_id)
            if (minutes_difference != None):
                if (minutes_difference < 5):
                    post_data_helper.validTimeOfValidProcessed(
                        10, "minute", last_time_turn_on, data_json, product_id,
                        inca_value)
                elif (minutes_difference >= 5):
                    post_data_helper.validTimeOfValidProcessed(
                        2, "hour", last_time_turn_on, data_json, product_id,
                        inca_value)
        data_json = util_helper.setNoneStringElements(data_json)
        socketio.emit(data_json['ID'] + '_processed', data_json)
        return make_response('OK', 200)
    except TypeError as e:
        json_message = jsonify({'error': '\'%s\'' % (e)})
        return make_response(json_message, 400)
Ejemplo n.º 2
0
def sendQhawaxStatusOff():
    """
    Endpoint to set qHAWAX OFF because script detect no new data within five minutes

    """
    jsonsend = {}
    try:
        req_json = request.get_json()
        exception_helper.getStatusOffTargetofJson(req_json)
        name = str(req_json['qhawax_name']).strip()
        qhawax_time_off = req_json['qhawax_lost_timestamp']
        description = req_json['description']
        person_in_charge = req_json['person_in_charge']
        post_business_helper.saveStatusOffQhawaxTable(name)
        if (same_helper.getQhawaxMode(name) == 'Cliente'):
            post_business_helper.saveStatusOffQhawaxInstallationTable(
                name, qhawax_time_off)
        post_business_helper.writeBinnacle(name, description, person_in_charge)
        jsonsend['main_inca'] = -1
        jsonsend['name'] = name
        socketio.emit('update_inca', jsonsend)
        return make_response({'Success': 'qHAWAX off'}, 200)
    except (ValueError, TypeError) as e:
        json_message = jsonify({'error': '\'%s\'' % (e)})
        return make_response(json_message, 400)
Ejemplo n.º 3
0
def saveEndWorkField():
    """Saves the last date of qHAWAX in field """
    data_json = request.get_json()
    description = "qHAWAX has finished work in field"
    try:
        qH_name, end_date, person_in_charge = exception_helper.validEndWorkFieldJson(
            data_json)
        post_business_helper.saveEndWorkFieldDate(qH_name, end_date)
        mode = 'Stand By' if (same_helper.getQhawaxMode(qH_name) == 'Customer'
                              ) else same_helper.getQhawaxMode(qH_name)
        post_business_helper.util_qhawax_installation_set_up(
            qH_name, 'Available', mode, description, person_in_charge)
        return make_response('Success: Save last day in field', 200)
    except TypeError as e:
        json_message = jsonify({'error': '\'%s\'' % (e)})
        return make_response(json_message, 400)
Ejemplo n.º 4
0
def qhawaxChangeToCalibration():
    """
    qHAWAX update to Calibration mode, set main inca -2 value

    """
    req_json = request.get_json()
    try:
        qhawax_name = str(req_json['qhawax_name']).strip()
        person_in_charge = req_json['person_in_charge']
        description = req_json['description']
        qhawax_time_off = now.replace(tzinfo=None)
        post_business_helper.saveStatusOffQhawaxTable(qhawax_name)
        post_business_helper.updateMainIncaQhawaxTable(-2, qhawax_name)
        if (same_helper.getQhawaxMode(qhawax_name) == 'Cliente'):
            post_business_helper.saveStatusOffQhawaxInstallationTable(
                name, qhawax_time_off)
            post_business_helper.updateMainIncaQhawaxInstallationTable(
                -2, qhawax_name)
        post_business_helper.changeMode(qhawax_name, "Calibracion")
        post_business_helper.writeBinnacle(qhawax_name, description,
                                           person_in_charge)
        return make_response(
            {'Success': 'qHAWAX have changed to calibration mode'}, 200)
    except TypeError as e:
        json_message = jsonify({'error': '\'%s\'' % (e)})
        return make_response(json_message, 400)
Ejemplo n.º 5
0
def sendQhawaxStatusOnBaseOnLossSignal():
    """ Set qHAWAX ON Base On Loss Signal  - It should set last main inca value, set last last_time_off record and last last_time_on """
    req_json = request.get_json()
    try:
        qH_name, timestamp = exception_helper.getQhawaxSignalJson(req_json)
        qhawax_state = same_helper.getQhawaxStatus(qH_name)
        description = 'qHAWAX turned on after a loss of signal'
        json_email = {
            'description': description,
            'person_in_charge': 'Firmware'
        }
        if (qhawax_state is not None):
            mode = same_helper.getQhawaxMode(qH_name)
            on_loop = int(same_helper.getQhawaxOnLoop(qH_name)) + 1
            if (qhawax_state == 'OFF'):
                post_business_helper.saveStatusQhawaxTable(qH_name, "ON", 0)
                post_business_helper.setLastMeasurementOfQhawax(qH_name)
                post_business_helper.writeBinnacle(
                    qH_name, json_email['description'],
                    json_email['person_in_charge'])
                post_business_helper.resetOnLoop(qH_name, 0)
                return make_response({'Success': description}, 200)
            else:
                post_business_helper.reset_on_loop(qH_name, 0) if (
                    on_loop == 20) else post_business_helper.reset_on_loop(
                        qH_name, on_loop)
                if (on_loop == 1):
                    post_business_helper.recordFirstTimeLoop(
                        qH_name, timestamp)
                return make_response({'Success': 'qHAWAX is already ON'}, 200)
        return make_response({'Warning': 'qHAWAX name has not been found'},
                             400)
    except TypeError as e:
        json_message = jsonify({'error': '\'%s\'' % (e)})
        return make_response(json_message, 400)
Ejemplo n.º 6
0
def sendQhawaxStatusOnBaseOnLossSignal():
    """Set qHAWAX ON Base On Loss Signal  - It should set last main inca value, set last last_time_off record and last last_time_on"""
    req_json = request.get_json()
    try:
        qH_name, timestamp = exception_helper.getQhawaxSignalJson(req_json)
        qhawax_state = same_helper.getQhawaxStatus(qH_name)
        description = "qHAWAX turned on after a loss of signal"
        json_email = {
            "description": description,
            "person_in_charge": "Firmware",
        }
        qhawax_type = same_helper.queryQhawaxType(qH_name)
        if qhawax_state is not None:
            mode = same_helper.getQhawaxMode(qH_name)
            on_loop = int(same_helper.getQhawaxOnLoop(qH_name)) + 1
            if qhawax_state == "OFF":
                post_business_helper.saveStatusQhawaxTable(
                    qH_name, "ON", 0
                )  # tabla qHAWAX
                post_business_helper.setLastMeasurementOfQhawax(qH_name)
                post_business_helper.writeBinnacle(
                    qH_name,
                    json_email["description"],
                    json_email["person_in_charge"],
                )
                post_business_helper.resetOnLoop(qH_name, 0)
                if qhawax_type == "MOBILE_EXT":
                    # only if mobile, we have to check if there is a previous trip that we must continue
                    (
                        trip_start,
                        trip_id,
                    ) = get_data_helper.getqHAWAXMobileLatestTripStart(qH_name)
                    if trip_id != None and trip_start != None:
                        # trip_start = datetime.datetime.strptime('2021-07-12 12:00:00', '%Y-%m-%d %H:%M:%S') # test
                        date_start = (
                            trip_start - datetime.timedelta(hours=5)
                        ).date()  # local
                        now_date = (
                            datetime.datetime.now(dateutil.tz.tzutc())
                            - datetime.timedelta(hours=5)
                        ).date()
                        if date_start == now_date:
                            same_helper.setTripEndNull(trip_id)
                return make_response({"Success": description}, 200)
            else:
                post_business_helper.resetOnLoop(qH_name, 0) if (
                    on_loop == 20
                ) else post_business_helper.resetOnLoop(qH_name, on_loop)
                if on_loop == 1:
                    post_business_helper.recordFirstTimeLoop(
                        qH_name, timestamp
                    )
                return make_response({"Success": "qHAWAX is already ON"}, 200)
        return make_response(
            {"Warning": "qHAWAX name has not been found"}, 400
        )
    except TypeError as e:
        json_message = jsonify({"error": "'%s'" % (e)})
        return make_response(json_message, 400)
def handleProcessedDataByQhawax():
    """
    Records processed and valid processed measurements every five seconds
    qHAWAX: Record new measurement
    """
    flag_email = False
    data_json = request.get_json()
    try:
        product_id = data_json["ID"]
        data_json = util_helper.validTimeJsonProcessed(data_json)
        data_json = util_helper.validAndBeautyJsonProcessed(data_json)
        post_data_helper.storeProcessedDataInDB(data_json)
        data_json["ID"] = product_id
        data_json["zone"] = "Undefined Zone"
        mode = same_helper.getQhawaxMode(product_id)
        inca_value = same_helper.getMainIncaQhawaxTable(product_id)
        # same endpoint for every qHAWAX but logic different per type of qHAWAX
        if mode == "Customer" and inca_value != None:
            data_json["zone"] = get_business_helper.getNoiseData(product_id)
            (
                minutes_difference,
                last_time_turn_on,
            ) = get_business_helper.getHoursDifference(product_id)
            if minutes_difference != None:
                if minutes_difference < 5:
                    post_data_helper.validTimeOfValidProcessed(
                        10,
                        "minute",
                        last_time_turn_on,
                        data_json,
                        product_id,
                        inca_value,
                    )
                elif minutes_difference >= 5:
                    post_data_helper.validTimeOfValidProcessed(
                        2,
                        "hour",
                        last_time_turn_on,
                        data_json,
                        product_id,
                        inca_value,
                    )
        data_json = util_helper.setNoneStringElements(data_json)
        socketio.emit(data_json["ID"] + "_processed", data_json)
        return make_response("OK", 200)
    except TypeError as e:
        json_message = jsonify({"error": "'%s'" % (e)})
        return make_response(json_message, 400)
def handleProcessedDataByMobileQhawax():
    data_json = request.get_json()
    try:
        product_id = data_json["ID"]
        if data_json is not None:
            if "zone" in data_json:
                data_json.pop("zone")
            post_data_helper.storeProcessedDataInDB(data_json)
            data_json["ID"] = product_id
            state = get_business_helper.queryQhawaxStatus(product_id)
            mode = same_helper.getQhawaxMode(product_id)
            if state == "OFF":  # if API turned it off
                post_business_helper.saveTurnOnLastTimeProcessedMobile(
                    product_id)
                post_business_helper.saveStatusQhawaxTable(
                    product_id, "ON", 1)  # state = ON - qhawax
                post_business_helper.writeBinnacle(product_id, "Reconnection",
                                                   "API")

            if mode == "Customer":
                (
                    minutes_difference,
                    last_time_turn_on,
                ) = get_business_helper.getHoursDifference(product_id)
                if minutes_difference != None:
                    if minutes_difference < 30:
                        if last_time_turn_on + datetime.timedelta(
                                minutes=1) < datetime.datetime.now(
                                    dateutil.tz.tzutc()):
                            post_data_helper.validAndBeautyJsonValidProcessedMobile(
                                data_json, product_id)

                    elif minutes_difference >= 30:
                        if last_time_turn_on + datetime.timedelta(
                                hours=2) < datetime.datetime.now(
                                    dateutil.tz.tzutc()):
                            post_data_helper.validAndBeautyJsonValidProcessedMobile(
                                data_json, product_id)

            return make_response("OK", 200)
        return make_response("ID not found", 400)
    except TypeError as e:
        json_message = jsonify({"error": "'%s'" % (e)})
        return make_response(json_message, 400)
Ejemplo n.º 9
0
def updateIncaData():
    """
    To save qHAWAX inca value
    """
    jsonsend = {}
    try:
        req_json = request.get_json()
        exception_helper.getIncaTargetofJson(req_json)
        name = str(req_json['name']).strip()
        value_inca = req_json['value_inca']
        post_business_helper.updateMainIncaQhawaxTable(value_inca, name)
        if (same_helper.getQhawaxMode(name) == 'Cliente'):
            post_business_helper.updateMainIncaInDB(value_inca, name)
        jsonsend['main_inca'] = value_inca
        jsonsend['name'] = name
        socketio.emit('update_inca', jsonsend)
        return make_response({'Success': ' save inca value'}, 200)
    except (ValueError, TypeError) as e:
        json_message = jsonify({'error': '\'%s\'' % (e)})
        return make_response(json_message, 400)
def handleProcessedData():
    """
    To record processed measurement and valid processed measurement every five seconds  

    """
    try:
        flag_email = False
        data_json = request.get_json()
        product_id = data_json['ID']
        data_json = util_helper.validTimeJsonProcessed(data_json)
        data_json = util_helper.validAndBeautyJsonProcessed(data_json)
        post_data_helper.storeProcessedDataInDB(data_json)
        data_json['ID'] = product_id
        data_json['zone'] = "Zona No Definida"
        qhawax_id = same_helper.getQhawaxID(product_id)
        mode = same_helper.getQhawaxMode(product_id)
        if (mode == "Cliente"):
            qhawax_zone = get_data_helper.getNoiseData(product_id)
            data_json['zone'] = qhawax_zone
            minutes_difference, last_time_turn_on = get_data_helper.getHoursDifference(
                qhawax_id)
            if (minutes_difference != None):
                if (minutes_difference < 5):
                    if (last_time_turn_on + datetime.timedelta(minutes=10) <
                            datetime.datetime.now(dateutil.tz.tzutc())):
                        post_data_helper.storeValidProcessedDataInDB(
                            data_json, qhawax_id)
                        socketio.emit('new_data_summary_valid', data_json)
                elif (minutes_difference >= 5):
                    if (last_time_turn_on + datetime.timedelta(hours=2) <
                            datetime.datetime.now(dateutil.tz.tzutc())):
                        post_data_helper.storeValidProcessedDataInDB(
                            data_json, qhawax_id)
                        socketio.emit('new_data_summary_valid', data_json)
        socketio.emit('new_data_summary_processed', data_json)
        return make_response('OK', 200)
    except TypeError as e:
        json_message = jsonify({'error': '\'%s\'' % (e)})
        return make_response(json_message, 400)
Ejemplo n.º 11
0
def sendQhawaxStatusOn():
    """
    Set qHAWAX ON due to module reset (sensors reset) 

    """
    jsonsend = {}
    try:
        req_json = request.get_json()
        exception_helper.getStatusOnTargetofJson(req_json)
        qhawax_name = str(req_json['qhawax_name']).strip()
        description = req_json['description']
        person_in_charge = req_json['person_in_charge']
        post_business_helper.saveStatusOnTable(qhawax_name)
        if (same_helper.getQhawaxMode(qhawax_name) == 'Cliente'):
            post_business_helper.saveTurnOnLastTime(qhawax_name)
        post_business_helper.writeBinnacle(qhawax_name, description,
                                           person_in_charge)
        jsonsend['main_inca'] = 0
        jsonsend['name'] = qhawax_name
        return make_response({'Success': 'qHAWAX ON physically'}, 200)
    except TypeError as e:
        json_message = jsonify({'error': '\'%s\'' % (e)})
        return make_response(json_message, 400)
 def test_get_qhawax_mode_valid(self):
     self.assertAlmostEqual(same_helper.getQhawaxMode('qH057'), 'Stand By')
     self.assertAlmostEqual(same_helper.getQhawaxMode('qH021'), 'Customer')
     self.assertAlmostEqual(same_helper.getQhawaxMode('qH999'), None)
 def test_get_qhawax_mode_valid(self):
     self.assertAlmostEqual(same_helper.getQhawaxMode('qH001'), 'Stand By')
     self.assertAlmostEqual(same_helper.getQhawaxMode('qH004'), 'Cliente')
     self.assertAlmostEqual(same_helper.getQhawaxMode('qH100'), None)