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)
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)
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)
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)
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)
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)
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)
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)